需求:销售部提出可以根据颜色来统计曾下过那些订单,但是我们物料的颜色是在特性中实现的,如果按照传统报表方式来按照颜色统计订单的话,报表程序比较麻烦而且速度非常的慢。目前我们很多报表都在程序中增加一段判断颜色的代码。当数据量大的时候速度非常的慢。
解决方法:通过增强VA01和VA02的方式来实现销售部的需求。当销售部下单的时候把该行的物料颜色等相关信息记录到自己设定的数据库中,以后可以根据数据库中的颜色来统计曾经下的单,并且其他报表的速度可以大幅度提升。
缺点:销售部在下单或改单的时候可能速度会慢一点。经过测试其实感觉不出来慢。呵呵~~~~~
实现方法:通过用户出口程序找到VA01的出口程序V45S0003,找到ZXVVAU12,剩下的事情就是写代码了。。。
*&---------------------------------------------------------------------*
*& 包括 ZXVVAU12
*&---------------------------------------------------------------------*
TABLES:zpppr_socolor.
DATA:fcode LIKE sy-ucomm.
*MESSAGE i002(znyj13) WITH i_vbap-vbeln i_vbap-posnr..
*write I_VBAP-VBELN.
fcode = sy-ucomm.
IF fcode = 'SAVE'.
DATA:gt_tx LIKE conf_out OCCURS 0 WITH HEADER LINE.
DATA:gt_color LIKE zpppr_socolor OCCURS 0 WITH HEADER LINE.
DATA:lv_c1(16),
lv_c2(2).
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_color
FROM zpppr_socolor
WHERE vbeln = i_vbak-vbeln.
CALL FUNCTION 'VC_I_GET_CONFIGURATION_IBASE'
EXPORTING
instance = i_vbap-cuobj
* BUSINESS_OBJECT =
* LANGUAGE = SY-LANGU
* IV_INVALID_POSSIBLE = ' '
* IV_NEUTRAL = ' '
TABLES
configuration = gt_tx
* ET_CONF_WITH_AUTHOR =
EXCEPTIONS
instance_not_found = 1
OTHERS = 2.
READ TABLE gt_color WITH KEY vbeln = i_vbap-vbeln posnr = i_vbap-posnr.
LOOP AT gt_tx WHERE atwrt <> '99'..
SPLIT gt_tx-atnam AT '_' INTO lv_c1 lv_c2.
gt_tx-atnam = lv_c2.
CASE lv_c2.
"--坯料08,喷粉05,电泳02,氧化03,铬化04,氟碳06
WHEN '02' OR '03' OR '04' OR '05' OR '06' OR '08'.
gt_color-vbeln = i_vbap-vbeln.
gt_color-posnr = i_vbap-posnr.
gt_color-matnr = i_vbap-matnr.
gt_color-atnam = gt_tx-atnam .
gt_color-atbez = gt_tx-atbez .
gt_color-atwrt = gt_tx-atwrt .
gt_color-atwtb = gt_tx-atwtb .
gt_color-erdat = sy-datum.
gt_color-abhov = sy-uzeit.
gt_color-ernam = sy-uname.
ENDCASE.
ENDLOOP.
MODIFY gt_color INDEX sy-tabix.
IF sy-subrc = 0.
UPDATE zpppr_socolor FROM gt_color.
ELSE.
INSERT zpppr_socolor FROM gt_color.
ENDIF.
ENDIF.
CLEAR fcode.
数据库的结构很简单,看你需要什么信息,你可以自己增加。
哈哈~~
SAP增强,真强
阅读(5152) | 评论(0) | 转发(0) |