【采购订单】利用BAPI创建PO后丢失消息输出
生活随笔
收集整理的這篇文章主要介紹了
【采购订单】利用BAPI创建PO后丢失消息输出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景:有一些公司采購訂單的創建不是單純通過手動ME21N進行的,而是批量通過BAPI(BAPI_PO_CREATE1)來創建,這個時候會有一個問題,PO成功創建之后利用顯示功能(ME23N)無法打印預覽后臺配置的格式,提示如下消息:“沒有發現信息(請檢查輸入)”,詳見下圖所示:
原因則是“消息”里面沒有自動創建消息數據。
以至于批量打印的時候無法進行選擇顯示(ME9F)。
檢查后臺配置均無任何問題(SPRO-物料管理-采購-消息-輸出控制),這里不做詳述。
檢查后臺配置沒有發現問題,手動處理也沒有問題,BAPI中也暫時沒有找到相應的參數。
暫定處理方案——更新NAST表。
參考代碼:
REPORT ZTEST_PO. DATA:HEAD LIKE BAPIMEPOHEADER, "采購訂單抬頭數據HEADX LIKE BAPIMEPOHEADERX, "采購訂單抬頭數據(更改參數)LT_HEADER_TEXT LIKE TABLE OF BAPIMEPOTEXTHEADER WITH HEADER LINE,ITEM LIKE TABLE OF BAPIMEPOITEM WITH HEADER LINE, "采購訂單項目ITEMX LIKE TABLE OF BAPIMEPOITEMX WITH HEADER LINE, "采購訂單項目數據(更改參數)POACCOUNT LIKE TABLE OF BAPIMEPOACCOUNT WITH HEADER LINE, "采購訂單的帳戶分配字段POACCOUNTX LIKE TABLE OF BAPIMEPOACCOUNTX WITH HEADER LINE, "采購訂單的帳目分配字段 (更改工具條)POCOND LIKE BAPIMEPOCOND OCCURS 0 WITH HEADER LINE, "價格條件POCONDX LIKE BAPIMEPOCONDX OCCURS 0 WITH HEADER LINE,POSERVICES TYPE TABLE OF BAPIESLLC WITH HEADER LINE,POSRVACCVS TYPE TABLE OF BAPIESKLC WITH HEADER LINE,LT_POPARTNER TYPE TABLE OF BAPIEKKOP WITH HEADER LINE,DOCUMENT LIKE BAPIMEPOHEADER-PO_NUMBER,RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE. "采購憑證號 DATA: L_EBELP TYPE EKPO-EBELP, "采購憑證的項目編號L_STNO TYPE STUNR. DATA:GS_WAERS TYPE LFM1-WAERS,GS_MEINS TYPE MARA-MEINS. DATA:LW_GCJZNQ TYPE ZMM_GCJZNQ. DATA:LS_VBFA TYPE VBFA. DATA : E_MESSAGE TYPE CHAR255. DATA : I_HEAD TYPE ZVS_LD.I_HEAD-LIFNR = '0000200001'. I_HEAD-EKORG = '1001'. I_HEAD-BUKRS = '1010'. I_HEAD-VEDAT = SY-DATUM. I_HEAD-TXT_K01 = '測試PO'. I_HEAD-ZZCGKH = '00000231'. I_HEAD-WAERS = 'CNY'.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT = I_HEAD-LIFNRIMPORTINGOUTPUT = I_HEAD-LIFNR.IF GS_WAERS = ''.SELECT SINGLE WAERSFROM LFM1INTO GS_WAERSWHERE LIFNR = I_HEAD-LIFNRAND EKORG = I_HEAD-EKORG. ENDIF.HEAD-DOC_TYPE = 'ZNB1'. HEADX-DOC_TYPE = 'X'.HEAD-PURCH_ORG = I_HEAD-EKORG. HEADX-PURCH_ORG = 'X'.HEAD-CREAT_DATE = SY-DATUM. HEADX-CREAT_DATE = 'X'.HEAD-CREATED_BY = SY-UNAME. HEADX-CREATED_BY = 'X'.HEAD-PUR_GROUP = '000'. HEADX-PUR_GROUP = 'X'.HEAD-COMP_CODE = I_HEAD-BUKRS. HEADX-COMP_CODE = 'X'.HEAD-CURRENCY = GS_WAERS. HEADX-CURRENCY = 'X'.HEAD-DOC_DATE = I_HEAD-VEDAT. HEADX-DOC_DATE = 'X'.HEAD-VENDOR = I_HEAD-LIFNR. HEADX-VENDOR = 'X'.HEAD-PO_REL_IND = 'X'. HEADX-PO_REL_IND = 'X'.HEAD-LANGU = SY-LANGU. HEADX-LANGU = 'X'.HEAD-STATUS = 'I'. HEADX-STATUS = 'X'.SELECT SINGLE ZTERMINTO HEAD-PMNTTRMSFROM LFM1WHERE LIFNR = HEAD-VENDORAND EKORG = HEAD-PURCH_ORG. HEADX-PMNTTRMS = 'X'.IF I_HEAD-TXT_K01 <> ''.LT_HEADER_TEXT-TEXT_FORM = '*'.LT_HEADER_TEXT-TEXT_ID = 'F01'.LT_HEADER_TEXT-TEXT_LINE = I_HEAD-TXT_K01.APPEND LT_HEADER_TEXT.CLEAR LT_HEADER_TEXT. ENDIF.LT_POPARTNER-PARTNERDESC = 'C1'. LT_POPARTNER-LANGU = '1'. LT_POPARTNER-BUSPARTNO = I_HEAD-ZZCGKH. APPEND LT_POPARTNER.DATA:LT_WYT3 LIKE TABLE OF WYT3 WITH HEADER LINE. SELECT *FROM WYT3"合作伙伴功能INTO TABLE LT_WYT3WHERE LIFNR = I_HEAD-LIFNRAND EKORG = I_HEAD-EKORGAND PARVW = 'C1'. LOOP AT LT_WYT3 WHERE PERNR <> I_HEAD-ZZCGKH.LT_POPARTNER-PARTNERDESC = 'C1'.LT_POPARTNER-LANGU = '1'.LT_POPARTNER-BUSPARTNO = LT_WYT3-PERNR.LT_POPARTNER-DELETE_IND = 'X'.APPEND LT_POPARTNER. ENDLOOP.L_STNO = 0. DATA : IT_ITEM TYPE ZVS_LDITEM.*LOOP AT IT_ITEM. IT_ITEM-MATNR = '21040230001'. IT_ITEM-EBELP = '10'. IT_ITEM-WERKS = '1011'. IT_ITEM-LGORT = 'ZF00'. IT_ITEM-MENGE = 10. IT_ITEM-NETPR = 4500.IF IT_ITEM-MATNR IS NOT INITIAL.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT = IT_ITEM-MATNRIMPORTINGOUTPUT = IT_ITEM-MATNREXCEPTIONSLENGTH_ERROR = 1OTHERS = 2. ENDIF. "物料主數據默認計量單位 CLEAR : GS_MEINS. SELECT SINGLE MEINS FROM MARA INTO GS_MEINSWHERE MATNR = IT_ITEM-MATNR.ITEM-PO_ITEM = IT_ITEM-EBELP. ITEMX-PO_ITEM = IT_ITEM-EBELP. ITEMX-PO_ITEMX = 'X'.ITEM-MATERIAL = IT_ITEM-MATNR. ITEMX-MATERIAL = 'X'.ITEM-PLANT = IT_ITEM-WERKS. "工廠 ITEMX-PLANT = 'X'. "工廠*ITEM-ITEM_CAT = 'L'. *ITEMX-ITEM_CAT = 'X'.ITEM-STGE_LOC = IT_ITEM-LGORT. ITEMX-STGE_LOC = 'X'.ITEM-TAX_CODE = 'J2'."稅代碼 ITEMX-TAX_CODE = 'X'. "稅代碼ITEM-QUANTITY = IT_ITEM-MENGE. ITEMX-QUANTITY = 'X'.ITEM-PO_UNIT = GS_MEINS. ITEMX-PO_UNIT = 'X'.ITEM-NET_PRICE = IT_ITEM-NETPR. ITEMX-NET_PRICE = 'X'.ITEM-PRICE_UNIT = 1. ITEMX-PRICE_UNIT = 'X'.ITEM-INFO_UPD = ''. "標識: 更新信息記錄 ITEMX-INFO_UPD = 'X'.ITEM-AGREEMENT = '4600000347'. ITEMX-AGREEMENT = 'X'.ITEM-AGMT_ITEM = IT_ITEM-EBELP. ITEMX-AGMT_ITEM = 'X'.APPEND: ITEM,ITEMX. CLEAR: ITEM,ITEMX. * 價格條件 ADD 1 TO L_STNO. POCOND-ITM_NUMBER = IT_ITEM-EBELP. POCONDX-ITM_NUMBER = IT_ITEM-EBELP. POCONDX-ITM_NUMBERX = 'X'. POCOND-COND_ST_NO = L_STNO. POCONDX-COND_ST_NO = 'X'. POCOND-COND_TYPE = 'PB00'. POCONDX-COND_TYPE = 'X'. POCOND-COND_VALUE = IT_ITEM-NETPR. POCONDX-COND_VALUE = 'X'. POCOND-CURRENCY = I_HEAD-WAERS. POCONDX-CURRENCY = 'X'. POCOND-COND_UNIT = GS_MEINS. * POCOND-COND_UNIT = <ITAB>-BPRME. POCONDX-COND_UNIT = 'X'. POCOND-COND_P_UNT = 1. POCONDX-COND_P_UNT = 'X'. POCOND-NUMCONVERT = 1."<ITAB>-NUMCONVERT. POCONDX-NUMCONVERT = 'X'. POCOND-DENOMINATO = 1."<ITAB>-DENOMINATO. POCONDX-DENOMINATO = 'X'. POCOND-CHANGE_ID = 'U'. POCONDX-CHANGE_ID = 'X'. APPEND POCOND. APPEND POCONDX.CLEAR: POCOND,POCONDX,ITEM,ITEMX,POACCOUNT,POACCOUNTX,POSERVICES. SORT POCOND BY ITM_NUMBER. SORT POCONDX BY ITM_NUMBER.CALL FUNCTION 'BAPI_PO_CREATE1'EXPORTINGPOHEADER = HEADPOHEADERX = HEADX * no_price_from_po = 'X'NO_MESSAGING = 'X'NO_MESSAGE_REQ = 'X'TESTRUN = ''IMPORTINGEXPPURCHASEORDER = DOCUMENTTABLESRETURN = RETURNPOITEM = ITEM[]POITEMX = ITEMX[]POACCOUNT = POACCOUNT[]POACCOUNTX = POACCOUNTX[]POSERVICES = POSERVICES[]POSRVACCESSVALUES = POSRVACCVS[]POCOND = POCONDPOCONDX = POCONDX * POPARTNER = LT_POPARTNERPOTEXTHEADER = LT_HEADER_TEXT. LOOP AT RETURN WHERE TYPE = 'E' OR TYPE = 'A'.EXIT. ENDLOOP. IF SY-SUBRC = 0.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.LOOP AT RETURN WHERE TYPE = 'E' OR TYPE = 'A'.IF RETURN-ID = 'BAPI' AND RETURN-NUMBER = '001'.ELSEIF RETURN-ID = 'MEPO' AND RETURN-NUMBER = '000'.ELSE.CONCATENATE E_MESSAGE RETURN-MESSAGEINTO E_MESSAGE.ENDIF.ENDLOOP.WRITE : / E_MESSAGE. ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.WRITE : / 'PO:' , DOCUMENT."更新消息輸出DATA : LW_NAST TYPE NAST.LW_NAST-KAPPL = 'EF'.LW_NAST-OBJKY = DOCUMENT.LW_NAST-KSCHL = 'NEU'.LW_NAST-SPRAS = SY-LANGU.LW_NAST-PARNR = I_HEAD-LIFNR.LW_NAST-PARVW = 'LF'.LW_NAST-ERDAT = SY-DATUM.LW_NAST-ERUHR = SY-UZEIT.LW_NAST-NACHA = '1'."打印輸出LW_NAST-VSZTP = '4'."立即發送LW_NAST-LDEST = 'LP01'."輸出設備LW_NAST-DIMME = 'X'."立即打印LW_NAST-DELET = 'X'."打印后刪除LW_NAST-OBJTYPE = 'BUS2012'."對象類型LW_NAST-DATVR = SY-DATUM.LW_NAST-UHRVR = SY-UZEIT.LW_NAST-USNAM = SY-UNAME.LW_NAST-VSTAT = '1'.IF LW_NAST IS NOT INITIAL. * insert nast FROM TABLE lt_nast ACCEPTING DUPLICATE KEYS.MODIFY NAST FROM LW_NAST.IF SY-SUBRC = 0 .WRITE : / 'Output Create OK'.ENDIF.ENDIF. ENDIF.CLEAR:L_EBELP,ITEM[],ITEM,ITEMX[],ITEMX,POCOND[],POCONDX,POACCOUNT,POACCOUNT[],POACCOUNTX[],POACCOUNTX,POSERVICES[],POSRVACCVS[],RETURN[],DOCUMENT,HEAD,HEADX.創建完成后可以滿足現有需求,但是方法比較蠢,希望有別的好方法的朋友可以告知一下,拜謝。
?
總結
以上是生活随笔為你收集整理的【采购订单】利用BAPI创建PO后丢失消息输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】NAST表的使用
- 下一篇: BAPI创建预留