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

news2024/11/15 21:43:53

文章概览

  • 一、思路
  • 二、过程
    • 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屏幕的取数逻辑。。。。。

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

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

相关文章

《Java-SE-第二十七章》之常见的锁策略

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

【腾讯云 Cloud studio 实战训练营】云端 IDE 构建移动端H5

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

【SpringBoot】有哪些优点+配置文件如何配置?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发 的。Spring Boot是一个开源的Java框架&#xff0c;用于快速构建应用程序和微服…

如何将文件写入数据库呢???(走过路过不要错过)

1.首先建立数据库。。。建立一个名为books的数据库&#xff0c;建立一个fs表。 create database if not exists books; use books; create table fs(id int unsigned auto_increment primary key ,name varchar(50) not null ,files longblob ); 假如你不喜欢代码建立&#x…

redux-promise-middleware和applyMiddleware的理解与使用

一、作用&#xff1a; applyMiddleware是一个中间件&#xff0c;通常和applyMiddleware结合使用&#xff0c;是dispatch与reducers之间的应用&#xff0c;用于处理dispatch发送的异步action操作 二、使用 1、安装redux-promise-middleware cnpm i redux-promise-middleware…

GB28181智能安全帽方案探究及技术实现

什么是智能安全帽&#xff1f;​ 智能安全帽是一种集成先进科技的安全帽&#xff0c;可基于GB28181规范&#xff0c;适用于铁路巡检、电力、石油化工等高风险行业的作业人员&#xff0c;以及消防、救援等紧急情况下的安全防护。 智能安全帽通常具有以下功能&#xff1a; 实时…

WEB开发的基础知识

WEB开发的基础知识 1、java SE 和 java EE 2、web开发的基本理念 3、URI和URL 4、http请求方式 5、get和post的区别 6、web开发行业术语

hdu Perfect square number

题意&#xff1a; 有n个数&#xff08;n<300&#xff09;&#xff0c;将其中的任意的一个数改为x&#xff08;x在[1,300]&#xff09;&#xff0c;求改之后&#xff0c;区间和为完全平方数的最大区间个数是多少 思路&#xff1a; 将a[x]改之后的区间个数等于&#xff1a;改…

ThinkPHP v6.0.8 CacheStore 反序列化漏洞

漏洞说明 1. 漏洞原理&#xff1a;ThinkPHP 6.0.8 CacheStore 会触发POP利用链子&#xff0c;造成任意命令执行 2. 组件描述&#xff1a; ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本&#xff1a;V6.0.8 漏洞复现 1. 环境安…

【Linux命令200例】which用于查找指定命令所在路径

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…

【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录 1.queue的介绍2.queue的使用2.1queue构造函数2.2queue的成员函数&#xff08;1&#xff09;empty() 检测队列是否为空&#xff0c;是返回true&#xff0c;否则返回false&#xff08;2&#xff09;size() 返回队列中有效元素的个数 &#xff08;3&#xff09;front() 返…

PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程

每开始学习一门语言&#xff0c;都要了解这门语言和进行开发环境的搭建。同样&#xff0c;学生开始PHP学习之前&#xff0c;首先要了解这门语言的历史、语言优势等内容以及了解开发环境的搭建。 PHP概述 认识PHP PHP最初是由Rasmus Lerdorf于1994年为了维护个人网页而编写的一…

【C语言学习】数据类型转换

一、自动类型转换 1.当运算符两边的数据类型不同时&#xff0c;C语言会帮我们将其转换为较大的类型。即将数据转换成表达范围更大的类型。 将前一种类型转换为后一种类型 char --> short --> int --> long --> long long int --> float --> double2.对于…

数据结构:插入排序

直接插入排序 插入排序算法是所有排序方法中最简单的一种算法&#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种&#xff0c;采用的方法是&#xff1a;在…

网盘共享文件的优势及对团队办公的帮助

伴随着科技的发展&#xff0c;互联网逐步渗透了企业办公方式。各种类型的网盘应运而生&#xff0c;成为当下文件共享的主要方式之一。那么网盘共享文件有什么优势&#xff1f;对团队办公有何帮助呢&#xff1f; 网盘共享文件的优势 1、方便快捷&#xff1a;用户通过移动设备即…

MYSQL进阶-事务

什么是数据库事务&#xff1f; 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位&#xff0c;其执 行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上 的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务最…

Vulnhub: hacksudo: aliens靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.175 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.175 目标80端口backup目录存在文件mysql.bak&#xff0c;下载后查看获得mysql账号密码 登录9000端口的phpmyadmin&#xf…

节日福利发什么?OI易问卷调查员工意见,“卷”赢其他公司

春节、妇女节、端午节、中秋节、元宵节、周年庆……近几年各公司之间的员工福利比拼“卷”上新高度&#xff0c;让HR、行政每逢佳节倍焦虑。 节日福利是表达公司对员工的关心和感谢&#xff0c;同时提高员工的归属感和满意度。礼品、购物券、节日慰问金、节日活动、食品饮料……

七牛云存储绑定域名

1、七牛云添加 加速域名方法&#xff1a; 注意&#xff1a;七牛云新增域名 需要 和 网站 解析的二级域名保持一致 其他值参考 如何绑定 使用七牛云托管视频&#xff0c;使用cdn加速

网工内推 | 云计算工程师专场,CCNP/HCIP认证优先

01 弧聚科技 招聘岗位&#xff1a;网络工程师&#xff08;云计算方向&#xff09; 职责描述&#xff1a; 1、作为H3C初级云计算交付工程资源培养对象&#xff0c;需配合完成相关华三产品及服务规范培训。 2、培训赋能后&#xff0c;安排到H3C云项目交付中进行项目交付及驻场支…