首页 > 其他分享 >流程订单的物料清单数据

流程订单的物料清单数据

时间:2023-06-15 15:36:55浏览次数:34  
标签:物料 RETURN 流程 LV RESB LS 清单 ORD TYPE

bapi:CO_XT_COMPONENT_ADD

部分参考代码:

 DATA: LS_STORAGE_LOCATION  TYPE COXT_S_STORAGE_LOCATION,
        LS_STORAGE_LOCATIONX TYPE COXT_S_STORAGE_LOCATIONX,
        LS_REQU_QUAN         TYPE COXT_S_QUANTITY,
        LV_OPERATION         TYPE CO_APLZL,
        LV_BATCH             TYPE COXT_BATCH,
        LV_BATCHX            TYPE COXT_BATCHX,
        LV_POSTP             TYPE POSTP,
        LV_SEQUENCE          TYPE PLNFOLGE,
        LV_MATERIAL          TYPE MATNR,
        LV_POSITIONNO        TYPE POSITIONNO,
        LV_NUMC              TYPE NUMC4.
      DATA:LV_UNIT TYPE T006-ISOCODE.
      DATA:LV_TABIX TYPE SY-TABIX .

      DATA:LS_RETURN TYPE COXT_BAPIRETURN.
      DATA:LV_ERROR TYPE C.

  TYPES: BEGIN OF TY_RESB_BT.
           INCLUDE TYPE RESBB.
  TYPES:   INDOLD TYPE SYST_TABIX.
  TYPES: NO_REQ_UPD TYPE SYST_DATAR.
  TYPES: END OF TY_RESB_BT.

  TYPES TT_RESB_BT TYPE TABLE OF TY_RESB_BT.

  FIELD-SYMBOLS: <FT_RESB_BT> TYPE TT_RESB_BT,
                 <FS_RESB_BT> TYPE TY_RESB_BT.

  SORT PT_ORD BY WERKS PROJN ZPROJPERS AUART AUFNR ZDELFLAG PLNBEZ MATNR.
  DATA:LV_INDEX TYPE SY-TABIX.
  DATA:LV_QUANTITY LIKE AFKO-GAMNG.
  LV_QUANTITY = 0.

  LOOP AT PT_ORD INTO DATA(LS_ORD).
    LV_INDEX = SY-TABIX.
    LV_QUANTITY = LV_QUANTITY + LS_ORD-BDMNG.
    AT END OF MATNR.
      READ TABLE PT_ORD INTO LS_ORD INDEX LV_INDEX.

      LS_STORAGE_LOCATION-WERKS = LS_ORD-WERKS.
      LS_STORAGE_LOCATIONX-WERKS = 'X'.

      LS_REQU_QUAN-QUANTITY = LV_QUANTITY." LS_ORD-BDMNG.
      LS_REQU_QUAN-UOM = LS_ORD-MEINS.

      LV_POSITIONNO = '0010'.
      LV_POSTP = 'L'.
      LV_MATERIAL = LS_ORD-MATNR.

      SELECT SINGLE AUFNR, AUFPL INTO @DATA(LS_AFKO)
                                     FROM AFKO
                                     WHERE AUFNR = @PV_AUFNR.
      IF SY-SUBRC EQ 0.
* Fetch operation to which it has to be assigned
        SELECT SINGLE AUFPL, APLZL, PLNFL INTO @DATA(LS_AFVC)
                                          FROM AFVC
                                          WHERE AUFPL = @LS_AFKO-AUFPL.
        IF SY-SUBRC EQ 0.
          LV_OPERATION = LS_AFVC-APLZL.
          LV_SEQUENCE = LS_AFVC-PLNFL.
        ENDIF.
      ENDIF.

      CALL FUNCTION 'CO_XT_COMPONENT_ADD'
        EXPORTING
          IS_ORDER_KEY         = PV_AUFNR
          I_MATERIAL           = LV_MATERIAL
          IS_REQU_QUAN         = LS_REQU_QUAN
          I_OPERATION          = LV_OPERATION
          I_SEQUENCE           = LV_SEQUENCE
          IS_STORAGE_LOCATION  = LS_STORAGE_LOCATION
          IS_STORAGE_LOCATIONX = LS_STORAGE_LOCATIONX
          I_BATCH              = LV_BATCH
          I_BATCHX             = LV_BATCHX
          I_POSTP              = LV_POSTP
          I_POSNO              = LV_POSITIONNO
        IMPORTING
          ES_BAPIRETURN        = LS_RETURN
          E_ERROR_OCCURRED     = LV_ERROR.
      IF LV_ERROR = SPACE.
        CLEAR: LV_NUMC,
               LS_RETURN.

* Modify POSNR via ASSIGN before DB update to correct the blank
* item number in Components due to incompatible types of I_POSNO
* (type CIF_R3RES-POSITIONNO) and RESB-POSNR

        ASSIGN ('(SAPLCOBC)RESB_BT[]') TO <FT_RESB_BT>.
        LOOP AT <FT_RESB_BT> ASSIGNING <FS_RESB_BT>.
          LV_NUMC = SY-TABIX * 10.
          <FS_RESB_BT>-POSNR = LV_NUMC.
          CLEAR LV_NUMC.
        ENDLOOP.
        IF <FT_RESB_BT> IS NOT INITIAL.
          <FS_RESB_BT>-SANKA = LS_ORD-SANKA."最后一行赋值到RESB刚好是需要修改的这条数据-成本核算相关性
          <FS_RESB_BT>-SCHGT = LS_ORD-SCHGT."最后一行赋值到RESB刚好是需要修改的这条数据-散装物料
          <FS_RESB_BT>-BEIKZ = LS_ORD-BEIKZ."最后一行赋值到RESB刚好是需要修改的这条数据-物料供应标识符
          LS_ORD-RSNUM = <FS_RESB_BT>-RSNUM. "刚好取到最后一行赋值到RESB中
          LS_ORD-RSPOS = <FS_RESB_BT>-RSPOS.
        ENDIF.
* Commit transaction
        CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
          IMPORTING
            ES_BAPIRETURN    = LS_RETURN
            E_ERROR_OCCURRED = LV_ERROR.

        IF ( LS_RETURN-TYPE = 'S' OR
           LS_RETURN-TYPE = 'W' OR
           LS_RETURN-TYPE = 'I' ) OR
           LS_RETURN IS INITIAL.
* Commit data
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT = 'X'.
          CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
          WAIT UP TO '0.1' SECONDS.
          LS_ORD-STATUS = 'S'.
          LS_ORD-MESSAGE = '组件添加成功:' && LS_ORD-MATNR.

        ELSE.

* Data Rollback
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          LS_ORD-STATUS = 'E'.
          LS_ORD-MESSAGE =  '组件添加失败:' && LS_ORD-MATNR && LS_RETURN-MESSAGE.
          CLEAR: LV_ERROR,
            LS_RETURN.
        ENDIF.
      ELSE.

* Data Rollback
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LS_ORD-STATUS = 'E'.
        LS_ORD-MESSAGE = '组件添加失败:' && LS_ORD-MATNR && LS_RETURN-MESSAGE.
        CLEAR: LV_ERROR,
              LS_RETURN.
      ENDIF.
      MODIFY PT_ORD FROM LS_ORD.
      CLEAR LS_ORD.
      LV_QUANTITY = 0.
    ENDAT.
  ENDLOOP.

  PV_STATUS = LS_ORD-STATUS.
  IF PV_STATUS = 'S'.
    PV_MSG = '组件添加完成'.
  ELSE.
    PV_MSG = '组件添加失败'.
  ENDIF.

标签:物料,RETURN,流程,LV,RESB,LS,清单,ORD,TYPE
From: https://www.cnblogs.com/huangqingdong/p/17483018.html

相关文章

  • Java低代码开发工具:jvs-rules 2.1.8 新版本功能清单
    规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则,以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件,而动作定义了规则满足时要执行的操作或行为。jvs-rules......
  • 控制并发流程,做好线程间的协调
    一、概述1.什么是控制并发流程?线程一般是由线程调度器自动控制的,但有些场景需要按照我们程序员的意愿去实现多线程之间相互配合,从而满足业务逻辑。比如:让线程A等待线程B执行完后再执行等一些相互合作的逻辑;或一系列线程等待一个线程运行完毕或发出信号之后再执行2.控制并......
  • uniapp 打包发布小程序的流程指引
    用uniapp开发小程序其实和开发H5是一样的。就是在打包的时候会略有不同。uniapp在开发的时候需要在 manifest.json的源码视图配置nginx反向代理才能去请求后端`/代理名称${config.url}`一般情况下的请求都是代理+url去请求数据。但是,这个只是针对H5的请求方式......
  • springboot启动流程 (1) 流程概览
    本文将通过阅读源码方式分析SpringBoot应用的启动流程,不涉及Spring启动部分(有相应的文章介绍)。本文不会对各个流程做展开分析,后续会有文章介绍详细流程。SpringApplication类应用启动入口使用以下方式启动一个SpringBoot应用:@SpringBootApplicationpublicclassSpringBoo......
  • MONAI Label 安装流程及使用攻略
    这部分为monailabel的安装实操,分为服务端安装和客户端安装。预祝大家顺利安装。如果遇到问题,可以在交流群里探讨。在开始前,可以把以下链接打开,官方安装教程monailabelgithub服务器(Server)端安装服务器电脑条件:可以是Ubuntu和Windows操作系统,但必须要有GPU/CUDA。并能支持深......
  • 深浅拷贝、第三方模块的下载与安装、开发流程
    深浅拷贝详解1.对于不可变对象,深拷贝和浅拷贝的效果是一样的,因为不可变对象不需要在内存中复制2.对于可变对象,深拷贝和浅拷贝的效果是有区别的,主要原因在于可变对象自身的可变性质浅拷贝1.1使用数据类型本身的构造器list1=[1,2,3]list2=list(list1)print(list2)pri......
  • 01企业项目开发流程,你平时的工作流程,pip永久换源,虚拟环境和虚拟环境搭建,luffy后台创建
    1企业项目类型#1面向互联网用户:商城类项目 -微信小程序商城-app商城-得物-饿了么-问卷网#2面向互联网用户:二手交易类的 -咸鱼 -转转#3公司内部项目:python写的重点#传统软件行业,互联网 -给客户做软件:国家电网,社保局,银行,医院,大客户......
  • 【Netty】Netty部分源码分析(启动流程,EventLoop,accept流程,read流程)
    源码分析Netty源码中调用链特别长,且涉及到线程切换等步骤,令人头大:)1启动剖析我们就来看看netty中对下面的代码是怎样进行处理的//1netty中使用NioEventLoopGroup(简称nioboss线程)来封装线程和selectorSelectorselector=Selector.open();//2创建NioServerSo......
  • sqoop详细流程
    源自about云  http://www.aboutyun.com/thread-6242-1-1.html   http://www.aboutyun.com/thread-10445-1-1.html sqoop源码分析 about良心作品  ......
  • UWB通信技术基本原理和测试流程
    简介:什么是UWB技术?超宽带(UltraWideBand,UWB)技术是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。UWB技术是一种使用1GHz以上频率带宽的无线载波通信技术。它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因......