ME21N 采购订单批导

作者:斌将军 约 8 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:MM, 物料管理
ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

事务代码:ME21N创建采购订单

可以通过BAPI_PO_CREATE1批量创建

抬头

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

行项目

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

抬头增强字段放在BAPI_TE_MEPOHEADER结构中的CI_EKKODB附加结构中

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

行项目增强字段放在BAPI_TE_MEPOITEM结构中的CI_EKPODB附加结构中

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

另外抬头和行项目还需要在更新表中加入增强字段

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

给采购订单BAPI中传入增强字段

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

**当创建时会报错:**

对象类型 PurchaseOrder 没有被创建的实例. 外部参考:采购订单仍包含错误项目,请输入物料号或帐户设置类。

但是物料号明明已经输入了,这时回到前台,发现前台的物料号用的不是MATNR这种字段,而是EMATN,在POITEM中并不是MATERIAL这个字段接物料号,而是EMATERIAL用来接物料号,修改之后测试通过。

**公司间采购维护发货存储地点:**

在前台操作时,需要将编码Y032输入①的位置,然后回车后,编码自动跳到②的位置,并在①的位置,自动带出描述。

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

在BAPI中如果直接维护发货库存地点②这个字段,则没有效果。通过Google后发现,除了在行项目维护SUPPL_STLOC(发货存储地点)外,还要再抬头维护SUPPL_PLNT(转储单的供应(发出)工厂)字段,即公司间采购时,哪个是供货方,就维护那方的工厂。

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

**维护的数量自动扩大:**

ME21N 采购订单批导 - 封面图
ME21N 采购订单批导 - 封面图

计划行这里要输入1而不能输入10

**当用户维护了采购信息记录时,仍然传入自定义净价:**

在抬头页签中传入不从上个订单中带出价格

LV_NO_PRICE_FROM_PO = **'X'** .

在行项目中传入POITEM-PO_PRICE,让订单使用传入的价格复制到条件页签

如果应将值从POITEM-

NET_PRICE字段复制到条件,则可以在项目级别使用PO_PRICE字段进行控制。PO_PRICE的值可以为'','1'或'2',含义如下:

PO_PRICE ='':条件是自动确定的,仅当系统无法确定条件时才复制NET_PRICE字段中的值。

PO_PRICE ='1':将在NET_PRICE字段中传输的值复制为总价格,即,使用在计算模式中指定为基本价格的条件类型进行设置。在SAP

Standard System中,这些条件类型为PB00或PBXX。所有其他条件类型保持不变。没有条件从上一个文档复制。

PO_PRICE ='2':将在NET_PRICE字段中传输的值复制为净价,即在计算过程中使用指定为基准价的条件类型进行设置。所有其他条件类型都将被删除。

"--------------------@斌将军--------------------FUNCTION zfmm040.*"----------------------------------------------------------*"*"本地接口:*" IMPORTING*" VALUE(I_BSART) TYPE EKKO-BSART*" VALUE(I_LIFNR) TYPE EKKO-LIFNR*" VALUE(I_EKORG) TYPE EKKO-EKORG*" VALUE(I_KNTTP) TYPE EKPO-KNTTP OPTIONAL*" VALUE(I_EKGRP) TYPE EKKO-EKGRP*" TABLES*" T_ITEM STRUCTURE ZSMM_CGDD_ITEM*" E_RETURN STRUCTURE BAPIRET2 OPTIONAL*"----------------------------------------------------------DATA: ls_poheader TYPE bapimepoheader,ls_poheaderx   TYPE bapimepoheaderx,lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,lt_poitem TYPE TABLE OF bapimepoitem WITH HEADER LINE,lt_poitemx TYPE TABLE OF bapimepoitemx WITH HEADER LINE,lt_poschedule TYPE TABLE OF bapimeposchedule WITH HEADER LINE,lt_poschedulex TYPE TABLE OF bapimeposchedulx WITH HEADER LINE,lt_poaccount TYPE TABLE OF bapimepoaccount WITH HEADER LINE,lt_poaccountx TYPE TABLE OF bapimepoaccountx WITH HEADER LINE,lt_pocond TYPE TABLE OF bapimepocond WITH HEADER LINE,lt_pocondx TYPE TABLE OF bapimepocondx WITH HEADER LINE,lt_potextitem TYPE TABLE OF bapimepotext WITH HEADER LINE.

DATA: lv_ebeln LIKE bapimepoheader-po_number, lv_check TYPE char2, lv_message TYPE char100, lv_count TYPE char5, "计数器 lv_posnr TYPE char5. "行项目
ls_poheader-doc_type = i_bsart."采购凭证类型 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = i_lifnr "供应商帐户号 IMPORTING output = ls_poheader-vendor. "lifnr供应商帐户号 ls_poheader-purch_org = i_ekorg."t_item-ekorg.采购组织 ls_poheader-pur_group = i_ekgrp."t_item-ekgrp.采购组* ls_poheader-comp_code = '1000'."t_item-bukrs.公司代码* ls_POHEADER-REF_1 = ''."您的参考 ls_poheader-doc_date = sy-datum."t_item-bsart采购凭证日期 ls_poheader-langu = sy-langu."t_item-bsart语言代码* ls_POHEADER-CURRENCY = 'CNY'."waers."货币 ls_poheaderx-doc_type = abap_true. ls_poheaderx-vendor = abap_true. ls_poheaderx-purch_org = abap_true. ls_poheaderx-pur_group = abap_true.* ls_poheaderx-comp_code = abap_true.* ls_POHEADER-REF_1 = ABAP_TRUE. ls_poheaderx-doc_date = abap_true. ls_poheaderx-langu = abap_true.* ls_POHEADERX-CURRENCY = ABAP_TRUE."货币 LOOP AT t_item. CLEAR:lv_posnr.* lv_count = lv_count + 1."此处为与OA传过来的行项目对应,因此不用累加而用sy-tabix lv_posnr = sy-tabix * 10. CONDENSE lv_posnr NO-GAPS. lt_poitem-po_item = lv_posnr."采购凭证的项目编号 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = t_item-matnr IMPORTING output = lt_poitem-ematerial. lt_poitem-short_text = t_item-txz01."短文本 lt_poitem-quantity = t_item-menge."采购订单数量 lt_poitem-po_unit = t_item-meins." 采购订单的计量单位 lt_poitem-net_price = t_item-netpr."净价 IF i_bsart = 'YG05'."成本中心 lt_poitem-matl_group = t_item-matkl."物料组 ENDIF. lt_poitem-plant = t_item-werks." 工厂 lt_poitem-acctasscat = i_knttp."科目分配类别* lt_POITEM-TRACKINGNO = ''."t_item-BEDNR."需求跟踪号* lt_POITEM-PREQ_NAME = ''."t_item-AFNAM."需求者/请求者姓名* lt_POITEM-TAX_CODE = 'J1'."t_item-MWSKZ."销售税代码* lt_POITEM-CONF_CTRL = ''."BSTAE."确认控制代码 APPEND lt_poitem.

CLEAR:LT_EXTENSIONIN,LS_MEPOITEM. LS_MEPOITEM-PO_ITEM = LV_POSNR."编号 LS_MEPOITEM-ZKONNR = WA_DATA-EBELN."协议编号 LS_MEPOITEM-ZKTWRT = WA_DATA-KTWRT."目标值 LT_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEPOITEM'. LT_EXTENSIONIN+30(960) = LS_MEPOITEM. APPEND LT_EXTENSIONIN.

CLEAR:LT_EXTENSIONIN,LS_MEPOITEMX. LS_MEPOITEMX-PO_ITEM = LV_POSNR."编号 LS_MEPOITEMX-ZKONNR = 'X'."协议编号 LS_MEPOITEMX-ZKTWRT = 'X'."目标值 LT_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEPOITEMX'. LT_EXTENSIONIN+30(960) = LS_MEPOITEMX. APPEND LT_EXTENSIONIN.

lt_poitemx-po_item = lv_posnr. lt_poitemx-ematerial = abap_true. lt_poitemx-short_text = abap_true. lt_poitemx-quantity = abap_true. lt_poitemx-po_unit = abap_true . lt_poitemx-net_price = abap_true. IF i_bsart = 'YG05'."成本中心 lt_poitemx-matl_group = abap_true. ENDIF. lt_poitemx-plant = abap_true. lt_poitemx-acctasscat = abap_true.* lt_POITEMX-TRACKINGNO = ABAP_TRUE.* lt_POITEMX-PREQ_NAME = ABAP_TRUE. lt_poitemx-tax_code = abap_true.* lt_POITEMX-CONF_CTRL = ABAP_TRUE. APPEND lt_poitemx. lt_poschedule-po_item = lv_posnr."采购凭证的项目编号* lt_poschedule-sched_line = '10'."计划行* lt_poschedule-del_datcat_ext = 'D'."交货日期的类别 lt_poschedule-delivery_date = t_item-eeind."交货日期 lt_poschedule-quantity = t_item-menge."采购订单数量 APPEND lt_poschedule. lt_poschedulex-po_item = lv_posnr.* lt_poschedulex-sched_line = '10'.* lt_poschedulex-del_datcat_ext = abap_true."交货日期的类别 lt_poschedulex-delivery_date = abap_true."交货日期 lt_poschedulex-quantity = abap_true."采购订单数量 APPEND lt_poschedulex. lt_poaccount-po_item = lv_posnr. "采购凭证的项目编号 CASE i_bsart. WHEN 'YG05'."成本中心 lt_poaccount-gl_account = t_item-sakto."总帐科目 lt_poaccount-costcenter = t_item-kostl."成本中心 WHEN 'YG02'."固定资产 lt_poaccount-asset_no = t_item-anln1."主资产号 WHEN 'YG06'."内部订单 lt_poaccount-orderid = t_item-aufnr."订单号 WHEN OTHERS. ENDCASE.* lt_POACCOUNT-CO_AREA = 'BELL'."成本控制 APPEND lt_poaccount. lt_poaccountx-po_item = lv_posnr.""采购凭证的项目编号 CASE i_bsart. WHEN 'YG05'."成本中心 lt_poaccountx-gl_account = abap_true."总帐科目 lt_poaccountx-costcenter = abap_true."成本中心 WHEN 'YG02'."固定资产 lt_poaccountx-asset_no = abap_true."主资产号 WHEN 'YG06'."内部订单 lt_poaccountx-orderid = abap_true."订单号 WHEN OTHERS. ENDCASE.* lt_POACCOUNTX-CO_AREA = ABAP_TRUE."成本控制 APPEND lt_poaccountx. * lt_POTEXTITEM-PO_ITEM = '10'. "采购凭证的项目编号* lt_POTEXTITEM-TEXT_ID = 'F03'.""行项目文本-来自采购申请项目详细清单* lt_POTEXTITEM-text_line = t_item-str1.* APPEND lt_POTEXTITEM. CLEAR:e_return. e_return-id = '1'."作为后边更新内表的关键值 e_return-message_v2 = lv_posnr. APPEND e_return. ENDLOOP. CALL FUNCTION 'BAPI_PO_CREA

...

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ME21N采购订单批导.md」整理生成,仅用于内部技术分享与学习交流。