使用:  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. maya pymel cmds ls 列出未知节点 unknown nodes

    maya pymel cmds ls 列出未知节点 unknown nodes cmds.ls(type = 'unknown',fl = 1)

  2. Java中list在循环中删除元素的坑

    JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.siz ...

  3. Selenium常用API的使用java语言之17-文件上传

    对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过sendKeys()指定本地文件路径的方式实现文件上传. 创建upfile.html文件,代码如下: <html> & ...

  4. 微信小程序导入Vant报错

    作者:如也_d1c0链接:https://www.jianshu.com/p/0d2332984f8c来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 先放出来Vant ...

  5. vue jqury如何获取元素中的属性

    1.点击事件获取 点击事件通过传值得方式 <el-button type="danger" round @click="delHander($event)" ...

  6. 关于 $.proxy(fn,context,arg) 方法

    <!-- $.proxy(fn,this,agrument); proxy 代理 思考做酒的代理商argument就是代理商 把fn所在的作用域对象的参数/属性 代理给fn执行. fn: 要被调 ...

  7. 前端利用webuploader实现超大文件分片上传、断点续传

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  8. 国庆集训 Day1 T2 生成图 DP

    国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...

  9. mongodb的状态分析

    1.借助工具 mongostat 分析mongodb运行状况 C:\Users\Administrator>mongostat --help //查看帮助 View live MongoDB p ...

  10. codeforces425C

    http://codeforces.com/contest/425/problem/C 题意:两数列a[],b[],进行若干轮操作,每次操作花费e, 将a的一个前缀和b的一个前缀(两前缀的最后一个数字 ...