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

news2024/11/26 2:53:11

一、干货
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-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'
  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.

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

好了,分享使我快乐,我是寒武青锋。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日学术速递4.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Deep RL at Scale: Sorting Waste in Office Buildings with a Fleet of Mobile Manipulators 标题:大规模深度强化学习:使用移动机械手对办公楼中的垃圾进行…

VS2022编译libui库

libui是一个 C 中简单且可移植(但并非不灵活)的 GUI 库,它使用每个平台原生的GUI技术进行绘制。 官网地址:链接 本文将使用VS2022编译libui库,操作系统为Windows10。 1. 下载源代码 首先在官网下载源代码,由于此代码不依赖第三库,故只需下载源代码即可进行编译。 我下…

R730服务器环境搭建(centos7、lanproxy、docker、k8s)

文章目录前言一、centos7安装1.制作u盘启动盘2.开始装系统:二、环境安装(lanproxy、docker、k8s)1.lanproxy安装2.docker安装(如果通过k8sOfflineSetup安装k8s可以跳过这一步,因为会自动安装docker)3.安装k…

安装 KeyShot 流程

| 安装 KeyShot 流程 KeyShot 安装程序将指导您完成安装过程。 在 Windows 上,安装过程会要求您考虑以下事项终用户协议 为使用计算机的所有人或仅为当前用户安装 KeyShot 安装文件夹的位置 资源文件夹的位置 ——资源文件夹包含许多可以与 KeyShot 一起使用的纹…

NSSCTF doublegame题解

运行一下,是一个贪吃蛇游戏 先玩一玩,蛇的移动速度太快了,玩不了 查壳 64位文件,无壳 进入IDA分析 发现这个EXE文件是开了程序基址随机化,就是每次用IDA打开指令的地址不一样 我们要想使用x64dbg和IDA的时候&#…

Docker的基本操作

文章目录一、 Docker的基本操作1.1 镜像1.1.1 介绍1.1.2 镜像操作1.2 容器1.2.1 介绍1.2.2 容器操作1.3 数据卷1.3 介绍1.3.2 数据卷操作一、 Docker的基本操作 1.1 镜像 1.1.1 介绍 在 Docker 中,镜像(Image)是一种轻量级、可移植的、可扩…

营销平台一站式集成 高效实现自动化

市面上广告投放渠道渠道那么多,图文、动图、短视频等广告形式也越来越多,许多企业都会有这些疑问: 「腾讯广告、百度营销、巨量引擎哪个广告渠道的客户适合我们公司?」 「这么多广告渠道,哪家的点击率、转化率比较高…

1.Antlr4-简介入门

1.简介: ANTLR v4是一款功能强大的语法分析器生成器,可以用来读取、处理、执行和转换结构化文本或二进制文件。它被广泛应用于学术界和工业界构建各种语言、工具和框架。 2 关键字: import, fragment, lexer, parser, grammar, returns, locals, throw…

运维——记一次接口超时的问题与解决方法(HttpException: Read timed out)

前言:近期,一个线上的项目,请求出现了大量接口超时的问题,找了几个小时原因,最终发现是因为数据库服务器的磁盘满了,在此记录一下寻找的过程以及发现的问题,以备后续参考。 环境: 项目服务器(CentOS 64-bit 7.9) OpenJDK 1.8.0_272 数据库服务器(CentO…

打怪升级之FPGA组成原理(LE部分)

FPGA芯片逻辑单元的原理 不论你使用哪一款FPGA芯片,其核心可编程逻辑单元都是从一段内存种按顺序读取执行并执行的过程。具体来说,FOGA芯片内部包括可编程逻辑块(LAB)、可配置输入输出单元(IOE)、时钟管理模块、嵌入式RAM(BRAN,在Cyclone IV…

【堆的使用】【dfs构建数】二叉树遍历

二叉树遍历方法一:方法二:利用堆的性质原题链接 方法一: 利用dfs构建树 因为这个前序遍历给了我们空的叶节点 所以我们可以只根据叶节点 构建树 abc##de#g##f### 构建图如下 我们根据前序 abc##de#g##f### 发现 dfs左子树 和 右子树 当…

mac系统下使用clion调试redis源码

获取源代码 有两种方式,第一种是从官网下载 Redis 源码压缩包,如图 1-1 所示。 图1-1 将压缩包解压得到一个文件夹。 第二种方式,通过 git clone 获取源码。 从 Github 上,使用 git clone https://github.com/redis/redis.git…

第1章-JVM与Java体系结构

1、本系列博客,主要是面向Java8的虚拟机。如有特殊说明,会进行标注。 2、本系列博客主要参考尚硅谷的JVM视频教程,整理不易,所以图片打上了一些水印,还请读者见谅。后续可能会加上一些补充的东西。 3、尚硅谷的有些视频…

业务转包?行为不可控?企业外包如何保护数据安全?

出于人力、设备、开发成本等各种因素考虑,企业会把一部分业务外包出去,比如AI数据标注外包、IT外包、银行部分业务外包等。同时,随着企业不断向外包业务转移,保护数据安全和隐私已成为企业最为关注的问题之一。 来自国外的一份报告…

1.16 从0开始学习Unity游戏开发--人物控制

上一篇我们简单的做了一个玩家不动的情况下,如何控制准心来射击子弹,但是显然正常的游戏需要移动玩家本体,所以本篇我们需要补全这部分玩法所需的功能。 人物移动 在我们之前的篇章里面,讲解了如何通过物理引擎来实现物体的物理…

(学习日记)2023.4.11

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

360虚拟数字展厅vr全景展示实现高度开放空间的深度体验

随着VR虚拟现实技术的不断发展和普及,线上VR全景虚拟展厅逐渐成为了各行各业的展示和推广产品的重要手段之一。相比于传统的展览方式,线上VR全景虚拟展厅打破了许多传统展览的局限性 传统局限性: 1、重体验过于依赖线下,难以实现转…

CloudCompare如何使用基础功能?

文章目录0.引言1.File2.Edit3.Tools4.Display5.Plugins6.3D Views0.引言 CloudCompare是一款优秀的开源点云处理软件,在研究点云的过程中,会用到其中一些点云处理功能。为快速熟悉软件的基础功能,本文介绍相应的功能按键的作用。    1.Fil…

Nginx专题-基于多网卡的主机配置

文章目录Nginx 基于多网卡的主机实现一、虚拟机前置环境准备ifcfg-ens32配置文件的内容参考ifcfg-ens33配置文件的内容二、案例演示修改nginx.conf配置文件解决中文乱码Nginx 基于多网卡的主机实现 一、虚拟机前置环境准备 点击虚拟机右下角的 红色标框按钮,然后右键…

【GC垃圾回收算法】让内存垃圾无处藏身

文章目录概述垃圾对象的判定引用计数可达性分析回收垃圾标记清除复制算法标记整理分代回收概述 垃圾回收就是帮我们把不用的内存垃圾自动释放掉 什么是垃圾呢?就是指不再使用的垃圾 如果不进行垃圾回收就会导致一个严重的问题,内存泄漏 内存泄漏&#x…