创建交货单/外向交货BAPI_OUTB_DELIVERY_CREATE_SLS/STO
FUNCTION Z_SD_CREATE_DN.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IM_SHIP_TYPE) TYPE LIKP-VSART DEFAULT '01'
*" VALUE(IM_DUE_DATE) TYPE DATUM DEFAULT '99991231'
*" EXPORTING
*" VALUE(E_DN) TYPE CHAR10
*" VALUE(E_STATUS) TYPE CHAR1
*" VALUE(E_MESSAGE) TYPE CHAR40
*" TABLES
*" T_DATA STRUCTURE ZSDS0008
*" IT_RETURN STRUCTURE BAPIRET2 OPTIONAL
*" IT_DN STRUCTURE VBAK OPTIONAL
*"----------------------------------------------------------------------
DATA : LV_SHIP_POINT TYPE BAPIDLVCREATEHEADER-SHIP_POINT,
LV_DUE_DATE TYPE BAPIDLVCREATEHEADER-DUE_DATE,
LV_DELIVERY TYPE BAPISHPDELIVNUMB-DELIV_NUMB,
LT_SO_ITEMS LIKE TABLE OF BAPIDLVREFTOSALESORDER,
LS_SO_ITEM LIKE BAPIDLVREFTOSALESORDER,
LT_STO_ITEMS LIKE TABLE OF BAPIDLVREFTOSTO,
LS_STO_ITEM LIKE BAPIDLVREFTOSTO,
LT_RETURN LIKE TABLE OF BAPIRET2,
LS_RETURN LIKE BAPIRET2. DATA : LV_TYPE(). "PO / SO
DATA : LV_SUCCESS.
DATA : LV_MATNR TYPE VBAP-MATNR.
DATA : LV_VBELN TYPE VBELN.
DATA : LV_TABIX TYPE SY-TABIX.
DATA : LV_CONTINUE. DATA : LT_LIPS TYPE TABLE OF LIPS,
LS_LIPS TYPE LIPS. DATA : BEGIN OF LS_DATA,
DEL.
INCLUDE STRUCTURE ZSDS0008.
DATA : END OF LS_DATA. DATA : LT_DATA LIKE TABLE OF LS_DATA. DATA : BEGIN OF LT_VBFA OCCURS ,
VBELV TYPE VBFA-VBELV, "先前凭证
POSNV TYPE VBFA-POSNV,
VBELN TYPE VBFA-VBELN, "后续凭证
POSNR TYPE VBFA-POSNN,
END OF LT_VBFA. DATA : LV_MAX TYPE I VALUE '',
LV_COUNT TYPE I. LOOP AT T_DATA.
MOVE-CORRESPONDING T_DATA TO LS_DATA.
APPEND LS_DATA TO LT_DATA.
ENDLOOP. PERFORM FRM_DATA_CHECK TABLES LT_DATA CHANGING E_MESSAGE. IF E_MESSAGE IS NOT INITIAL.
E_STATUS = 'E'.
EXIT.
ENDIF. REFRESH : LT_STO_ITEMS,
LT_SO_ITEMS,
IT_RETURN. SORT LT_DATA BY VBELN POSNR. LV_DUE_DATE = IM_DUE_DATE. CLEAR LS_DATA.
READ TABLE LT_DATA INTO LS_DATA INDEX .
SELECT SINGLE * FROM EKKO WHERE EBELN = LS_DATA-VBELN.
IF SY-SUBRC EQ ."PO - STO.
LV_TYPE = 'PO'.
LV_SHIP_POINT = ''.
* LV_DUE_DATE = '99991230'.
ELSE.
LV_TYPE = 'SO'.
LV_SHIP_POINT = ''.
* LV_DUE_DATE = '99991230'.
ENDIF. * 判断行项目是否产生过交货单
SELECT VGBEL AS VBELV VGPOS AS POSNV VBELN POSNR
FROM LIPS
INTO TABLE LT_VBFA
WHERE VGBEL = LS_DATA-VBELN. * 控制交货单最大的项目数
DO. CLEAR LV_CONTINUE. LOOP AT LT_DATA INTO LS_DATA WHERE DEL EQ ''. * IF LV_MAX = LV_COUNT.
* CLEAR LV_COUNT.
* EXIT.
* ENDIF.
* 排除掉已经创建过交货单的行项目
READ TABLE LT_VBFA WITH KEY VBELV = LS_DATA-VBELN POSNV = LS_DATA-POSNR.
IF SY-SUBRC EQ .
E_DN = LT_VBFA-VBELN.
IT_DN-VBELN = E_DN.
COLLECT IT_DN.
CONTINUE.
ENDIF. CLEAR E_DN. ADD TO LV_COUNT. IF LV_TYPE = 'PO'.
CLEAR LS_STO_ITEM.
LS_STO_ITEM-REF_DOC = LS_DATA-VBELN.
LS_STO_ITEM-REF_ITEM = LS_DATA-POSNR.
APPEND LS_STO_ITEM TO LT_STO_ITEMS.
ELSE.
CLEAR LS_SO_ITEM.
LS_SO_ITEM-REF_DOC = LS_DATA-VBELN.
LS_SO_ITEM-REF_ITEM = LS_DATA-POSNR.
APPEND LS_SO_ITEM TO LT_SO_ITEMS.
ENDIF. LV_CONTINUE = 'X'. LS_DATA-DEL = 'X'.
MODIFY LT_DATA FROM LS_DATA TRANSPORTING DEL.
ENDLOOP. IF LV_CONTINUE EQ ''.
EXIT.
ENDIF. IF LV_DUE_DATE NE ''.
FREE MEMORY ID 'DUE_DATE'.
EXPORT LV_DUE_DATE TO MEMORY ID 'DUE_DATE'.
ENDIF. IF LT_SO_ITEMS IS NOT INITIAL.
* Call BAPI to Create DN
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
EXPORTING
SHIP_POINT = LV_SHIP_POINT
DUE_DATE = LV_DUE_DATE
IMPORTING
DELIVERY = LV_DELIVERY
TABLES
SALES_ORDER_ITEMS = LT_SO_ITEMS
RETURN = LT_RETURN. ELSEIF LT_STO_ITEMS IS NOT INITIAL.
* Call BAPI to Create DN
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
SHIP_POINT = LV_SHIP_POINT
DUE_DATE = LV_DUE_DATE
IMPORTING
DELIVERY = LV_DELIVERY
TABLES
STOCK_TRANS_ITEMS = LT_STO_ITEMS
RETURN = LT_RETURN. ENDIF. APPEND LINES OF LT_RETURN TO IT_RETURN. LOOP AT LT_RETURN TRANSPORTING NO FIELDS WHERE TYPE = 'A' OR
TYPE = 'E' OR
TYPE = 'X'.
EXIT.
ENDLOOP. IF SY-SUBRC EQ .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. PERFORM FRM_CONVERT_MESSAGE TABLES LT_RETURN CHANGING E_MESSAGE. E_STATUS = 'E'.
EXIT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'. E_STATUS = 'S'.
E_DN = LV_DELIVERY.
ENDIF. DO TIMES.
SELECT *
FROM LIPS
INTO TABLE LT_LIPS
WHERE VBELN = LV_DELIVERY. IF SY-SUBRC EQ .
EXIT.
ENDIF.
ENDDO. * --->请求交货数量 与交货数量不一致 20152417
IF LT_STO_ITEMS IS NOT INITIAL AND LINES( LT_STO_ITEMS ) NE LINES( LT_LIPS ).
* WAIT UP TO 1 SECONDS.
PERFORM FRM_DELETE_DELIVERY TABLES IT_RETURN USING LV_DELIVERY.
CLEAR IT_RETURN.
IT_RETURN-ID = ''.
IT_RETURN-NUMBER = ''.
IT_RETURN-TYPE = 'E'.
IT_RETURN-MESSAGE = '交货数量与请求交货数量不一致,停止交货'.
IT_RETURN-MESSAGE_V1 = '交货数量与请求交货数量不一致'.
IT_RETURN-MESSAGE_V2 = ',停止交货'.
IT_RETURN-MESSAGE_V3 = LV_DELIVERY.
IT_RETURN-MESSAGE_V4 = ''.
APPEND IT_RETURN. CLEAR: E_STATUS,E_DN.
EXIT.
ELSEIF LT_SO_ITEMS IS NOT INITIAL AND LINES( LT_SO_ITEMS ) NE LINES( LT_LIPS ).
* WAIT UP TO 1 SECONDS.
PERFORM FRM_DELETE_DELIVERY TABLES IT_RETURN USING LV_DELIVERY.
CLEAR IT_RETURN.
IT_RETURN-ID = ''.
IT_RETURN-NUMBER = ''.
IT_RETURN-TYPE = 'E'.
IT_RETURN-MESSAGE = '交货数量与请求交货数量不一致,停止交货'.
IT_RETURN-MESSAGE_V1 = '交货数量与请求交货数量不一致'.
IT_RETURN-MESSAGE_V2 = ',停止交货'.
IT_RETURN-MESSAGE_V3 = LV_DELIVERY.
IT_RETURN-MESSAGE_V4 = ''.
APPEND IT_RETURN. CLEAR: E_STATUS,E_DN.
EXIT.
ENDIF.
* <---请求交货数量 与交货数量不一致 20150427 IT_DN-VBELN = LV_DELIVERY.
APPEND IT_DN. * REFRESH : GT_DN_ITEM.
*
* LOOP AT LT_LIPS INTO LS_LIPS.
* LV_TABIX = SY-TABIX.
*
* CLEAR GS_DN_ITEM.
* GS_DN_ITEM-DELIV_NUMB = LS_LIPS-VBELN.
* GS_DN_ITEM-DELIV_ITEM = LS_LIPS-POSNR.
* GS_DN_ITEM-MATERIAL = LS_LIPS-MATNR.
* GS_DN_ITEM-DLV_QTY = LS_LIPS-LGMNG.
* GS_DN_ITEM-FACT_UNIT_NOM = LS_LIPS-UMVKZ.
* GS_DN_ITEM-FACT_UNIT_DENOM = LS_LIPS-UMVKN.
*
* READ TABLE LT_DATA INTO LS_DATA WITH KEY VBELN = LS_LIPS-VGBEL POSNR = LS_LIPS-VGPOS.
* IF SY-SUBRC EQ 0 AND LS_DATA-CHARG IS NOT INITIAL AND LS_LIPS-CHARG NE LS_DATA-CHARG.
* GS_DN_ITEM-BATCH = LS_DATA-CHARG.
* APPEND GS_DN_ITEM TO GT_DN_ITEM.
*
* LS_LIPS-CHARG = LS_DATA-CHARG.
* ELSE.
* DELETE LT_LIPS INDEX LV_TABIX.
* CONTINUE.
* ENDIF.
*
* CLEAR GS_DN_ITEM_CTR.
* GS_DN_ITEM_CTR-DELIV_NUMB = LS_LIPS-VBELN.
* GS_DN_ITEM_CTR-DELIV_ITEM = LS_LIPS-POSNR.
* GS_DN_ITEM_CTR-CHG_DELQTY = 'X'.
* APPEND GS_DN_ITEM_CTR TO GT_DN_ITEM_CTR.
*
* MODIFY LT_LIPS FROM LS_LIPS TRANSPORTING CHARG.
* ENDLOOP. * CHECK GT_DN_ITEM IS NOT INITIAL. * GS_DN_HEADER-DELIV_NUMB = LV_DELIVERY.
* GS_DN_HEADER_CTR-DELIV_NUMB = LV_DELIVERY.
* GS_DN_HEADER-SHIP_COND = IM_SHIP_COND."Ship condition
* GS_DN_HEADER_CTR-SHIP_COND_FLG = 'X'."Ship condition
* GV_DN_NUMBER = LV_DELIVERY. * Update Batch to DN
* CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
* EXPORTING
* HEADER_DATA = GS_DN_HEADER
* HEADER_CONTROL = GS_DN_HEADER_CTR
* DELIVERY = GV_DN_NUMBER
* TABLES
* ITEM_DATA = GT_DN_ITEM
* ITEM_CONTROL = GT_DN_ITEM_CTR
* RETURN = GT_RETURN. * LV_VBELN = LV_DELIVERY.
* CALL FUNCTION 'Z_SD_CHANGE_DN'
* EXPORTING
* IM_DELIVERY = LV_VBELN
* IM_SHIP_TYPE = IM_SHIP_TYPE
* TABLES
* IT_ITEM = LT_LIPS
* IT_RETURN = GT_RETURN.
*
*
* LOOP AT GT_RETURN TRANSPORTING NO FIELDS WHERE TYPE = 'A' OR
* TYPE = 'E' OR
* TYPE = 'X'.
* EXIT.
* ENDLOOP.
*
* IF SY-SUBRC EQ 0.
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
* APPEND LINES OF GT_RETURN TO IT_RETURN.
*
* PERFORM FRM_CONVERT_MESSAGE TABLES GT_RETURN CHANGING E_MESSAGE.
** Delete Delivery Note
* PERFORM FRM_DELETE_DELIVERY USING LV_VBELN.
*
* E_STATUS = 'E'.
* ELSE.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT = 'X'.
*
* E_STATUS = 'S'.
* E_DN = LV_DELIVERY.
* ENDIF.
*
* REFRESH: LT_SO_ITEMS,
* LT_STO_ITEMS,
* LT_LIPS.
*
* APPEND LINES OF GT_RETURN TO IT_RETURN.
*
* IT_DN-VBELN = LV_DELIVERY.
* APPEND IT_DN.
ENDDO. ENDFUNCTION. ZSDS0008结构:
KUNNR 类型 KUNNR
VBELN 类型 VBELN
POSNR 类型 POSNR
CHARG 类型 CHARG_D
创建交货单/外向交货BAPI_OUTB_DELIVERY_CREATE_SLS/STO的更多相关文章
- 销售订单、外向交货单、交货 bapi
转自[http://www.cnblogs.com/elegantok/archive/2009/10/18/1585398.html]***********SALES ORDER INPUT CRE ...
- SAP 参照sto订单创建外向交货BAPI
DATA: SHIP_POINT TYPE TVST-VSTEL, "装运点/接收点 NUM_DELIVERIES TYPE VBNUM, STOCK_TRANS_ITEMS WITH HE ...
- 『诡异的』VL10B创建外向交货单出错解决全过程
一直觉得SAP STO的业务模式配置起来还是挺简单的,无非就是关联一下采购单与交货单的关系,以及相应工厂的装运数据,其他像主数据的设置也没有什么特别的.相比ICS模式,它少了IDOC的配置,所以还是很 ...
- 「SAP技术」A项目关联公司间退货STO流程
[SAP技术]A项目关联公司间退货STO流程 1)创建公司间退货STO单据. 如下图示的公司间退货STO 4500000572, 2),VL10B, 创建交货单. 如下图交货单号:80044918, ...
- SAP MM 公司间STO发货单输出报错 - 合并工厂AUC1和存储位置6002没有货物收货地点 - 之对策
SAP MM 公司间STO发货单输出报错 - 合并工厂AUC1和存储位置6002没有货物收货地点 - 之对策 昨天收到客户业务部门报错,说是业务对交货单0080022298做POD失败.相关交货单的输 ...
- 成套销售交货组与BOM 546719 - FAQ: Delivery group and BOM in the delivery
交货组:将需要同时交互给客户的项目捆绑在一起,按行项目中最后交货日期做完交货组的计划行日期 1.如果销售订单标记为完全交货,则所有行项目都会分配到同一个交货组中 删除交货单是会给出警告 2.为母键行项 ...
- BAPI
MM模块 1. BAPI_MATERIAL_SAVEDATA 创建物料主数据 注意参数EXTENSIONIN的使用,可以创建自定义字段 例如:WA_BAPI_TE_MARA-MATERIAL = IT ...
- SAP 各模块常用的BAPI
MM模块 1. BAPI_MATERIAL_SAVEDATA 创建物料主数据 注意参数EXTENSIONIN的使用,可以创建自定义字段 例如:WA_BAPI_TE_MARA-MATERIAL = IT ...
- 常用tcode
SAP常用TCODE 1 MMBE 查询库存 2 CO01 生产订单创建 3 ME2N-按采购订单编号 ME2B/ME2M/ME2C/ME2W 采购订单查询 清单范围ALV 4 MB51 物料凭证清单 ...
随机推荐
- @JoinColumn
@OneToOne注释只能确定实体与实体的关系是一对一的关系,不能指定数据库表中的保存的关联字段.所以此时要结合@JoinColumn标记来指定保存实体关系的配置. @JoinColumn与本书上一章 ...
- Web开发——Tomcat的配置
1.选择Tomcat 1.Apache官网http://apache.org/ 2.Tomcat官网http://tomcat.apache.org/ 3.Tomcat下载地址http://tomca ...
- Struts BaseAction工具类,封装Session,Request,Application,ModelDriven
package com.ssh.shop.action; import java.io.InputStream; import java.lang.reflect.ParameterizedType; ...
- hdu 4712 Hamming Distance 随机
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- RARP
ARP的工作原理如下:1. 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系.2. 当源主机需要将一个数据包要发送到目的主机时 ...
- 初始Hibernate框架技术
hibernate: 定义:ORM:Object Relational Mapping 对象 关系 映射 使用hibernate时几个必要的: 1.实体类 2.映射文件(类 -数据库表,属性-字段) ...
- Android ActionBar以及menu的代码设置样式
menu部分xml代码 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android= ...
- iOS - UILabel
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UILabel : UIView <NSCoding> @available(iOS 2.0, *) p ...
- [转载] [Mark]分布式存储必读论文
原文: http://50vip.com/423.html 分布式存储泛指存储存储和管理数据的系统, 与无状态的应用服务器不同, 如何处理各种故障以保证数据一致,数据不丢, 数据持续可用, 是分布式存 ...
- mysql 性能问题的解决
场景:模拟一天的数据,每个10秒,遍历1000个设备,每个设备模拟一个实时数据,总的数据量为:24*60*60/10*1000 = 864万条记录.-------------------------- ...