*
* Compare Production Confirmation against Planned by Work Centre
*
REPORT ZASSEMBLY_EFFICIENCY  LINE-SIZE 255 NO STANDARD PAGE HEADING
                  LINE-COUNT 065(001).
TABLES: AFKO,   "Order header data PP orders
      AFPO,   "Order item
      AFRU,   "Order completion confirmations
      AUFM,   "Goods movements for order
      AFVV,   "DB structure of the quantities/dates/values in the oper
      MARA.   "General Material Data
DATA: BEGIN OF INT_EFF OCCURS 100,
      MATNR     TYPE AFKO-STLBEZ,
      MTART     TYPE MARA-MTART,
      AUFNR     TYPE AFKO-AUFNR,
      GSTRI     TYPE AFKO-GSTRI,
      GLTRI     TYPE AFKO-GLTRI,
      GAMNG(9)  TYPE C,
      MENGE(9)  TYPE C,
      PLN01(9)  TYPE C,
      ISM01(7)  TYPE P DECIMALS 2,
      DAUAT     TYPE AFPO-DAUAT,
    END OF INT_EFF.
DATA: FDATE LIKE SY-DATUM,
    LDATE LIKE SY-DATUM.
DATA: YGAMNG(7)   TYPE P DECIMALS 2,
    YMENGE(7)   TYPE P DECIMALS 2,
    YPLN01(7)   TYPE P DECIMALS 2,
    XMENGE(7)   TYPE P DECIMALS 0,
    XSTDRATE(7) TYPE P DECIMALS 2,
    XACTRATE(7) TYPE P DECIMALS 2,
    XLINEEFF(7) TYPE P DECIMALS 2,
    XUTILISA(7) TYPE P DECIMALS 2.
SELECT-OPTIONS XWERKS  FOR AFRU-WERKS DEFAULT 'SAP'.
SELECT-OPTIONS XBUDAT  FOR AFRU-BUDAT.
SELECT-OPTIONS XAUFNR  FOR AFRU-AUFNR.
START-OF-SELECTION.
SELECT * FROM AFRU WHERE BUDAT IN XBUDAT
                   AND WERKS IN XWERKS
                   AND AUFNR IN XAUFNR.
CLEAR AFPO.
SELECT SINGLE * FROM AFPO WHERE AUFNR = AFRU-AUFNR.
CLEAR AFKO.
SELECT SINGLE * FROM AFKO WHERE AUFNR = AFRU-AUFNR.
CLEAR MARA.
SELECT SINGLE * FROM MARA WHERE LVORM = ''
                            AND MATNR = AFKO-STLBEZ.
CLEAR AFVV.
SELECT SINGLE * FROM AFVV WHERE AUFPL = AFRU-AUFPL
                            AND APLZL = AFRU-APLZL.
IF AFVV-VGE01 = 'MIN'.
   AFVV-VGW01 = AFVV-VGW01 / 60.
ENDIF.
PERFORM GET_DATA_AUFM.
PERFORM GET_DATA.
ENDSELECT.
PERFORM LOOP_INT_EFF.
END-OF-SELECTION.
FORM GET_DATA.
* Reverse Confirmation
   IF AFRU-STOKZ = 'X'.
      MULTIPLY AFRU-LMNGA  BY    -1.
      MULTIPLY AFRU-ISM01  BY    -1.
      MULTIPLY AFRU-ISM02  BY    -1.
      MULTIPLY AFRU-ISM03  BY    -1.
      MULTIPLY AFRU-ISM04  BY    -1.
      MULTIPLY AFKO-GAMNG  BY    -1.
      MULTIPLY AFVV-BMSCH  BY    -1.
      MULTIPLY AFVV-VGW01  BY    -1.
      MULTIPLY AFVV-VGW02  BY    -1.
      MULTIPLY AFVV-VGW03  BY    -1.
   ENDIF.
* Plan Activities
   IF AFVV-BMSCH <> 0.
      INT_EFF-PLN01 = ( AFKO-GAMNG / AFVV-BMSCH ) * AFVV-VGW01 * 60.
   ENDIF.
* Actual Activities
   INT_EFF-ISM01 = AFRU-ISM01.
* Material No.
   IF AFKO-PLNBEZ = SPACE.
      INT_EFF-MATNR = AFKO-STLBEZ.
   ELSE.
      INT_EFF-MATNR = AFKO-PLNBEZ.
   ENDIF.
   INT_EFF-MTART = MARA-MTART.
   INT_EFF-AUFNR = AFKO-AUFNR.
   INT_EFF-GSTRI = AFKO-GSTRI.
   INT_EFF-GLTRI = AFKO-GLTRI.
   INT_EFF-GAMNG = AFKO-GAMNG.
   INT_EFF-MENGE = XMENGE.
   INT_EFF-DAUAT = AFPO-DAUAT.
   COLLECT INT_EFF.
   CLEAR   INT_EFF.
ENDFORM.
FORM GET_DATA_AUFM.
   CLEAR XMENGE.
   SELECT * FROM AUFM WHERE AUFNR = AFKO-AUFNR
                        AND BWART IN ('101', '102').
        IF AUFM-SHKZG = 'H'.
           MULTIPLY AUFM-MENGE BY -1.
        ENDIF.
        ADD AUFM-MENGE  TO XMENGE.
   ENDSELECT.
ENDFORM.
FORM LOOP_INT_EFF.
   LOOP AT INT_EFF.
      CLEAR: XSTDRATE, XACTRATE, XLINEEFF, XUTILISA.
      IF INT_EFF-PLN01 <> 0.
         XSTDRATE = INT_EFF-MENGE / INT_EFF-PLN01.
      ENDIF.
      IF INT_EFF-ISM01 <> 0.
         XACTRATE = INT_EFF-MENGE / INT_EFF-ISM01.
         XUTILISA = INT_EFF-PLN01 - INT_EFF-ISM01.
      ENDIF.
      IF XSTDRATE <> 0.
         XLINEEFF = XACTRATE / XSTDRATE.
      ENDIF.
      YGAMNG = INT_EFF-GAMNG.
      YMENGE = INT_EFF-MENGE.
      YPLN01 = INT_EFF-PLN01.
      WRITE:/ INT_EFF-MATNR UNDER '      Material',
              INT_EFF-MTART UNDER ' Matl',
              INT_EFF-AUFNR UNDER 'Production',
              INT_EFF-GSTRI UNDER 'Start',
              INT_EFF-GLTRI UNDER '  Finish',
              YGAMNG        UNDER 'Production Ord',
              YMENGE        UNDER '   Receipt Qty',
              YPLN01        UNDER '   Plan Hr',
              INT_EFF-ISM01 UNDER ' Actual Hr',
              XSTDRATE      UNDER '      Std Rate',
              XACTRATE      UNDER '   Actual Rate',
              XLINEEFF      UNDER 'Efficiency (%)',
              XUTILISA      UNDER 'Utilisation Typ',
              INT_EFF-DAUAT UNDER 'PP Type'.
   ENDLOOP.
ENDFORM.
TOP-OF-PAGE.
FORMAT COLOR COL_TOTAL.
  WRITE: / SY-DATUM, SY-UZEIT, SY-REPID,
     110  'Assembly Line Efficiency Report - Closed (Period)',
     200  SY-UNAME, SY-PAGNO.
  SKIP.
  WRITE: /1 '      Material',
         20 ' Matl',
         25 'Production',
         36 'Start',
         47 '  Finish',
         58 'Production Ord',
         73 '   Receipt Qty',
         88 '   Plan Hr',
        103 ' Actual Hr',
        118 '      Std Rate',
        133 '   Actual Rate',
        148 'Efficiency (%)',
        163 'Utilisation Typ',
        179 'PP Type'.
INITIALIZATION.
 LDATE = SY-DATUM.
 LDATE+6(2) = '01'.
 LDATE  = LDATE - 1.
 FDATE = LDATE.
 FDATE+6(2) = '01'.
 MOVE:   FDATE         TO  XBUDAT-LOW,
         LDATE         TO  XBUDAT-HIGH.
 APPEND XBUDAT.
  *---End of Program
 
No comments:
Post a Comment