SD--批量删除订单
SD--批量删除订单
在sap应用中常常会需要批量删除一些错误录入的单据,为此开发了一个小程序。该程序为了安全,程序做了一下控制
1、限制用户只能删除自己的订单,不能删除别人输入的订单,如果需要修改一下查询条件;
2、系统默认为“测试运行”,方便用户在删除订单前要核实一下订单,确认不要误操作;
程序代码如下,供大家参考!
REPORT zsde0099.
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
* data Declarations
*----------------------------------------------------------------------*
TABLES: vbak. " Sales Document: Header Data
*----------------------------------------------------------------------*
* table control Output Declarations
*----------------------------------------------------------------------*
TYPES: BEGIN OF tc_0100,
sel(1), " Check box
vbeln LIKE vbak-vbeln, " Sales Order Number
erdat LIKE vbak-erdat, " Sales order creation date
ernam LIKE vbak-ernam,
kunnr LIKE likp-kunag, " Sold-to Party
name1 LIKE kna1-name1, " Sold-to Company Name
text(200),
END OF tc_0100.
DATA: wa_tc_0100 TYPE tc_0100,
it_tc_0100 TYPE tc_0100 OCCURS 0 WITH HEADER LINE.
DATA g_fieldcat TYPE slis_t_fieldcat_alv.
*----------------------------------------------------------------------*
* Selection Screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK params1 WITH FRAME TITLE text-001.
PARAMETER: s_vkorg LIKE vbak-vkorg DEFAULT ‘6001‘ OBLIGATORY MODIF ID s1. " " Sales Org.
SELECT-OPTIONS:
s_vtweg FOR vbak-vtweg OBLIGATORY, " Distribution Channel
s_spart FOR vbak-spart OBLIGATORY DEFAULT ‘10‘, " Division
s_auart FOR vbak-auart OBLIGATORY, " Order type
s_erdat FOR vbak-erdat OBLIGATORY, " Sales order creation date
* s_ERNAM FOR vbak-ERNAM OBLIGATORY , " Sales order creation date
s_kunnr FOR vbak-kunnr , " Sold-to party
s_vbeln FOR vbak-vbeln . " Sales Order
PARAMETER p_test AS CHECKBOX DEFAULT ‘X‘.
SELECTION-SCREEN END OF BLOCK params1.
***********************************************************************
*INITIALIZATION.
***********************************************************************
INITIALIZATION.
s_auart-sign = ‘I‘.
s_auart-option = ‘EQ‘.
s_auart-low = ‘ZC01‘.
APPEND s_auart.
s_auart-low = ‘ZC03‘.
APPEND s_auart.
s_auart-low = ‘ZC06‘.
APPEND s_auart.
s_auart-low = ‘ZC20‘.
APPEND s_auart.
s_vtweg-sign = ‘I‘.
s_vtweg-option = ‘EQ‘.
s_vtweg-low = ‘10‘.
APPEND s_vtweg.
s_vtweg-low = ‘20‘.
APPEND s_vtweg.
s_vtweg-low = ‘30‘.
APPEND s_vtweg.
s_vtweg-low = ‘40‘.
APPEND s_vtweg.
*----------------------------------------------------------------------*
* Selection Events Processing
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
PERFORM screen_check.
AT SELECTION-SCREEN.
CLEAR: it_tc_0100, wa_tc_0100.
REFRESH: it_tc_0100.
START-OF-SELECTION.
PERFORM extract_data.
END-OF-SELECTION.
PERFORM change_sales_orders.
PERFORM display_mes.
*&---------------------------------------------------------------------*
*& Form SCREEN_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM screen_check.
DATA: l_line TYPE i .
DESCRIBE TABLE s_erdat LINES l_line.
IF l_line EQ 0.
s_erdat-sign = ‘I‘.
s_erdat-option = ‘BT‘.
s_erdat-high = sy-datum.
s_erdat-low = sy-datum.
APPEND s_erdat.
ENDIF.
DESCRIBE TABLE s_vtweg LINES l_line.
IF l_line EQ 0.
ENDIF.
ENDFORM. "SCREEN_CHECK
*&---------------------------------------------------------------------*
*& Form extract_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM extract_data.
DATA: lt_it1 LIKE it_tc_0100 OCCURS 0 WITH HEADER LINE,
l_chk(1). " for exclude incomplete SO
SELECT a~vbeln a~erdat a~ernam a~kunnr INTO CORRESPONDING FIELDS OF TABLE lt_it1
FROM vbak AS a
WHERE a~vbeln IN s_vbeln
AND a~auart IN s_auart
AND a~vkorg EQ s_vkorg
AND a~vtweg IN s_vtweg
AND a~spart IN s_spart
AND a~erdat IN s_erdat
AND a~ernam = sy-uname
AND a~kunnr IN s_kunnr.
LOOP AT lt_it1.
* get sold-to party company name
PERFORM get_customer_company_name USING lt_it1-kunnr CHANGING lt_it1-name1.
MODIFY lt_it1.
ENDLOOP.
it_tc_0100[] = lt_it1[].
ENDFORM. "extract_data
*&---------------------------------------------------------------------*
*& Form GET_CUSTOMER_COMPANY_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->F_KUNNR text
* -->F_NAME text
*----------------------------------------------------------------------*
FORM get_customer_company_name USING f_kunnr CHANGING f_name.
CLEAR f_name.
SELECT SINGLE name1 INTO f_name
FROM kna1
WHERE kunnr = f_kunnr.
ENDFORM. "GET_CUSTOMER_COMPANY_NAME
*&---------------------------------------------------------------------*
*& Form change_sales_orders
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM change_sales_orders.
DATA: lt_order_header_in LIKE bapisdh1,
lt_order_header_inx LIKE bapisdh1x,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
lt_order_item_in LIKE bapisditm OCCURS 0 WITH HEADER LINE,
lt_order_item_inx LIKE bapisditmx OCCURS 0 WITH HEADER LINE,
cp_eind(1).
SORT it_tc_0100 BY vbeln.
DELETE ADJACENT DUPLICATES FROM it_tc_0100.
LOOP AT it_tc_0100.
CLEAR: lt_order_header_inx,lt_order_item_in, lt_order_item_inx, lt_return,cp_eind.
REFRESH: lt_order_item_in, lt_order_item_inx, lt_return.
lt_order_header_inx-updateflag = ‘D‘.
IF p_test NE ‘X‘.
CALL FUNCTION ‘BAPI_SALESORDER_CHANGE‘
EXPORTING
salesdocument = it_tc_0100-vbeln
* ORDER_HEADER_IN = LT_ORDER_HEADER_IN
order_header_inx = lt_order_header_inx
TABLES
return = lt_return.
* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功
LOOP AT lt_return .
IF lt_return-type EQ ‘E‘ OR
lt_return-type = ‘A‘ OR
lt_return = ‘X‘.
cp_eind = ‘X‘. "失败
it_tc_0100-text = lt_return-message.
ENDIF.
ENDLOOP.
IF cp_eind NE ‘X‘.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘
EXPORTING
wait = ‘X‘.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK‘.
ENDIF.
ENDIF.
IF cp_eind NE ‘X‘ AND sy-subrc = 0.
IF p_test = ‘X‘.
it_tc_0100-text = ‘Test successfully.‘.
ELSE.
it_tc_0100-text = ‘Delete successfully.‘.
ENDIF.
ELSE.
CONCATENATE it_tc_0100-text ‘---‘ ‘Delete error.‘ into it_tc_0100-text.
ENDIF.
MODIFY it_tc_0100.
ENDLOOP.
ENDFORM. "change_sales_orders
*&---------------------------------------------------------------------*
*& Form init_fieldedi
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_FIELDTAB text
*----------------------------------------------------------------------*
FORM init_fieldedi USING p_p_fieldtab TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat TYPE slis_fieldcat_alv.
REFRESH p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘VBELN‘.
l_fieldcat-seltext_m = ‘ORDER NUMBER‘.
l_fieldcat-outputlen = 10.
APPEND l_fieldcat TO p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘ERDAT‘.
l_fieldcat-seltext_m = ‘Create Date‘.
l_fieldcat-ref_fieldname = ‘ERDAT‘.
l_fieldcat-ref_tabname = ‘VBAK‘.
l_fieldcat-outputlen = 10.
APPEND l_fieldcat TO p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘ERNAM‘.
l_fieldcat-seltext_m = ‘Input Person‘.
l_fieldcat-ref_fieldname = ‘ERDAT‘.
l_fieldcat-ref_tabname = ‘VBAK‘.
l_fieldcat-outputlen = 10.
APPEND l_fieldcat TO p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘KUNNR‘.
l_fieldcat-seltext_m = ‘Sold Code‘.
l_fieldcat-ref_fieldname = ‘KUNNR‘.
l_fieldcat-ref_tabname = ‘VBAK‘.
l_fieldcat-outputlen = 10.
APPEND l_fieldcat TO p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘NAME1‘.
l_fieldcat-seltext_m = ‘Sold Name1‘.
l_fieldcat-outputlen = 35.
APPEND l_fieldcat TO p_p_fieldtab.
CLEAR l_fieldcat.
l_fieldcat-fieldname = ‘TEXT‘.
l_fieldcat-seltext_m = ‘Message‘.
l_fieldcat-outputlen = 120.
APPEND l_fieldcat TO p_p_fieldtab.
ENDFORM. " INITIALIZE_FIELDEDI
*&---------------------------------------------------------------------*
*& Form display_mes
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_mes .
PERFORM init_fieldedi USING g_fieldcat[].
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
EXPORTING
i_callback_program = sy-repid
it_fieldcat = g_fieldcat[]
i_save = ‘A‘
i_default = ‘A‘
TABLES
t_outtab = it_tc_0100.
ENDFORM. " display_mes
原文:http://blog.csdn.net/sap_jack/article/details/46505343
SD--批量删除订单的更多相关文章
- Thinkphp 全选、反选 批量删除
完整案例 前台 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Memcached的批量删除方案总结
Memcached的批量删除,向来是Memcached使用者很头疼的事情,因为Memcached采取的缓存方案是哈希表结构,所以没有办法实现delete from tablename where ke ...
- tp5 ajax批量删除(自写)
html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- php批量删除
php批量删除可以实现多条或者全部数据一起删除 新建php文件 显示数据库中内容: <table width="100%" border="1" cell ...
- confirm对话框取消后阻止ajax操作、ajax做批量删除
在做批量删除的时候,需要用confirm弹出一个提示框让用户确认是否删除,点击确定,执行操作,点击取消,取消操作.但是如果使用ajax把选中项的主键值传到处理页面处理时,如果使用下面的方法将confi ...
- mybatis批量删除提示类型错误
一. 这里主要考虑两种参数类型:数组或者集合. 而这点区别主要体现在EmpMapper.xml文件中标签的collection属性: 当collection="array"时,表名 ...
- php链接数据库 批量删除 和 注册审核
理解 : hiden value session name="a[]" 1. form 表单上传的 value=" "值 ...
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- Ado.net[登录,增删改查,Get传值,全选,不选,批量删除,批量更新]
[虽然说,开发的时候,我们可以使用各种框架,ado.net作为底层的东西,作为一个合格的程序员,在出问题的时候我们还是要知道如何调试] 一.增删改查 cmd.ExecuteReader();执行查询, ...
随机推荐
- Flask内置URL变量转换器
Flask内置URL变量转换器: 转换器通过特定的规则执行,”<转换器: 变量名>”.<int: year>把year的值转换为证书,因此我们可以在视图函数中直接对year变量 ...
- c# ref和out参数
向方法传递参的时候,对应的参数通常会用实参的拷贝来初始化.就是说随便在方法内部进行怎样的修改,都不会影响作为参数传递的变量的原始值. 通过上面的例子我们可以看出来,如果一个方法的参数是引用类型,那么使 ...
- sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法
sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法 1.报错误号码2013,可能是端口号不是默认的3306,需要改成对应的,检查命令是: [root@host et ...
- mysql 2
mysql索引原理 初识索引 为什么要索引? 加速查询 读写比10:1左右 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构. 索引是应 ...
- nginx FastCGI错误Primary script unknown解决办法
在centos上成功编译安装nginx 1.4.php 5.4并成功启动nginx和php-fpm后,访问php提示"File not found.",同时在错误日志中看到: 复制 ...
- 大数据自学2-Hue集成环境中使用Sqoop组件从Sql Server导数据到Hive/HDFS
安装完CDH后,发现里面的东东实在是太多了,对于一个初学大数据的来说就犹如刘姥姥进了大观园,很新奇,这些东东每个单拿出来都够喝一壶的. 接来来就是一步一步地学习了,先大致学习了每个模组大致做什么用的, ...
- django框架基础
所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 最简单的web框架 import socket sk = socke ...
- 【Shell循环进程并行处理】利用简单的语句实现for循环并行处理命令
在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很多的,可以同时在后台运行以节约时间,这是并行处理的意义.除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的数 ...
- JS使用onscroll、scrollTop实现图片懒加载
今天做到项目中的图片展示,由于每一页的图片数量都很多,因此需要为图片的展示设计一种懒加载的功能. 第一要做的当然就是给程序添加滚动监听事件. //触发拉取图片开关,保证正在拉取时不能再次触发 var ...
- SVN更新无数次后仍显示Out of date
理器相集成的TortoiseSVN更是方便. 但有时候在提交修改后的文件时,却莫名其妙的出现out of date错误,导致工程无法commit,即使将新文件删了重新update,然后再在旧文件上作修 ...