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 选择检验批