SO修改
FUNCTION Z_SD_SALESORDER_CHANGE1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IM_VBELN) TYPE VBELN
*" REFERENCE(IM_TYPE) TYPE CHAR4
*" REFERENCE(IM_BUDAT) TYPE BUDAT DEFAULT IM_BUDAT
*" TABLES
*" IT_ITEM STRUCTURE ZSDS0025
*" IT_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
***********************************************************************
* Function <Z_SD_SALESORDER_CHANGE1>
************************************************************************
*
* 作者: DZHANGHUI
* 完成日期: 2014/12/31
* 描述: 发货返写修改销售订单
************************************************************************
* 版本号 日期 作者 修改描述 功能更改说明书
************************************************************************
* 1. YYYY/MM/DD author Read dataset from app. Server @001
************************************************************************
DATA : LV_VBELN TYPE BAPIVBELN-VBELN,
LS_ITEM TYPE ZSDS0025,
LV_WERKS TYPE VBAP-WERKS,
LV_ETENR TYPE VBEP-ETENR,
LV_MATNR TYPE MATNR,
LV_MATNR_OLD TYPE MATNR,
LV_UPDATEFLAGE,
LV_INDEX TYPE I,
LV_POSNR TYPE POSNR,
LV_BWTTY TYPE MARC-BWTTY. DATA : BEGIN OF IT_VBAP OCCURS ,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
MATNR TYPE VBAP-MATNR,
CHARG TYPE VBAP-CHARG,
WERKS TYPE VBAP-WERKS,
BWTAR TYPE VBAP-BWTAR, "评估类型
END OF IT_VBAP. LV_VBELN = IM_VBELN.
* 获取原有的行项目
SELECT VBELN POSNR MATNR CHARG WERKS BWTAR
FROM VBAP
INTO TABLE IT_VBAP
WHERE VBELN = LV_VBELN. REFRESH: IT_RETURN,
GT_SALESORDER_ITEM,
GT_SALESORDER_ITEMX,
GT_SALESORDER_SCHLINE,
GT_SALESORDER_SCHLINEX,
GT_SALESORDER_CONDITIONS,
GT_SALESORDER_CONDITIONX. IF IM_TYPE = 'SJ'.
* 删除原有的不带批次的行项目
LV_UPDATEFLAGE = 'D'. LOOP AT IT_VBAP WHERE CHARG = ''.
CLEAR GS_SALESORDER_ITEM.
GS_SALESORDER_ITEM-ITM_NUMBER = IT_VBAP-POSNR.
APPEND GS_SALESORDER_ITEM TO GT_SALESORDER_ITEM. CLEAR GS_SALESORDER_ITEMX.
GS_SALESORDER_ITEMX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_ITEMX-ITM_NUMBER = IT_VBAP-POSNR.
APPEND GS_SALESORDER_ITEMX TO GT_SALESORDER_ITEMX. LV_POSNR = IT_VBAP-POSNR.
ENDLOOP. IF SY-SUBRC NE .
READ TABLE IT_VBAP INDEX .
ENDIF. * 新增行项目
LV_UPDATEFLAGE = 'I'. LOOP AT IT_ITEM.
* 确保不存在相同的物料和批次的行项目
READ TABLE IT_VBAP WITH KEY MATNR = IT_ITEM-ZSPKH CHARG = IT_ITEM-ZSPPC.
CHECK SY-SUBRC NE . ADD TO LV_POSNR.
* Item
CLEAR GS_SALESORDER_ITEM.
GS_SALESORDER_ITEM-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_ITEM-MATERIAL = IT_ITEM-ZSPKH.
GS_SALESORDER_ITEM-PLANT = IT_VBAP-WERKS.
GS_SALESORDER_ITEM-BATCH = IT_ITEM-ZSPPC.
GS_SALESORDER_ITEM-TARGET_QTY = IT_ITEM-ZSPJH. * 检查是否启用评估类别
PERFORM FRM_CHECK_VALUE_TYPE USING IT_VBAP-WERKS IT_ITEM-ZSPKH
CHANGING LV_BWTTY. IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEM-VAL_TYPE = IT_ITEM-ZSPPC.
ENDIF. APPEND GS_SALESORDER_ITEM TO GT_SALESORDER_ITEM. CLEAR GS_SALESORDER_ITEMX.
GS_SALESORDER_ITEMX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_ITEMX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_ITEMX-MATERIAL = 'X'.
GS_SALESORDER_ITEMX-BATCH = 'X'.
GS_SALESORDER_ITEMX-PLANT = 'X'.
GS_SALESORDER_ITEMX-TARGET_QTY = 'X'.
IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEMX-VAL_TYPE = 'X'.
ENDIF.
APPEND GS_SALESORDER_ITEMX TO GT_SALESORDER_ITEMX. * Schedule Line
CLEAR GS_SALESORDER_SCHLINE.
GS_SALESORDER_SCHLINE-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_SCHLINE-SCHED_LINE = ''.
GS_SALESORDER_SCHLINE-REQ_QTY = IT_ITEM-ZSPJH.
GS_SALESORDER_SCHLINE-REQ_DATE = IM_BUDAT.
APPEND GS_SALESORDER_SCHLINE TO GT_SALESORDER_SCHLINE. CLEAR GS_SALESORDER_SCHLINEX.
GS_SALESORDER_SCHLINEX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_SCHLINEX-SCHED_LINE = ''.
GS_SALESORDER_SCHLINEX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_SCHLINEX-REQ_QTY = 'X'.
GS_SALESORDER_SCHLINEX-REQ_DATE = 'X'.
APPEND GS_SALESORDER_SCHLINEX TO GT_SALESORDER_SCHLINEX. * Condtions
CLEAR GS_SALESORDER_CONDITIONS.
GS_SALESORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONS-COND_TYPE = 'ZPR4'.
GS_SALESORDER_CONDITIONS-COND_VALUE = .
GS_SALESORDER_CONDITIONS-CURRENCY = 'CNY'.
APPEND GS_SALESORDER_CONDITIONS TO GT_SALESORDER_CONDITIONS. CLEAR GS_SALESORDER_CONDITIONX.
GS_SALESORDER_CONDITIONX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONX-COND_TYPE = 'ZPR4'.
GS_SALESORDER_CONDITIONX-UPDATEFLAG = 'I'.
GS_SALESORDER_CONDITIONX-COND_VALUE = 'X'.
GS_SALESORDER_CONDITIONX-CURRENCY = 'X'.
APPEND GS_SALESORDER_CONDITIONX TO GT_SALESORDER_CONDITIONX. CLEAR GS_SALESORDER_CONDITIONS.
GS_SALESORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONS-COND_TYPE = 'ZPR5'.
GS_SALESORDER_CONDITIONS-COND_VALUE = .
GS_SALESORDER_CONDITIONS-CURRENCY = 'CNY'.
APPEND GS_SALESORDER_CONDITIONS TO GT_SALESORDER_CONDITIONS. CLEAR GS_SALESORDER_CONDITIONX.
GS_SALESORDER_CONDITIONX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONX-COND_TYPE = 'ZPR5'.
GS_SALESORDER_CONDITIONX-UPDATEFLAG = 'I'.
GS_SALESORDER_CONDITIONX-COND_VALUE = 'X'.
GS_SALESORDER_CONDITIONX-CURRENCY = 'X'.
APPEND GS_SALESORDER_CONDITIONX TO GT_SALESORDER_CONDITIONX. ENDLOOP.
ELSEIF IM_TYPE = 'XQ'.
* 获取销售订单的最大行项目数
SORT IT_VBAP BY POSNR DESCENDING.
READ TABLE IT_VBAP INDEX .
IF SY-SUBRC EQ .
LV_POSNR = IT_VBAP-POSNR.
ELSE.
CLEAR LV_POSNR.
ENDIF. LOOP AT IT_ITEM.
* 物料和批次已存在 跳过
READ TABLE IT_VBAP WITH KEY MATNR = IT_ITEM-ZSPKH CHARG = IT_ITEM-ZSPPC.
IF SY-SUBRC EQ .
CONTINUE.
ENDIF. READ TABLE IT_VBAP WITH KEY MATNR = IT_ITEM-ZSPKH CHARG = ''.
IF SY-SUBRC EQ . LV_INDEX = SY-TABIX. * 修改行项目
LV_UPDATEFLAGE = 'U'. * Item
CLEAR GS_SALESORDER_ITEM.
GS_SALESORDER_ITEM-ITM_NUMBER = IT_VBAP-POSNR.
GS_SALESORDER_ITEM-BATCH = IT_ITEM-ZSPPC.
GS_SALESORDER_ITEM-TARGET_QTY = IT_ITEM-ZSPJH.
* 检查是否启用评估类别
PERFORM FRM_CHECK_VALUE_TYPE USING IT_VBAP-WERKS IT_ITEM-ZSPKH
CHANGING LV_BWTTY. IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEM-VAL_TYPE = IT_ITEM-ZSPPC.
ENDIF.
APPEND GS_SALESORDER_ITEM TO GT_SALESORDER_ITEM. CLEAR GS_SALESORDER_ITEMX.
GS_SALESORDER_ITEMX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_ITEMX-ITM_NUMBER = IT_VBAP-POSNR.
GS_SALESORDER_ITEMX-BATCH = 'X'.
GS_SALESORDER_ITEMX-TARGET_QTY = 'X'.
IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEMX-VAL_TYPE = 'X'.
ENDIF.
APPEND GS_SALESORDER_ITEMX TO GT_SALESORDER_ITEMX. * Schedule Line
CLEAR GS_SALESORDER_SCHLINE.
GS_SALESORDER_SCHLINE-ITM_NUMBER = IT_VBAP-POSNR.
GS_SALESORDER_SCHLINE-SCHED_LINE = ''.
GS_SALESORDER_SCHLINE-REQ_QTY = IT_ITEM-ZSPJH.
GS_SALESORDER_SCHLINE-REQ_DATE = IM_BUDAT.
APPEND GS_SALESORDER_SCHLINE TO GT_SALESORDER_SCHLINE. CLEAR GS_SALESORDER_SCHLINEX.
GS_SALESORDER_SCHLINEX-ITM_NUMBER = IT_VBAP-POSNR.
GS_SALESORDER_SCHLINEX-SCHED_LINE = ''.
GS_SALESORDER_SCHLINEX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_SCHLINEX-REQ_QTY = 'X'.
GS_SALESORDER_SCHLINEX-REQ_DATE = 'X'.
APPEND GS_SALESORDER_SCHLINEX TO GT_SALESORDER_SCHLINEX. IT_VBAP-CHARG = IT_ITEM-ZSPPC.
MODIFY IT_VBAP INDEX LV_INDEX TRANSPORTING CHARG.
ELSE.
* ---> 镶嵌订单 新增行 20150420
LV_INDEX = SY-TABIX. * 新增行项目
LV_UPDATEFLAGE = 'I'. ADD TO LV_POSNR. * Item
CLEAR GS_SALESORDER_ITEM.
GS_SALESORDER_ITEM-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_ITEM-MATERIAL = IT_ITEM-ZSPKH.
GS_SALESORDER_ITEM-PLANT = IT_VBAP-WERKS.
GS_SALESORDER_ITEM-BATCH = IT_ITEM-ZSPPC.
GS_SALESORDER_ITEM-TARGET_QTY = IT_ITEM-ZSPJH.
* 检查是否启用评估类别
PERFORM FRM_CHECK_VALUE_TYPE USING IT_VBAP-WERKS IT_ITEM-ZSPKH
CHANGING LV_BWTTY. IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEM-VAL_TYPE = IT_ITEM-ZSPPC.
ENDIF.
APPEND GS_SALESORDER_ITEM TO GT_SALESORDER_ITEM. CLEAR GS_SALESORDER_ITEMX.
GS_SALESORDER_ITEMX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_ITEMX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_ITEMX-BATCH = 'X'.
GS_SALESORDER_ITEMX-MATERIAL = 'X'.
GS_SALESORDER_ITEMX-PLANT = 'X'.
GS_SALESORDER_ITEMX-TARGET_QTY = 'X'.
IF LV_BWTTY EQ 'X'.
GS_SALESORDER_ITEMX-VAL_TYPE = 'X'.
ENDIF.
APPEND GS_SALESORDER_ITEMX TO GT_SALESORDER_ITEMX. * Schedule Line
CLEAR GS_SALESORDER_SCHLINE.
GS_SALESORDER_SCHLINE-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_SCHLINE-SCHED_LINE = ''.
GS_SALESORDER_SCHLINE-REQ_QTY = IT_ITEM-ZSPJH.
GS_SALESORDER_SCHLINE-REQ_DATE = IM_BUDAT.
APPEND GS_SALESORDER_SCHLINE TO GT_SALESORDER_SCHLINE. CLEAR GS_SALESORDER_SCHLINEX.
GS_SALESORDER_SCHLINEX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_SCHLINEX-SCHED_LINE = ''.
GS_SALESORDER_SCHLINEX-UPDATEFLAG = LV_UPDATEFLAGE.
GS_SALESORDER_SCHLINEX-REQ_QTY = 'X'.
GS_SALESORDER_SCHLINEX-REQ_DATE = 'X'.
APPEND GS_SALESORDER_SCHLINEX TO GT_SALESORDER_SCHLINEX. * Condtions
CLEAR GS_SALESORDER_CONDITIONS.
GS_SALESORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONS-COND_TYPE = 'ZPR4'.
GS_SALESORDER_CONDITIONS-COND_VALUE = .
GS_SALESORDER_CONDITIONS-CURRENCY = 'CNY'.
APPEND GS_SALESORDER_CONDITIONS TO GT_SALESORDER_CONDITIONS. CLEAR GS_SALESORDER_CONDITIONX.
GS_SALESORDER_CONDITIONX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONX-COND_TYPE = 'ZPR4'.
GS_SALESORDER_CONDITIONX-UPDATEFLAG = 'I'.
GS_SALESORDER_CONDITIONX-COND_VALUE = 'X'.
GS_SALESORDER_CONDITIONX-CURRENCY = 'X'.
APPEND GS_SALESORDER_CONDITIONX TO GT_SALESORDER_CONDITIONX. CLEAR GS_SALESORDER_CONDITIONS.
GS_SALESORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONS-COND_TYPE = 'ZPR5'.
GS_SALESORDER_CONDITIONS-COND_VALUE = .
GS_SALESORDER_CONDITIONS-CURRENCY = 'CNY'.
APPEND GS_SALESORDER_CONDITIONS TO GT_SALESORDER_CONDITIONS. CLEAR GS_SALESORDER_CONDITIONX.
GS_SALESORDER_CONDITIONX-ITM_NUMBER = LV_POSNR.
GS_SALESORDER_CONDITIONX-COND_TYPE = 'ZPR5'.
GS_SALESORDER_CONDITIONX-UPDATEFLAG = 'I'.
GS_SALESORDER_CONDITIONX-COND_VALUE = 'X'.
GS_SALESORDER_CONDITIONX-CURRENCY = 'X'.
APPEND GS_SALESORDER_CONDITIONX TO GT_SALESORDER_CONDITIONX.
* <--- 镶嵌订单 新增行 20150420
ENDIF.
ENDLOOP.
ENDIF. CHECK GT_SALESORDER_ITEM IS NOT INITIAL. GS_SALESORDER_HEADER1X-UPDATEFLAG = 'U'.
GS_LOGIC_SWITCH-PRICING = 'G'.
* 修改订单
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = LV_VBELN
ORDER_HEADER_INX = GS_SALESORDER_HEADER1X
LOGIC_SWITCH = GS_LOGIC_SWITCH
TABLES
RETURN = GT_RETURN
ORDER_ITEM_IN = GT_SALESORDER_ITEM
ORDER_ITEM_INX = GT_SALESORDER_ITEMX
SCHEDULE_LINES = GT_SALESORDER_SCHLINE
SCHEDULE_LINESX = GT_SALESORDER_SCHLINEX
CONDITIONS_IN = GT_SALESORDER_CONDITIONS
CONDITIONS_INX = GT_SALESORDER_CONDITIONX. LOOP AT GT_RETURN INTO GS_RETURN WHERE TYPE = 'E' OR
TYPE = 'X' OR
TYPE = 'A'.
EXIT.
ENDLOOP. IF SY-SUBRC EQ .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF. IT_RETURN[] = GT_RETURN[]. REFRESH: GT_SALESORDER_ITEM,
GT_SALESORDER_ITEMX,
GT_SALESORDER_SCHLINE,
GT_SALESORDER_SCHLINEX,
GT_SALESORDER_CONDITIONS,
GT_SALESORDER_CONDITIONX.
ENDFUNCTION.
FORM FRM_CHECK_VALUE_TYPE USING P_WERKS
P_MATNR
CHANGING P_BWTTY.
CLEAR P_BWTTY. SELECT SINGLE BWTTY INTO P_BWTTY
FROM MARC
WHERE WERKS = P_WERKS
AND MATNR = P_MATNR.
ENDFORM. " FRM_CHECK_VALUE_TYPE
SO修改的更多相关文章
- 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)
Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- DB1:数据库的创建和文件的修改
在SQL Server中,使用Create Database创建数据库,使用Alter Database命令,能够修改数据库的数据文件和日志文件. 一,创建数据库 1,在创建数据库时,最佳实践是: 创 ...
- ExtJS 4.2 业务开发(三)数据添加和修改
接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...
- 修改eclipse皮肤
习惯了vim黑色背景的程序猿们想必用eclipse时会倍感的不适应吧,不过没关系,因为eclipse的皮肤是可以自己定制的! 下面是我电脑上的eclipse界面,看到这个是不是找回了vim的感觉呢? ...
- ubuntu系统下如何修改host
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- linux centos中添加删除修改环境变量,设置java环境变量
前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
- Android中开发工具Android Studio修改created用户(windows环境)
最近经常有朋友反馈说我的安卓项目中,在一些类中会出现Created by panchengjia on 2016/12/30的字样,是如何自动实现的(默认一般为Administrator),如下图: ...
随机推荐
- PCB表面处理工艺
PCB表面处理最基本的目的是保证良好的可焊性或电性能.由于自然界的铜在空气中倾向于以氧化物的形式存在,不大可能长期保持为原铜,因此需要对铜进行其他处理. 1.热风整平(喷锡) 热风整平又名热风焊料整平 ...
- ServiceStack.OrmLite 笔记9 -code first 必须的代码优先
复杂点的使用3 code first的使用,支持复杂类型 public enum PhoneType { Home, Work, Mobile, } public enum AddressType { ...
- iOS - OC 与 Swift 互相操作
前言 在 Swift 语言中,我们可以使用 Objective-C.C 语言编写代码,我们可以导入任意用 Objective-C 写的 Cocoa 平台框架.Objective-C 框架或 C 类库. ...
- iOS - Swift NSValue 值
前言 public class NSValue : NSObject, NSCopying, NSSecureCoding 将任意数据类型包装成对象. 1.比较两个 NSValue 类型数据的大小 l ...
- effect c++ 口诀。
常用条款,写成口诀,记住.知其所以,也要时时使用. 1)习惯c++: 联替const初. 2)构造,复制,析构: 要知默,构赋析. 若不需,明拒绝. 构析不调虚. 异不逃析构. 基析要虚函. 赋值操, ...
- accessor method & mutator method
import java.time.*; public class MyTest{ public static void main(String[] args){ LocalDate date = Lo ...
- [转载] 高效 MacBook 工作环境配置
原文: http://mp.weixin.qq.com/s?__biz=MjM5NzMyMjAwMA==&mid=208231200&idx=1&sn=8a76ddc56c1f ...
- (十)Linux内核中的常用宏container_of
Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址. Containe ...
- The new day of my blog
今天开始了我的博客建造之旅,作为一个ACMer(虽说是弱校的),我也想象其他人一样把自己的题解和心得记录下来,一来可以和大家分享一下,二来也可以留给将来的自己作回顾,希望众大神能够给以指导指导,让我这 ...
- C++——类继承
类库:类库由类声明和实现构成.类组合了数据表示和类方法,因此提供了比函数库更加完整的程序包. 类继承:从已有的类派生出新的类,派生类继承了原有类(称为基类)的特征,包括方法. 通过类继承可以完成的工作 ...