SAP从放弃到入门系列之创建特殊库存转储预留

文章概览

  • 一、思路
  • 二、过程
    • 2.1前台的主要过程:
    • 2.2 BAPI的实现过程:

之前写过几篇生产领料的思路包括代码,有兴趣的可以翻翻之前我发的文章。最近遇到既有项目专用物资、按单专用物资、通用物资合并领料的业务模式,所以领料的库存的类型涉及特殊库存:Q库存,E库存,并且三种库存会是在一张领料单中出现。如果方案偏向于标准功能来实现,而不是自定义表的话,直接用UB订单是可以直接解决的,但问题是这个是一个工厂代码不同库位的物料移动,才有UB订单的方式涉及到接口的时候连续产生的单据有点多了。所以想的通过标准的311预留实现。最终效果:一个预留中既有WBS预留也有销售订单预留也有通用库存预留
在这里插入图片描述

这篇文章其实也是一种标准预留实现领料功能的进一步探索吧,自己瞎琢磨写了点增强代码算是搞定了业务段的功能吧,毕竟更改了标准的逻辑,也不知道会不会影响到财务的数据。

一、思路

标准的MB21创建预留是没有特殊库存这个输入项的,而且标准的功能,在创建311预留时是无法输入销售订单号和WBS号。但是通过以下几个条件判断,311的特殊预留是可以实现的:
1.221是可以输入项目号的,而且输入的位置在预留的抬头信息中,组件产生预留的特殊库存标识是根据抬头WBS+物料的独立集中字段生成的。
2.预留的行项目数据表:RESB中有销售订单和WBS号的信息
3.生产订单的预留中式可以有特殊库存和通用库存预留同时存在的

所以要实现目标如下:
311的预留创建屏幕把销售订单号和WBS号配置搞出来,并且不是必输
311预留过账时根据行项目的特殊库存标识和科目分配信息根据预留自动带出

二、过程

2.1前台的主要过程:

OMJJ设置移动类型的屏幕字段,将销售订单和WBS设置未可选项。并且设置自定义的子屏幕块,使得销售订单和WBS的子屏幕优先级最高。效果:
创建界面:
在这里插入图片描述

预留抬头显示界面:
在这里插入图片描述

预留行项目明细:
在这里插入图片描述

MIGO过账界面发现有个问题,就是抬头的销售订单或者WBS会覆盖所有行项目。所以需要通过在更新预留的标准程序中做==隐式增强==,在系统会用RKPF抬头的值替换RESB的销售订单等值前,用行项目数据先覆盖抬头的数据信息。这个增强的方式和地点就有点多了,大家慎重自己拿主意,也要注意控制生效的条件,为了测试期间不影响其他人,专门加了自己账号的限制。
在这里插入图片描述
为了最终实现一个预留单中多种特殊库存的效果,这里就不过多增强标准功能,曲线救国采用BAPI来实现。

2.2 BAPI的实现过程:

采用通过BAPI实现的主要过程,这里需要增强一下BAPI的功能,因为标准的创建预留BAPI行项目没办法传入销售订单和WBS号的。
预留的BAPI的增强点:MB_RES_BAPI_CREATE1

    DATA:lt_item_resb TYPE TABLE OF zresb_item,
         lw_item_resb TYPE  zresb_item.
    "CS_RKPF
    "获取增强字段
    REFRESH lt_item_resb.
    LOOP AT it_extension_in INTO DATA(lw_extension_in).
      IF lw_extension_in-structure = 'ZRESB_ITEM'.
        lw_item_resb = lw_extension_in-valuepart1.
        APPEND lw_item_resb TO lt_item_resb.
        CLEAR lw_item_resb.
      ENDIF.
    ENDLOOP.

    "通过扩展字段值更改标准字段
    LOOP AT resb ASSIGNING FIELD-SYMBOL(<fs_resb>).
      lw_item_resb-rspos = sy-tabix.
      READ TABLE lt_item_resb INTO lw_item_resb WITH KEY rspos = lw_item_resb-rspos.
      <fs_resb>-kdauf = lw_item_resb-kdauf.
      <fs_resb>-kdpos = lw_item_resb-kdpos.
      <fs_resb>-pspel = lw_item_resb-pspel.
      <fs_resb>-sobkz = lw_item_resb-sobkz.
      IF lw_item_resb-sobkz IS NOT INITIAL.
        <fs_resb>-KZBWS = 'M'."特定库存的评估-带参照销售凭证/项目的单独评估
      ENDIF.

      IF lw_item_resb-sobkz = 'E'.
          <fs_resb>-KNTTP = 'M'.
      ELSEIF lw_item_resb-sobkz = 'Q'.
        <fs_resb>-KNTTP = 'Q'.
      ENDIF.
      CLEAR lw_item_resb.
    ENDLOOP.

预留BAPI:BAPI_RESERVATION_CREATE1

 DATA:reservationheader    TYPE bapi2093_res_head,
       reservationitems     TYPE TABLE OF bapi2093_res_item WITH HEADER LINE,
       profitabilitysegment TYPE TABLE OF bapi_profitability_segment WITH HEADER LINE,
       return               TYPE TABLE OF bapiret2 WITH HEADER LINE,
       reservation          TYPE bapi2093_res_key-reserv_no,
       extensionin          TYPE TABLE OF bapiparex WITH HEADER LINE.

  DATA:lw_item_resb TYPE  zresb_item.


  "抬头数据
  reservationheader-res_date   = sy-datum."需求日期
  reservationheader-move_type  = '311'.
  reservationheader-orderid = '000001001408'.
  reservationheader-move_plant = '6102'."接收工厂
  reservationheader-move_stloc = '4001'."接收库位
  "行项目数据
  "第一行
  reservationitems-material  = 'A803YX1000035H'.
  reservationitems-plant     = '6102'."发出工厂
  reservationitems-entry_qnt = '1'.
  reservationitems-movement  = 'X'.
  reservationitems-item_text = '备注'.
  APPEND reservationitems.
  CLEAR  reservationitems.
  "第二行
  reservationitems-material  = 'A803YX1000035H'.
  reservationitems-plant     = '6102'."工厂
  reservationitems-entry_qnt = '1'.
  reservationitems-movement  = 'X'.
  reservationitems-item_text = '备注'.
  APPEND reservationitems.
  CLEAR  reservationitems.
  "第三行
  reservationitems-material  = 'A803YX1000035H'.
  reservationitems-plant     = '6102'."工厂
  reservationitems-entry_qnt = '1'.
  reservationitems-movement  = 'X'.
  reservationitems-item_text = '备注'.
  APPEND reservationitems.
  CLEAR  reservationitems.

  "第4行
  reservationitems-material  = 'A803YX1000035H'.
  reservationitems-plant     = '6102'."发出工厂
  reservationitems-entry_qnt = '1'.
  reservationitems-movement  = 'X'.
  reservationitems-item_text = '备注'.
  APPEND reservationitems.
  CLEAR  reservationitems.
  "增强数据
  LOOP AT reservationitems.
    DATA(lv_count) = sy-tabix.
    extensionin-structure = 'ZRESB_ITEM'.
    lw_item_resb-rspos = lv_count.
    IF lv_count = 1."销售订单库存
      lw_item_resb-kdauf = '0000004244'.
      lw_item_resb-kdpos = '000020'.
      lw_item_resb-sobkz = 'E'.
    ELSEIF lv_count = 2."通用库存

    ELSEIF lv_count = 3."项目库存
      lw_item_resb-pspel = '00000581'.
      lw_item_resb-sobkz = 'Q'.
    ELSEIF lv_count = 4."项目库存
      lw_item_resb-kdauf = '0000004244'.
      lw_item_resb-kdpos = '000010'.
      lw_item_resb-sobkz = 'E'.
    ENDIF.
    extensionin-valuepart1 = lw_item_resb.

    APPEND extensionin.
    CLEAR: reservationitems,extensionin,lw_item_resb.
  ENDLOOP.


  CLEAR reservation.
  CALL FUNCTION 'BAPI_RESERVATION_CREATE1'
    EXPORTING
      reservationheader    = reservationheader
*     TESTRUN              =
*     ATPCHECK             =
*     CALCHECK             =
*     RESERVATION_EXTERNAL =
    IMPORTING
      reservation          = reservation
    TABLES
      reservationitems     = reservationitems
      profitabilitysegment = profitabilitysegment
      return               = return
      extensionin          = extensionin.

  IF reservation IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    MESSAGE reservation TYPE 'I'.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    BREAK-POINT.
  ENDIF.

做到这一步,预留和前台创建效果一样,
在这里插入图片描述
虽然搞定了吧,但是MB23显示的时候,销售订单显示不出来,所以要是效果再好点,还得增强显示前的block屏幕的取数逻辑。。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一&#xff0c; 2014年由Simonyan和Zisserman提出&#xff0c; 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c;在眼疾筛查数据集iChallenge-PM上使用VGG…

什么是高级持续威胁(APT)攻击

目录 前言什么是高级持续威胁高级持续威胁攻击有哪些独特特征APT攻击的五个阶段APT检测及防护措施总结 前言 APT攻击是利用多个阶段和不同攻击技术的复合网络攻击。APT不是一时兴起2构思或实施的攻击。相反&#xff0c;攻击者故意针对特定目标定制攻击策略。并在较长时间内进行…

Excel·VBA定量装箱、凑数值金额、组合求和问题

如图&#xff1a;对图中A-C列数据&#xff0c;根据C列数量按照一定的取值范围&#xff0c;组成一个分组装箱&#xff0c;要求如下&#xff1a; 1&#xff0c;每箱数量最好凑足50&#xff0c;否则为47-56之间&#xff1b; 2&#xff0c;图中每行数据不得拆分&#xff1b; 3&…

webpack基础知识一:说说你对webpack的理解?解决了什么问题?

一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各自单独放到不同的JS 文件中 约定每个文件是一…

Matlab对TMS320F28335编程-新建工程闪烁led灯

前言 工具&#xff1a;Matlab2022b Matlab对接C2000插件&#xff0c;下载连接如下 Embedded Coder Support Package for Texas Instruments C2000 Processors - File Exchange - MATLAB Central 在Matlab中加载此插件后&#xff0c;按照要求一步一步的进行就可以&#xff0c…

基于 JavaScript 的富文本编辑器框架简单使用

1.打开wangEditor wangEditor开源 Web 富文本编辑器&#xff0c;开箱即用&#xff0c;配置简单https://www.wangeditor.com/ 2.html文件 <link href"https://unpkg.com/wangeditor/editorlatest/dist/css/style.css" rel"stylesheet"> <style&…

qt源码--事件系统之QAbstractEventDispatcher

1、QAbstractEventDispatcher内容较少&#xff0c;其主要是定义了一些注册接口&#xff0c;如定时器事件、socket事件、注册本地事件、自定义事件等等。其源码如下&#xff1a; 其主要定义了大量的纯虚函数&#xff0c;具体的实现会根据不同的系统平台&#xff0c;实现对应的方…

MQTT服务器详细介绍:连接物联网的通信枢纽

随着物联网技术的不断发展&#xff0c;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议作为一种轻量级、可靠、灵活的通信协议&#xff0c;被广泛应用于物联网领域。在MQTT系统中&#xff0c;MQTT服务器扮演着重要的角色&#xff0c;作为连接物联网设备和…

C高级【day2】

思维导图&#xff1a; 递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位&#xff1a; #include<myhead.h>//递归函数 void fun(int num){//num没值不再递归if(0 num){return;}//输出数的最后一位printf("%d\t", num%10);//递归fun(num/10);}…

linux du命令解析(递归计算文件子目录大小)(计算大小)(计算容量)

文章目录 du命令简介用法常用选项示例 文档原 中文选项详细解释示例递归统计某个目录下所有文件大小&#xff08;不足单位会向上取整&#xff09;&#xff08;注意&#xff1a;可能会将目录大小也统计进去&#xff0c;目录大小为4096字节4kb&#xff1f;&#xff09; du命令使用…

AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务

OPT&#xff08;奥普特&#xff09;基于SciVision视觉开发包&#xff0c;全新推出多功能一体化智能相机&#xff0c;采用图形化编程设计&#xff0c;操作简单、易用&#xff1b;不仅有上百种视觉检测算法加持&#xff0c;还支持深度学习功能&#xff0c;能轻松应对计数、定位、…

Vulnhub: blogger:1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.176 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.176 在80端口的/assets/fonts/目录下发现blog目录&#xff0c;访问后发现为wordpress 利用wpscan发现wordpress插件wpdisc…

发明专利申请:不能包含文本框或自选图形 || 不能包含域对象(校验错误)

提交出错 解决方案&#xff1a;如果xml文件传上去没有反应&#xff0c;一定要优先把word转成pdf&#xff0c;不要去文本框中输入&#xff1a;里面的公式编辑器很老旧&#xff08;很多公式编辑不了&#xff09; 上传以后&#xff0c;总体预览没有问题就ok&#xff0c;前序穿文件…

【机器学习】处理样本不平衡的问题

文章目录 样本不均衡的概念及影响样本不均衡的解决方法样本层面欠采样 &#xff08;undersampling&#xff09;过采样数据增强 损失函数层面模型层面采样集成学习 决策及评估指标 样本不均衡的概念及影响 机器学习中&#xff0c;样本不均衡问题经常遇到&#xff0c;比如在金融…

移动端网页div下滑消失、上滑出现(附带闪烁效果)

<div :class "IconShow ? mhomeIcon : IconOff"><img src"/assets/news.svg" alt""></div>// 距离顶部的距离const top ref(0) // 图标向上还是向下滑动const IconShow ref(true)// 滑动监听&#xff0c; 注意如果只有doc…

不能乱点链接之获取cookie

这里是浏览器存储的某个网址的cookie 然后点击了链接就把参数获取到 因为document.cookie 会直接获取到浏览器cookie 所以为了拦截 存cookie的时候要设置&#xff1a; 设置httpOnly 只要http协议能够读取和携带 再document.cookie 就为空了 原文链接&#xff1a; 尚硅谷课程…

力扣:48. 旋转图像(Python3)

题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&…

Gitignore忽略文件

默认情况下&#xff0c;Git会监视我们项目中的所有内容&#xff0c;但是有些内容比如mode_modules中的内容&#xff0c;我们不希望他被Git所管理。 我们可以在我们项目目录中添加一个 .gitignore 文件来设置那些需要git忽略的文件。

[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...

项目开始的准备工作 在上一篇文章中, 已经从Boost官网获取了Boost库的源码. 相关文章: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 接下来就要编写代码了. 不过还需要做一些准备工作. 创建项目目录 所有的项目文件肯定要在一…

C语言技巧 ----------调试----------程序员必备技能

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…