1. 程式人生 > >二八原則的演算法

二八原則的演算法

昨天公司老總要求按二八原則把佔公司銷量,收入以及利潤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