MIGO 物料过账 创建物料凭证 BAPI_GOODSMVT_CREATE

news2024/11/18 7:39:57

文章目录

    • 1.前台操作
    • 2.需求分析
      • 2.1调用方式
      • 2.2分为两大概括:
      • 2.3业务逻辑细节图
    • 3.BAPI_GOODSMVT_CREATE
    • 4.RFC接口代码
    • 5.总结

1.前台操作

SAP CO01(创建生产订单)/MIGO(发货投料)前台操作
这里面有migo的前台操作,首先了解前台操作后再去写RFC接口是比较容易理解的.!!

2.需求分析

2.1调用方式

mesOS->SAPOS

2.2分为两大概括:

同一过账标识 10

  1. 0 的时候单一过账,无论行项目中有多少个物料号,都会对应生成多少个物料凭证号
  2. 1的时候同一过账,也就是无论行项目中有多少个物料号,都只生成一个物料凭证编号.
    这两个逻辑是是相反的.

2.3业务逻辑细节图

在这里插入图片描述

3.BAPI_GOODSMVT_CREATE

下面的这些参数我只介绍了此需求用过的.

EXPORTING部分
bapi2017_gm_head_01,   "凭证中的过帐日期等一些抬头信息
bapi2017_gm_code,        "这个是你要进行的是什么样的操作比如说是发货,收货,取消等都对应相应的编号比如01 02 03

IMPORTING部分
bapi2017_gm_head_ret,  "物料凭证号,凭证年度
bapi2017_gm_head_ret-mat_doc, "物料凭证号
bapi2017_gm_head_ret-doc_year, "凭证年度

TABLES部分
 bapi2017_gm_item_create, "行项目
 bapiret2, "返回值

4.RFC接口代码

代码感觉比较臃肿,欢迎大佬前来补充优化!!!

FUNCTION zmigo_carry_to.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IN_NUM) TYPE  BAPI_MTYPE
*"  EXPORTING
*"     VALUE(MSG_TYPE) TYPE  BAPI_MTYPE
*"     VALUE(MESSAGE) TYPE  BAPI_MSG
*"  TABLES
*"      IT_TAB_IN STRUCTURE  ZCARRY_TO_INPUT OPTIONAL
*"      INT_TAB_OUT STRUCTURE  ZCARRY_TO_OUTPUT OPTIONAL
*"----------------------------------------------------------------------

  DATA:goodsmvt_header       LIKE  bapi2017_gm_head_01,
       goodsmvt_code         LIKE  bapi2017_gm_code,

       goodsmvt_headret      LIKE  bapi2017_gm_head_ret,
       materialdocument      TYPE  bapi2017_gm_head_ret-mat_doc,
       matdocumentyear       TYPE  bapi2017_gm_head_ret-doc_year,

       goodsmvt_item         TYPE TABLE OF  bapi2017_gm_item_create,
       goodsmvt_item_0       TYPE TABLE OF  bapi2017_gm_item_create,
       w_goodsmvt_item       TYPE           bapi2017_gm_item_create,
       goodsmvt_serialnumber LIKE  bapi2017_gm_serialnumber,
       it_return             TYPE TABLE OF  bapiret2,
       wa_return             TYPE           bapiret2.

  DATA gs_tab_in TYPE zcarry_to_input .
  DATA gt_tab_in TYPE TABLE OF zcarry_to_input .
  DATA gs_tab_out TYPE zcarry_to_output .

  IF in_num = 1 .
    MOVE-CORRESPONDING  it_tab_in[]  TO  gt_tab_in.
    SORT gt_tab_in BY bwart.
    LOOP AT gt_tab_in INTO DATA(ls_tab).
      DELETE ADJACENT DUPLICATES FROM gt_tab_in COMPARING bwart.
    ENDLOOP.
    IF lines( gt_tab_in ) > 1.
      CLEAR:gt_tab_in, ls_tab.
      msg_type = 'E'.
      message = '不同移动类型请分批出库!'.
      RETURN.
    ENDIF.

    LOOP AT it_tab_in[] INTO gs_tab_in.

      gs_tab_in-zeile = sy-tabix.
      MODIFY it_tab_in FROM gs_tab_in.

      goodsmvt_header-pstng_date = gs_tab_in-budat_mkpf. "过账日期
      goodsmvt_code-gm_code      = '03'.
      w_goodsmvt_item-material  = gs_tab_in-matnr. "物料号
      w_goodsmvt_item-plant     = gs_tab_in-werks. "工厂
      w_goodsmvt_item-stge_loc  = gs_tab_in-lgort.  "库位
      w_goodsmvt_item-costcenter     = it_tab_in-kostl. "成本中心
      w_goodsmvt_item-entry_qnt = gs_tab_in-menge.  "数量
      w_goodsmvt_item-ref_doc_it = gs_tab_in-zeile.  "物料参考项目
      w_goodsmvt_item-move_type = gs_tab_in-bwart. "移动类型(库存管理)
      APPEND w_goodsmvt_item TO goodsmvt_item.
      CLEAR: w_goodsmvt_item,gs_tab_in.
    ENDLOOP.
    IF goodsmvt_item[] IS  NOT INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header  = goodsmvt_header
          goodsmvt_code    = goodsmvt_code
*         TESTRUN          = ' '
*         GOODSMVT_REF_EWM =
        IMPORTING
*         goodsmvt_headret = goodsmvt_header
          materialdocument = materialdocument
          matdocumentyear  = matdocumentyear
        TABLES
          goodsmvt_item    = goodsmvt_item[]
*         GOODSMVT_SERIALNUMBER         =
          return           = it_return[]
*         GOODSMVT_SERV_PART_DATA       =
*         EXTENSIONIN      =
        .

      READ TABLE it_return INTO wa_return WITH KEY type = 'E'.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        msg_type = 'E'.
        message = wa_return-message.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.

        msg_type = 'S'.
        " message = '物料凭证:' && materialdocument && '已过账!'.

        LOOP AT it_tab_in[] INTO gs_tab_in.
          int_tab_out-mjahr = matdocumentyear. "凭证年份
          int_tab_out-mblnr = materialdocument."物料凭证
          int_tab_out-zeile = gs_tab_in-zeile."物料参考项目
          int_tab_out-budat_mkpf = gs_tab_in-budat_mkpf. "过账日期
          int_tab_out-matnr  = gs_tab_in-matnr. "物料号
          int_tab_out-werks     = gs_tab_in-werks. "工厂
          int_tab_out-lgort  = gs_tab_in-lgort.  "库位
          int_tab_out-kostl     = it_tab_in-kostl. "成本中心
          int_tab_out-menge = gs_tab_in-menge.  "数量
          int_tab_out-bwart = gs_tab_in-bwart. "移动类型(库存管理)
          APPEND int_tab_out.
        ENDLOOP.
      ENDIF.
    ENDIF.

  ELSEIF in_num = 0.

    LOOP AT it_tab_in[] INTO gs_tab_in  .
      goodsmvt_header-pstng_date = gs_tab_in-budat_mkpf. "过账日期
      goodsmvt_code-gm_code      = '03'.
      w_goodsmvt_item-material  = gs_tab_in-matnr. "物料号
      w_goodsmvt_item-plant     = gs_tab_in-werks. "工厂
      w_goodsmvt_item-stge_loc  = gs_tab_in-lgort.  "库位
      w_goodsmvt_item-costcenter     = it_tab_in-kostl. "成本中心
      w_goodsmvt_item-entry_qnt = gs_tab_in-menge.  "数量
      w_goodsmvt_item-move_type = gs_tab_in-bwart. "移动类型(库存管理)
      w_goodsmvt_item-ref_doc_it = '1'.  "物料参考项目
      APPEND w_goodsmvt_item TO goodsmvt_item_0.

      IF goodsmvt_item_0[] IS  NOT INITIAL.
        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
          EXPORTING
            goodsmvt_header  = goodsmvt_header
            goodsmvt_code    = goodsmvt_code
*           TESTRUN          = ' '
*           GOODSMVT_REF_EWM =
          IMPORTING
*           goodsmvt_headret = goodsmvt_header
            materialdocument = materialdocument
            matdocumentyear  = matdocumentyear
          TABLES
            goodsmvt_item    = goodsmvt_item_0[]
*           GOODSMVT_SERIALNUMBER         =
            return           = it_return[]
*           GOODSMVT_SERV_PART_DATA       =
*           EXTENSIONIN      =
          .
      ENDIF.
      READ TABLE it_return INTO wa_return WITH KEY type = 'E'.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        msg_type = 'E'.
        message = wa_return-message.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.

        msg_type = 'S'.
        "  message = '物料凭证已过账!'.

        int_tab_out-mjahr = matdocumentyear. "凭证年份
        int_tab_out-mblnr = materialdocument."物料凭证
        int_tab_out-zeile = w_goodsmvt_item-ref_doc_it ."物料参考项目
        int_tab_out-budat_mkpf = gs_tab_in-budat_mkpf. "过账日期
        int_tab_out-matnr  = gs_tab_in-matnr. "物料号
        int_tab_out-werks     = gs_tab_in-werks. "工厂
        int_tab_out-lgort  = gs_tab_in-lgort.  "库位
        int_tab_out-kostl     = it_tab_in-kostl. "成本中心
        int_tab_out-menge = gs_tab_in-menge.  "数量
        int_tab_out-bwart = gs_tab_in-bwart. "移动类型(库存管理)
        APPEND int_tab_out.
      ENDIF.
      CLEAR:
      goodsmvt_item_0[] ,
      goodsmvt_header,
      goodsmvt_code.
      CLEAR: w_goodsmvt_item.
    ENDLOOP.
  ENDIF.
ENDFUNCTION.

5.总结

RFC接口首先要明确的是,接口参数以及业务逻辑.(我尼玛,说的都是废话);如果调用bapi就需要研究一下bapi中的参数.

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

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

相关文章

opencv读入图片注意事项

来源:投稿 作者:蓬蓬奇 编辑:学姐 深度学习数据预处理中常用opencv读入图片,一般在__getitem__函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的图片见第6节“opencv测试使用的图片”。 1.如何通过o…

计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准)

计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准) 内存: MAR是存放地址的寄存器;MDR是存放数据的寄存器。 MAR是存放地址的寄存器,那么其中的二进制位一定是不能重复的,试想,如果有有两个…

《爆肝整理》保姆级系列教程python接口自动化测试框架(二十六)--批量执行用例 discover(详解)

简介  我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方…

类和对象 - 上

本文已收录至《C语言》专栏! 作者:ARMCSKGT 目录 前言 正文 面向过程与面向对象 面向过程的解决方法 面向对象的解决方法 面向对象的优势 类的引入 早期C类的实现 class定义类 class定义规则 类成员的两种定义方式 类的访问限定符及封装 访…

在数字优先的世界中打击知识产权盗窃

在当今数据驱动的世界中,全球许多组织所面临的期望和需求正在达到前所未有的水平。 为了迎接挑战,数据驱动的方法是必要的,需要有效的数字化转型来提高运营效率、简化流程并从遗留技术中获得更多收益。 但是,虽然数字优先方法可…

Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建

1.前期设计 一般看来,网盘系统主要实体包括:用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示: 表名:user(用户表) 字段名属性说明userIdbigint主键usernamevarcha…

数据结构与算法系列之顺序表的实现

这里写目录标题顺序表的优缺点:注意事项test.c(动态顺序表)SeqList.hSeqList.c各接口函数功能详解void SLInit(SL* ps);//定义void SLDestory(SL* ps);void SLPrint(SL* ps);void SLPushBack(SL* ps ,SLDataType * x );void SLPopBack(SL* ps…

[busybox] busybox生成一个最精简rootfs(下)

书接上回:[busybox] busybox生成一个最精简rootfs(上) 本篇介绍几个rootfs中用到的“不是那么重要的”几个文件。 9 /etc/shadow 和 /etc/passwd 曾经,/etc/passwd 文件用于存储独立 Linux 系统中的所有登录信息。 后来,由于以下原因&…

算法训练营 day63 单调栈 下一个更大元素II 接雨水

算法训练营 day63 单调栈 下一个更大元素II 接雨水 下一个更大元素II 503. 下一个更大元素 II - 力扣(LeetCode) 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的…

2023软件测试工程师涨薪攻略,3年如何达到30K

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪,而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试,是希望能够日…

Vue3 关于 provide、inject 的用法

前言: 在前端项目中牵扯的最多的莫过于组件之间的传值了,除了最最常用的 props 和 emit,其实在 Vue 中还额外提供了另外几种方法。今天分享一种组件之间通信的方法。 一. 场景再现 先别着急考虑标题这个 api 的含义。在这里我先动手写一个比较…

如何使用Codecepticon对C#、VBA宏和PowerShell源代码进行混淆处理

关于Codecepticon Codecepticon是一款功能强大的代码混淆处理工具,该工具专为红队和紫队渗透测试安全活动而开发,在该工具的帮助下,广大研究人员可以轻松对C#、VBA5/VBA6(宏)和PowerShell源代码进行混淆处理。Codecep…

【Datawhale图机器学习】图神经网络

图神经网络 GNN是一种连接模型,通过网络中节点之间的信息传递的方式来获取图中的依存关系,GNN通过从节点任意深度的邻居来更新该节点状态,这个状态能够表示状态信息。第一次在论文 The graph neural network model 中提出 与传统NN的区别&a…

UnsupportedOperationException深层探究

在调试程序的时候发现一个奇怪的问题,代码都是写过的很常见的代码,但是看日志会报错,报错信息如下:Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.set(AbstractList.j…

mysql last lesson

1:创建用户 create user zhang identified by 12345678;2:给用户授权,撤销授权, grant.......to revoke ....... 3:将数据库中的数据导出 C:\Windows\system32>mysqldump bjpowernode>C:\bjpowernode.sql -uroot -p12345678 4&#…

nginx-ingress部署+跨命名空间转发

nginx-ingress部署一、环境信息二、k8s环境搭建三、ingress环境搭建3.1 deploy.yaml文件3.2 service-nodeport.yaml文件四、按照业务建立service及ingress4.1 业务信息4.2 建立service4.3 创建ingress五、验证结果一、环境信息 k8s集群版本:1.23.6ingress版本&…

MySQL高级三

目录 三、MySQL高级03 3.1 MyCat 3.1.1 MyCat简介 3.1.2 中间件的作用 3.2 安装MyCat 3.3 主从复制 3.3.1 主从复制的原理 3.3.2 主从复制的好处 3.3.3 配置主从复制 三、MySQL高级03 如果虚拟机的磁盘已满,可以对磁盘进行重新分配 参考:虚拟…

将IDEA的项目托管到gitee

目录1. 在gitee上创建仓库2. 本地创建仓库目录3. 将项目添加到缓冲区4. 将缓冲区的项目添加到本地仓库5. 将本地仓库的项目上传到gitee6. 遇到的问题6.1 问题描述6.2 解决方法7. 相关图示与补充8. 相关参考1. 在gitee上创建仓库 2. 本地创建仓库目录 在IDEA中选择创建 Git 仓…

命令行和Python交互模式

命令行和Python交互模式的区别 命令行模式mac打开终端 在命令行模式下,可以执行python进入Python交互式环境,也可以执行python hello.py运行一个.py文件。 执行一个.py文件只能在命令行模式执行 Python交互模式键入python3即可,交互模式下可…

centos安装gitlab

更新系统 sudo yum -y update安装所需要的包 sudo yum -y install epel-release curl vim policycoreutils-python如果要安装并使用本地Postfix服务器发送通知,请安装Postfix,这里就不安装了: sudo yum -y install postfix安装后启动并启用…