ABAP 外向交货单取消过账+删除批次拆分
SAP 与WMS 集成之后,会出现这么一种情况,就是外向交货单发货过账之后,
WMS 端发起取消发货,那么接口需要将已经过账的外向交货单冲销,并将已经做了批次拆分的外向交货单,还原成未拆分的。
外向交货取消发货bapi: WS_REVERSE_GOODS_ISSUE
外向交货单删除批次拆分行:BAPI_OUTB_DELIVERY_CHANGE
但是再一个接口中同时调用这两个函数会有问题,报错VL216
经过debug发现,两个函数用了一些公用的变量,倒是内表的数据错误,所以校验出了问题
后来通过VL09的BDC + BAPI_OUTB_DELIVERY_CHANGE 实现需求
实例代码如下:
DATA: LT_MESG TYPE STANDARD TABLE OF MESG,LS_MESG TYPE MESG,LS_EMKPF TYPE EMKPF.DATA: LV_MESSAGE TYPE STRING.DATA: LV_ALL_MESSAGE TYPE STRING.DATA: LV_FLAG TYPE CHAR01.DATA: LV_VBELN TYPE LIPS-VBELN.DATA LS_ZCA_URL TYPE ZCA_URL.DATA LV_POSTDATE TYPE DATUM.*to check if the date control is open BY FEI XUE 20211201CLEAR LS_ZCA_URL.SELECT SINGLE *FROM ZCA_URLINTO LS_ZCA_URLWHERE INTERFACEID = 'I03'.IF LS_ZCA_URL-ZDATECONTRL IS NOT INITIAL AND LS_ZCA_URL-ZPOSTDATE IS NOT INITIAL.LV_POSTDATE = LS_ZCA_URL-ZPOSTDATE.ELSE.LV_POSTDATE = SY-DATUM.ENDIF.
*to check if the date control is open BY FEI XUE 20211201CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT = LS_DATA-DNIMPORTINGOUTPUT = LV_VBELN.*如果通过BAPI进项过账,用VL09冲销需要更新VLSTK状态。UPDATE LIKP SET VLSTK = SPACEWHERE VBELN = LV_VBELN .IF SY-SUBRC = 0 .COMMIT WORK AND WAIT .ENDIF .DATA:LT_MESSAGE TYPE TABLE OF BDCMSGCOLL,LS_MESSAGE TYPE BDCMSGCOLL.DATA:LV_SUBRC TYPE SYST-SUBRC .CALL FUNCTION 'ZFM_VL09_BDC'EXPORTINGCTU = 'X'MODE = 'N'UPDATE = 'S'
* GROUP =
* USER =
* KEEP =
* HOLDDATE =
* NODATA =LOW_001 = LV_VBELN
* LF_ANAUS_002 = 'X'IMPORTINGSUBRC = LV_SUBRCTABLESMESSTAB = LT_MESSAGE.LOOP AT LT_MESSAGE INTO LS_MESSAGE WHERE MSGTYP CA 'EAX'.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = LS_MESSAGE-MSGIDMSGNR = LS_MESSAGE-MSGNRMSGV1 = LS_MESSAGE-MSGV1MSGV2 = LS_MESSAGE-MSGV2MSGV3 = LS_MESSAGE-MSGV3MSGV4 = LS_MESSAGE-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = LV_MESSAGE.CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.ENDLOOP.
* CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
* EXPORTING
* I_VBELN = LS_DATA-DN
* I_BUDAT = LV_POSTDATE
** I_COUNT =
** I_MBLNR =
* I_TCODE = 'VL09'
* I_VBTYP = 'J'
** I_MBLPO =
** I_MJAHR =
** I_POSNR =
** I_SIMULATE = ' '
** I_SPE_BUDAT_UHR =
** I_SPE_BUDAT_ZONE =
** I_SPE_MDNUM_EWM =
** I_SPE_LOGSYS =
** I_SPE_CONFIRM_CENTRAL = ' '
* IMPORTING
* ES_EMKPF = LS_EMKPF
* TABLES
* T_MESG = LT_MESG
* EXCEPTIONS
* ERROR_REVERSE_GOODS_ISSUE = 1
* ERROR_MESSAGE = 3
* OTHERS = 2.
* IF SY-SUBRC <> 0.
* LOOP AT LT_MESG INTO LS_MESG WHERE MSGTY EQ 'E' OR MSGTY EQ 'A'.
* CALL FUNCTION 'MESSAGE_TEXT_BUILD'
* EXPORTING
* MSGID = LS_MESG-MSGTY
* MSGNR = LS_MESG-TXTNR
* MSGV1 = LS_MESG-MSGV1
* MSGV2 = LS_MESG-MSGV2
* MSGV3 = LS_MESG-MSGV3
* MSGV4 = LS_MESG-MSGV4
* IMPORTING
* MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
*
* CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.
* ENDLOOP.
* ENDIF.IF LV_ALL_MESSAGE IS INITIAL .COMMIT WORK AND WAIT.DATA: LS_HEADER_DATA TYPE BAPIOBDLVHDRCHG.DATA: LS_HEADER_CONTROL TYPE BAPIOBDLVHDRCTRLCHG.DATA: LT_BATCH_ITEM TYPE STANDARD TABLE OF BAPIOBDLVITEMCHG.DATA: LS_BATCH_ITEM TYPE BAPIOBDLVITEMCHG.DATA: LT_BATCH_CONTROL TYPE STANDARD TABLE OF BAPIOBDLVITEMCTRLCHG.DATA: LS_BATCH_CONTROL TYPE BAPIOBDLVITEMCTRLCHG.DATA : TECHN_CONTROL LIKE BAPIDLVCONTROL. "TECHN_CONTROLDATA: LT_LIPS TYPE STANDARD TABLE OF LIPS.DATA: LS_LIPS TYPE LIPS.DATA: LT_LIPS_SPLIT TYPE STANDARD TABLE OF LIPS.DATA: LS_LIPS_SPLIT TYPE LIPS.DATA: LT_RETURN_TAB TYPE TABLE OF BAPIRET2,LS_RETURN_TAB TYPE BAPIRET2."HeaderLS_HEADER_DATA-DELIV_NUMB = LV_VBELN.LS_HEADER_CONTROL-DELIV_NUMB = LV_VBELN.TECHN_CONTROL-UPD_IND = 'U' .CLEAR:LT_LIPS, LS_LIPS.SELECT * INTO TABLE LT_LIPSFROM LIPSWHERE VBELN = LV_VBELNAND UECHA EQ SPACE.LOOP AT LT_LIPS INTO LS_LIPS.CLEAR LS_BATCH_ITEM.CLEAR LS_BATCH_CONTROL.LS_BATCH_ITEM-DELIV_NUMB = LV_VBELN. "被拆分DN号LS_BATCH_ITEM-DELIV_ITEM = LS_LIPS-POSNR. "被拆分DN ItemLS_BATCH_ITEM-MATERIAL = LS_LIPS-MATNR. "物料 "feiLS_BATCH_ITEM-DLV_QTY = LS_LIPS-KCMENG. "交货数量 "feiLS_BATCH_ITEM-DLV_QTY_IMUNIT = LS_LIPS-KCMENG. "交货数量 "feiLS_BATCH_ITEM-BASE_UOM = LS_LIPS-VRKME. "被拆分DN销售单位 "feiLS_BATCH_ITEM-SALES_UNIT = LS_LIPS-VRKME. "被拆分DN销售单位 "feiLS_BATCH_ITEM-SALES_UNIT_ISO = LS_LIPS-MEINS. "被拆分DN基本单位 "feiLS_BATCH_ITEM-FACT_UNIT_NOM = LS_LIPS-UMVKZ. "销售数量转换成SKU的分子(因子)LS_BATCH_ITEM-FACT_UNIT_DENOM = LS_LIPS-UMVKN. "销售数量转换为 SKU 的值(分母)APPEND LS_BATCH_ITEM TO LT_BATCH_ITEM.LS_BATCH_CONTROL-DELIV_NUMB = LV_VBELN.LS_BATCH_CONTROL-DELIV_ITEM = LS_LIPS-POSNR.LS_BATCH_CONTROL-CHG_DELQTY = 'X'.APPEND LS_BATCH_CONTROL TO LT_BATCH_CONTROL.CLEAR:LT_LIPS_SPLIT, LS_LIPS_SPLIT.SELECT * INTO TABLE LT_LIPS_SPLITFROM LIPSWHERE VBELN = LV_VBELNAND UECHA = LS_LIPS-POSNRAND POSNR LIKE '9%'.IF SY-SUBRC = 0."HeaderLS_HEADER_DATA-DELIV_NUMB = LV_VBELN.LS_HEADER_CONTROL-DELIV_NUMB = LV_VBELN.LOOP AT LT_LIPS_SPLIT INTO LS_LIPS_SPLIT WHERE UECHA = LS_LIPS-POSNR.CLEAR LS_BATCH_ITEM.CLEAR LS_BATCH_CONTROL.LS_BATCH_ITEM-DELIV_NUMB = LV_VBELN. "被拆分DN号LS_BATCH_ITEM-DELIV_ITEM = LS_LIPS_SPLIT-POSNR. "被拆分DN ItemLS_BATCH_ITEM-HIERARITEM = LS_LIPS-POSNR . "feiLS_BATCH_ITEM-USEHIERITM = '1' . "feiLS_BATCH_ITEM-MATERIAL = LS_LIPS_SPLIT-MATNR. "物料 "feiLS_BATCH_ITEM-DLV_QTY = LS_LIPS_SPLIT-LFIMG. "交货数量 "feiLS_BATCH_ITEM-SALES_UNIT = LS_LIPS_SPLIT-VRKME. "被拆分DN销售单位 "feiLS_BATCH_ITEM-SALES_UNIT_ISO = LS_LIPS_SPLIT-MEINS. "被拆分DN基本单位 "feiLS_BATCH_ITEM-FACT_UNIT_NOM = LS_LIPS_SPLIT-UMVKZ. "销售数量转换成SKU的分子(因子)LS_BATCH_ITEM-FACT_UNIT_DENOM = LS_LIPS_SPLIT-UMVKN. "销售数量转换为 SKU 的值(分母)APPEND LS_BATCH_ITEM TO LT_BATCH_ITEM.LS_BATCH_CONTROL-DELIV_NUMB = LV_VBELN.LS_BATCH_CONTROL-DELIV_ITEM = LS_LIPS_SPLIT-POSNR.LS_BATCH_CONTROL-DEL_ITEM = 'X'.APPEND LS_BATCH_CONTROL TO LT_BATCH_CONTROL.ENDLOOP.ENDIF.ENDLOOP.CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'EXPORTINGHEADER_DATA = LS_HEADER_DATAHEADER_CONTROL = LS_HEADER_CONTROLDELIVERY = LV_VBELNTECHN_CONTROL = TECHN_CONTROLTABLESITEM_DATA = LT_BATCH_ITEMITEM_CONTROL = LT_BATCH_CONTROLRETURN = LT_RETURN_TABEXCEPTIONSERROR_MESSAGE = 1OTHERS = 2.LOOP AT LT_RETURN_TAB INTO LS_RETURN_TAB WHERE TYPE CA 'EAX'.LV_FLAG = 'X'.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = LS_RETURN_TAB-IDMSGNR = LS_RETURN_TAB-NUMBERMSGV1 = LS_RETURN_TAB-MESSAGE_V1MSGV2 = LS_RETURN_TAB-MESSAGE_V2MSGV3 = LS_RETURN_TAB-MESSAGE_V3MSGV4 = LS_RETURN_TAB-MESSAGE_V4IMPORTINGMESSAGE_TEXT_OUTPUT = LV_MESSAGE.CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.ENDLOOP.IF LV_ALL_MESSAGE IS NOT INITIAL .CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.IF_STATU = '02'.IFMSG = LV_ALL_MESSAGE.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.ENDIF.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.IF_STATU = '02'.IFMSG = LV_ALL_MESSAGE.LV_FLAG = 'X'.ENDIF.IF LV_FLAG IS INITIAL .IF_STATU = '01'.IFMSG = 'success'.ENDIF.
ABAP 外向交货单取消过账+删除批次拆分相关推荐
- 交货单批次拆分(BAPI_OUTB_DELIVERY_CHANGE )并更改拣配数量,发货过账(WS_DELIVERY_UPDATE)
*&---------------------------------------------------------------------* *& Report ZVL02N_C ...
- SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单?
SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单? 公司间STO流程里,如果是自有库存的STO,则收货方收货的时候,是可以基于STO单据来做的,更多的是应该基于发货方的out ...
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part B 6, 入站IDOC的设置 IDoc type – DELVRY01 Message Type – DES ...
- 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I
通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I 公司间采购(公司间库存转储)流程里,常见的解决方案是发货方完成发货过账后,自动触发收货方的内向交货单.除 ...
- SAP HUM 带HU的TO单对应的外向交货单VL09取消PGI之后不能对该交货单执行LT0G做WM层面的返架?
SAP HUM 带HU的TO单对应的外向交货单VL09取消PGI之后不能对该交货单执行LT0G做WM层面的返架? 比如交货单 81748773 完成了拣配,关联了2个HU, VL02N to post ...
- 冲销已过账外向交货单
*&---------------------------------------------------------------------* *& Report YLM_TEST ...
- SAP外向交货单中的批次拆分应用于免费货物的小问题
外向交货单中,批次拆分(或者叫确定)是个很有用的功能,特别是在产品批次很多的情况下.相关配置可以在网上找到教程.我在这里只记录一下特别注意之处: 事务码:0184 (全数字) 进入后,按 交货类型 ...
- SAP-MM-内向外向交货单
1.内向&外向交货单概念 外向交货(outbound delivery)是用在客户与企业之间的交货单,而内向交货(inbound delivery)则是用在供应商与企业之间的交货单:换言之,外 ...
- SAP公司间STO流程里外向交货单PGI后自动触发内向交货单的实现
SAP公司间STO流程里外向交货单PGI后自动触发内向交货单的实现 公司间采购(公司间库存转储)在很多SAP项目里很常见,笔者在很多项目里都有这种场景.项目实践中,都是采用SAP的Inter-comp ...
最新文章
- 详解.NET中容易混淆的委托与接口
- DCMTK:查询/检索服务类用户(C-FIND操作)
- MySQL空密码用户清理
- java中的几种泛型类——HashSet、HashMap、TreeSet、TreeMap,遍历map,排序,HashTable比较
- 钉钉项目任务怎么添加审批表单
- 开发指南专题十一:JEECG微云快速开发平台--基础用户权限
- form表单reset报 reset is not a function
- .net remoting的事务传播以及wcf分布式事务
- 数组 -- 13.2 Maximum Subarray --图解
- php 签名 bom,PHP与Unicode签名(BOM)
- android 字符串 转json,Android将字符串转换为JSON
- 十分钟搞清字符集和字符编码
- gdal 实现 热点分析 (Getis-Ord Gi*)
- JAVA中的“人妖”
- Python 中File(文件) 方法?
- 浅析电感噪音以及解决办法
- CUDA out of memory(CUDA显存不足)
- 人工智能——K-Means聚类算法(Python)
- awesome-javascript
- SEO资源生态圈是什么(SEO资源生态圈如何建设呢)