XD01创建供应商RFC BDC

Posted ctrls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XD01创建供应商RFC 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_OUTPUT
      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.

 

 

以上是关于XD01创建供应商RFC BDC的主要内容,如果未能解决你的问题,请参考以下文章

MM S4合作伙伴

QP01 BAPIQP02 BDC

BDC批导数据

如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?

如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?

ABAPSAP供应商自定义决裁生成实现