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 外向交货单取消过账+删除批次拆分相关推荐

  1. 交货单批次拆分(BAPI_OUTB_DELIVERY_CHANGE )并更改拣配数量,发货过账(WS_DELIVERY_UPDATE)

    *&---------------------------------------------------------------------* *& Report  ZVL02N_C ...

  2. SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单?

    SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单? 公司间STO流程里,如果是自有库存的STO,则收货方收货的时候,是可以基于STO单据来做的,更多的是应该基于发货方的out ...

  3. 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2

    通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part B 6, 入站IDOC的设置 IDoc type – DELVRY01 Message Type – DES ...

  4. 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I

    通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 - Part I 公司间采购(公司间库存转储)流程里,常见的解决方案是发货方完成发货过账后,自动触发收货方的内向交货单.除 ...

  5. SAP HUM 带HU的TO单对应的外向交货单VL09取消PGI之后不能对该交货单执行LT0G做WM层面的返架?

    SAP HUM 带HU的TO单对应的外向交货单VL09取消PGI之后不能对该交货单执行LT0G做WM层面的返架? 比如交货单 81748773 完成了拣配,关联了2个HU, VL02N to post ...

  6. 冲销已过账外向交货单

    *&---------------------------------------------------------------------* *& Report  YLM_TEST ...

  7. SAP外向交货单中的批次拆分应用于免费货物的小问题

    外向交货单中,批次拆分(或者叫确定)是个很有用的功能,特别是在产品批次很多的情况下.相关配置可以在网上找到教程.我在这里只记录一下特别注意之处: 事务码:0184  (全数字)  进入后,按 交货类型 ...

  8. SAP-MM-内向外向交货单

    1.内向&外向交货单概念 外向交货(outbound delivery)是用在客户与企业之间的交货单,而内向交货(inbound delivery)则是用在供应商与企业之间的交货单:换言之,外 ...

  9. SAP公司间STO流程里外向交货单PGI后自动触发内向交货单的实现

    SAP公司间STO流程里外向交货单PGI后自动触发内向交货单的实现 公司间采购(公司间库存转储)在很多SAP项目里很常见,笔者在很多项目里都有这种场景.项目实践中,都是采用SAP的Inter-comp ...

最新文章

  1. 详解.NET中容易混淆的委托与接口
  2. DCMTK:查询/检索服务类用户(C-FIND操作)
  3. MySQL空密码用户清理
  4. java中的几种泛型类——HashSet、HashMap、TreeSet、TreeMap,遍历map,排序,HashTable比较
  5. 钉钉项目任务怎么添加审批表单
  6. 开发指南专题十一:JEECG微云快速开发平台--基础用户权限
  7. form表单reset报 reset is not a function
  8. .net remoting的事务传播以及wcf分布式事务
  9. 数组 -- 13.2 Maximum Subarray --图解
  10. php 签名 bom,PHP与Unicode签名(BOM)
  11. android 字符串 转json,Android将字符串转换为JSON
  12. 十分钟搞清字符集和字符编码
  13. gdal 实现 热点分析 (Getis-Ord Gi*)
  14. JAVA中的“人妖”
  15. Python 中File(文件) 方法?
  16. 浅析电感噪音以及解决办法
  17. CUDA out of memory(CUDA显存不足)
  18. 人工智能——K-Means聚类算法(Python)
  19. awesome-javascript
  20. SEO资源生态圈是什么(SEO资源生态圈如何建设呢)

热门文章

  1. SRG2200 虚拟服务器6,华为SRG2200路由器如何做内网映射?
  2. 分析C语言位域的访问开销
  3. 昆仑通态通讯ABB ACS510变频器恒压供水(一拖一到四 ABB变频器恒压供水触摸屏通讯程序
  4. 教你如何从Google Map爬数据(切片)
  5. 涡轮叶片端壁造型方法
  6. 合格的嵌入式开发者应掌握的技能大全
  7. WPF关于Command绑定
  8. 剖析5G云游戏技术瓶颈与机会
  9. python调用微信截图功能
  10. scratch太空大战 电子学会图形化编程scratch等级考试四级真题和答案解析B卷2019年12月