未清SO关闭处理
使用: 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关闭处理的更多相关文章
- JIT物料在途未清PO作为供给
以下是本应在TEMP中处理,目前是写到FP_CHECK_SAP_DATA中 ----JIT物料在途未清PO作为供给 add by landor on 20180809 INSERT INTO SAP_ ...
- 【FICO系列】SAP FICO FS00修改科目为未清项目管理
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO FS00修改科 ...
- ABAP-根据采购订单行项目统计供应商未清额和已清额
1.传入和传出表结构都是一样的: FUNCTION zmm_fm_po_invence. *"------------------------------------------------ ...
- 取未清PO逻辑
注意这里的 GR qty [ WEMNG] 和 Open Quantity [OBMNG] *&---------------------------------------------- ...
- 【FICO系列】SAP FICO模块-财务账期的打开和关闭
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO模块-财务账期的 ...
- iOS4.0及以上系统,关闭程序,applicationWillTerminate为调用问题解决
iOS4.0以后系统支持多任务类型,程序按下home键后,程序进入后台运行,如果内存不足被系统关闭或者手动关闭,都不会调用applicationWillTerminate回调函数. 解决方法:可以在程 ...
- 如何找回未保存过的 Excel 文件?
如何找回未保存过的 Excel 文件? 同事做了一个文件,未保存直接关闭,正常是找不回来的. 但是 Excel 有一个强大的自动保存功能,对没有保存的文件也可以找回.
- ZFIR054-现金流量表
*********************************************************************** * Title : ZFIR102 * * Applic ...
- 电脑控制台灯(c# hook,显示室温,联网校正时间)
突发奇想,于是便写了一个小程序用于控制台灯,这几天功能也在不断的完善中,目前基本已经完成.下面进行功能的简述的代码的分析. 整体设计包含下位机程序和上位机程序.下位机用的c语言,上位机用的 ...
随机推荐
- 瞎扯KMP
瞎扯\(KMP\) 众所周知,\(KMP\)是一种玄学的字符串模式匹配算法. 什么是字符串模式匹配? 通俗的讲,就是统计一个字符串(通常很长)中某个子串(即一段连续的字符)出现的次数或位置.一般来说, ...
- Selenium3学习中遇到的问题
pytesseract识别验证码 TesseractNotFoundError: tesseract is not installed or it's not in your path brew in ...
- jdk1.8 ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数
ConcurrentHashMap 的工作原理及代码实现: 相比于1.7版本,它做了两个改进 1.取消了segment分段设计,直接使用Node数组来保存数据,并且采用Node数组元素作为锁来实现每一 ...
- HDU 6000 - Wash
/* HDU 6000 - Wash [ 贪心 ] 题意: L 件衣服,N 个洗衣机,M 个烘干机,给出每个洗衣机洗一件衣服的时间和烘干机烘干一件衣服的时间,问需要的最少时间是多少 分析: 先求出L件 ...
- SIGAI机器学习第一集 机器学习简介
讲授机器学习的基本概念.发展历史与典型应用 大纲: 人工智能简介机器学习简介为什么需要机器学习机器学习的发展历史机器学习的典型应用人工智能主要的公司本课程讲授的算法 机器学习并不是人工智能一上来就采用 ...
- php常量和变量之变量引用
变量引用 变量引用很多老师喜欢来用C语言的指针来去讲解.我们作为有这么多年开发和教学经验的人来说——大多数学习PHP的人来说根本不了解C语言. 使用C语言一指针来讲解变量引用,我们觉得画蛇填足.并且, ...
- antd 表单获取参数
wrappedComponentRef是为了把form的值赋值到自定的对象中 <OpenCityForm wrappedComponentRef={(inst)=>{this.cityFo ...
- 基于评分的商品top-N推荐系统
import io # needed because of weird encoding of u.item file import os from surprise import KNNBaseli ...
- yii中异步验证和自定义方法验证
一.异步验证,一般使用ajax验证唯一性较多 1.model开启验证[['mobile_id','ip'], 'unique','message'=>Yii::t('app','E10010') ...
- 初步学习MySQL
我们之前学习如何安装MySQL数据库 以及 navicat 管理数据库可视化工具 那么现在主要来学习一下如何使用,(操作数据库有很多方式,终端操作.可视化工具操作.编程语句操作) 我们首先学习在终端操 ...