ME21N 采购订单批导
1业务场景
事务代码:ME21N创建采购订单
可以通过BAPI_PO_CREATE1批量创建
2代码实现
1.抬头

2.行项目

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

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

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

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

4.问题解决
当创建时会报错:
对象类型 PurchaseOrder 没有被创建的实例. 外部参考:采购订单仍包含错误项目,请输入物料号或帐户设置类。
但是物料号明明已经输入了,这时回到前台,发现前台的物料号用的不是MATNR这种字段,而是EMATN,在POITEM中并不是MATERIAL这个字段接物料号,而是EMATERIAL用来接物料号,修改之后测试通过。
公司间采购维护发货存储地点:
在前台操作时,需要将编码Y032输入①的位置,然后回车后,编码自动跳到②的位置,并在①的位置,自动带出描述。

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


维护的数量自动扩大:

计划行这里要输入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字段中传输的值复制为净价,即在计算过程中使用指定为基准价的条件类型进行设置。 所有其他条件类型都将被删除。
5.源代码
"-----------------------------------------@斌将军--------------------------------------------
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.
lv_posnr = sy-tabix * 10." 此处为与OA传过来的行项目对应,因此不用累加而用sy-tabix
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_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
IMPORTING
exppurchaseorder = lv_ebeln
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
* POADDRDELIVERY =
poschedule = lt_poschedule
poschedulex = lt_poschedulex
poaccount = lt_poaccount
* POACCOUNTPROFITSEGMENT =
poaccountx = lt_poaccountx
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
EXTENSIONIN = LT_EXTENSIONIN
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
potextitem = lt_potextitem
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
. CLEAR:lv_check,lv_message.
lv_check = 'S'.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
CONCATENATE lv_message lt_return-message INTO lv_message.
lv_check = 'E'.
ENDLOOP.
IF lv_check = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
e_return-type = lv_check.
CONCATENATE '订单' lv_ebeln '创建成功' INTO lv_message.
e_return-message = lv_message.
e_return-message_v1 = lv_ebeln. ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
e_return-type = lv_check.
e_return-message = lv_message.
ENDIF.
MODIFY e_return[] FROM e_return TRANSPORTING type id message message_v1 WHERE id = '1'.
CLEAR:e_return.
ENDFUNCTION.
"-----------------------------------------@斌将军--------------------------------------------
定期更文,欢迎关注

ME21N 采购订单批导的更多相关文章
- VA01销售订单批导问题解决
1业务场景 事务代码:VA01创建销售订单,VA02修改销售订单 可以通过BAPI_SALESORDER_CREATEFROMDAT2批量创建 可以通过BAPI_SALESORDER_CHANGE批量 ...
- 创建采购订单批到程序用的BAPI
CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING poheader = poheader poheaderx = poheaderx * POADDRVENDOR = ...
- 采购信息记录批导BAPI
转自:https://www.cnblogs.com/freeandeasy/p/11810272.html作者的话: 可以批导创建及修改信息记录的主数据.而且可以对条件中的时间段及其数量等级中的 ...
- 采购订单me22n 或者me21n增强 (点击保存和回车)
IF_EX_ME_PROCESS_PO_CUST DATA:l_header TYPE mepoheader, l_item TYPE mepoitem. DATA:lt_items TYPE pur ...
- 物料主数据批导bapi
创建物料主数据,根据模板不同批导原材料,半成品,成品.可根据实际需求对字段进行增删. report zmmr_bapi_mm01 no standard page HEADING. type-POOL ...
- MM--发票校验 及基于采购订单的MIRO发票校验过程(
一.介绍发票校验是物料管理(MM)系统的一部分.它提供物料管理部分和财务会计, 成本控制和资产管理部分的连接.物料管理模块的发票校验为以下目的服务:它完成物料采购的全过程 - 物料采购从采购申请开始, ...
- 采购订单限价(包含阶梯价)ME_PROCESS_PO_CUST
为了能管控到钱财的每个环节,公司要求采购订单需要使用物料限价,当有报价低于先前的价格时,在采购订单保存时,更新最低限价 BADI:ME_PROCESS_PO_CUST process~item里做限价 ...
- SAP采购订单屏幕增强
转自<http://blog.csdn.net/heng0757/article/details/8073875> 为采购订单增加一个页标签,在其中放入客户自定义字段, 1. CMOD 增 ...
- 3.21 采购订单导入MDS
3.21.1 业务方案描述 同一企业集团内部的不同法人之间,双方间内部往来业务频繁.受集团财务各自独立核算的要求,买方和卖方间采用买卖方式进行业务运作和财务结算. 对于买方,按照内部商定的协议价格 ...
- 批量创建采购订单 BAPI_PO_CREATE1
*&---------------------------------------------------------------------* *& REPORT ZMM_PO_C ...
随机推荐
- 放弃"Jenkins"的种种理由,期待更好赋能研发的持续交付平台
Jenkins 很酷,但是不完美,有历史局限性造成的问题.本文仅从"如何更好给研发团队赋能的角度",剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告- 不完美的Jenk ...
- 🔥🔥Java开发者的Python快速进修指南:面向对象--高级篇
首先,让我来介绍一下今天的主题.今天我们将讨论封装.反射以及单例模式.除此之外,我们不再深入其他内容.关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符.而对于反 ...
- K8s 多租户方案的挑战与价值
在当今企业环境中,随着业务的快速增长和多样化,服务器和云资源的管理会越来越让人头疼.K8s 虽然很强大,但在处理多个部门或团队的业务部署需求时,如果缺乏有效的多租户支持,在效率和资源管理方面都会不尽如 ...
- 【2016】CloneCD和IsoBuster配合使用以提取VCD中的文件
**笔记记录于:2016-11-24 ** 本文章仅供用于技术研究用途,请勿利用文章内容操作用于违反法律的事情. 起因: 公司老总让我提取下VCD中的文件以备份下,但是把光碟放进DVD光驱中发现只有几 ...
- 为什么许多数字孪生产品开始了GIS融合的尝试?
随着数字孪生技术的发展,越来越多的产品意识到要实现数字孪生的最大价值,需要考虑多个维度的数据,包括空间信息.地理位置.环境条件等.因此,许多数字孪生产品开始了与GIS系统的融合尝试,以进一步提升其功能 ...
- 用CloudDrive将阿里云、天翼云、115挂载为电脑本地硬盘
用CloudDrive将阿里云.天翼云.115挂载为电脑本地硬盘 写在前面 它可以把各大在线网盘,直接变成电脑本地硬盘,俗称"网盘挂载".这在一定程度上,确实能缓解存储紧张问题,瞬 ...
- Object类、String和StringBuffer、Math类、日期处理类
1.Object类 "万物皆对象":(1)从类和对象角度:任何具体事物都是一个对象,. (2)Object类,类似"东西".所有的类都继承了Object类. 使 ...
- 01的token的年度总结
大家好,我是token,一个热爱.NET的普通人,同样我来自湖南衡阳,再次之前我已经遇到非常多的湖南衡阳的老乡,比如李哥. 在这里一年中,我的成长也是非常迅速的,每一年的的每一天,感觉自己的知识点 ...
- Fdfs上传的图片批量删除
介绍: 因为计划利用fdfs上传的图片会有很多,所以在考虑到重复利用的情况下,把半年前的图片删除掉. 1)编写清理图片脚本clear.sh 在/home/data目录下创建 clear.sh脚本 内容 ...
- uniapp-welive仿微信/抖音直播带货|uni-app+vue3+pinia短视频直播商城
基于uniapp+vue3+uv-ui跨端H5+小程序+App短视频+直播带货商城Uniapp-WeLive. uni-welive一款全新基于uniapp+vue3+pinia+vk-uview等技 ...