二八原則的演算法
昨天公司老總要求按二八原則把佔公司銷量,收入以及利潤80%的車型統計出來,寫了個程式,原始碼如下:
REPORT ZCALRATE .
DATA: it_ztkcjg TYPE TABLE OF ztkcjg,
wa_ztkcjg TYPE ztkcjg.
INITIALIZATION.
START-OF-SELECTION.
PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data.
DATA: lv_bl(13) TYPE p DECIMALS 6,
lv_bl_ban(13) TYPE p DECIMALS 6 VALUE '0.8001'.
SELECT * FROM ztkcjg
INTO TABLE it_ztkcjg.
LOOP AT it_ztkcjg INTO wa_ztkcjg.
wa_ztkcjg-zkcfg = 'X'.
wa_ztkcjg-zjefg = 'X'.
wa_ztkcjg-zlrfg = 'X'.
MODIFY it_ztkcjg FROM wa_ztkcjg.
ENDLOOP.
* 計算庫存比例
SORT it_ztkcjg BY spart zkcbl DESCENDING.
LOOP AT it_ztkcjg INTO wa_ztkcjg.
AT NEW spart.
clear lv_bl.
ENDAT.
lv_bl = lv_bl + wa_ztkcjg-zkcbl.
IF lv_bl > lv_bl_ban.
CLEAR wa_ztkcjg-zkcfg.
MODIFY it_ztkcjg FROM wa_ztkcjg TRANSPORTING zkcfg.
ENDIF.
ENDLOOP.
* 計算金額比例
SORT it_ztkcjg BY spart zjebl DESCENDING.
LOOP AT it_ztkcjg INTO wa_ztkcjg.
AT NEW spart.
clear lv_bl.
ENDAT.
lv_bl = lv_bl + wa_ztkcjg-zjebl.
IF lv_bl > lv_bl_ban.
CLEAR wa_ztkcjg-zjefg.
MODIFY it_ztkcjg FROM wa_ztkcjg TRANSPORTING zjefg.
ENDIF.
ENDLOOP.
* 計算利潤比例
SORT it_ztkcjg BY spart zlrbl DESCENDING.
LOOP AT it_ztkcjg INTO wa_ztkcjg.
AT NEW spart.
clear lv_bl.
ENDAT.
lv_bl = lv_bl + wa_ztkcjg-zlrbl.
IF lv_bl > lv_bl_ban.
CLEAR wa_ztkcjg-zlrfg.
MODIFY it_ztkcjg FROM wa_ztkcjg TRANSPORTING zlrfg.
ENDIF.
ENDLOOP.
MODIFY ztkcjg FROM TABLE it_ztkcjg.
COMMIT WORK AND WAIT.
ENDFORM. " frm_get_data