• SAP 采购信息记录创建


    试了很多网上采购信息记录的创建,各种函数的 都没有完美的,最后还是决定使用BDC。

    把功能封装成函数 方便调用。

    其中关键点:交货日期和单价重新定义了变量。

     

    FUNCTION Y_TEST_FM_BP006.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  TABLES
    *"      TT_INPUT STRUCTURE  ZBP003
    *"      TT_RETURN STRUCTURE  BAPIRET1
    *"----------------------------------------------------------------------
    
      LOOP AT TT_INPUT.
    
        "首先判断采购信息记录是否已创建
        DATA:ZAPLFZ TYPE STRING.
        DATA:ZNETPR TYPE STRING.
        ZAPLFZ = TT_INPUT-APLFZ.
        ZNETPR = TT_INPUT-NETPR.
        TT_INPUT-MATNR  = |{ TT_INPUT-MATNR ALPHA = IN WIDTH = 18 }| .
        TT_INPUT-LIFNR  = |{ TT_INPUT-LIFNR ALPHA = IN }|.
        "获取交货计划天数
        SELECT SINGLE PLIFZ
        INTO @DATA(LV_PLIFZ)
              FROM MARC
              WHERE MATNR = @TT_INPUT-MATNR
              AND WERKS = @TT_INPUT-WERKS.
        "若系统中已维护交货计划天数,则使用系统中数据
        IF LV_PLIFZ IS NOT INITIAL.
          TT_INPUT-APLFZ = LV_PLIFZ.
          CLEAR LV_PLIFZ.
        ENDIF.
    
        SELECT * INTO TABLE @DATA(IT_EINE_NEW)
              FROM EINA AS A INNER JOIN EINE AS B ON A~INFNR = B~INFNR
              WHERE A~LIFNR = @TT_INPUT-LIFNR
              AND A~MATNR = @TT_INPUT-MATNR
              AND B~WERKS = @TT_INPUT-WERKS
              AND B~EKORG = @TT_INPUT-EKORG
              AND B~ESOKZ = @TT_INPUT-ESOKZ.
    
        IF IT_EINE_NEW[] IS INITIAL. "新建
    
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0100'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'RM06I-NORMB'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '/00'.
          PERFORM BDC_FIELD       USING 'EINA-LIFNR'
                TT_INPUT-LIFNR.
          PERFORM BDC_FIELD       USING 'EINA-MATNR'
                TT_INPUT-MATNR.
          PERFORM BDC_FIELD       USING 'EINE-EKORG'
                TT_INPUT-EKORG.
          PERFORM BDC_FIELD       USING 'EINE-WERKS'
                TT_INPUT-WERKS.
    
          IF TT_INPUT-ESOKZ = '0'.
            PERFORM BDC_FIELD       USING 'RM06I-NORMB'
                  'X'.
          ELSEIF TT_INPUT-ESOKZ = '2'.
            PERFORM BDC_FIELD       USING 'RM06I-KONSI'
                  'X'.
          ENDIF.
    
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0101'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINA-MAHN1'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '/00'.
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0102'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINE-MWSKZ'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '/00'.
          PERFORM BDC_FIELD       USING 'EINE-APLFZ'
                ZAPLFZ.
          PERFORM BDC_FIELD       USING 'EINE-NORBM'
                '1'.
          PERFORM BDC_FIELD       USING 'EINE-WEBRE'
                'X'.
          PERFORM BDC_FIELD       USING 'EINE-MWSKZ'
    *            'J7'.
          TT_INPUT-MWSKZ.
          PERFORM BDC_FIELD       USING 'EINE-IPRKZ'
                'D'.
          PERFORM BDC_FIELD       USING 'EINE-NETPR'
    *            '13'.
          ZNETPR.
          PERFORM BDC_FIELD       USING 'EINE-WAERS'
    *            'CNY'.
          TT_INPUT-WAERS.
          PERFORM BDC_FIELD       USING 'EINE-PEINH'
                '1'.
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0105'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINE-ANGNR'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '=KO'.
          PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1017'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'RV13A-DATBI(01)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '=SICH'.
          PERFORM BDC_FIELD       USING 'RV13A-DATAB(01)'
                TT_INPUT-DATEB.
          PERFORM BDC_FIELD       USING 'RV13A-DATBI(01)'
                TT_INPUT-DATEE.
          CALL TRANSACTION 'ME11' USING BDCDATA
                MODE 'N'
                UPDATE 'L'
                MESSAGES INTO MESSTAB.
          COMMIT WORK AND WAIT.
          CLEAR EE.
          LOOP AT MESSTAB WHERE MSGTYP = 'E'.
            EE = 'X'.
            CLEAR MESSTAB.
          ENDLOOP.
          CLEAR: MESSTAB,ZNETPR,ZAPLFZ.
          IF EE NE 'X'.
            READ TABLE MESSTAB WITH KEY MSGTYP = 'S' DYNAME = 'SAPMM06I'.
            TT_RETURN-ID = MESSTAB-MSGV1.
            TT_RETURN-MESSAGE = |采购信息记录{ TT_RETURN-ID }创建成功!|.
            TT_RETURN-TYPE = 'S'.
            APPEND TT_RETURN.
            CLEAR: TT_RETURN.
          ELSE.
            CLEAR ITAB_100[].
            READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
            SELECT *
            INTO TABLE ITAB_100
            FROM T100
            WHERE SPRSL = MESSTAB-MSGSPRA
            AND ARBGB = MESSTAB-MSGID
            AND MSGNR = MESSTAB-MSGNR.
            IF SY-SUBRC = 0.
              READ TABLE ITAB_100 INDEX 1.
              L_MSTRING = ITAB_100-TEXT.
              IF L_MSTRING CS '&1'.
                REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
              ELSE.
                REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
              ENDIF.
              CONDENSE L_MSTRING NO-GAPS.
              CONCATENATE '创建失败:' L_MSTRING INTO L_MSTRING.
              TT_RETURN-MESSAGE = L_MSTRING.
              TT_RETURN-TYPE = 'E'.
              APPEND TT_RETURN.
              CLEAR TT_RETURN.
            ENDIF.
          ENDIF.
        ELSEIF IT_EINE_NEW[] IS NOT INITIAL. "修改
          CLEAR: BDCDATA[],MESSTAB[].
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0100'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINA-LIFNR'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '/00'.
          PERFORM BDC_FIELD       USING 'EINA-LIFNR'
                TT_INPUT-LIFNR.
          PERFORM BDC_FIELD       USING 'EINA-MATNR'
                TT_INPUT-MATNR.
          PERFORM BDC_FIELD       USING 'EINE-EKORG'
                TT_INPUT-EKORG.
          PERFORM BDC_FIELD       USING 'EINE-WERKS'
                TT_INPUT-WERKS.
          IF TT_INPUT-ESOKZ = '0'.
            PERFORM BDC_FIELD       USING 'RM06I-NORMB'
                  'X'.
          ELSEIF TT_INPUT-ESOKZ = '2'.
            PERFORM BDC_FIELD       USING 'RM06I-KONSI'
                  'X'.
          ENDIF.
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0101'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINA-MAHN1'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '/00'.
          PERFORM BDC_DYNPRO      USING 'SAPMM06I' '0102'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'EINE-MWSKZ'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '=KO'.
          PERFORM BDC_FIELD       USING 'EINE-APLFZ'
                ZAPLFZ.
          PERFORM BDC_FIELD       USING 'EINE-NORBM'
                '1'.
          PERFORM BDC_FIELD       USING 'EINE-WEBRE'
                'X'.
          PERFORM BDC_FIELD       USING 'EINE-MWSKZ'
                TT_INPUT-MWSKZ.
          PERFORM BDC_FIELD       USING 'EINE-IPRKZ'
                'D'.
          PERFORM BDC_DYNPRO      USING 'SAPLV14A' '0102'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'VAKE-DATAB(01)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '=NEWD'.
          PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1017'.
          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                'RV13A-DATBI(01)'.
          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                '=SICH'.
          PERFORM BDC_FIELD       USING 'KONP-KBETR(01)'
                ZNETPR.
          PERFORM BDC_FIELD       USING 'RV13A-DATAB(01)'
                TT_INPUT-DATEB.
          PERFORM BDC_FIELD       USING 'RV13A-DATBI(01)'
                TT_INPUT-DATEE.
          CALL TRANSACTION 'ME12' USING BDCDATA
                MODE 'N'
                UPDATE 'L'
                MESSAGES INTO MESSTAB.
          COMMIT WORK AND WAIT.
          CLEAR EE.
          LOOP AT MESSTAB WHERE MSGTYP = 'E'.
            EE = 'X'.
            CLEAR MESSTAB.
          ENDLOOP.
          CLEAR: MESSTAB,ZNETPR,ZAPLFZ.
          IF EE NE 'X'.
            READ TABLE MESSTAB WITH KEY MSGTYP = 'S' DYNAME = 'SAPMM06I'.
            TT_RETURN-ID = MESSTAB-MSGV1.
            TT_RETURN-MESSAGE = '更新成功!'.
            TT_RETURN-TYPE = 'S'.
            APPEND TT_RETURN.
            CLEAR TT_RETURN.
          ELSE.
            CLEAR ITAB_100[].
            READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
            SELECT * INTO TABLE ITAB_100 FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA AND ARBGB = MESSTAB-MSGID AND MSGNR = MESSTAB-MSGNR.
            IF SY-SUBRC = 0.
              READ TABLE ITAB_100 INDEX 1.
              L_MSTRING = ITAB_100-TEXT.
              IF L_MSTRING CS '&1'.
                REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
              ELSE.
                REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
                REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
              ENDIF.
              CONDENSE L_MSTRING NO-GAPS.
              CONCATENATE '更新失败:' L_MSTRING INTO L_MSTRING.
              TT_RETURN-MESSAGE = L_MSTRING.
              TT_RETURN-TYPE = 'E'.
              APPEND TT_RETURN.
              CLEAR TT_RETURN.
            ENDIF.
          ENDIF.
        ENDIF.
    
      ENDLOOP.
    
    
    
    ENDFUNCTION.
    FUNCTION-POOL ZKING006.                     "MESSAGE-ID ..
    
    * INCLUDE LZKING006D...                      " Local class definition
    
    DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
    DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    DATA:   E_GROUP_OPENED.
    DATA: EE TYPE C.
    DATA: ITAB_100 TYPE STANDARD TABLE OF T100 WITH HEADER LINE.
    DATA: L_MSTRING TYPE STRING.
    ***INCLUDE LZKING006F01.
    *----------------------------------------------------------------------*
    
    FORM BDC_FIELD USING FNAM FVAL.
      CLEAR BDCDATA.
      BDCDATA-FNAM = FNAM.
      BDCDATA-FVAL = FVAL.
      APPEND BDCDATA.
    ENDFORM.
    
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.
  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/BruceKing/p/15509214.html
Copyright © 2020-2023  润新知