*&---------------------------------------------------------------------*
*& Form FRM_DN_POST
*&---------------------------------------------------------------------*
*& text 参照UB单创建DN 并发货过账
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_dn_post .
DATA:lt_stock_items TYPE TABLE OF bapidlvreftosto.
DATA:ls_stock_items TYPE bapidlvreftosto.
DATA:lt_created_items TYPE TABLE OF bapidlvitemcreated.
DATA:ls_created_items TYPE bapidlvitemcreated.
DATA:lv_delivery TYPE bapishpdelivnumb-deliv_numb.
DATA:lv_vstel TYPE vstel.
DATA:lv_ledat TYPE ledat.
DATA:lt_return TYPE TABLE OF bapiret2.
DATA:ls_header_data LIKE bapiobdlvhdrchg.
DATA:ls_header_ctrl LIKE bapiobdlvhdrctrlchg.
DATA:lt_item_data LIKE TABLE OF bapiobdlvitemchg.
DATA:ls_item_data LIKE bapiobdlvitemchg.
DATA:lt_item_data_spl LIKE TABLE OF /spe/bapiobdlvitemchg.
DATA:ls_item_data_spl LIKE /spe/bapiobdlvitemchg.
DATA:lt_item_control LIKE TABLE OF bapiobdlvitemctrlchg.
DATA:ls_item_control LIKE bapiobdlvitemctrlchg. DATA:lt_vbpok_tab TYPE TABLE OF vbpok.
DATA:ls_vbpok_tab TYPE vbpok.
DATA:ls_techn_control TYPE bapidlvcontrol.
DATA:ls_header_control TYPE bapiobdlvhdrctrlchg.
DATA:ls_vbkok TYPE vbkok.
DATA:lt_prot TYPE TABLE OF prott. DATA:lv_flag TYPE c,
lv_message TYPE string,
lv_message1 TYPE string,
lv_mblnr TYPE mkpf-mblnr,
lv_mjahr TYPE mkpf-mjahr. **取到选中的订单号
LOOP AT gt_doc ASSIGNING <gf_doc> WHERE sel = 'X' AND zstatus <> 'S'.
gs_key-ebeln = <gf_doc>-ebeln.
COLLECT gs_key INTO gt_key.
ENDLOOP. **通过订单号处理
LOOP AT gt_key INTO gs_key. **s1.根据UB创建DN **清变量
CLEAR: lv_message,lv_flag,
lv_delivery,
ls_stock_items,lt_stock_items,
ls_created_items,lt_created_items,
lt_return. **参数赋值
LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
ls_stock_items-ref_doc = <gf_doc>-ebeln. "参考凭证
ls_stock_items-ref_item = <gf_doc>-ebelp."参考项
APPEND ls_stock_items TO lt_stock_items. ls_created_items-ref_doc = <gf_doc>-ebeln. "参考凭证
ls_created_items-ref_item = <gf_doc>-ebelp."参考项
ls_created_items-material = <gf_doc>-zmatnr."物料编号
ls_created_items-material_long = <gf_doc>-zmatnr."物料编号
APPEND ls_created_items TO lt_created_items.
ENDLOOP. * DATA(lv_flag) = 'Y'.
* EXPORT lv_flag TO MEMORY ID 'ZPOS_LGORT_FLAG'.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
ship_point = lv_vstel
due_date = lv_ledat
IMPORTING
delivery = lv_delivery
TABLES
stock_trans_items = lt_stock_items
created_items = lt_created_items
return = lt_return.
FREE MEMORY ID 'ZPOS_LGORT_FLAG'. DELETE lt_return WHERE type = 'E' AND id = 'BAPI' AND number = ''.
LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E'.
lv_flag = 'E'.
CONCATENATE lv_message ls_return-message INTO lv_message SEPARATED BY '/'.
ENDLOOP. IF lv_flag = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
<gf_doc>-cldat = sy-datum.
<gf_doc>-cltim = sy-uzeit.
<gf_doc>-clnam = sy-uname.
* IF lv_flag = 'E'.
<gf_doc>-zstatus = 'E'.
<gf_doc>-zmessage = lv_message.
<gf_doc>-icon = '@5C@'.
* ELSE.
* <gf_doc>-zstatus = '1'.
* <gf_doc>-zmessage = 'DN创建成功'.
** <gf_doc>-ICON = '@5B@'.
* <gf_doc>-vbeln = lv_delivery.
** <gf_doc>-posnr = lv_mjahr.
* ENDIF.
PERFORM frm_update_db.
ENDLOOP. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
**s2.修改DN
CLEAR:lv_mblnr,lv_mjahr,
ls_header_data,ls_header_ctrl,
ls_item_data,lt_item_data,
ls_item_data_spl,lt_item_data_spl,
ls_item_control,lt_item_control. **参数赋值
ls_header_data-deliv_numb = lv_delivery.
ls_header_ctrl-deliv_numb = lv_delivery. **记录DN创建结果
LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
<gf_doc>-cldat = sy-datum.
<gf_doc>-cltim = sy-uzeit.
<gf_doc>-clnam = sy-uname. <gf_doc>-zstatus = ''.
<gf_doc>-zmessage = 'DN创建成功'.
** <gf_doc>-ICON = '@5B@'.
<gf_doc>-vbeln = lv_delivery. DATA: ls_lips LIKE lips.
**通过VGBEL VGPOS
CLEAR: ls_lips.
SELECT SINGLE *"posnr INTO <gf_doc>-posnr
INTO ls_lips
FROM lips
WHERE vgbel = <gf_doc>-ebeln
AND vgpos = <gf_doc>-ebelp.
<gf_doc>-posnr = ls_lips-posnr.
PERFORM frm_update_db. **要修改:存储地点 数量 批次
ls_item_data-deliv_numb = lv_delivery."交货
ls_item_data-deliv_item = ls_lips-posnr."交货项目
ls_item_data-material = ls_lips-matnr."物料编号
ls_item_data-dlv_qty = <gf_doc>-zlfimg."数量
* ls_item_data-batch = lips-charg."批次
ls_item_data-fact_unit_nom = ls_lips-umvkz.
ls_item_data-fact_unit_denom = ls_lips-umvkn.
APPEND ls_item_data TO lt_item_data.
CLEAR:ls_item_data. ls_item_data_spl-deliv_numb = ls_lips-vbeln."交货单
ls_item_data_spl-deliv_item = ls_lips-posnr."交货单行项目
ls_item_data_spl-stge_loc = <gf_doc>-zlgort. "库存地点
APPEND ls_item_data_spl TO lt_item_data_spl.
CLEAR:ls_item_data_spl. ls_item_control-deliv_numb = ls_lips-vbeln."交货单
ls_item_control-deliv_item = ls_lips-posnr."交货单行项目
ls_item_control-chg_delqty = 'X'.
APPEND ls_item_control TO lt_item_control.
CLEAR:ls_item_control.
ENDLOOP. IF lt_item_data IS NOT INITIAL.
CLEAR:lt_return. CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_header_data
header_control = ls_header_ctrl
delivery = lv_delivery
TABLES
item_data = lt_item_data
item_data_spl = lt_item_data_spl
item_control = lt_item_control
return = lt_return. READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc <> .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<gf_doc>-zmessage = 'DN修改成功'. **记录DN修改结果
LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
<gf_doc>-cldat = sy-datum.
<gf_doc>-cltim = sy-uzeit.
<gf_doc>-clnam = sy-uname. <gf_doc>-zstatus = ''.
<gf_doc>-zmessage = 'DN修改成功'.
** <gf_doc>-ICON = '@5B@'. PERFORM frm_update_db.
ENDLOOP. **s3.DN过账
**清变量
CLEAR:lv_mblnr,lv_mjahr,
ls_vbkok,lv_flag,
lt_prot,
ls_vbpok_tab,lt_vbpok_tab.
SELECT *
FROM lips
INTO TABLE @DATA(lt_lips)
WHERE vbeln = @lv_delivery. LOOP AT lt_lips ASSIGNING FIELD-SYMBOL(<fs_lips>).
CLEAR:ls_vbpok_tab.
ls_vbpok_tab-vbeln_vl = <fs_lips>-vbeln. "交货.
ls_vbpok_tab-posnr_vl = <fs_lips>-posnr."原行项目
ls_vbpok_tab-vbeln = <fs_lips>-vbeln. "交货.
ls_vbpok_tab-posnn = <fs_lips>-posnr."交货项目
ls_vbpok_tab-matnr = <fs_lips>-matnr."物料编号
ls_vbpok_tab-charg = <fs_lips>-charg."批号
ls_vbpok_tab-lfimg = <fs_lips>-lfimg.
ls_vbpok_tab-meins = <fs_lips>-meins.
ls_vbpok_tab-werks = <fs_lips>-werks ."库存地点
ls_vbpok_tab-lgort = . "库存地点
ls_vbpok_tab-kzlgo = 'X'. "库存地点可修改
ls_vbpok_tab-pikmg = <fs_lips>-lfimg."捡配数量
ls_vbpok_tab-lgmng = <fs_lips>-lfimg."交货量
APPEND ls_vbpok_tab TO lt_vbpok_tab. CLEAR:ls_item_data_spl.
ls_item_data_spl-deliv_numb = <fs_lips>-vbeln."交货
ls_item_data_spl-deliv_item = <fs_lips>-posnr."原行项目
ls_item_data_spl-stge_loc = . "库存地点
APPEND ls_item_data_spl TO lt_item_data_spl. ENDLOOP. ls_header_data-deliv_numb = lv_delivery."交货
ls_techn_control-upd_ind = 'U'.
ls_header_control-deliv_numb = lv_delivery."交货
lv_delivery = lv_delivery."交货 ls_vbkok-vbeln_vl = lv_delivery.
ls_vbkok-wabuc = 'X'.
ls_vbkok-wadat_ist = sy-datum. CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
delivery = lv_delivery
update_picking = 'X'
IMPORTING
ef_error_in_goods_issue_0 = lv_flag
TABLES
prot = lt_prot
vbpok_tab = lt_vbpok_tab
EXCEPTIONS
error_message =
OTHERS = . LOOP AT lt_prot INTO DATA(ls_prot) WHERE msgty = 'E'.
lv_flag = 'E'. CLEAR:lv_message1.
MESSAGE ID ls_prot-msgid
TYPE ls_prot-msgty
NUMBER ls_prot-msgno
WITH ls_prot-msgv1 ls_prot-msgv2 ls_prot-msgv3 ls_prot-msgv4
INTO lv_message1.
CONCATENATE lv_message lv_message1 INTO lv_message SEPARATED BY '/'.
ENDLOOP. IF lv_flag = 'E'.
"创建失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
**状态跟新+回写落地表
LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
<gf_doc>-cldat = sy-datum.
<gf_doc>-cltim = sy-uzeit.
<gf_doc>-clnam = sy-uname.
<gf_doc>-zstatus = 'E'.
<gf_doc>-zmessage = 'DN过账失败:' && lv_message.
<gf_doc>-icon = '@5C@'.
PERFORM frm_update_db.
ENDLOOP. ELSE.
"创建成功
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
SELECT SINGLE mblnr mjahr INTO (lv_mblnr,lv_mjahr)
FROM mseg WHERE vbeln_im = lv_delivery. LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
<gf_doc>-cldat = sy-datum.
<gf_doc>-cltim = sy-uzeit.
<gf_doc>-clnam = sy-uname. <gf_doc>-mblnr = lv_mblnr.
<gf_doc>-mjahr = lv_mjahr.
<gf_doc>-zstatus = 'S'.
<gf_doc>-zdjzt = 'X'.
* <gf_doc>-zmessage = 'DN过账失败:' && lv_message.
<gf_doc>-icon = '@5B@'.
PERFORM frm_update_db.
ENDLOOP.
ENDIF. ***状态跟新+回写落地表
* LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
* <gf_doc>-cldat = sy-datum.
* <gf_doc>-cltim = sy-uzeit.
* <gf_doc>-clnam = sy-uname.
* IF lv_flag = 'E'.
* <gf_doc>-zstatus = 'E'.
* <gf_doc>-zmessage = 'DN过账失败:' && lv_message.
* <gf_doc>-icon = '@5C@'.
* ELSE.
* <gf_doc>-zstatus = 'S'.
* <gf_doc>-zmessage = 'DN过账成功'.
* <gf_doc>-icon = '@5B@'.
***怎么取凭证号
* <gf_doc>-mblnr = lv_delivery.
* <gf_doc>-mjahr = lv_mjahr.
* ENDIF.
*
* PERFORM frm_update_db.
*
* ENDLOOP. ELSE.
"修改失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<gf_doc>-zmessage = '交货单修改失败'.
ENDIF. ENDIF. ENDIF.
ENDLOOP. * "获取采购订单数据-行项目数据
* SELECT *
* FROM ekpo
* INTO TABLE @DATA(lt_ekpo)
* WHERE ebeln = @iv_ebeln."采购订单
* LOOP AT lt_ekpo INTO DATA(ls_ekpo).
*
* ls_stock_items-ref_doc = ls_ekpo-ebeln."参考凭证
* ls_stock_items-ref_item = ls_ekpo-ebelp."参考项
* APPEND ls_stock_items TO lt_stock_items.
* ls_created_items-ref_doc = ls_ekpo-ebeln."参考凭证
* ls_created_items-ref_item = ls_ekpo-ebelp."参考项
* ls_created_items-material = ls_ekpo-matnr."物料编号
* ls_created_items-material_long = ls_ekpo-matnr."物料编号
* APPEND ls_created_items TO lt_created_items.
* ENDLOOP.
*
** DATA(lv_flag) = 'Y'.
** EXPORT lv_flag TO MEMORY ID 'ZPOS_LGORT_FLAG'.
* CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
* EXPORTING
* ship_point = lv_vstel
* due_date = lv_ledat
* IMPORTING
* delivery = lv_delivery
* TABLES
* stock_trans_items = lt_stock_items
* created_items = lt_created_items
* return = lt_return.
* FREE MEMORY ID 'ZPOS_LGORT_FLAG'.
*
* DELETE lt_return WHERE type = 'E' AND id = 'BAPI' AND number = '001'.
*
* LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E'.
* CONCATENATE o_return-message ls_return-message INTO o_return-message SEPARATED BY '/'.
* ENDLOOP.
*
* IF sy-subrc = 0.
*
* "创建失败
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
* o_return-type = 'E'.
* CONCATENATE '交货单创建失败:' o_return-message INTO o_return-message.
*
* ELSE.
*
* "创建成功
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
*
* o_return-zdjh = lv_delivery."交货单
* o_return-type = 'S'.
* o_return-message = '交货单创建成功'.
*
* ls_header_data-deliv_numb = lv_delivery.
* ls_header_ctrl-deliv_numb = lv_delivery.
*
* SELECT *
* FROM lips
* INTO TABLE @DATA(lt_lips)
* WHERE vbeln = @lv_delivery.
*
* LOOP AT lt_lips INTO DATA(ls_lips).
* ls_item_data-deliv_numb = ls_lips-vbeln."交货
* ls_item_data-deliv_item = ls_lips-posnr."交货项目
* ls_item_data-material = ls_lips-matnr."物料编号
* ls_item_data-dlv_qty = ''."越库业务:创建DN时,数量都变为0
* ls_item_data-fact_unit_nom = ls_lips-umvkz.
* ls_item_data-fact_unit_denom = ls_lips-umvkn.
* APPEND ls_item_data TO lt_item_data.
* CLEAR:ls_item_data.
*
* ls_item_data_spl-deliv_numb = ls_lips-vbeln."交货单
* ls_item_data_spl-deliv_item = ls_lips-posnr."交货单行项目
* ls_item_data_spl-stge_loc = ls_lips-lgort. "库存地点
* APPEND ls_item_data_spl TO lt_item_data_spl.
* CLEAR:ls_item_data_spl.
*
* ls_item_control-deliv_numb = ls_lips-vbeln."交货单
* ls_item_control-deliv_item = ls_lips-posnr."交货单行项目
* ls_item_control-chg_delqty = 'X'.
* APPEND ls_item_control TO lt_item_control.
* CLEAR:ls_item_control.
*
* ENDLOOP.
*
* IF lt_item_data IS NOT INITIAL.
* CLEAR:lt_return.
*
* CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
* EXPORTING
* header_data = ls_header_data
* header_control = ls_header_ctrl
* delivery = lv_delivery
* TABLES
* item_data = lt_item_data
* item_data_spl = lt_item_data_spl
* item_control = lt_item_control
* return = lt_return.
*
* READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
* IF sy-subrc <> 0.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
* o_return-message = '交货单创建成功/交货单修改成功'.
* ELSE.
* "修改失败
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* o_return-message = '交货单创建成功/交货单修改失败'.
* ENDIF.
*
* ENDIF.
*
* ENDIF. ENDFORM.

参照UB单创建DN并过账的更多相关文章

  1. UB单修改

    FUNCTION Z_SD_UB_CHANGE. *"-------------------------------------------------------------------- ...

  2. 用dedecms自定义表单创建简易自助预约系统

    建站往往需要根据客户的需求来增加相应的功能,比如预约.平时用比较多的是织梦系统,那么如何用dedecms自定义表单创建简易自助预约系统呢? 进入dedecms后台,左侧菜单中依次点击“核心” - 频道 ...

  3. 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单

    jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...

  4. 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框

    jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...

  5. Flask基础(16)-->WTForms表单创建和简单验证

    Flask基础(16)-->WTForms表单创建和简单验证 前言:使用Flask_WTF需要配置参数SECRET_KEYCSRF_ENABLED是为了CSRF(跨站请求伪造)保护.SECRET ...

  6. django搭建BBS-表单创建&注册

    django搭建BBS-表单创建&注册 0824自我总结 文件结构 app 接口 migrations __inint__.py admin.py 管理员页面注册表单用 apps.py bbs ...

  7. activiti自定义流程之整合(三):整合自定义表单创建模型

    本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单 ...

  8. php入门之表单创建和基本处理

    为了方便后面学习数组,这里引入了过渡章节就是表单,至于为什么,等真的学习到数组的时候你就会发现它的妙处拉. ============================================== ...

  9. WPF仿网易云音乐系列(二、歌单创建窗口+登录设置模块)

    老衲牺牲午休时间写博客,都快把自己感动了,-_-!! 之前上一篇随笔,我看了下评论,有部分人说WPF已经凉凉了,这个我觉得,这只是一个达到自己目的的工具而已,只要自己能用这个工具,得心应手的做出自己想 ...

随机推荐

  1. java实现网络请求超时自动熔断

    原文:https://www.jianshu.com/p/326465500d1c?utm_campaign 使用场景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级 ...

  2. 标准库类型之vector

    上篇中遗留了一个小作业,就是用string中的find_first_not_of和find_last_not_of函数来实现字符串左右空格的去除,先来完成它,实现的思路是先来编写去除左空格,然后再编写 ...

  3. input 更改 pleaseholder 的字体样式

    /* WebKit browsers */input::-webkit-input-placeholder {    color: red;    font-size: 14px;}/* Mozill ...

  4. Web UI开发速速种草—Kendo UI for jQuery网格编辑操作概述

    Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...

  5. c#动态调用WEBSERVICE接口

    C#动态webservice调用接口 1 using System; 2 using System.Collections; 3 using System.IO; 4 using System.Net ...

  6. 15分钟入门Markdown

    一.标题一 标题三 标题六 # 一.标题一 ### 标题三 ###### 标题六 二.字体 1.普通字体 字体加粗 斜体 斜体加粗 删除线 1.普通字体 **字体加粗** *斜体* ***斜体加粗** ...

  7. Jekyll添加FancyBox 插件

    一.简要 这是之前在GitHub Page上面使用博客功能的完善,之前每次传到GitHub上面的图片在博客里面都是显示压缩后的,导致很多代码细节都看不清. Markdown 语法中的图片我们一般是如此 ...

  8. 007_linuxC++之_构造函数的初级应用

    (一)构造函数:用来在创建对象时初始化对象, 即为对象成员变量赋初始值 (二)构造函数的命名必须和类名完全相同 (三)更对具体的查看:构造函数 (四)直接分析程序 运行结果 解析上面程序: 1. 当程 ...

  9. pyecharts v1 版本 学习笔记 散点图

    散点图 基本案例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...

  10. Java进阶知识21 Spring的AOP编程

    1.概述 Aop:(Aspect Oriented Programming)面向切面编程          功能: 让关注点代码与业务代码分离! 关注点:重复代码就叫做关注点:切面: 关注点形成的类, ...