ABAP XD01创建供应商BDC

TABLE

 日志表:

FUNCTION ZMM_SUPPLIER_CREATE.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(SYNAME) TYPE  ZSYNM OPTIONAL
*"     VALUE(UNAME) TYPE  UNAME OPTIONAL
*"     VALUE(FLOWID) TYPE  AWKEY OPTIONAL
*"  TABLES
*"      GT_INPUT STRUCTURE  ZST_SUPPLIER_CREATE OPTIONAL
*"      GT_MESSAGE STRUCTURE  ZST_SUPPLIER_MESSAGE OPTIONAL
*"----------------------------------------------------------------------

DATA: GW_INPUT LIKE LINE OF GT_INPUT.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: ZLOG LIKE ZLOG_ZMMD004_001 OCCURS 0 WITH HEADER LINE.
DATA: L_MESSAGE TYPE BAPI_MSG.
DATA: BEGIN OF GT_LFA1 OCCURS 0,
  LIFNR LIKE LFA1-LIFNR,
  END OF GT_LFA1.
DATA: BEGIN OF GT_LFB1 OCCURS 0,
  LIFNR LIKE LFB1-LIFNR,
  BUKRS LIKE LFB1-BUKRS,
  END OF GT_LFB1.
DATA: BEGIN OF GT_LFM1 OCCURS 0,
  LIFNR LIKE LFM1-LIFNR,
  EKORG LIKE LFM1-EKORG,
  END OF GT_LFM1.
DATA: BEGIN OF GT_BNKA OCCURS 0,
  BANKS LIKE BNKA-BANKS,
  BANKL LIKE BNKA-BANKL,
  END OF GT_BNKA.

LOOP AT GT_INPUT INTO GW_INPUT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = GW_INPUT-LIFNR
      IMPORTING
        output = GW_INPUT-LIFNR.
  MODIFY GT_INPUT FROM GW_INPUT.
  CLEAR GW_INPUT.

ENDLOOP.

LOOP AT GT_INPUT INTO GW_INPUT.
  SELECT
    LIFNR
    FROM LFA1 INTO CORRESPONDING FIELDS OF TABLE GT_LFA1
    WHERE LIFNR = GW_INPUT-LIFNR.

  SELECT
    LIFNR
    BUKRS
    FROM LFB1 INTO CORRESPONDING FIELDS OF TABLE GT_LFB1
    WHERE LIFNR = GW_INPUT-LIFNR
    AND BUKRS = GW_INPUT-BUKRS.

  SELECT
    LIFNR
    EKORG
    FROM LFM1 INTO CORRESPONDING FIELDS OF TABLE GT_LFM1
    WHERE LIFNR = GW_INPUT-LIFNR
    AND EKORG = GW_INPUT-EKORG.

  SELECT
    BANKS
    BANKL
    FROM BNKA INTO CORRESPONDING FIELDS OF TABLE GT_BNKA
    WHERE BANKS = GW_INPUT-BANKS
    AND BANKL = GW_INPUT-BANKL.


  perform bdc_dynpro      using 'SAPMF02K' '0100'.
  perform bdc_field       using 'BDC_CURSOR'
                                'RF02K-KTOKK'.
  perform bdc_field       using 'BDC_OKCODE'
                                '/00'.
  perform bdc_field       using 'RF02K-LIFNR'
                                GW_INPUT-LIFNR.
  perform bdc_field       using 'RF02K-BUKRS'
                                GW_INPUT-BUKRS.
  perform bdc_field       using 'RF02K-EKORG'
                                GW_INPUT-EKORG.
  perform bdc_field       using 'RF02K-KTOKK'
                                GW_INPUT-KTOKK.
  perform bdc_field       using 'USE_ZAV'
                                'X'.

  IF GT_LFA1[] IS INITIAL."当前供应商在SAP不存在时

    perform bdc_dynpro      using 'SAPMF02K' '0111'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'SZA1_D0100-SMTP_ADDR'.
    perform bdc_field       using 'SZA1_D0100-TITLE_MEDI'
                                  GW_INPUT-ANRED.
    perform bdc_field       using 'ADDR1_DATA-NAME1'
                                  GW_INPUT-NAME1.
    perform bdc_field       using 'ADDR1_DATA-STREET'
                                  GW_INPUT-STREET.
*    perform bdc_field       using 'ADDR1_DATA-HOME_CITY'
*                                  ''.
    perform bdc_field       using 'ADDR1_DATA-POST_CODE1'
                                  GW_INPUT-PSTLZ.
    perform bdc_field       using 'ADDR1_DATA-COUNTRY'
                                  GW_INPUT-LAND1.
    perform bdc_field       using 'ADDR1_DATA-LANGU'
                                  'ZH'.
    perform bdc_field       using 'SZA1_D0100-TEL_NUMBER'
                                  GW_INPUT-TELF1.
    perform bdc_field       using 'SZA1_D0100-MOB_NUMBER'
                                  GW_INPUT-TELF2.
    perform bdc_field       using 'SZA1_D0100-FAX_NUMBER'
                                  GW_INPUT-TELFX.
    perform bdc_field       using 'SZA1_D0100-SMTP_ADDR'
                                  GW_INPUT-SMTP_ADDR.

    perform bdc_dynpro      using 'SAPMF02K' '0120'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFA1-BRSCH'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.
    perform bdc_field       using 'LFA1-STCEG'
                                  GW_INPUT-STCEG.
    perform bdc_field       using 'LFA1-BRSCH'
                                  GW_INPUT-BRSCH.

    perform bdc_dynpro      using 'SAPMF02K' '0130'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFBK-BVTYP(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BANK'.
    perform bdc_field       using 'LFBK-BANKS(01)'
                                  GW_INPUT-BANKS.
    perform bdc_field       using 'LFBK-BANKL(01)'
                                  GW_INPUT-BANKL.
    perform bdc_field       using 'LFBK-BANKN(01)'
                                  GW_INPUT-BANKN.
    perform bdc_field       using 'LFBK-KOINH(01)'
                                  GW_INPUT-KOINH.
    perform bdc_field       using 'LFBK-BVTYP(01)'
                                  GW_INPUT-BVTYP.
    IF GT_BNKA[] IS INITIAL."如果银行不存在,创建银行信息
      perform bdc_dynpro      using 'SAPLBANK' '0100'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'BNKA-BRNCH'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ENTR'.
      perform bdc_field       using 'BNKA-BANKA'
                                    GW_INPUT-BANKA.
      perform bdc_field       using 'BNKA-STRAS'
                                    GW_INPUT-STRAS.
      perform bdc_field       using 'BNKA-ORT01'
                                    GW_INPUT-ORT01.
      perform bdc_field       using 'BNKA-BRNCH'
                                    GW_INPUT-BRNCH.
      "返回130屏幕
      perform bdc_dynpro      using 'SAPMF02K' '0130'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LFBK-BANKS(01)'.
    ENDIF.
    "130屏幕上点下一页
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.

    perform bdc_dynpro      using 'SAPMF02K' '0380'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KNVK-NAME1(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=LSDP'.
    perform bdc_field       using 'KNVK-NAME1(01)'
                                  GW_INPUT-NAME1_C.
    perform bdc_dynpro      using 'SAPMF02K' '1361'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'SZA5_D0700-TEL_NUMBER'.
    perform bdc_field       using 'ADDR3_DATA-NAME_LAST'
                                  GW_INPUT-NAME1_C.
    perform bdc_field       using 'SZA5_D0700-TEL_NUMBER'
                                  GW_INPUT-TELF1_C.
    perform bdc_dynpro      using 'SAPMF02K' '0380'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KNVK-NAMEV(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.
  ENDIF.

  IF GT_LFB1[] IS INITIAL."当前公司下没有此供应商时
    perform bdc_dynpro      using 'SAPMF02K' '0210'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-FDGRV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.
    perform bdc_field       using 'LFB1-AKONT'
                                  GW_INPUT-AKONT.
    perform bdc_field       using 'LFB1-ZUAWA'
                                  GW_INPUT-ZUAWA.
    perform bdc_field       using 'LFB1-FDGRV'
                                  GW_INPUT-FDGRV.

    perform bdc_dynpro      using 'SAPMF02K' '0215'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-REPRF'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=VW'.
    perform bdc_field       using 'LFB1-ZTERM'
                                  GW_INPUT-ZTERM.
    perform bdc_field       using 'LFB1-REPRF'
                                  GW_INPUT-REPRF.
    perform bdc_field       using 'LFB1-ZWELS'
                                  'BCELPTU'.

    perform bdc_dynpro      using 'SAPMF02K' '0220'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB5-MAHNA'.
    IF GT_LFB1[] IS INITIAL."如果采购组织下供应商不存在,继续跳转屏幕;已存在,保存结束
      perform bdc_field       using 'BDC_OKCODE'
                                    '=VW'.
    ELSE.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=UPDA'.
    ENDIF.
  ENDIF.

            IF GT_LFM1[] IS INITIAL."当前采购组织下没有此供应商时
              perform bdc_dynpro      using 'SAPMF02K' '0310'.
              perform bdc_field       using 'BDC_CURSOR'
                                            'LFM1-WEBRE'.
              perform bdc_field       using 'BDC_OKCODE'
                                            '=UPDA'.
              perform bdc_field       using 'LFM1-WAERS'
                                            GW_INPUT-WAERS.
              perform bdc_field       using 'LFM1-ZTERM'
                                            GW_INPUT-ZTERM.
              perform bdc_field       using 'LFM1-KALSK'
                                            GW_INPUT-KALSK.
              perform bdc_field       using 'LFM1-WEBRE'
                                            GW_INPUT-WEBRE.
            ENDIF.

  REFRESH MESSTAB.
  CALL TRANSACTION 'XK01' USING BDCDATA
                   MODE   'N'
                   UPDATE 'S'
                   MESSAGES INTO MESSTAB.

  IF SY-SUBRC <> 0.
    ZLOG-MANDT = SY-MANDT.
    ZLOG-PERNR = '00000000'.
    ZLOG-LIFNR = GW_INPUT-LIFNR.
    ZLOG-BUKRS = GW_INPUT-BUKRS.
    ZLOG-EKORG = GW_INPUT-EKORG.
    ZLOG-FLAG = ''.
    ZLOG-NAME1 = 'ZMM_SUPPLIER_CREATE'.
    ZLOG-CAL_DATE = SY-DATUM.
    ZLOG-CAL_TIME = SY-UZEIT.
    ZLOG-MESSAGE = '失败!'.
    LOOP AT MESSTAB.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = MESSTAB-MSGID
          msgnr               = MESSTAB-MSGNR
          msgv1               = MESSTAB-MSGV1
          msgv2               = MESSTAB-MSGV2
          msgv3               = MESSTAB-MSGV3
          msgv4               = MESSTAB-MSGV4
        IMPORTING
          message_text_output = L_MESSAGE.
      CONCATENATE ZLOG-MESSAGE L_MESSAGE INTO ZLOG-MESSAGE.
    ENDLOOP.
    GT_MESSAGE-LIFNR     = ZLOG-LIFNR.
    GT_MESSAGE-BUKRS     = ZLOG-BUKRS.
    GT_MESSAGE-EKORG     = ZLOG-EKORG.
    GT_MESSAGE-TYPE      = ZLOG-FLAG.
    GT_MESSAGE-MESSAGE   = ZLOG-MESSAGE.
  ELSE.
    "日志
    ZLOG-MANDT = SY-MANDT.
    ZLOG-PERNR = '00000000'.
    ZLOG-LIFNR = GW_INPUT-LIFNR.
    ZLOG-BUKRS = GW_INPUT-BUKRS.
    ZLOG-EKORG = GW_INPUT-EKORG.
    ZLOG-FLAG = 'X'.
    ZLOG-NAME1 = 'ZMM_SUPPLIER_CREATE'.
    ZLOG-CAL_DATE = SY-DATUM.
    ZLOG-CAL_TIME = SY-UZEIT.
    ZLOG-MESSAGE = '创建成功!'.
    "返回
    GT_MESSAGE-LIFNR     = ZLOG-LIFNR.
    GT_MESSAGE-BUKRS     = ZLOG-BUKRS.
    GT_MESSAGE-EKORG     = ZLOG-EKORG.
    GT_MESSAGE-TYPE      = ZLOG-FLAG.
    GT_MESSAGE-MESSAGE   = ZLOG-MESSAGE.
  ENDIF.
  APPEND ZLOG.
  APPEND GT_MESSAGE.
  CLEAR: BDCDATA[],BDCDATA,ZLOG,GT_MESSAGE,GW_INPUT,L_MESSAGE,MESSTAB[],GT_LFB1[],GT_LFM1[],GT_BNKA[].
ENDLOOP.



MODIFY ZLOG_ZMMD004_001 FROM TABLE ZLOG.
IF SY-SUBRC = 0.
  COMMIT WORK.
ENDIF.
ENDFUNCTION.
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*----------------------------------------------------------------------*
*        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 <> '/'.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.
ENDFORM.

 

原文地址:https://www.cnblogs.com/CtrlS/p/10193790.html