• BAPI 使用


    BAPI_ACC_DOCUMENT_POST

    *---BAPI_ACC_DOCUMENT_POST 所需要的参数
      DATA: OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
            OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
            OBJ_SYS LIKE BAPIACHE09-OBJ_SYS,
            DOCUMENTHEADER LIKE BAPIACHE09.

      DATA: ACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
            ACCOUNTRECEIVABLE LIKE BAPIACAR09 OCCURS 0 WITH HEADER LINE,
            CURRENCYAMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
            RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
            BAPI_RETN_INFO LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
            EXTENSION1 LIKE BAPIACEXTC OCCURS 0 WITH HEADER LINE,
            CRITERIA LIKE BAPIACKEC9 OCCURS 0 WITH HEADER LINE.


      DATA: ERROR_FLAG.

      IF ZJSJ > ZGDJ."支出
    *---调用 BAPI_ACC_DOCUMENT_POST 创建应付凭证
        LOOP AT TAB_ZZHJYJS INTO REC_ZZHJYJS WHERE ZCHKBOX = 'X'.

          DOCUMENTHEADER-BUS_ACT = 'RFBU'.
          DOCUMENTHEADER-USERNAME = SY-UNAME.
          DOCUMENTHEADER-HEADER_TXT = '纸货交易结算凭证(应付)'.
          DOCUMENTHEADER-COMP_CODE = ZGSDM.
          DOCUMENTHEADER-DOC_DATE = REC_ZZHJYJS-ZJSRQ.
          DOCUMENTHEADER-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          DOCUMENTHEADER-DOC_TYPE = 'SA'.

          ACCOUNTGL-ITEMNO_ACC = '1'.
          ACCOUNTGL-GL_ACCOUNT = '1002000000'.
          ACCOUNTGL-COMP_CODE = ZGSDM.
          ACCOUNTGL-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          ACCOUNTGL-DOC_TYPE = 'SA'.
          ACCOUNTGL-ACCT_TYPE = 'S'.
          ACCOUNTGL-PROFIT_CTR = '1022000001'.
          APPEND ACCOUNTGL.
          CLEAR ACCOUNTGL.

          ACCOUNTGL-ITEMNO_ACC = '2'.
          ACCOUNTGL-GL_ACCOUNT = '2121000000'.
          ACCOUNTGL-COMP_CODE = ZGSDM.
          ACCOUNTGL-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          ACCOUNTGL-DOC_TYPE = 'SA'.
          ACCOUNTGL-ACCT_TYPE = 'K'.
    *---获得客户所对应的供应商
          SELECT SINGLE *
           FROM KNA1
            WHERE KUNNR = REC_ZZHJYJS-ZFDZF.
          IF SY-SUBRC = 0.
            ACCOUNTGL-VENDOR_NO = KNA1-LIFNR.
          ENDIF.
          ACCOUNTGL-PROFIT_CTR = '1022000001'.
          APPEND ACCOUNTGL.
          CLEAR ACCOUNTGL.

          CURRENCYAMOUNT-ITEMNO_ACC = '1'.
          CURRENCYAMOUNT-CURRENCY = 'CNY'.
          CURRENCYAMOUNT-AMT_DOCCUR = REC_ZZHJYJS-ZGDJG.
          APPEND CURRENCYAMOUNT.
          CLEAR CURRENCYAMOUNT.

          CURRENCYAMOUNT-ITEMNO_ACC = '2'.
          CURRENCYAMOUNT-CURRENCY = 'CNY'.
          CURRENCYAMOUNT-AMT_DOCCUR = -1 * REC_ZZHJYJS-ZGDJG.
          APPEND CURRENCYAMOUNT.
          CLEAR CURRENCYAMOUNT.

          CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
            EXPORTING
              DOCUMENTHEADER = DOCUMENTHEADER
            IMPORTING
              OBJ_TYPE       = OBJ_TYPE
              OBJ_KEY        = OBJ_KEY
              OBJ_SYS        = OBJ_SYS
            TABLES
              ACCOUNTGL      = ACCOUNTGL
              CURRENCYAMOUNT = CURRENCYAMOUNT
              RETURN         = RETURN
              EXTENSION1     = EXTENSION1
            EXCEPTIONS
              OTHERS         = 1.
          IF SY-SUBRC <> 0.
            MESSAGE E999(RE) WITH '创建应付会计凭证时出错'.
          ELSE.
            LOOP AT RETURN.
              IF RETURN-TYPE = 'S'.
                CLEAR BAPI_RETN_INFO.
                MOVE-CORRESPONDING RETURN TO BAPI_RETN_INFO.
                EXIT.
              ELSEIF RETURN-TYPE = 'A' OR RETURN-TYPE = 'E'.
                CLEAR BAPI_RETN_INFO.
                MOVE-CORRESPONDING RETURN TO BAPI_RETN_INFO.
                ERROR_FLAG = 'X'.
                EXIT.
              ENDIF.
            ENDLOOP.
            IF ERROR_FLAG = 'X'.
              ROLLBACK WORK.
              MESSAGE I066(Z1) WITH BAPI_RETN_INFO-MESSAGE.
            ELSE.
              COMMIT WORK.
              REC_ZZHJYJS-ZJSPZ = OBJ_KEY+0(10).
              MODIFY TAB_ZZHJYJS FROM REC_ZZHJYJS.
              MESSAGE I066(Z1) WITH BAPI_RETN_INFO-MESSAGE.
              UPDATE ZZHJYJS SET ZJSPZ = OBJ_KEY+0(10)
                                 WHERE ZZGSDM = REC_ZZHJYJS-ZZGSDM
                                   AND ZJYLB_ZH = REC_ZZHJYJS-ZJYLB_ZH
                                   AND ZJYDH = REC_ZZHJYJS-ZJYDH
                                   AND ZJSRQ = REC_ZZHJYJS-ZJSRQ.
            ENDIF.
          ENDIF.

        ENDLOOP.

      ELSEIF ZJSJ < ZGDJ."收入
    *---调用 BAPI_ACC_DOCUMENT_POST 创建应收凭证
        LOOP AT TAB_ZZHJYJS INTO REC_ZZHJYJS WHERE ZCHKBOX = 'X'.

          DOCUMENTHEADER-BUS_ACT = 'RFBU'.
          DOCUMENTHEADER-USERNAME = SY-UNAME.
          DOCUMENTHEADER-HEADER_TXT = '纸货交易结算凭证(应收)'.
          DOCUMENTHEADER-COMP_CODE = ZGSDM.
          DOCUMENTHEADER-DOC_DATE = REC_ZZHJYJS-ZJSRQ.
          DOCUMENTHEADER-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          DOCUMENTHEADER-DOC_TYPE = 'SA'.

          ACCOUNTGL-ITEMNO_ACC = '1'.
          ACCOUNTGL-GL_ACCOUNT = '5101100000'.
          ACCOUNTGL-COMP_CODE = ZGSDM.
          ACCOUNTGL-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          ACCOUNTGL-DOC_TYPE = 'SA'.
          ACCOUNTGL-ACCT_TYPE = 'S'.
          ACCOUNTGL-PROFIT_CTR = '1022000001'.
          APPEND ACCOUNTGL.
          CLEAR ACCOUNTGL.

          ACCOUNTGL-ITEMNO_ACC = '2'.
          ACCOUNTGL-GL_ACCOUNT = '1131010000'.
          ACCOUNTGL-COMP_CODE = ZGSDM.
          ACCOUNTGL-PSTNG_DATE = REC_ZZHJYJS-ZJSRQ.
          ACCOUNTGL-DOC_TYPE = 'SA'.
          ACCOUNTGL-ACCT_TYPE = 'D'.
          ACCOUNTGL-CUSTOMER = REC_ZZHJYJS-ZFDZF.
          APPEND ACCOUNTGL.
          CLEAR ACCOUNTGL.

          CURRENCYAMOUNT-ITEMNO_ACC = '1'.
          CURRENCYAMOUNT-CURRENCY = 'CNY'.
          CURRENCYAMOUNT-AMT_DOCCUR = -1 * REC_ZZHJYJS-ZGDJG.
          APPEND CURRENCYAMOUNT.
          CLEAR CURRENCYAMOUNT.

          CURRENCYAMOUNT-ITEMNO_ACC = '2'.
          CURRENCYAMOUNT-CURRENCY = 'CNY'.
          CURRENCYAMOUNT-AMT_DOCCUR = REC_ZZHJYJS-ZGDJG.
          APPEND CURRENCYAMOUNT.
          CLEAR CURRENCYAMOUNT.


    *CO-PA Account Assignment Characteristics(获利能力段分配)

          CLEAR CRITERIA.
          CRITERIA-ITEMNO_ACC = '1'.
          CRITERIA-FIELDNAME  = 'WW004'.
          CRITERIA-CHARACTER  = 'Z3'.
          APPEND CRITERIA.

          CLEAR CRITERIA.
          CRITERIA-ITEMNO_ACC = '1'.
          CRITERIA-FIELDNAME  = 'SPART'.
          CRITERIA-CHARACTER  = '01'.
          APPEND CRITERIA.

          CLEAR CRITERIA.
          CRITERIA-ITEMNO_ACC = '1'.
          CRITERIA-FIELDNAME  = 'WW007'.
          CRITERIA-CHARACTER  = '01'.
          APPEND CRITERIA.

          CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
            EXPORTING
              DOCUMENTHEADER = DOCUMENTHEADER
            IMPORTING
              OBJ_TYPE       = OBJ_TYPE
              OBJ_KEY        = OBJ_KEY
              OBJ_SYS        = OBJ_SYS
            TABLES
              ACCOUNTGL      = ACCOUNTGL
              CURRENCYAMOUNT = CURRENCYAMOUNT
              CRITERIA       = CRITERIA
              RETURN         = RETURN
              EXTENSION1     = EXTENSION1
            EXCEPTIONS
              OTHERS         = 1.

          IF SY-SUBRC <> 0.
            MESSAGE E999(RE) WITH '创建应收会计凭证时出错'.
          ELSE.
            LOOP AT RETURN.
              IF RETURN-TYPE = 'S'.
                CLEAR BAPI_RETN_INFO.
                MOVE-CORRESPONDING RETURN TO BAPI_RETN_INFO.
                EXIT.
              ELSEIF RETURN-TYPE = 'A' OR RETURN-TYPE = 'E'.
                CLEAR BAPI_RETN_INFO.
                MOVE-CORRESPONDING RETURN TO BAPI_RETN_INFO.
                ERROR_FLAG = 'X'.
                EXIT.
              ENDIF.
            ENDLOOP.
            IF ERROR_FLAG = 'X'.
              ROLLBACK WORK.
              MESSAGE I066(Z1) WITH BAPI_RETN_INFO-MESSAGE.
            ELSE.
              COMMIT WORK.
              REC_ZZHJYJS-ZJSPZ = OBJ_KEY+0(10).
              MODIFY TAB_ZZHJYJS FROM REC_ZZHJYJS.
              MESSAGE I066(Z1) WITH BAPI_RETN_INFO-MESSAGE.
              UPDATE ZZHJYJS SET ZJSPZ = OBJ_KEY+0(10)
                                 WHERE ZZGSDM = REC_ZZHJYJS-ZZGSDM
                                   AND ZJYLB_ZH = REC_ZZHJYJS-ZJYLB_ZH
                                   AND ZJYDH = REC_ZZHJYJS-ZJYDH
                                   AND ZJSRQ = REC_ZZHJYJS-ZJSRQ.
            ENDIF.
          ENDIF.

        ENDLOOP.

      ENDIF.

    BAPI_SALESORDER_CREATEFROMDAT2

    *---------------------------------------------------------------------*
    *创建销售订单(带订单价格)
    *---------------------------------------------------------------------*
    DATA:  LOGIC_SWITCH           TYPE BAPISDLS.
    DATA:  ORDER_HEADER_IN1       LIKE BAPISDHD1.
    DATA:  ORDER_HEADER_INTX      LIKE BAPISDHD1X.
    DATA:  SALESDOCUMENT1         TYPE BAPIVBELN-VBELN.
    DATA:  RETURN2                TYPE BAPIRET2.
    DATA:  ORDER_PARTNERS1        TYPE BAPIPARNR  OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_ITEMS_IN1        TYPE BAPISDITM  OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_ITEMS_IN1X       TYPE BAPISDITMX OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_SCHEDULES_IN1    TYPE BAPISCHDL  OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_SCHEDULES_IN1X   TYPE BAPISCHDLX OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_CONDITIONS_IN1   TYPE BAPICOND OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_CONDITIONS_INX   TYPE BAPICONDX OCCURS 0 WITH HEADER LINE.
    DATA:  RETURN1                TYPE BAPIRET2   OCCURS 0 WITH HEADER LINE.

    START-OF-SELECTION.

      LOGIC_SWITCH-COND_HANDL = 'X'.

      ORDER_HEADER_IN1-DOC_TYPE   = 'Z093'.
      ORDER_HEADER_IN1-SALES_ORG  =  '1046'.
      ORDER_HEADER_IN1-DISTR_CHAN =  '98'.
      ORDER_HEADER_IN1-DIVISION   =  '00'.
      ORDER_HEADER_IN1-REQ_DATE_H =  '20081016'.
      ORDER_HEADER_IN1-PURCH_NO_C = 'PO-2008-10-16'.
      ORDER_HEADER_IN1-REF_1      = 'PO-2008-10-16'.
    *  ORDER_HEADER_IN1-SD_DOC_CAT = 'C'.
    *  ORDER_HEADER_IN1-REF_DOC    =  '0040000820'.
    *  ORDER_HEADER_IN1-REF_DOC_L  =  '40000820'.
    *  ORDER_HEADER_IN1-REFDOCTYPE = 'Z067'.
    *  ORDER_HEADER_IN1-REFDOC_CAT = 'G'.
    *  ORDER_HEADER_IN1-PRICE_DATE = '20081006'."定价日期
    *  ORDER_HEADER_IN1-INCOTERMS1 = VBKD-INCO1.
    *  ORDER_HEADER_IN1-INCOTERMS2 = VBKD-INCO2.
    *  ORDER_HEADER_IN1-PMNTTRMS   = VBKD-ZTERM.
    *  ORDER_HEADER_IN1-SALES_OFF  = VBAK-VKBUR.

      CLEAR ORDER_ITEMS_IN1.
      ORDER_ITEMS_IN1-ITM_NUMBER       = '000010'.
      ORDER_ITEMS_IN1-PO_ITM_NO        = '000010'.
      ORDER_ITEMS_IN1-MATERIAL         = '000000000080013569'.
      ORDER_ITEMS_IN1-PLANT            = '1270'.
      ORDER_ITEMS_IN1-STORE_LOC        = '0001'.
    *  ORDER_ITEMS_IN1-REF_DOC          = '0040000820'.
    *  ORDER_ITEMS_IN1-REF_DOC_IT       = '000010'.
    *  ORDER_ITEMS_IN1-REF_DOC_CA       = 'G'.
      APPEND ORDER_ITEMS_IN1.

      CLEAR ORDER_SCHEDULES_IN1.
      ORDER_SCHEDULES_IN1-ITM_NUMBER   = '000010'.
      ORDER_SCHEDULES_IN1-SCHED_LINE   = '0001'.
      ORDER_SCHEDULES_IN1-REQ_QTY      = 1.
      APPEND ORDER_SCHEDULES_IN1.

      CLEAR ORDER_PARTNERS1.
      ORDER_PARTNERS1-PARTN_ROLE         = 'AG'.
      ORDER_PARTNERS1-PARTN_NUMB         = '0400000135'.
      APPEND ORDER_PARTNERS1.

      CLEAR ORDER_CONDITIONS_IN1.
      ORDER_CONDITIONS_IN1-ITM_NUMBER = '000010'.
      ORDER_CONDITIONS_IN1-COND_ST_NO = '010'.
      ORDER_CONDITIONS_IN1-COND_COUNT = '01'.
      ORDER_CONDITIONS_IN1-COND_TYPE = 'Z089'.
      ORDER_CONDITIONS_IN1-COND_VALUE = '90'.
      ORDER_CONDITIONS_IN1-CURRENCY = 'USD'.
      ORDER_CONDITIONS_IN1-CURR_ISO = 'BBL'.
      APPEND ORDER_CONDITIONS_IN1.

      CLEAR: ORDER_CONDITIONS_INX .
      ORDER_CONDITIONS_INX-ITM_NUMBER = '000010'.
      ORDER_CONDITIONS_INX-COND_ST_NO = '010'.
      ORDER_CONDITIONS_INX-COND_COUNT = '01'.
      ORDER_CONDITIONS_INX-COND_TYPE = 'Z089'.
      ORDER_CONDITIONS_INX-UPDATEFLAG = 'U'.
      ORDER_CONDITIONS_INX-COND_VALUE = 'X'.
      ORDER_CONDITIONS_INX-CURRENCY = 'X'.
      APPEND ORDER_CONDITIONS_INX.

      PERFORM CALL_FUNCTION.

    *&---------------------------------------------------------------------*
    *& Form call_function
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM CALL_FUNCTION .


      CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
        EXPORTING
    *    SALESDOCUMENTIN               = P_NEW
        ORDER_HEADER_IN               = ORDER_HEADER_IN1
       ORDER_HEADER_INX               = ORDER_HEADER_INTX
    *   SENDER                        =
    *   BINARY_RELATIONSHIPTYPE       =
    *   INT_NUMBER_ASSIGNMENT         =
    *   BEHAVE_WHEN_ERROR             =
       LOGIC_SWITCH                   = LOGIC_SWITCH
    *   TESTRUN                       =
    *   CONVERT                       = ' '
      IMPORTING
        SALESDOCUMENT                 = SALESDOCUMENT1
      TABLES
        RETURN                        = RETURN1
        ORDER_ITEMS_IN                = ORDER_ITEMS_IN1
        ORDER_ITEMS_INX               = ORDER_ITEMS_IN1X
        ORDER_PARTNERS                = ORDER_PARTNERS1
        ORDER_SCHEDULES_IN            = ORDER_SCHEDULES_IN1
    *   ORDER_SCHEDULES_INX           = ORDER_SCHEDULES_IN1X
       ORDER_CONDITIONS_IN            = ORDER_CONDITIONS_IN1
       ORDER_CONDITIONS_INX           = ORDER_CONDITIONS_INX
    *   ORDER_CFGS_REF                =
    *   ORDER_CFGS_INST               =
    *   ORDER_CFGS_PART_OF            =
    *   ORDER_CFGS_VALUE              =
    *   ORDER_CFGS_BLOB               =
    *   ORDER_CFGS_VK                 =
    *   ORDER_CFGS_REFINST            =
    *   ORDER_CCARD                   =
    *   ORDER_TEXT                    =
    *   ORDER_KEYS                    =
    *   EXTENSIONIN                   =
    *   PARTNERADDRESSES              =
                .

    *

      IF NOT SALESDOCUMENT1 IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT   = 'X'
          IMPORTING
            RETURN = RETURN2.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDIF.

    ENDFORM.                    "call_function

    BAPI_SALESORDER_CHANGE

    *---------------------------------------------------------------------*
    *销售订单价格修改
    *---------------------------------------------------------------------*
    DATA:  ZSALESDOCUMENT1        TYPE BAPIVBELN-VBELN.
    DATA:  LOGIC_SWITCH           TYPE BAPISDLS.
    DATA:  ORDER_HEADER_IN1       LIKE BAPISDH1.
    DATA:  ORDER_HEADER_INTX      LIKE BAPISDH1X.
    DATA:  ORDER_ITEMS_IN1        TYPE BAPISDITM  OCCURS 0 WITH HEADER LINE.
    DATA:  ORDER_ITEMS_IN1X       TYPE BAPISDITMX OCCURS 0 WITH HEADER LINE.
    DATA:  SCHEDULE_LINES         TYPE BAPISCHDL  OCCURS 0 WITH HEADER LINE.
    DATA:  SCHEDULE_LINESX        TYPE BAPISCHDLX OCCURS 0 WITH HEADER LINE.
    DATA:  RETURN1                TYPE BAPIRET2   OCCURS 0 WITH HEADER LINE.
    DATA:  RETURN2                TYPE BAPIRET2   OCCURS 0 WITH HEADER LINE.
    DATA:  CONDITIONS_IN          TYPE BAPICOND   OCCURS 0 WITH HEADER LINE.
    DATA:  CONDITIONS_INX         TYPE BAPICONDX  OCCURS 0 WITH HEADER LINE.

    START-OF-SELECTION.

      ZSALESDOCUMENT1 = '0000004013'.

      ORDER_HEADER_INTX-UPDATEFLAG = 'U'.
      LOGIC_SWITCH-COND_HANDL = 'X'.

      CONDITIONS_IN-ITM_NUMBER = '000010'.
      CONDITIONS_IN-COND_ST_NO = '010'.
      CONDITIONS_IN-COND_COUNT = '01'.
      CONDITIONS_IN-COND_TYPE = 'Z089'.
      CONDITIONS_IN-COND_VALUE = '90'.
      CONDITIONS_IN-CURRENCY = 'USD'.
      CONDITIONS_IN-CURR_ISO = 'BBL'.
      APPEND CONDITIONS_IN.

      CONDITIONS_INX-ITM_NUMBER = '000010'.
      CONDITIONS_INX-COND_ST_NO = '010'.
      CONDITIONS_INX-COND_COUNT = '01'.
      CONDITIONS_INX-COND_TYPE = 'Z089'.
      CONDITIONS_INX-UPDATEFLAG = 'U'.
      CONDITIONS_INX-COND_VALUE = 'X'.
      CONDITIONS_INX-CURRENCY = 'X'.
      APPEND CONDITIONS_INX.

      PERFORM CALL_FUNCTION.

    *&---------------------------------------------------------------------*
    *& Form call_function
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM CALL_FUNCTION .


      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          SALESDOCUMENT               = ZSALESDOCUMENT1
    *                ORDER_HEADER_IN             =
          ORDER_HEADER_INX            = ORDER_HEADER_INTX
    *                SIMULATION                  =
    *                BEHAVE_WHEN_ERROR           = ' '
    *                INT_NUMBER_ASSIGNMENT       = ' '
                    LOGIC_SWITCH                = LOGIC_SWITCH
    *                NO_STATUS_BUF_INIT          = ' '
        TABLES
          RETURN                      = RETURN1
    *                ORDER_ITEM_IN               = ORDER_ITEMS_IN1
    *                ORDER_ITEM_INX              = ORDER_ITEMS_IN1X
    *                PARTNERS                    =
    *                PARTNERCHANGES              =
    *                PARTNERADDRESSES            =
    *                ORDER_CFGS_REF              =
    *                ORDER_CFGS_INST             =
    *                ORDER_CFGS_PART_OF          =
    *                ORDER_CFGS_VALUE            =
    *                ORDER_CFGS_BLOB             =
    *                ORDER_CFGS_VK               =
    *                ORDER_CFGS_REFINST          =
    *                SCHEDULE_LINES              = SCHEDULE_LINES
    *                SCHEDULE_LINESX             = SCHEDULE_LINESX
    *                ORDER_TEXT                  =
    *                ORDER_KEYS                  =
                    CONDITIONS_IN               = CONDITIONS_IN
                    CONDITIONS_INX              = CONDITIONS_INX
    *                EXTENSIONIN                 =
                .


      IF SY-SUBRC = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT   = 'X'
          IMPORTING
            RETURN = RETURN2.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDIF.

    ENDFORM.                    "call_function

    BAPI_PO_CHANGE

    *&---------------------------------------------------------------------*
    *&      Form  ZMM_FR0003
    *&---------------------------------------------------------------------*
    *       保存PO时对非服务行项目将"交货已完成"标识设置为L
    *       对服务行项目将"交货已完成"标识设置为S
    *----------------------------------------------------------------------*
    FORM ZMM_FR0003 .

      DATA: ZMESSAGE TYPE STRING.
      DATA: PURCHASEORDER LIKE BAPIMEPOHEADER-PO_NUMBER.
      DATA: POHEADER LIKE BAPIMEPOHEADER OCCURS 0 WITH HEADER LINE.
      DATA: POHEADERX LIKE BAPIMEPOHEADERX OCCURS 0 WITH HEADER LINE.
      DATA: POITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE.
      DATA: POITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE.
      DATA: RETURN1 LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

      CLEAR: REC_MSG,TAB_MSG[].
      LOOP AT TAB_PO_CLOSE INTO REC_PO_CLOSE WHERE ZCHKBOX = 'X'.
        PURCHASEORDER = REC_PO_CLOSE-EBELN.
        POHEADER-PO_NUMBER = REC_PO_CLOSE-EBELN.
        APPEND POHEADER.
        POHEADERX-PO_NUMBER = 'X'.
        APPEND POHEADERX.
        POITEM-PO_ITEM = REC_PO_CLOSE-EBELP.
        IF REC_PO_CLOSE-PSTYP <> '9'.
          POITEM-NO_MORE_GR = 'X'.
        ELSE.
          POITEM-DELETE_IND = 'S'.
        ENDIF.
        APPEND POITEM.
        POITEMX-PO_ITEM = REC_PO_CLOSE-EBELP.
        POITEMX-PO_ITEMX = 'X'.
        IF REC_PO_CLOSE-PSTYP <> '9'.
          POITEMX-NO_MORE_GR = 'X'.
        ELSE.
          POITEMX-DELETE_IND = 'X'.
        ENDIF.
        APPEND POITEMX.
        CALL FUNCTION 'BAPI_PO_CHANGE'
          EXPORTING
            PURCHASEORDER = PURCHASEORDER
            POHEADER      = POHEADER
            POHEADERX     = POHEADERX
          TABLES
            RETURN        = RETURN1
            POITEM        = POITEM
            POITEMX       = POITEMX.
        READ TABLE RETURN1 WITH KEY TYPE = 'E' TRANSPORTING NO FIELDS.
        IF SY-SUBRC <> 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT = 'X'.
        ENDIF.
        LOOP AT RETURN1.
          REC_MSG-TYP = RETURN1-TYPE.
          CONCATENATE '采购订单' REC_PO_CLOSE-EBELN '行项目' REC_PO_CLOSE-EBELP RETURN1-MESSAGE INTO REC_MSG-MESSAGE.
          APPEND REC_MSG TO TAB_MSG.
          CLEAR: REC_MSG,RETURN1.
        ENDLOOP.
      ENDLOOP.

      SORT TAB_MSG BY TYP MESSAGE.
      DELETE ADJACENT DUPLICATES FROM TAB_MSG COMPARING TYP MESSAGE.

      CALL SCREEN 100 STARTING AT 40 1
                      ENDING AT 140 20.

    ENDFORM.                    " ZMM_FR0003

    BAPI_REQUISITION_CREATE

    DATA: LS_SELECTED_LINE LIKE LVC_S_ROW,
            LF_ROW_INDEX TYPE LVC_INDEX.
      DATA: NUM(5) TYPE N.
      DATA: ZMESSAGE TYPE STRING.
      DATA: H(20) TYPE C.
      DATA: TLINK TYPE TABLE OF TLINE.
      DATA: PRHEADER LIKE BAPIMEREQHEADER OCCURS 0 WITH HEADER LINE.
      DATA: PRHEADERX LIKE BAPIMEREQHEADERX OCCURS 0 WITH HEADER LINE.
      DATA: NUMBER LIKE BAPIMEREQHEADER-PREQ_NO.
      DATA: PRITEM LIKE BAPIMEREQITEMIMP OCCURS 0 WITH HEADER LINE.
      DATA: PRITEMX LIKE BAPIMEREQITEMX OCCURS 0 WITH HEADER LINE.
      DATA: PRHEADERTEXT LIKE BAPIMEREQHEADTEXT OCCURS 0 WITH HEADER LINE.
      DATA: RETURN LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE.
      DATA: BAPIRET LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS_TO_DELETE LIKE BAPIEBAND OCCURS 0 WITH HEADER LINE.
      DATA: ZRETURN LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS LIKE BAPIEBANC OCCURS 0 WITH HEADER LINE.

      LOOP AT LT_ROWS INTO LS_SELECTED_LINE.
        LF_ROW_INDEX = LS_SELECTED_LINE-INDEX.
    * read selected row from internal table tab_eban
        READ TABLE TAB_EBAN INDEX LF_ROW_INDEX INTO REC_EBAN.
    * creating new purchase requisition
        CLEAR NUM.
        NUM = SY-TABIX * 10.
        REQUISITION_ITEMS-PREQ_ITEM = NUM.
        REQUISITION_ITEMS-DOC_TYPE = REC_EBAN-BSART.
        REQUISITION_ITEMS-PUR_GROUP = P_EBAN_EKGRP.
        REQUISITION_ITEMS-PREQ_NAME = REC_EBAN-BANFN.
        REQUISITION_ITEMS-MATERIAL = REC_EBAN-MATNR.
        REQUISITION_ITEMS-PLANT = REC_EBAN-WERKS.
        REQUISITION_ITEMS-STORE_LOC = REC_EBAN-LGORT.
        IF REC_EBAN-ZXGSL <> 0.
          REQUISITION_ITEMS-QUANTITY = REC_EBAN-ZXGSL.
        ELSE.
          REQUISITION_ITEMS-QUANTITY = REC_EBAN-MENGE.
        ENDIF.
        REQUISITION_ITEMS-DELIV_DATE = REC_EBAN-LFDAT.
        REQUISITION_ITEMS-C_AMT_BAPI = REC_EBAN-PREIS.
        APPEND REQUISITION_ITEMS.
        CLEAR: REQUISITION_ITEMS,REC_EBAN.
      ENDLOOP.

    * call bapi for creating new purchase requisition
      CALL FUNCTION 'BAPI_REQUISITION_CREATE'
        IMPORTING
          NUMBER            = NUMBER
        TABLES
          REQUISITION_ITEMS = REQUISITION_ITEMS
          RETURN            = RETURN.

    BAPI_REQUISITION_DELETE

    LOOP AT LT_ROWS INTO LS_SELECTED_LINE.
            LF_ROW_INDEX = LS_SELECTED_LINE-INDEX.
    * read selected row from internal table tab_eban
            READ TABLE TAB_EBAN INDEX LF_ROW_INDEX INTO REC_EBAN.
    * deleting old purchase requisition
            REQUISITION_ITEMS_TO_DELETE-PREQ_ITEM = REC_EBAN-BNFPO.
            REQUISITION_ITEMS_TO_DELETE-DELETE_IND = 'X'.
            APPEND REQUISITION_ITEMS_TO_DELETE.
            CALL FUNCTION 'BAPI_REQUISITION_DELETE'
              EXPORTING
                NUMBER                      = REC_EBAN-BANFN
              TABLES
                REQUISITION_ITEMS_TO_DELETE = REQUISITION_ITEMS_TO_DELETE
                RETURN                      = ZRETURN.
            REFRESH BAPIRET.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                WAIT   = 'X'
              IMPORTING
                RETURN = BAPIRET.
            REC_EBAN-ZFLAG = 'X'.
            MODIFY TAB_EBAN FROM REC_EBAN INDEX LF_ROW_INDEX.
          ENDLOOP.

    BAPI_PR_CHANGE

    DATA: LS_SELECTED_LINE LIKE LVC_S_ROW,
            LF_ROW_INDEX TYPE LVC_INDEX.
      DATA: NUM(5) TYPE N.
      DATA: ZMESSAGE TYPE STRING.
      DATA: PRHEADER LIKE BAPIMEREQHEADER OCCURS 0 WITH HEADER LINE.
      DATA: PRHEADERX LIKE BAPIMEREQHEADERX OCCURS 0 WITH HEADER LINE.
      DATA: PRITEM LIKE BAPIMEREQITEMIMP OCCURS 0 WITH HEADER LINE.
      DATA: PRITEMX LIKE BAPIMEREQITEMX OCCURS 0 WITH HEADER LINE.
      DATA: PRITEMEXP LIKE BAPIMEREQITEM OCCURS 0 WITH HEADER LINE.
      DATA: PRACCOUNT LIKE BAPIMEREQACCOUNT OCCURS 0 WITH HEADER LINE.
      DATA: PRACCOUNTX LIKE BAPIMEREQACCOUNTX OCCURS 0 WITH HEADER LINE.
      DATA: RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
      DATA: BAPIRET LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS_TO_DELETE LIKE BAPIEBAND OCCURS 0 WITH HEADER LINE.
      DATA: ZRETURN LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS LIKE BAPIEBAN OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS_OLD LIKE BAPIEBANV OCCURS 0 WITH HEADER LINE.
      DATA: REQUISITION_ITEMS_NEW LIKE BAPIEBANV OCCURS 0 WITH HEADER LINE.

        LOOP AT LT_ROWS INTO LS_SELECTED_LINE.
          LF_ROW_INDEX = LS_SELECTED_LINE-INDEX.
    * Read selected row from internal table tab_eban
          READ TABLE TAB_EBAN INDEX LF_ROW_INDEX INTO REC_EBAN.
          SELECT SINGLE *
           FROM MBEW
            WHERE MATNR = REC_EBAN-MATNR
              AND BWKEY = REC_EBAN-WERKS
              AND LBKUM = '0.000'
              AND VERPR = '0.00'.
          IF SY-SUBRC = 0.
    * Call bdc for updating the material price
            PERFORM ZMM_FR0005.
          ELSE.
    * Can't adding new line item when there is stock but no price
            SELECT SINGLE *
             FROM MBEW
              WHERE MATNR = REC_EBAN-MATNR
                AND BWKEY = REC_EBAN-WERKS
                AND LBKUM <> '0.000'
                AND VERPR = '0.00'.
            IF SY-SUBRC = 0.
              FLAG = 'F'.
              EXIT.
            ENDIF.
          ENDIF.
    * Can't adding new line item when there is released item
          SELECT SINGLE *
           FROM EBAN
            WHERE BANFN = P_EBAN_BANFN
              AND FRGZU = 'X'.
          IF SY-SUBRC = 0.
            FLAG = 'G'.
            EXIT.
          ENDIF.
          NUM = NUM + 10.
          REC_NETVALUE-NUM = NUM.
          REC_NETVALUE-PREIS = REC_EBAN-PREIS.
          APPEND REC_NETVALUE TO TAB_NETVALUE.
          CLEAR REC_NETVALUE.
          PRITEM-PREQ_ITEM = NUM.
          PRITEM-PUR_GROUP = P_EBAN_EKGRP.
          PRITEM-PREQ_NAME = REC_EBAN-BANFN.
          PRITEM-MATERIAL = REC_EBAN-MATNR.
          PRITEM-PLANT = REC_EBAN-WERKS.
          PRITEM-STORE_LOC = REC_EBAN-LGORT.
          IF REC_EBAN-ZXGSL <> 0.
            PRITEM-QUANTITY = REC_EBAN-ZXGSL.
          ELSE.
            PRITEM-QUANTITY = REC_EBAN-MENGE.
          ENDIF.
          PRITEM-DELIV_DATE = REC_EBAN-LFDAT.
          PRITEM-PREQ_PRICE = REC_EBAN-PREIS.
          PRITEM-PRICE_UNIT = '1'.
          PRITEM-MRP_CTRLER = REC_EBAN-DISPO.
          APPEND PRITEM.
          CLEAR PRITEM.
          PRITEMX-PREQ_ITEM = NUM.
          PRITEMX-PREQ_ITEMX = 'X'.
          PRITEMX-PUR_GROUP = 'X'.
          PRITEMX-PREQ_NAME = 'X'.
          PRITEMX-MATERIAL = 'X'.
          PRITEMX-PLANT = 'X'.
          PRITEMX-STORE_LOC = 'X'.
          PRITEMX-QUANTITY = 'X'.
          PRITEMX-DELIV_DATE = 'X'.
          PRITEMX-PREQ_PRICE = 'X'.
          PRITEMX-PRICE_UNIT = 'X'.
          PRITEMX-MRP_CTRLER = 'X'.
          APPEND PRITEMX.
          CLEAR PRITEMX.
        ENDLOOP.

          CALL FUNCTION 'BAPI_PR_CHANGE'
            EXPORTING
              NUMBER  = P_EBAN_BANFN
            TABLES
              RETURN  = RETURN
              PRITEM  = PRITEM
              PRITEMX = PRITEMX.

    BAPI_REQUISITION_GETDETAIL

    CALL FUNCTION 'BAPI_REQUISITION_GETDETAIL'
              EXPORTING
                NUMBER            = P_EBAN_BANFN
              TABLES
                REQUISITION_ITEMS = REQUISITION_ITEMS.

    BAPI_REQUISITION_CHANGE

    LOOP AT REQUISITION_ITEMS.
              MOVE-CORRESPONDING REQUISITION_ITEMS TO REQUISITION_ITEMS_OLD.
              APPEND REQUISITION_ITEMS_OLD.
              MOVE-CORRESPONDING REQUISITION_ITEMS TO REQUISITION_ITEMS_NEW.
              APPEND REQUISITION_ITEMS_NEW.
              CLEAR: REQUISITION_ITEMS,REQUISITION_ITEMS_OLD,REQUISITION_ITEMS_NEW.
            ENDLOOP.

    * Change the evaluating price and Replace purchase group
            LOOP AT REQUISITION_ITEMS_NEW.
              READ TABLE TAB_NETVALUE INTO REC_NETVALUE WITH KEY NUM = REQUISITION_ITEMS_NEW-PREQ_ITEM.
              IF SY-SUBRC = 0.
                REQUISITION_ITEMS_NEW-C_AMT_BAPI = REC_NETVALUE-PREIS.
              ENDIF.
              REQUISITION_ITEMS_NEW-PUR_GROUP = P_EBAN_EKGRP.
              MODIFY REQUISITION_ITEMS_NEW.
              CLEAR: REC_NETVALUE,REQUISITION_ITEMS_NEW.
            ENDLOOP.

    * Change Purchase Requisition
            CALL FUNCTION 'BAPI_REQUISITION_CHANGE'
              EXPORTING
                NUMBER                = P_EBAN_BANFN
              TABLES
                REQUISITION_ITEMS_OLD = REQUISITION_ITEMS_OLD
                REQUISITION_ITEMS_NEW = REQUISITION_ITEMS_NEW.

    *&20150122

    订单
    BAPI_SALESORDER_CREATEFROMDAT2 创建销售订单
    BAPISDORDER_GETDETAILEDLIST 销售订单明细
    BAPI_SALESORDER_GETLIST 销售订单列表
    BAPI_SALESORDER_CHANGE 修改销售订单
     
    交货单
     
    BAPI_OUTB_DELIVERY_READ_SLS 根据销售订单创建交货单,得到交货单创建初始页面所需的数据
    BAPI_OUTB_DELIVERY_GETDETAIL 根据交货单号读取单据的详细内容
    BAPI_OUTB_DELIVERY_CREATE_SLS 根据销售订单创建交货单
    BAPI_OUTB_DELIVERY_CHANGE 根据交货单号修改、删除单据的详细内容
     
    采购订单
     
    BAPI_PO_CREATEREF_PR 根据采购申请创建采购订单,得到采购订单创建初始页面所需的数据
    BAPI_READ_GOODS_RECEIPT 根据采购订单创建收货,得到货物接收初始页面所需的数据
    BAPI_PO_RELEASE 审批采购订单
    BAPI_PO_RESET_RELEASE 取消审批采购订单
    BAPI_PO_CHANGE 修改采购订单
    BAPI_PO_CREATE1 创建采购订单
    BAPI_PO_GETDETAIL1 采购订单明细
    BAPI_PO_GET_LIST 采购订单列表
    BAPI_PO_GETITEMS 采购订单明细列表
     
    报价单
     
    BAPI_QUOTATION_GETDETAILBOS 报价单明细
    BAPI_CUSTOMERQUOTATION_CHANGE 修改销售订单
    BAPI_QUOTATION_CREATEFROMDATA2 创建报价单

    功能描述                事务码  BAPI函数名称 

    检验批    
     修改建议批              QA02  暂未找到
     查看检验批明细      QA03  BAPI_INSPLOT_GETDETAIL
     
    检验结果    
     记录检验点结果            QE11 BAPI_INSPPOINT_CREATEFROMDATA
     修改检验点结果            QE12 BAPI_INSPPOINT_CHANGE
     显示检验点结果明细     QE13 BAPI_INSPPOINT_GETREQUIREMENTS
        
    缺陷检验    
     记录缺陷 QF01   QFFE_FAILURE_RECORDING 
     修改缺陷 QF02   暂未找到 
     显示缺陷 QF03   暂未找到 
        
    使用决策    
     记录使用决策 QA11  BAPI_INSPLOT_SETUSAGEDECISION 
     修改使用决策 QA12  暂未找到 
     显示使用决策 QA13  暂未找到 
        
    质量结果通知单    
     创建质量通知单           QM01 BAPI_QNOTIFICAT_CREATE
     修改质量通知单           QM02 BAPI_QUALNOT_MODIFY_DATA
     显示质量通知单明细    QM03 BAPI_QUALNOT_GETDETAIL 

    检验批清单    
           检验批清单列表        QA32    BAPI_INSPLOT_GETLIST 选择检验批

  • 相关阅读:
    spring ConfigurationProperties 注解
    MySQL安装
    Linux虚机密码破解
    spring cloud zuul 配置(Robbin 和 熔断)
    Oracel官网下载各类版本的JDK
    spring @Configuration
    IDEA debug
    Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常
    redis-day1
    Mysql进阶-day3
  • 原文地址:https://www.cnblogs.com/rainysblog/p/4242074.html
Copyright © 2020-2023  润新知