BDC例子

先用shdb录一个 bdc程序(数据来源选from recording),然后做相应修改。其中的PERFORM bdc_field       USING 'BDC_CURSOR'   'XXXXXXXX'语句是记录鼠标动作的,一般可以去掉。

对于带不定数目行项目的BDC程序,可以用下面方法实现。Header Key放在第一列,然后根据Header Key和行项目Key做sort,然后利用AT NEW语句……

例子:

????SRCE
REPORT zdcbom NO STANDARD PAGE HEADING LINE-SIZE 255.

DATA:   bdcdata LIKE bdcdata  OCCURS 0 WITH HEADER LINE,
        ai TYPE i VALUE 1.
DATA: fname(128) TYPE c, ftype(3), fsize TYPE i,cancel(1).
DATA: n TYPE i.

PARAMETERS:
     pc_file1(128) TYPE c
                   DEFAULT 'C:/sapworkdir/data convertion/Cs01.txt',
*     pc_file2(128) DEFAULT 'C:/sapworkdir/prog.txt' OBLIGATORY,
     tra_code(5) TYPE c DEFAULT 'CS01',
     err_type(1) DEFAULT 'A'.
*     bdcgroup(12) OBLIGATORY.

*** Generated data section with specific formatting - DO NOT CHANGE  ***
DATA: BEGIN OF record OCCURS 0,
* data element: MATNR
        matnr_001(018),                                     "
* data element: WERKS_D
        werks_002(004),                                     "
* data element: STLAN
        stlan_003(001),                                     "
* data element: DATUV
        datuv_004(010),
* data element: BASMN
*        bmeng_005(017),
* data element: STLST
*        stlst_006(002),
* data element: SPOSN
        posnr_010(004),
* data element: IDNRK
        idnrk_02_007(018),
* data element: KMPMG
        menge_02_008(018),
* data element: MEINS "Unit
        MEINS(003),
* data element: POSTP
        postp_02_009(001),
* data element: AUSCH "Component Scrap Qty
        ausch(018),
     END OF record.

*** End generated data section ***

END-OF-SELECTION.
  CALL FUNCTION 'UPLOAD'
       EXPORTING
            filename                = pc_file1
            filetype                = 'DAT'
            item                    = 'load'
       IMPORTING
            filesize                = fsize
            act_filename            = fname
            act_filetype            = ftype
            cancel                  = cancel
       TABLES
            data_tab                = record
       EXCEPTIONS
            conversion_error        = 1
            invalid_table_width     = 2
            invalid_type            = 3
            no_batch                = 4
            unknown_error           = 5
            gui_refuse_filetransfer = 6
            OTHERS                  = 7.
*** End generated data section ***

* BREAK-POINT.

  IF NOT cancel IS INITIAL.
    WRITE: 'You cancel the program!'.
    EXIT.
  ENDIF.

  DATA lin TYPE i.
  DESCRIBE TABLE record LINES lin.

* perform open_group.
*  LOOP AT record  WHERE NOT werks_004 IS INITIAL .
  LOOP AT record.
    AT NEW datuv_004.
*      BREAK-POINT.
      PERFORM bdc_dynpro      USING 'SAPLCSDI' '0100'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'RC29N-DATUV'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=ENT1'.
      PERFORM bdc_field       USING 'RC29N-MATNR'
                                    record-matnr_001.
      PERFORM bdc_field       USING 'RC29N-WERKS'
                                    record-werks_002.
      PERFORM bdc_field       USING 'RC29N-STLAN'
                                    record-stlan_003.
      PERFORM bdc_field       USING 'RC29N-DATUV'
                                    record-datuv_004.
      PERFORM bdc_dynpro      USING 'SAPLCSDI' '0110'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=KDGS'.
      PERFORM bdc_field USING 'BDC_SUBSCR'
                              'SAPLCSDI'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'RC29K-EXSTL'.
      PERFORM bdc_dynpro      USING 'SAPLCSDI' '0111'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'RC29K-LABOR'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=UEBP'.
      PERFORM bdc_field USING 'BDC_SUBSCR'
         'SAPLCSDI'.
    ENDAT.
*    BREAK-POINT.
    PERFORM bdc_dynpro      USING 'SAPLCSDI' '0140'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RC29P-POSNR(02)'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                   '=FCNP'.
    PERFORM bdc_field  USING 'BDC_SUBSCR'
                             'SAPLCSDI'.
*''''''''''''''''''
    PERFORM bdc_dynpro      USING 'SAPLCSDI' '0140'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RC29P-POSTP(02)'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=ENT1'.
    PERFORM bdc_field       USING 'RC29P-POSNR(02)'
                                  record-posnr_010.
    PERFORM bdc_field       USING 'RC29P-IDNRK(02)'
                                  record-idnrk_02_007.
    PERFORM bdc_field       USING 'RC29P-MENGE(02)'
                                  record-menge_02_008.
    PERFORM bdc_field       USING 'RC29P-MEINS(02)'
                                  record-MEINS.
    PERFORM bdc_field       USING 'RC29P-POSTP(02)'
                                  record-postp_02_009.
    PERFORM bdc_field       USING 'BDC_SUBSCR'
                                  'SAPLCSDI'.
*''''''''''''''
    PERFORM bdc_dynpro      USING 'SAPLCSDI' '0130'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=WEIT'.
    PERFORM bdc_field       USING 'BDC_SUBSCR'
                                  'SAPLCSDI'.
    PERFORM bdc_field       USING 'RC29P-ausch'
                                  record-ausch.
************'''''''''''''''''
    PERFORM bdc_dynpro      USING 'SAPLCSDI' '0131'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=WEIT'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RC29P-POTX1'.
    PERFORM bdc_field       USING 'BDC_SUBSCR'
                                  'SAPLCSDI'.

    AT END OF datuv_004.
*      BREAK-POINT.
      PERFORM bdc_dynpro      USING 'SAPLCSDI' '0140'.
      PERFORM bdc_field       USING 'BDC_CURSOR'
                                    'RC29P-POSTP(02)'.
      PERFORM bdc_field       USING 'BDC_SUBSCR'
                                    'SAPLCSDI'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=FCBU'.
      PERFORM bdc_transaction.
      WRITE: / ai,'    '.              " record-matnr_001.
      ai = ai + 1.
      CONTINUE.
    ENDAT.
  ENDLOOP.

*  PERFORM close_group.


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
*  if fval <> nodata.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
*  endif.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  open_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*FORM open_group.
*  CALL FUNCTION 'BDC_OPEN_GROUP'
*       EXPORTING
*            client         = sy-mandt
*            group          = bdcgroup
*            user           = sy-uname
*            keep           = 'X'
*       EXCEPTIONS
*            running        = 1
*            queue-error    = 2
*            client_invalid = 3
*            group_invalid  = 4.
*  IF sy-subrc NE 0.
*    WRITE: / 'Error calling function BDC_OPEN_GROUP ', sy-uzeit.
*    EXIT.
*  ENDIF.
*ENDFORM.                               " open_group
*&---------------------------------------------------------------------*
*&      Form  close_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM close_group.
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
  IF sy-subrc NE 0.
    WRITE: / 'Error calling function BDC_CLOSE_GROUP ', sy-uzeit.
    EXIT.
  ENDIF.
ENDFORM.                               " close_group
*&---------------------------------------------------------------------*
*&      Form  bdc_transaction
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bdc_transaction.
  CALL TRANSACTION tra_code USING bdcdata
                       MODE err_type.
  REFRESH bdcdata.
ENDFORM.                               " bdc_transaction

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值