使用:  SD_SALESDOCUMENT_CHANGE   关闭订单

  DATA: ls_header_in  LIKE bapisdhd1 .
DATA: ls_header_inx LIKE bapisdhd1x,
lt_item_in LIKE TABLE OF bapisditm,
ls_item_in LIKE bapisditm,
lt_item_inx LIKE TABLE OF bapisditmx,
ls_item_inx LIKE bapisditmx,
lt_bapiret2 LIKE bapiret2 OCCURS WITH HEADER LINE.
DATA: lv_message TYPE string. *BREAK xiangcai.
LOOP AT pt_data INTO DATA(ls_data).
SELECT SINGLE lfstk
INTO @DATA(ls_lfstk)
FROM vbak
WHERE vbeln = @ls_data-zbillno.
IF ls_lfstk = 'C'.
DATA(lv_msg) = '已完成交货'.
ls_data-zmess = '订单已完成交货'.
ls_data-zpststu = ''.
ls_data-updat = sy-datum.
ls_data-uptim = sy-uzeit.
ls_data-upnam = sy-uname.
MODIFY pt_data FROM ls_data.
CONTINUE.
ENDIF.
**检查回传的数量 ztotal = 创建的批发销售DN 的项目数量
CLEAR:ls_zift0008sum.
READ TABLE lt_zift0008sum INTO ls_zift0008sum WITH KEY zbillno = ls_data-zbillno
zlineno = ls_data-zlineno
BINARY SEARCH. IF ls_data-ztotal = ls_zift0008sum-ztotal.
ls_header_inx-updateflag = 'U'.
* ls_header_in-serv_date = sy-datum .
* ls_header_inx-serv_date = 'X'. ls_item_in-itm_number = ls_data-zlineno.
ls_item_in-material = ls_data-zmatnr.
ls_item_in-reason_rej = ''."拒绝原因
APPEND ls_item_in TO lt_item_in.
CLEAR: ls_item_in. ls_item_inx-updateflag = 'X'.
ls_item_inx-itm_number = ls_data-zlineno.
ls_item_inx-material = 'X'.
ls_item_inx-reason_rej = 'X'.
APPEND ls_item_inx TO lt_item_inx.
CLEAR: ls_item_inx. ELSE.
lv_msg = '前序数据没有接收完全'.
ls_data-zmess = '前序数据没有接收完全'.
ls_data-zpststu = ''.
MODIFY pt_data FROM ls_data.
RETURN.
ENDIF.
ENDLOOP. IF lt_item_in[] IS NOT INITIAL.
***未清SO关闭处理
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = ls_data-zbillno
* order_header_in = ls_header_in
order_header_inx = ls_header_inx
behave_when_error = 'P'
TABLES
item_in = lt_item_in
item_inx = lt_item_inx
return = lt_bapiret2. LOOP AT lt_bapiret2 INTO DATA(ls_bapiret2) WHERE type = 'E' OR type = 'A' OR type = 'X'.
DATA(lv_tyep) = 'E'.
CLEAR: lv_message.
MESSAGE ID ls_bapiret2-id
TYPE ls_bapiret2-type
NUMBER ls_bapiret2-number
WITH ls_bapiret2-message_v1 ls_bapiret2-message_v2 ls_bapiret2-message_v3 ls_bapiret2-message_v4
INTO lv_message.
ls_data-zmess = ls_data-zmess && lv_message.
ENDLOOP. IF lv_tyep NE 'E'.
lv_message = 'SO关闭成功'.
ls_data-zmess = lv_message.
ls_data-updat = sy-datum.
ls_data-uptim = sy-uzeit.
ls_data-upnam = sy-uname.
MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE .
ELSE.
ls_data-updat = sy-datum.
ls_data-uptim = sy-uzeit.
ls_data-upnam = sy-uname.
MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE .
ENDIF. ENDIF.

出现报错:输入凭证编号 (而且错误是第一次调用函数出现,第二次  第三次 针对这个问题测试 就成功了)

走了标准的这段代码

感觉在FORM的上一层,应该走进 ELSE 分支,却走进了 PERFORM  BELEG_LESEN.  的逻辑
进去之后 VBAK-VBELN 为空,所以报错

为了解决问题,先换用了BDC的方式

  IF lt_item_in[] IS NOT INITIAL.
***未清SO关闭处理
* CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
READ TABLE pt_data INTO ls_data INDEX .
IF sy-subrc NE .
RETURN.
ENDIF.
PERFORM frm_dynpro USING 'SAPMV45A' '' 'X'.
PERFORM frm_dynpro USING ' ' 'BDC_CURSOR'
'VBAK-VBELN'.
PERFORM frm_dynpro USING ' ' 'BDC_OKCODE'
'=ENT2'.
PERFORM frm_dynpro USING ' ' 'VBAK-VBELN'
ls_data-zbillno.
PERFORM frm_dynpro USING 'SAPMV45A' '' 'X'.
PERFORM frm_dynpro USING ' ' 'BDC_OKCODE'
'=BABS'.
PERFORM frm_dynpro USING ' ' 'BDC_CURSOR'
'RV45A-MABNR(01)'.
PERFORM frm_dynpro USING 'SAPMV45A' '' 'X'.
PERFORM frm_dynpro USING ' ' 'BDC_CURSOR'
'RV45A-S_ABGRU'.
PERFORM frm_dynpro USING ' ' 'BDC_OKCODE'
'=SUEB'.
PERFORM frm_dynpro USING ' ' 'RV45A-S_ABGRU'
''."gs_data-S_ABGRU_009.
PERFORM frm_dynpro USING 'SAPMV45A' '' 'X'.
PERFORM frm_dynpro USING ' ' 'BDC_OKCODE'
'=SICH'.
PERFORM frm_dynpro USING ' ' 'VBKD-BSTKD'
''."gs_data-BSTKD_010.
PERFORM frm_dynpro USING ' ' 'BDC_CURSOR'
'KUWEV-KUNNR'.
*perform frm_dynpro using ' ' 'KUWEV-KUNNR'
* gs_data-KUNNR_011.
*PERFORM frm_dynpro USING ' ' 'VBAK-AUGRU'
* '01'."gs_data-AUGRU_012.
CLEAR:gt_messtab[],gt_messtab.
CALL TRANSACTION 'VA02' USING gt_bdcd
MODE gv_mode
UPDATE 'S'
MESSAGES INTO gt_messtab.
IF sy-subrc = .
ls_data-zpststu = .
ENDIF.
LOOP AT gt_messtab WHERE msgtyp = 'E' OR msgtyp = 'A' OR msgtyp = 'X'.
ls_data-zpststu = .
SELECT SINGLE *
INTO @DATA(ls_t100)
FROM t100
WHERE sprsl = @gt_messtab-msgspra
AND arbgb = @gt_messtab-msgid
AND msgnr = @gt_messtab-msgnr.
IF sy-subrc = .
DATA(l_mstring) = ls_t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH gt_messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH gt_messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH gt_messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH gt_messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH gt_messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH gt_messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH gt_messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH gt_messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
CONCATENATE ls_data-zmess l_mstring INTO ls_data-zmess.
ELSE.
CONCATENATE ls_data-zmess gt_messtab INTO ls_data-zmess.
ENDIF.
ENDLOOP. IF ls_data-zpststu = .
* lv_type = 'S'.
* ls_data-zpststu = 1.
* ZDOCNO
lv_message = 'SO关闭成功'.
ls_data-zmess = lv_message.
ls_data-updat = sy-datum.
ls_data-uptim = sy-uzeit.
ls_data-upnam = sy-uname.
MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE .
ELSE.
ls_data-updat = sy-datum.
ls_data-uptim = sy-uzeit.
ls_data-upnam = sy-uname.
MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE .
**回传回写log表 ZIFT0008
CLEAR:gv_flag.
PERFORM frm_update_zift0008 TABLES pt_data
CHANGING gv_flag.
ENDIF.
ENDIF.

未清SO关闭处理的更多相关文章

  1. JIT物料在途未清PO作为供给

    以下是本应在TEMP中处理,目前是写到FP_CHECK_SAP_DATA中 ----JIT物料在途未清PO作为供给 add by landor on 20180809 INSERT INTO SAP_ ...

  2. 【FICO系列】SAP FICO FS00修改科目为未清项目管理

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO FS00修改科 ...

  3. ABAP-根据采购订单行项目统计供应商未清额和已清额

    1.传入和传出表结构都是一样的: FUNCTION zmm_fm_po_invence. *"------------------------------------------------ ...

  4. 取未清PO逻辑

    注意这里的 GR qty [   WEMNG] 和 Open Quantity [OBMNG] *&---------------------------------------------- ...

  5. 【FICO系列】SAP FICO模块-财务账期的打开和关闭

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO模块-财务账期的 ...

  6. iOS4.0及以上系统,关闭程序,applicationWillTerminate为调用问题解决

    iOS4.0以后系统支持多任务类型,程序按下home键后,程序进入后台运行,如果内存不足被系统关闭或者手动关闭,都不会调用applicationWillTerminate回调函数. 解决方法:可以在程 ...

  7. 如何找回未保存过的 Excel 文件?

    如何找回未保存过的 Excel 文件? 同事做了一个文件,未保存直接关闭,正常是找不回来的. 但是 Excel 有一个强大的自动保存功能,对没有保存的文件也可以找回.

  8. ZFIR054-现金流量表

    *********************************************************************** * Title : ZFIR102 * * Applic ...

  9. 电脑控制台灯(c# hook,显示室温,联网校正时间)

          突发奇想,于是便写了一个小程序用于控制台灯,这几天功能也在不断的完善中,目前基本已经完成.下面进行功能的简述的代码的分析. 整体设计包含下位机程序和上位机程序.下位机用的c语言,上位机用的 ...

随机推荐

  1. MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行; ...

  2. windows平台RSA密钥生成

    1.安装openssl工具 下载安装openssl工具,执行安装目录bin下的"openssl.exe",执行后会弹出命令窗口. 2.生成私钥 在命令窗口输入“genrsa -ou ...

  3. 通过trace分析优化器如何选择执行计划

    1. mysql> show variables like "optimizer_trace%"\G;*************************** 1. row * ...

  4. 利用matplot简单显示图片

    import matplotlib.pyplot as plt from matplotlib.image import imread img = imread('F:\\ml\\DL\\source ...

  5. 网络编程 --- subprocess模块,struct模块,粘包,UDP协议,socket_server模块

    目录 subprocess模块 struct模块 粘包 UDP协议 socket_server模块 subprocess模块 作用: 1.可以帮你通过代码执行操作系统的终端命令 2.并返回终端执行命令 ...

  6. [Cypress] install, configure, and script Cypress for JavaScript web applications -- part4

    Load Data from Test Fixtures in Cypress When creating integration tests with Cypress, we’ll often wa ...

  7. VSCodeUserSetup安装教程

    VSCodeUserSetup: isual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows,macOS和Linux.它内置了对JavaScript, ...

  8. Es6请求封装

    function registryToast(){ vue.prototype.$toast=showToast } export default registryToast   import './ ...

  9. Apache的安装和配置

    一.官网下载Apache 官网地址:https://httpd.apache.org/ 点击Download--->点击Files for Microsoft Windows--->点击A ...

  10. [转]C++重载()(强制类型转换运算符)

    在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名) ...