*
* 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
 
 
Serkan AKKAVAK
Computer Engineer
ABAP Developer & SAP MM SD Consultant
Contact : serkurumsal@yandex.com