news 2026/6/10 1:09:54

SAP ABAP拆分交货单数量、批次、存储地点 并过账

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAP ABAP拆分交货单数量、批次、存储地点 并过账

案例:将交货单数量拆分到不同批次,一个批次下数量为1,并进行过账。

发布时间:20251218

  1. 主要逻辑分为两个部分:
    拆分和过账,拆分批次时必须写入存储位置,否则过账可能会报错(eg:存储地点不是为交货项目900001确定的)。

  2. 直接上源码,复制可用:

REPORT zmm_rpt_538_wu5. TABLES:lips. TYPES: BEGIN OF ty_charg, charg TYPE charg, END OF ty_charg, tt_charg TYPE STANDARD TABLE OF ty_charg. DATA:lt_charg TYPE tt_charg, lt_item_data1 LIKE TABLE OF bapiobdlvitemchg. PARAMETERS:p_vbeln TYPE vbeln. SELECT-OPTIONS:r_charg FOR lips-charg NO INTERVALS. START-OF-SELECTION. LOOP AT r_charg ASSIGNING FIELD-SYMBOL(<lfs_charg>). APPEND VALUE #( charg = <lfs_charg>-low ) TO lt_charg. ENDLOOP. PERFORM frm_main USING p_vbeln lt_charg. FORM frm_main USING pv_vbeln TYPE vbeln pt_charg TYPE tt_charg. DATA:lv_lgort TYPE lgort_d VALUE '9008', lv_err TYPE char1. "拆分批次,数量,写入库存地点 PERFORM frm_split_batch USING pv_vbeln lv_lgort pt_charg CHANGING lv_err . "拆分失败不继续过账 CHECK lv_err <> 'E'. "交货过账 PERFORM frm_goods_move USING pv_vbeln. ENDFORM. FORM frm_split_batch USING pv_vbeln TYPE vbeln pv_lgort TYPE lgort_d pt_charg TYPE tt_charg CHANGING pv_err TYPE char1. DATA: ls_lips TYPE lips, ls_header_data LIKE bapiobdlvhdrchg, lt_item_control LIKE TABLE OF bapiobdlvitemctrlchg, ls_item_control LIKE bapiobdlvitemctrlchg, ls_header_control LIKE bapiobdlvhdrctrlchg, ls_item_data LIKE bapiobdlvitemchg, lt_item_data LIKE TABLE OF bapiobdlvitemchg, ls_item_spl LIKE /spe/bapiobdlvitemchg, lt_item_spl LIKE TABLE OF /spe/bapiobdlvitemchg, lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE. DATA: lv_newitem TYPE posnr_vl, lv_msg TYPE string. DATA:lv_posnr TYPE posnr VALUE '000010'. "本例只对一行项目进行了拆分演示(一个批次数量为1),如有多行需要拆分,可循环所有行项目一行一行单独进行拆分 SELECT SINGLE * FROM lips WHERE vbeln = @pv_vbeln AND posnr = '000010' INTO @ls_lips. IF lines( pt_charg ) <> ls_lips-lfimg. pv_err = 'E'. MESSAGE '批次号数量与带拆分数不一致' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. lv_newitem = '900000'. "Header ls_header_data-deliv_numb = pv_vbeln. ls_header_control-deliv_numb = pv_vbeln. "Set Mofify flag CLEAR ls_item_control. ls_item_control-deliv_numb = pv_vbeln. "被拆分交货单号 ls_item_control-deliv_item = lv_posnr. "被拆分交货单行项目号 ls_item_control-chg_delqty = 'X'. "数量修改标志 APPEND ls_item_control TO lt_item_control. ls_item_data-deliv_numb = ls_lips-vbeln. "交货单号 ls_item_data-deliv_item = ls_lips-posnr. "交货单行项目号 ls_item_data-sales_unit = ls_lips-vrkme. "销售单位 ls_item_data-sales_unit_iso = ls_lips-meins. "基本单位 ls_item_data-fact_unit_nom = ls_lips-umvkz. "销售数量转换成SKU的分子(因子) ls_item_data-fact_unit_denom = ls_lips-umvkn. "销售数量转换为 SKU 的值(分母) IF strlen( ls_lips-matnr ) <= 18. ls_item_data-material = ls_lips-matnr. "物料号 ELSE. ls_item_data-material_external = ls_lips-matnr. ls_item_data-material_long = ls_lips-matnr. ENDIF. APPEND ls_item_data TO lt_item_data. APPEND ls_item_data TO lt_item_data1. CLEAR: ls_item_spl. ls_item_spl-deliv_numb = ls_lips-vbeln. ls_item_spl-deliv_item = ls_lips-posnr. ls_item_spl-stge_loc = pv_lgort. "库存地点 APPEND ls_item_spl TO lt_item_spl. LOOP AT pt_charg ASSIGNING FIELD-SYMBOL(<lfs_charg>). CLEAR: ls_item_data. lv_newitem = lv_newitem + 1. ls_item_data-deliv_numb = pv_vbeln. "交货单号 ls_item_data-deliv_item = lv_newitem. "拆分后的新行项目号 IF strlen( ls_lips-matnr ) <= 18. ls_item_data-material = ls_lips-matnr. "物料号 ELSE. ls_item_data-material_external = ls_lips-matnr. ls_item_data-material_long = ls_lips-matnr. ENDIF. ls_item_data-hieraritem = lv_posnr. "上级行项目/被拆分的行项目 ls_item_data-batch = <lfs_charg>-charg. "新批次号 ls_item_data-dlv_qty = 1. "新Item销售单位数量都为1 ls_item_data-sales_unit = ls_lips-vrkme. "新Item销售单位 ls_item_data-sales_unit_iso = ls_lips-meins. "新Item基本单位 ls_item_data-fact_unit_nom = ls_lips-umvkz. "销售数量转换成SKU的分子(因子) ls_item_data-fact_unit_denom = ls_lips-umvkn. "销售数量转换为 SKU 的值(分母) ls_item_data-usehieritm = '1'. "子项标记 APPEND ls_item_data TO lt_item_data. APPEND ls_item_data TO lt_item_data1. CLEAR: ls_item_spl. ls_item_spl-deliv_numb = ls_lips-vbeln. ls_item_spl-deliv_item = lv_newitem. ls_item_spl-stge_loc = pv_lgort. "库存地点 APPEND ls_item_spl TO lt_item_spl. ENDLOOP. CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING header_data = ls_header_data header_control = ls_header_control delivery = p_vbeln TABLES item_data = lt_item_data item_data_spl = lt_item_spl item_control = lt_item_control return = lt_return. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<lfs_return>) WHERE type CA 'EAX'. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = <lfs_return>-id msgnr = <lfs_return>-number msgv1 = <lfs_return>-message_v1 msgv2 = <lfs_return>-message_v2 msgv3 = <lfs_return>-message_v3 msgv4 = <lfs_return>-message_v4 IMPORTING message_text_output = lv_msg. MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDLOOP. pv_err = 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. ENDFORM. FORM frm_goods_move USING pv_vbeln TYPE vbeln. DATA: l_vbkok TYPE vbkok, ls_vbpok TYPE vbpok, lt_vbpok TYPE STANDARD TABLE OF vbpok, lt_prott TYPE STANDARD TABLE OF prott, lv_message TYPE string. "获取交货单信息 SELECT * INTO TABLE @DATA(lt_new_lips) FROM lips WHERE vbeln EQ @pv_vbeln. SORT lt_new_lips BY posnr. l_vbkok-vbeln_vl = pv_vbeln. "<-- fill this field with your delivery number l_vbkok-wabuc = 'X'. LOOP AT lt_new_lips INTO DATA(ls_new_lips) . ls_vbpok-vbeln_vl = ls_new_lips-vbeln. ls_vbpok-posnr_vl = ls_new_lips-posnr. ls_vbpok-vbeln = ls_new_lips-vgbel. ls_vbpok-posnn = ls_new_lips-vgpos. ls_vbpok-pikmg = ls_new_lips-lfimg. APPEND ls_vbpok TO lt_vbpok. ENDLOOP . "交货过账 CALL FUNCTION 'WS_DELIVERY_UPDATE' EXPORTING vbkok_wa = l_vbkok synchron = 'X' no_messages_update = ' ' update_picking = 'X' commit = 'X' delivery = pv_vbeln nicht_sperren = 'X' TABLES vbpok_tab = lt_vbpok prot = lt_prott EXCEPTIONS ef_error_any_0 = 1 ef_error_in_item_deletion_0 = 2 ef_error_in_pod_update_0 = 3 ef_error_in_interface_0 = 4 ef_error_in_goods_issue_0 = 5 ef_error_in_final_check_0 = 6 ef_error_partner_update = 7 ef_error_sernr_update = 8 error_message = 9 OTHERS = 10. IF sy-subrc = 0 . LOOP AT lt_prott ASSIGNING FIELD-SYMBOL(<lfs_prott>) WHERE msgty CA 'EAX'.. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = <lfs_prott>-msgid msgnr = <lfs_prott>-msgno msgv1 = <lfs_prott>-msgv1 msgv2 = <lfs_prott>-msgv2 msgv3 = <lfs_prott>-msgv3 msgv4 = <lfs_prott>-msgv4 IMPORTING message_text_output = lv_message. ENDLOOP. ELSE. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = sy-msgid msgnr = sy-msgno msgv1 = sy-msgv1 msgv2 = sy-msgv2 msgv3 = sy-msgv3 msgv4 = sy-msgv4 IMPORTING message_text_output = lv_message. ENDIF . MESSAGE lv_message TYPE 'S' DISPLAY LIKE 'E'. ENDFORM.
  1. 看一下执行效果:
    选择画面输入交货单号和批次号

    执行后,查看交货单,可以看到,拆分并过账成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:03:48

华为HCIA笔记——第十九天

SNMP、SDN及NFV 本章内容主要讲述了网络管理协议SNMP、SDN、NFV技术的概述和基本原理 SNMP、SDN及NFV 一、SNMP协议 1.1 SNMP协议概述 1.2 SNMP基本原理 SNMP管理模型 SNMPv1 SNMPv2c SNMPv3 二、SDN概述 2.1 SDN起缘 2.2 OpenFlow基本概念 Flow Table简介 转发方式比较 SDN网…

作者头像 李华
网站建设 2026/6/10 15:02:09

2025.12.18代码分析

1.1题目1.2代码#include<stdio.h> long long ways(int n){ long long d[n1]; d[0]1; d[1]1; for(int i2;i<n;i){d[i]d[i-1]d[i-2]; } return d[n]; }int main() {int t,i;scanf("%d",&t);int a[t],b[t];for(i0;i<t;i){scanf("%d %d",&…

作者头像 李华
网站建设 2026/6/9 22:21:24

Jmeter 命令启动-动态参数化

Jmeter命令行参数 1、在Linux中&#xff0c;使用非GUI的方式执行Jmeter。若需更改参数&#xff0c;必须先编辑jmx文件&#xff0c;找到对应变量进行修改&#xff0c;比较麻烦。 因此&#xff0c;可以参数化一些常用的变量&#xff0c;直接在Jmeter命令行进行设置 2、参数 -J…

作者头像 李华
网站建设 2026/6/9 19:58:17

从基础到多模态:Llama-Index RAG 七大企业级落地场景实战

七大场景 企业级RAG检索实战&#xff08;附源码&#xff09; RAG 落地生产环境&#xff0c;如何解决 “检索准确性”&#xff08;事实一致性/语境完整性/领域术语召回&#xff09;和 “多模态解析”&#xff08;PDF 图表、图片甚至视频&#xff09;两大难题&#xff1f; 本文通…

作者头像 李华
网站建设 2026/6/10 15:06:21

光伏并网系统的仿真就像搭积木,每个模块看似独立却又环环相扣。今天咱们直接上手拆解这个光伏三相并网Simulink模型,顺便聊聊那些藏在模块背后的“骚操作

光伏三相并网Simulink仿真模型&#xff08;光伏并网仿真模型&#xff09; 电路包括五个主要模块&#xff1a;PV光伏阵列Boost DC/DC 变换器三相逆变器L型滤波器交流电网&#xff1b; 控制系统包括&#xff1a;MPPT控制系统交流电网侧逆变器控制系统&#xff1b; 基本工作过程 1…

作者头像 李华
网站建设 2026/6/10 0:43:18

Hyperledger Fabric与 FISCO BCOS深度对比

一、核心架构与设计哲学对比 Hyperledger Fabric&#xff08;Linux基金会主导&#xff09; 设计理念&#xff1a;模块化、可插拔的企业级区块链 架构特点&#xff1a; ├── 通道机制&#xff08;数据隔离&#xff09; ├── 可插拔共识&#xff08;Kafka/Raft&#xff09; ├…

作者头像 李华