使用:  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. Oracle中split功能的实现

    原始需求: 有这样的表:tb和pk两列 PK是将表的多个主键用“|”进行分隔,我想把它变成多行 如 fundamentals_asia1_af_out ID_BB_GLOBAL|BC_DT|BC_EQ ...

  2. m_strcmp

    strcmp比较两个字符串的大小,strcmp(str1, str2); 从str1和str2的第一个元素比较直到出现不同,或者遇到'\0'结束.如果str1 > str2 返回正数,str1 ...

  3. Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combined) A,B,C【真的菜·】

    8说了 #include<bits/stdc++.h> using namespace std; #define int long long signed main(){ string s ...

  4. Oracle RAC 服务启动流程

    启动流程步骤层次梳理:第一层:OHASD 启动: cssdagent - 负责启动 CSSD 的 Agent.orarootagent - 负责启动所有 root 用户下的 ohasd 资源 的Age ...

  5. C# 使用递归获取所有下属、所有子部门……

    本例中获取的是所有的晚辈!首先定义家庭成员类: public class FamilyMember { /// <summary> /// 身份 /// </summary> ...

  6. Ubuntu18.04开机动画(bootsplash)安装

    一.搜索喜欢的主题 1.通过软件源搜索,这个比较简单但是没有太喜欢的.-----------------------------------------------------------pipci@ ...

  7. Educational Codeforces Round 69

    目录 Contest Info Solutions A. DIY Wooden Ladder B. Pillars C. Array Splitting D. Yet Another Subarray ...

  8. PHP全栈学习笔记23

    php,基础,流程控制,函数,字符串,数组,web交互,mysql数据库,PHP数据库编程,cookie与session,日期和时间,图形图形处理,文件和目录处理,面向对象,pdo数据库抽象层,sma ...

  9. 【原创】go语言之打印目录

    package main import ( "fmt" "io/ioutil" "log" ) func listFiles(dirname ...

  10. RBF、GRNN 和 PNN 神经网络在Matlab中的用法

    一.RBF神经网络 RBF神经网络概述 径向基函数神经网络 与 BP 神经网络的区别在于训练过程--其参数初始化具有一定方法,并非随机,隐含层的末尾使用了径向基函数,它的输出经过加权和得到 LW2.1 ...