BAPI_PO_CREATE1

1.报错:客户xx不在工厂xx中

原因:填错了抬头中的 供应商、供应工厂,项目中的供应库存地点

报错:06 218,净价格必须大于0 et price must be greater than 0

原因:

1.没有自动带出净价(维护供应商条件价格),或者带出的采购信息记录价格不大于0

2.多次调用缓存问题,清缓存

**清空缓存

*  perform mepo_refresh(saplmepo).

*  data: mem_optn like csdata-xfeld value '0'.

*  export mem_optn to memory id 'CSIO_MEM_OPTN'.

2.有多个外协消耗组件时报错

Change indicators could not be uniquely determined in material mapping

原因:没有填 pocomponents-item_no

删除自动从bom带出来的外协组件的方法:参考 lg zflg_po_create

pocond-change_id  = 'U'.更新价格,I表示新增价格(I新增价格时先加一行D删除采购信息记录的价格

pocondx-change_id  = 'X'.

3.

ls_poheader-item_intvl   = 'X'. "项目编号间隔

ls_poheaderx-item_intvl   = 'X'. "项目编号间隔

必须传这两个参数,不然行项目不支持指定项目号

4.供货工厂是根据供应商取的,如果供货工厂不对会报错“净价计算错误”

5.Numerical entry is not supported for extrnal item(外部条目标识不支持编号条目),行项目号问题,比如项目号传重复了

6.UB转出单报错:06 215 请输入净价格。

原因:item传了GT_ID IR_ID

7.no_price_from_po  = 'X' 不带用户的价格过来,但是会带采购信息记录

可以删采购信息记录,也可以item-po_price = 2,这样就不会带采购信息记录了,但要注意,如果item里写了采购信息记录(比如先跑了testrun返回进item了),就删不掉了。

注意事项

1.创建po带过来多个重复的价格

原因:配置问题,用户参数 EVO

或 no_price_from_po  = 'X' 不带价格过来

2.如果物料维护了舍入值,则生成的采购订单的数量可能和传入的值不一样

比如舍入值为30的时候,传入100会生成120的订单

3 如果有采购信息记录,会自动带出价格条件,此时如果chang_id = 'I',会在原来的价格条件的基础上再加一条条件

正确的做法应该是,先传一行D,再传一行 I

4 转储采购订单没有库存也可以创建,但是创建交货单就会失败了(可用库存,不是非限制使用库存),可以先用BAPI_MATERIAL_AVAILABILITY检查可用库存

5.物料有多个单位,生成的采购订单单位和传入的单位不一样,并且自动转换了数量。

修改采购信息记录的订单单位之后就可以了。

DEMO

BOE ZSDB010

代码片段

function zmm_01_po_create2 .

*"----------------------------------------------------------------------

*"*"局部接口:

*"  IMPORTING

*"     VALUE(IV_FROM_60_SO) TYPE  XFELD DEFAULT ' '

*"     VALUE(IV_FROM_60_PO) TYPE  XFELD DEFAULT ' '

*"     VALUE(IV_FROM_47_SO) TYPE  XFELD DEFAULT ' '

*"     VALUE(IV_FROM_47_PO) TYPE  XFELD DEFAULT ' '

*"     VALUE(IV_UPDATE_LOG) TYPE  XFELD DEFAULT ' '

*"     VALUE(IV_TEXT) TYPE  CHAR255 OPTIONAL

*"  EXPORTING

*"     VALUE(ES_OUTPUT) TYPE  ZSMM_RET_MES

*"  TABLES

*"      ET_RETURN STRUCTURE  BAPIRET2 OPTIONAL

*"      IT_PO_FILE STRUCTURE  ZSMM_ME21N_FILE

*"      CT_CORDER_LOG STRUCTURE  ZTMM_CORDER_LOG OPTIONAL

*"----------------------------------------------------------------------

data: ls_poheader     type bapimepoheader,

ls_poheaderx    type bapimepoheaderx,

ls_poitem       type bapimepoitem,

lt_poitem       type table of bapimepoitem,

ls_poitemx      type bapimepoitemx,

lt_poitemx      type table of bapimepoitemx,

ls_poschedule   type bapimeposchedule,

lt_poschedule   type table of bapimeposchedule,

ls_poschedulex  type bapimeposchedulx,

lt_poschedulex  type table of bapimeposchedulx,

lt_pocond       type table of bapimepocond,

ls_pocond       type bapimepocond,

lt_pocondx      type table of bapimepocondx,

ls_pocondx      type bapimepocondx,

ls_exppurchaseorder   type ebeln,

lt_corder_log   type table of ztmm_corder_log,

ls_corder_log   type ztmm_corder_log,

ls_header       type zsmm_me21n_file,

lt_header       type table of zsmm_me21n_file,

ls_item         type zsmm_me21n_file,

lt_item         type table of zsmm_me21n_file,

ls_return       type bapiret2,

lt_return       type bapiret2_t,

lv_itemno       type ebelp,

lv_dummy        type string,

lv_value        type p,

lv_tabix        type sy-tabix.

clear: ls_poheader,ls_poheaderx,lv_itemno,ls_exppurchaseorder.

refresh: lt_poitem,lt_poitemx,lt_poschedule, lt_poschedulex,lt_return.

append lines of it_po_file to lt_header.

append lines of it_po_file to lt_item.

*取得采购订单表头

sort lt_header by seqno.

delete adjacent duplicates from lt_header comparing seqno. "此号用来区分行项目是否在同一个采购订单下。

read table lt_header into ls_header index 1.

move-corresponding ls_header to ls_poheader.

* 取得公司代码

if ls_poheader-comp_code is initial.

select single bukrs

into ls_poheader-comp_code

from t001k

where bwkey = ls_header-plant.

endif.

ls_poheaderx-doc_type   = 'X'.

ls_poheaderx-comp_code  = 'X'.

ls_poheaderx-purch_org  = 'X'.

ls_poheaderx-pur_group  = 'X'.

if ls_poheader-suppl_plnt is not initial.

ls_poheaderx-suppl_plnt  = 'X'.

endif.

ls_poheaderx-vendor     = 'X'.

if ls_poheader-ref_1 is not initial.

ls_poheaderx-ref_1     = 'X'.

endif.

if ls_poheader-customer is not initial.

ls_poheaderx-customer     = 'X'.

endif.

*构建采购订单行项目

loop at lt_item into ls_item where seqno = ls_header-seqno.

lv_tabix = sy-tabix.

move-corresponding ls_item to ls_poitem.

lv_itemno = lv_itemno + 10.

ls_poitem-po_item = lv_itemno.

append ls_poitem to lt_poitem.

ls_poitemx-po_item  = lv_itemno.

ls_poitemx-material = 'X'.

ls_poitemx-quantity = 'X'.

ls_poitemx-po_unit = 'X'.

ls_poitemx-plant    = 'X'.

ls_poitemx-stge_loc = 'X'.

if ls_poitem-suppl_stloc is not initial.

ls_poitemx-suppl_stloc = 'X'.

endif.

ls_poitemx-batch    = 'X'.

ls_poitemx-ret_item = 'X'.

*    ls_poitemx-INFO_UPD = 'X'. "去掉更新采购信息记录的勾 chenyl for dengld 24.07.2017 12:07:41

append ls_poitemx to lt_poitemx.

ls_poschedule-po_item = lv_itemno.

ls_poschedule-delivery_date = ls_item-delivery_date.

append ls_poschedule to lt_poschedule.

ls_poschedulex-po_item = lv_itemno.

ls_poschedulex-delivery_date = 'X'.

append ls_poschedulex to lt_poschedulex .

do 2 times.

pocond-itm_number = items-ebelp.

pocond-cond_type = items-kschl.

pocond-cond_value = items-kbetr.

pocond-currency = items-koein.

pocond-cond_p_unt = items-kpein.

pocond-change_id  = 'D'.

if sy-index = 2.

pocond-change_id  = 'I'.

endif.

append pocond. clear pocond.

pocondx-itm_number = items-ebelp.

pocondx-cond_type = 'X'.

pocondx-cond_value = 'X'.

pocondx-currency = 'X'.

pocondx-cond_p_unt = 'X'.

pocondx-change_id  = 'X'.

append pocondx. clear pocondx.

enddo.

ls_item-ebelp = lv_itemno.

modify lt_item from ls_item index lv_tabix

transporting ebelp.

clear: ls_poitem, ls_poitemx,

ls_poschedule, ls_poschedulex.

endloop.

*---------------------------------------------------------------------*

data lt_headtext like table of bapimepotextheader with header line.

*备注进长文本 chenyl for dengld 25.07.2017 18:39:48

lt_headtext-po_item   = '00000'.

lt_headtext-text_id   = 'F01'.

lt_headtext-text_form = '*'.

lt_headtext-text_line = iv_text(132).

append lt_headtext.

lt_headtext-po_item   = '00000'.

lt_headtext-text_id   = 'F01'.

lt_headtext-text_form = '*'.

lt_headtext-text_line = iv_text+132(123).

append lt_headtext.

*---------------------------------------------------------------------*

*创建采购订单

call function 'BAPI_PO_CREATE1'

exporting

poheader         = ls_poheader

poheaderx        = ls_poheaderx

importing

exppurchaseorder = ls_exppurchaseorder

tables

potextheader     = lt_headtext

return           = et_return

poitem           = lt_poitem

poitemx          = lt_poitemx

poschedule       = lt_poschedule

poschedulex      = lt_poschedulex

pocond           = lt_pocond

pocondx          = lt_pocondx.

*如果失败,回滚事务,并输出错误信息.

if ls_exppurchaseorder is initial.

call function 'BAPI_TRANSACTION_ROLLBACK'.

loop at et_return into ls_return where type = 'E' or type = 'A'.

concatenate es_output-ret_text ls_return-message into es_output-ret_text.

endloop.

es_output-ret_id = 'E'.

else.

*如果成功,提交事务,并输出采购订单号.

call function 'BAPI_TRANSACTION_COMMIT'

exporting

wait = 'X'.

es_output-ret_id = 'S'.

es_output-ret_number = ls_exppurchaseorder.

concatenate ls_header-seqno

'号 采购订单'

ls_exppurchaseorder

'创建成功'

into es_output-ret_text.

*更新采购订单号到内标中

ls_header-ebeln = ls_exppurchaseorder.

modify it_po_file from ls_header

transporting ebeln

where seqno = ls_header-seqno.

*更新创建订单日志表

check iv_update_log = 'X'.

if iv_from_60_so = 'X'.

loop at ct_corder_log into ls_corder_log.

lv_tabix = sy-tabix.

ls_corder_log-r_order = ls_exppurchaseorder.

ls_corder_log-r_item = ls_corder_log-i_item.

read table lt_item into ls_item with key

i_order = ls_corder_log-i_order

i_item = ls_corder_log-i_item

ks_client = ls_corder_log-ks_client.

if sy-subrc = 0.

ls_corder_log-r_kunnr = ls_item-vendor.

endif.

ls_corder_log-r_netwr = ls_corder_log-i_netwr.

modify ct_corder_log from ls_corder_log index lv_tabix

transporting r_order r_item r_kunnr r_netwr.

endloop.

elseif iv_from_60_po = 'X'.

loop at lt_item into ls_item.

move-corresponding ls_item to ls_corder_log.

ls_corder_log-matnr = ls_item-material.

ls_corder_log-i_werks = ls_item-plant.

ls_corder_log-i_lgort = ls_item-stge_loc.

ls_corder_log-charg = ls_item-batch.

ls_corder_log-menge = ls_item-quantity.

ls_corder_log-i_order = ls_exppurchaseorder.

ls_corder_log-i_item = ls_item-ebelp.

read table lt_poitem into ls_poitem

with key po_item = ls_item-ebelp.

if sy-subrc = 0.

ls_corder_log-vrkme = ls_poitem-po_unit.

ls_corder_log-retpo = 'X'.

ls_corder_log-i_kunnr = ls_poitem-customer.

ls_corder_log-i_netwr = ls_poitem-net_price.

ls_corder_log-i_waerk = ls_poitem-orderpr_un.

endif.

append ls_corder_log to ct_corder_log.

endloop.

elseif iv_from_47_so = 'X'.

loop at ct_corder_log into ls_corder_log.

lv_tabix = sy-tabix.

ls_corder_log-r_order = ls_exppurchaseorder.

ls_corder_log-r_item = ls_corder_log-i_item.

read table lt_item into ls_item with key

i_order = ls_corder_log-i_order

i_item = ls_corder_log-i_item

ks_client = ls_corder_log-ks_client.

if sy-subrc = 0.

ls_corder_log-r_kunnr = ls_item-vendor.

endif.

ls_corder_log-r_netwr = ls_corder_log-i_netwr.

modify ct_corder_log from ls_corder_log index lv_tabix

transporting r_order r_item r_kunnr r_netwr.

endloop.

elseif iv_from_47_po = 'X'.

loop at lt_item into ls_item.

move-corresponding ls_item to ls_corder_log.

ls_corder_log-matnr = ls_item-material.

ls_corder_log-i_werks = ls_item-plant.

ls_corder_log-i_lgort = ls_item-stge_loc.

ls_corder_log-charg = ls_item-batch.

ls_corder_log-menge = ls_item-quantity.

ls_corder_log-i_order = ls_exppurchaseorder.

ls_corder_log-i_item = ls_item-ebelp.

ls_corder_log-i_kunnr = ls_item-vendor.

read table lt_poitem into ls_poitem

with key po_item = ls_item-ebelp.

if sy-subrc = 0.

ls_corder_log-vrkme = ls_poitem-po_unit.

ls_corder_log-retpo = 'X'.

ls_corder_log-i_netwr = ls_poitem-net_price.

ls_corder_log-i_waerk = ls_poitem-orderpr_un.

endif.

append ls_corder_log to ct_corder_log.

endloop.

endif.

endif.

endfunction.

BAPI_PO_CREATE1 创建采购订单相关推荐

  1. SAP BAPI BAPI_PO_CREATE1创建采购订单

    使用BAPI: BAPI_PO_CREATE1创建采购订单,默认情况下行项目是自动编号的. 代码示例: DATA:lt_poheader LIKE TABLE OF bapimepoheader WI ...

  2. 根据BAPI_PO_CREATE1创建采购订单

    REPORT  z_create_po. DATA:BEGIN OF gt_data OCCURS 0,           bsart TYPE string,"采购凭证类型        ...

  3. SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分?

    SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分? 1, 使用事务代码WA01创建好了一个分配表13. 这个ITEM里的Z_NM_SITEGRP包含了三个门店(NM01/NM02/NM03 ...

  4. 029# Adempiere采购模组-从采购申请创建采购订单

    2019独角兽企业重金招聘Python工程师标准>>> 在Adempiere系统的采购模组中,采购申请可因仓库库存补充而手动建立,也可由系统生产流程中的物料需求计划,在计算生产计划所 ...

  5. SAP收货时自动创建采购订单

        在实际业务中,常常出现到货物料没有订单或订单未批准的现象,按照SAP的标准流程,应该拒绝收货.但在实际业务中,这些物料可能是紧急采购的急件,如不及时处理,将会影响生产计划的安排.对于这种特殊情 ...

  6. SAP License:MM根据收货自动创建采购订单

    在实际业务中,常常出现到货物料没有订单或订单未批准的现象,按照SAP的标准流程,应该拒绝收货.但在实际业务中,这些物料可能是紧急采购的急件,如不及时处理,将会影响生产计划的安排.对于这种特殊情况,其实 ...

  7. SAP 必须参照采购申请创建采购订单的配置方法

    有很多企业要求,采购订单必须参照采购申请来创建,这个配置的方法其实非常简单, 首先要创建一个采购员的功能权限. 后台路径:SPRO->IMG->物料管理->采购->权限管理-& ...

  8. SAP MM——采购业务模块流程 创建采购订单基础流程

    在创建一个采购流程之前,我们首先需要创建物料主数据和供应商主数据,再由两者构成信息记录,这样在创建采购申请或者采购订单时,可以直接关联信息记录获取相关数据,例如自动带出条件记录.税率等信息.不同公司间 ...

  9. 采购申请创建采购订单的时候报错“对于总帐帐户*在公司码*中无直接记帐能被做”处理方法

    问题: 在进行采购申请创建采购订单的时候报错提示如图 查询原因及解决方法: 是因为所使用的会计科目被勾选了自动过账,把自动过账勾选取消掉即可. FS00更改总账科目

  10. oracle 批量下单,3.12批量创建采购订单

    3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或 ...

最新文章

  1. Zabbix监控交换机设置方法
  2. python设计及论文-python能否实现学术论文文本分析的功能?
  3. 【百家稷学】图像识别,模型设计,人脸图像,摄影图像直播回放与资料下载(有三的书直播分享)...
  4. 手把手教你webpack4.x从零开始搭建vue项目
  5. 普通卷积armv7-neon指令集实现—QNNPACK
  6. JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
  7. 猎鹰spacex_我从SpaceX中学到的关于开源的一切
  8. 关闭Windows 2008下面应用程序出错后的提示
  9. Vue数据绑定和响应式原理
  10. FtpWebRequest(转)---关于C/S中文件的上传,下载,获得文件列表
  11. 少走弯路,给3~5年java程序员的唯一一条建议
  12. 9.21 小程序开发培训讲座
  13. 冯诺依曼体系结构及三级缓存
  14. 什么叫同步,什么叫异步?
  15. Centos下安装桌面环境和Flash插件
  16. 苏宁金融红包系统大促海量流量背后的技术支撑
  17. 计算机网络与无线通信系统学习1:计算机通信网概述
  18. Java程序设计基础——简单Java程序
  19. 图解各种数据库数据源(ODBC)配置
  20. mac address 的一些操作

热门文章

  1. Codeforces Round #521 (Div. 3) E. Thematic Contests
  2. 5V转3.3V,你学会了吗?
  3. 企业邮箱如何设置邮件监控
  4. Region Proposal by Guided Anchoring 论文笔记
  5. gentoo linux 分区_开始使用gentoo linux——gentoo安装笔记(上)
  6. VTK:输出将样条拟合到刀具Cutter用法实战
  7. php apm,apm是什么?
  8. Super Jumping! Jumping! Jumping!超级跳!跳!跳!
  9. 2021-07-16思考-资本源于贪婪(与人性抗争)
  10. Zabbix 5.0 配置短信报警