一、干货
VL31N创建的BAPI:
1.GN_DELIVERY_CREATE 通用交货单使用的bapi,推荐使用
2.BAPI_DELIVERYPROCESSING_EXEC 简单,但是字段比较少
3.BBP_INB_DELIVERY_CREATE 听说有bug,我就没有使用这个了

VL32N修改/删除BAPI:
BAPI_INB_DELIVERY_CHANGE 使用这个bapi

二、代码实例
根据采购订单创建内部交货单,推荐使用这个bapi

*"通用函数,创建交货单,但是它返回的结果没有行
DATA: ls_vbsk     LIKE  vbsk,es_vbsk     LIKE  vbsk,lt_spe_vbfs TYPE TABLE OF  /spe/vbfs,ls_spe_vbfs TYPE /spe/vbfs,lt_komdlgn  TYPE TABLE OF komdlgn,ls_komdlgn  TYPE komdlgn,lt_vbfs     TYPE TABLE OF vbfs,lt_vbls     TYPE TABLE OF vbls,lt_lips     TYPE TABLE OF lips.CLEAR:ls_vbsk,lt_spe_vbfs,ls_spe_vbfs,lt_komdlgn,ls_komdlgn,lt_vbfs,lt_vbls.SELECT SINGLE *FROM ekpoWHERE ekpo~ebeln = '4500001299' AND ekpo~ebelp = '000020'INTO @DATA(gs_inbound).ls_komdlgn-lfart        = 'EL'.
ls_komdlgn-vgtyp        = 'V'.
ls_komdlgn-kzazu        = 'X'.
ls_komdlgn-lfdat        =  '20230417'."交货时间
ls_komdlgn-wadat        = '20230417' ."发货时间ls_komdlgn-vgbel        = gs_inbound-ebeln.
ls_komdlgn-vgpos        = gs_inbound-ebelp.
ls_komdlgn-lifnr        = '0000100235'."GS_INBOUND-LIFNR."供应商
ls_komdlgn-lfimg        = '1'."GS_INBOUND-LFIMG."数量
ls_komdlgn-matnr        = gs_inbound-matnr.
ls_komdlgn-werks        = gs_inbound-werks.
ls_komdlgn-lgort        = gs_inbound-lgort.ls_komdlgn-vrkme        = gs_inbound-meins.
ls_komdlgn-meins        = gs_inbound-meins.
ls_komdlgn-lifex        = gs_inbound-ebeln.
ls_komdlgn-lifexpos     = gs_inbound-ebelp.
ls_komdlgn-lichn        =  '55555'. "供应商批次
ls_komdlgn-hsdat        =  '20230416' ."生产日期APPEND ls_komdlgn TO lt_komdlgn.ls_vbsk-mandt = sy-mandt.
ls_vbsk-ernam = sy-uname.
ls_vbsk-erdat = sy-datum.
ls_vbsk-uzeit = sy-uzeit.
ls_vbsk-smart = 'L'.CALL FUNCTION 'GN_DELIVERY_CREATE'EXPORTINGvbsk_i      = ls_vbskIMPORTINGvbsk_e      = es_vbskTABLESxvbfs       = lt_vbfsxvbls       = lt_vblsxkomdlgn    = lt_komdlgnxxlips      = lt_lipset_spe_vbfs = lt_spe_vbfs.LOOP AT lt_spe_vbfs  INTO ls_spe_vbfs WHERE msgty CA  'EAX'.ENDLOOP.
IF sy-subrc = 0. "创建失败了ROLLBACK WORK.
ELSE.COMMIT WORK.ENDIF.

第二种创建内部交货单,这种简单快捷,但是字段少。

DATA: lt_request TYPE TABLE OF bapideliciousrequest .
DATA:ls_request  TYPE bapideliciousrequest .
DATA: lt_created TYPE TABLE OF bapideliciouscreateditems .
DATA: lt_return  TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.ls_request-id = '1'.
ls_request-document_numb = '4500001299'.
ls_request-document_item = '000020'.
ls_request-document_type = 'B'.
ls_request-quantity_base__uom = '2.000'.
ls_request-delivery_date = sy-datum."交货日期
"LS_REQUEST-DELIVERY_TIME = ''.
APPEND ls_request TO lt_request.CHECK lt_request[] IS NOT INITIAL.CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'TABLESrequest      = lt_request[]createditems = lt_created"  EXTENSIONIN  = LT_EXTENSIONreturn       = lt_return.IF lt_return IS INITIAL."就是成功了READ TABLE lt_created INTO DATA(ls_created) INDEX 1.COMMIT WORK.
ELSE."失败了LOOP AT lt_return INTO DATA(ls_return).ENDLOOP.
ENDIF.

修改内部交货单数量,批次之类的,但是有些字段修改不到。

DATA:ls_head     TYPE bapiibdlvhdrchg,ls_headx    TYPE bapiibdlvhdrctrlchg,ls_del      TYPE bapiibdlvhdrchg-deliv_numb,ls_dn_item  TYPE bapiibdlvitemchg,lt_dn_item  TYPE TABLE OF bapiibdlvitemchg,ls_dn_itemx TYPE bapiibdlvitemctrlchg,lt_dn_itemx TYPE TABLE OF bapiibdlvitemctrlchg,lt_return   TYPE TABLE OF bapiret2.CLEAR:ls_head ,ls_headx,ls_del,lt_dn_item,lt_dn_itemx,lt_return.
DATA:us_lips TYPE lips.
us_lips-vbeln =  '0180000460'.
SELECT SINGLE * FROM lips WHERE vbeln =  '0180000460' AND posnr = '000010'  INTO @DATA(ls_lips).
"抬头
ls_head-deliv_numb = '0180000460'.
ls_headx-deliv_numb = '0180000460'."行项目
ls_dn_item-deliv_numb = '0180000460'.
ls_dn_item-deliv_item = '000010'.
ls_dn_item-dlv_qty = '1'. "原交货单新数量= 原交货单老数量 - 该行拆分数量
ls_dn_item-sales_unit = ls_lips-vrkme."单位SELECT SINGLE umrez umren
INTO (ls_dn_item-fact_unit_nom,ls_dn_item-fact_unit_denom)
FROM marm
WHERE matnr = ls_lips-matnr "销售单位一定要先在主数据维护
AND meinh = ls_dn_item-sales_unit.APPEND ls_dn_item TO lt_dn_item.ls_dn_itemx-deliv_numb = '0180000460'.
ls_dn_itemx-deliv_item =  '000010'.
ls_dn_itemx-chg_delqty = 'X'."修改交货数量
APPEND ls_dn_itemx TO lt_dn_itemx.CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'EXPORTINGheader_data    = ls_headheader_control = ls_headxdelivery       = ls_head-deliv_numbTABLESitem_data      = lt_dn_itemitem_control   = lt_dn_itemxreturn         = lt_return.IF sy-subrc = 0.COMMIT WORK AND WAIT.
ENDIF.

删除整单内部交货单,行项目也可删除,去item里面打上删除标记

ls_head-deliv_numb =   '0180000460'.
ls_headx-deliv_numb =  '0180000460'.
ls_headx-dlv_del  = 'X'. "整单删除CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'EXPORTINGheader_data    = ls_headheader_control = ls_headxdelivery       = ls_head-deliv_numbTABLESreturn         = lt_return.

做些资源总结,方便以后使用,把上面具体的单据改成你的测试数据,就可以使用运行了。

好了,分享使我快乐,我是寒武青锋。

ABAP 创建、修改、删除内部交货单(VL31N/VL32N)相关推荐

  1. mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除

    [数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...

  2. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言库和表的管理一:库的管理:创建/修改/删除二:表的管理:创建/修改/删除创建: CREATE DATABASE [IF NOT EXISTS] 库名;修改: al ...

  3. Mysql创建修改删除-表

    创建表之前要链接到库  例如  库名为 student use student; 连接结束可以查看此库中所有表 show tables; 创建表 create table student(id int ...

  4. ElasticSearch.net NEST批量创建修改删除索引完整示例

    本示例采用Elasticsearch+Nest 网上查了很多资料,发现用C#调用Elasticsearch搜索引擎的功能代码很分散,功能不完整,多半是非常简单的操作,没有成型的应用示例.比如新增或修改 ...

  5. ORACLE sequence各参数及创建修改删除使用详解示例

    ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,可以用sequence序列实现. CREATE SEQUENCE语句及参数介绍: 详见官方文档:http://docs.oracle ...

  6. mysql怎么删除表中字段的数据库表_Mysql 数据库 表 字段的创建 修改 删除

    MYSQL基础上机练习题(一) 数据库.表.字段的创建.修改.删除 一.实验目的: 创建.修改.删除数据库 创建.修改.删除表 创建.修改.删除字段 二.内容: 创建一个用于企业管理的员工管理数据库, ...

  7. 三天学会Mysql之第(三)天:创建修改删除

    今天是本系列文章最后一篇,内容较简单,在本系列完成之后,会更新一些关于sql的练习题,大概几百道不定时更新,感谢观看 创建表 创建表可以使用sql的create table语句来进行操作,也可以使用可 ...

  8. windows卸载qt_在Qt中,如何使用QSettings创建/修改/删除Windows注册表项/值?

    我想让我的Qt应用程序访问Windows注册表. 我做了一些研究,认为QSettings可能是要走的路. 假设我要将密钥/值放在这里:" HKEY_LOCAL_MACHINE SOFTWAR ...

  9. Linux 分区管理与swqp与逻辑卷创建修改删除

    block 块设备 : 代表: 磁盘 char 字符设备 : 代表: 键盘 cat /sys/block/sda/queue/rotational : 结果 :1 (机械硬盘) 0(固态硬盘) mkn ...

最新文章

  1. python 面板数据分析_科学网—Python中的结构化数据分析利器-Pandas简介 - 郑俊娟的博文...
  2. mysql more_mysql中哪种日志不能直接cat或more
  3. 数组的partition调整
  4. Java常用类之String类练习
  5. 小猿圈Java学习心得之Java程序员能力提升在哪
  6. Python中判断字符是否为字母、数字、字母和数字组合,验证回文串(LeetCode125)
  7. Javascript 中的变量作用域问题
  8. Android提高篇内容整理
  9. FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
  10. 自治系统中单个路由表的构造
  11. 使用 Repeater方式和完全静态页面使用AJAX读取和提交数据
  12. C++ 头文件包含顺序
  13. 职称计算机和英语有效性,2015职称计算机考试突破小诀窍
  14. 【转】数据挖掘从入门到进阶
  15. matlab学习---矩阵求最大值,赋值
  16. 用c语言实现BF算法
  17. react 控制台 Maximum call stack size exceeded 如何解决
  18. 世界树服务器bug位置,四叶草剧场世界树bug怎么获得 世界树bug神器获取位置图文详解...
  19. 拉斯姆森羽毛球教学视频11-27(文字版配图)
  20. BI案例:BI在连锁零售业应用(ZT)【转】

热门文章

  1. 在WinXP镜像中手工集成sata驱动。
  2. 小学生C++趣味编程 上机作业 每日一练 第7单元 函数
  3. flv地址解析下载方法归纳总结
  4. 总结内存(RAM或ROM)和FLASH存储的真正区别
  5. 深度学习之自编码器(5)VAE图片生成实战
  6. 金山毒霸:猫癣病毒“服务器”现身广东
  7. [2011-04-30]返现网排行榜
  8. Simulink嵌入式自动代码DSP F28335(2)——SCI通信
  9. mysql如何加个字段_mysql如何添加字段 | mysql添加字段
  10. 第一个C跨平台工具whoport