未清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语言,上位机用的 ...
随机推荐
- Codeforces Round #609 (Div. 2) D. Domino for Young
链接: https://codeforces.com/contest/1269/problem/D 题意: You are given a Young diagram. Given diagram i ...
- MySQL Navicat Premium 保存sql语句
一.新建查询 二.编写sql语句并保存 1.保存到内部 1.Ctrl+s保存当前查询文件 2.下次打开可点击查询点击上次保存的查询文件名打开上次查询的文件 2.保存到外部 1.默认保存至 C:\Use ...
- 31、[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机
31.[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机
- 银川区域赛现场赛 Pot!!【线段树】
给定两个操作: MULTIPLY L R x 区间里都乘以一个数x MAX L R : 计算区间内一个2,3,5,7个数最大值. 思路:维护4个最大值.蓝瘦. /** 有 n 个数和 5 种操作 a ...
- learning scala dependency injection
println("Step 1: Create a trait which knows how to do create, read, update and delete operation ...
- P1213 时钟
题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点.下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动.选择1到9号移动方法 ...
- postgresql 创建索引:ERROR: operator class "gin_trgm_ops" does not exist for access method "gin"
g_trgm is an extension, so: CREATE EXTENSION pg_trgm; If you get the following error ERROR: could no ...
- 免sudo使用docker
前沿:通过root安装完docker,在普通用户下执行docker相关命令的时候,报权限不足: 查看sock文件的权限: [hadoop@slave1 monitor]$ ll /var/run/do ...
- vue的ui组件库
https://www.cnblogs.com/dupd/p/7735450.html
- CSS Pixel 和 Device pixels
Web developers need CSS pixels, that is, the pixels that are used in CSS declarations such as " ...