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

这篇具有很好参考价值的文章主要介绍了ABAP 创建、修改、删除内部交货单(VL31N/VL32N)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、干货
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 ekpo
  WHERE 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-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'
  EXPORTING
    vbsk_i      = ls_vbsk
  IMPORTING
    vbsk_e      = es_vbsk
  TABLES
    xvbfs       = lt_vbfs
    xvbls       = lt_vbls
    xkomdlgn    = lt_komdlgn
    xxlips      = lt_lips
    et_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'
  TABLES
    request      = lt_request[]
    createditems = lt_created
 "  EXTENSIONIN  = LT_EXTENSION
    return       = 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'
  EXPORTING
    header_data    = ls_head
    header_control = ls_headx
    delivery       = ls_head-deliv_numb
  TABLES
    item_data      = lt_dn_item
    item_control   = lt_dn_itemx
    return         = 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'
  EXPORTING
    header_data    = ls_head
    header_control = ls_headx
    delivery       = ls_head-deliv_numb
  TABLES
    return         = lt_return.

注意点:
ls_komdlgn-kzazu = ‘X’. "这个是订单组合标识,生成一个内部交货单,另外交货日期要保持一致;
如果去掉这个标识,多个采购订单行,会自动拆分为多个交货单。

关于 .BBP_INB_DELIVERY_CREATE 的bug ,用它产生的单号不能冲销,需要做个增强,才能冲销掉:进入SE19 填写 LE_SHP_DELIVERY_PROC 在 CHANGE_DELIVERY_HEADER 中写一句 CLEAR CS_LIKP-VLSTK.
如图所示:
ABAP 创建、修改、删除内部交货单(VL31N/VL32N)
鸣谢,杨顾问的提醒和提供的解决思路

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

好了,分享使我快乐,我是寒武青锋。
ABAP 创建、修改、删除内部交货单(VL31N/VL32N)文章来源地址https://www.toymoban.com/news/detail-420517.html

到了这里,关于ABAP 创建、修改、删除内部交货单(VL31N/VL32N)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【⑮MySQL | 视图】概述 | 创建 | 查看 | 更新 | 修改 | 删除

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL视图概述 | 创建 | 查看 | 更新 | 修改 | 删除的分享 ✨ 1.视图概述 1.1 为什么使用视图? 视图一方面可以帮我们使用表的一部分而不是整个表,另一方面也可以针对不同的用户顶置不同的查询视图。比如,针对公司的销售人员,

    2024年02月11日
    浏览(44)
  • 【MySQL视图】视图的概念、创建、查看、删除和修改

    目录   一、什么是视图   二、创建视图   1.在单表上创建视图   2.在多表上创建视图    三、查看视图    1.使用DESCRIBE | DESC语句查看视图基本信息   2.使用SHOW TABLES语句查看视图基本信息   3.使用 show create view/table 语句查看视图创建信息   四、更新视图数据    五、修改视

    2024年02月08日
    浏览(86)
  • 5.elasticsearch映射操作(创建|修改|删除)及字段类型

    1.本文介绍了 elasticsearch 映射的操作方式,包括映射创建,修改,删除; 2.映射定义: 映射是定义文档及其包含的字段如何存储和索引的过程 。 例如,使用映射来定义: ① 哪些字符串字段应该被作为全文检索字段; ② 哪些字段包含 数字,日期,及地理位置; ③ 日期格式

    2023年04月12日
    浏览(65)
  • Docker概念|容器|镜像|命令详细(创建,删除,修改,添加)

    Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在Linux容器里运行应用的开源工具 是一种轻量级的”虚拟机“ Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的,可移植的,自给自足的容器。 docker本质就是宿主机的一个进程,

    2023年04月19日
    浏览(46)
  • 揭秘Linux软链接:如何轻松创建、删除和修改

    在Linux中,软链接(Symbolic Link)是一种特殊的文件类型,它是一个指向另一个文件或目录的指针。软链接允许用户创建一个文件或目录的镜像,在文件系统中提供了对目标文件或目录的引用。用户可以通过软链接引用另一个文件或目录,实现在不同位置共享文件或目录的效果

    2024年02月02日
    浏览(56)
  • 【MySQL】MySQL表的操作-创建查看删除和修改

    语法: 说明: field 表示列名 datatype 表示列的类型 set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 说明: 不同的存储引擎,创建表的文件不一样。 users 表存储引擎是 MyISAM ,在数据目

    2024年02月03日
    浏览(72)
  • 利用SQL语句创建、修改、删除、查看与使用数据库

    【技术路线图】 1、连接Mysql服务:mysql -u root -p 2、创建数据库:create database teacherdb; 注意:数据库的名字一旦创建后不可更改。 3、查看刚刚创建好的数据库:show databses; 4、删除数据库并查看是否删除掉:drop database teacherdb; 5、输出创建数据库时的SQL语句信息:show create dat

    2023年04月21日
    浏览(88)
  • Linux 软链接的创建、修改和删除方法及注意事项

    在 Linux 中,可以使用  ln -s [源文件] [软链接文件]  的命令来创建软链接。 首先,打开终端并进入目标路径,可以使用  pwd  命令查看当前路径。 使用  mkdir  命令创建一个名为  test  的目录,并使用  touch  命令在该目录下创建两个测试文件,分别为  test.txt  和  val.tx

    2024年02月12日
    浏览(48)
  • 【MySQL触发器】触发器的使用、创建、修改及删除

    一、什么是触发器 二、创建触发器 ①创建一个insert事件触发器 ②创建一个delete 事件触发器  三、触发器包含多条执行语句 四、查看触发器  ①SHOW TRIGGERS语句查看触发器 ②查看系统表triggers实现查看触发器   五、触发器的删除       当我们对一个表进行数据操作时,需

    2023年04月08日
    浏览(57)
  • 【⑯MySQL | 存储过程与函数】概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL存储过程与函数概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议的分享 ✨ MySql从5.0版本开始支持存储过程和函数,存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要

    2024年02月10日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包