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