背景:有一些公司采购订单的创建不是单纯通过手动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'
EXPORTING
INPUT = I_HEAD-LIFNR
IMPORTING
OUTPUT = I_HEAD-LIFNR.
IF GS_WAERS = ''.
SELECT SINGLE WAERS
FROM LFM1
INTO GS_WAERS
WHERE LIFNR = I_HEAD-LIFNR
AND 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 ZTERM
INTO HEAD-PMNTTRMS
FROM LFM1
WHERE LIFNR = HEAD-VENDOR
AND 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_WYT3
WHERE LIFNR = I_HEAD-LIFNR
AND EKORG = I_HEAD-EKORG
AND 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'
EXPORTING
INPUT = IT_ITEM-MATNR
IMPORTING
OUTPUT = IT_ITEM-MATNR
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
ENDIF.
"物料主数据默认计量单位
CLEAR : GS_MEINS.
SELECT SINGLE MEINS FROM MARA INTO GS_MEINS
WHERE 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'
EXPORTING
POHEADER = HEAD
POHEADERX = HEADX
* no_price_from_po = 'X'
NO_MESSAGING = 'X'
NO_MESSAGE_REQ = 'X'
TESTRUN = ''
IMPORTING
EXPPURCHASEORDER = DOCUMENT
TABLES
RETURN = RETURN
POITEM = ITEM[]
POITEMX = ITEMX[]
POACCOUNT = POACCOUNT[]
POACCOUNTX = POACCOUNTX[]
POSERVICES = POSERVICES[]
POSRVACCESSVALUES = POSRVACCVS[]
POCOND = POCOND
POCONDX = POCONDX
* POPARTNER = LT_POPARTNER
POTEXTHEADER = 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-MESSAGE
INTO E_MESSAGE.
ENDIF.
ENDLOOP.
WRITE : / E_MESSAGE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = '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.
创建完成后可以满足现有需求,但是方法比较蠢,希望有别的好方法的朋友可以告知一下,拜谢。