SAP

ZPO_TOTALS

上一篇 / 下一篇  2007-12-11 00:00:00 / 个人分类:工作日記

REPORT ZPO_TOTALS LINE-SIZE 255 LINE-COUNT 65
NO STANDARD PAGE HEADING.

************************************************************************
* Program ID : ZPO_TOTALS *
* Program Name : List of Materials for ALL PO's *
* As Per 12 Month Selection Criteria *
* Function : Purchase Order Report *
* : *
* Caution : *
* : *
************************************************************************
*MAINTENANCE HISTORY ***************************************************
* (Version)(YYYY/MM/DD) (Person) (Contens) *
* XX.XX.XX YYYY/MM/DD X.XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 0. 0. 1 2007/11/18 Bok Tan Initial Cording *
*----------------------------------------------------------------------*
* *
*----------------------------------------------------------------------*
************************************************************************

*----- TABLE -----*
TABLES: MAKT
,EKKO
,EKPO
.

TYPE-POOLS:
SLIS.

*----- Internal Tables -----*

TYPES: BEGIN OF TYPE_REPORT,
MATNR LIKE MARA-MATNR, " MATERIAL NUMBER
MAKTX LIKE MAKT-MAKTX, " MATERIAL DESCRIPTION
LIFNR LIKE EKKO-LIFNR, " PO Vendor
MENGE1 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE2 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE3 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE4 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE5 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE6 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE7 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE8 LIKE EKPO-MENGE, " PO ITEM QTY
MENGE9 LIKE EKPO-MENGE, " PO ITEM QTY
MENGEA LIKE EKPO-MENGE, " PO ITEM QTY
MENGEB LIKE EKPO-MENGE, " PO ITEM QTY
MENGEC LIKE EKPO-MENGE, " PO ITEM QTY
MENGET LIKE EKPO-MENGE, " MATL PO TOTAL
END OF TYPE_REPORT.

DATA: TWK1 TYPE TYPE_REPORT OCCURS 0 WITH HEADER LINE.

TYPES: BEGIN OF TYPE_EKKO,
LIFNR LIKE EKKO-LIFNR, " PO VENDOR
AEDAT LIKE EKKO-AEDAT, " PO DATE
EBELN LIKE EKKO-EBELN, " PO NUMBER
PERIOD(2),

END OF TYPE_EKKO.

DATA: TWK2 TYPE TYPE_EKKO OCCURS 0 WITH HEADER LINE.

TYPES: BEGIN OF TYPE_EKPO,
MATNR LIKE EKPO-MATNR, " MATERIAL NUMBER
MENGE LIKE EKPO-MENGE, " PO ITEM QTY

END OF TYPE_EKPO.

DATA: TWK3 TYPE TYPE_EKPO OCCURS 0 WITH HEADER LINE.

TYPES: BEGIN OF TYPE_XTRACT,
LIFNR LIKE EKKO-LIFNR, " PO VENDOR
MATNR LIKE EKPO-MATNR, " MATERIAL NUMBER
PERIOD(2),
MENGE LIKE EKPO-MENGE, " PO ITEM QTY

END OF TYPE_XTRACT.

DATA: TWK4 TYPE TYPE_XTRACT OCCURS 0 WITH HEADER LINE.

*----- Work Data -----*
DATA:
ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
ALV_LAYOUT TYPE SLIS_LAYOUT_ALV,
STRU_DISVAR TYPE DISVARIANT.

*----- COUNTERS -----*

DATA:
CTR_TWK1 TYPE I
,CTR_TWK2 TYPE I
,CTR_TWK3 TYPE I
,CTR_TWK4 TYPE I
,CTR_LINE TYPE I.

*----- FLAGS -----*

DATA: FLAG_RPT_FIRST_TIME VALUE 'Y'.

DATA: WK_DATE LIKE SY-DATUM
,WK_LFMON LIKE RM03Q-LFMON " PERIOD MONTH MM
,WK_LFGJA LIKE RM03Q-LFGJA " PERIOD YEAR CCYY
,WK_MONTH TYPE I
,WK_YEAR TYPE I
,WK_P_LIFNR LIKE EKKO-LIFNR " PREV. PO VENDOR
,WK_P_MATNR LIKE EKPO-MATNR " PREV. MATERIAL NUMBER
,WK_MAKTX LIKE MAKT-MAKTX " MATERIAL DESCRIPTION
,WK_FIRST(1)
.

*----- PERIODS -----*

DATA: WK_P_BEG_01 LIKE EKKO-AEDAT
,WK_P_END_01 LIKE EKKO-AEDAT
,WK_P_BEG_02 LIKE SY-DATUM
,WK_P_END_02 LIKE SY-DATUM
,WK_P_BEG_03 LIKE SY-DATUM
,WK_P_END_03 LIKE SY-DATUM
,WK_P_BEG_04 LIKE SY-DATUM
,WK_P_END_04 LIKE SY-DATUM
,WK_P_BEG_05 LIKE SY-DATUM
,WK_P_END_05 LIKE SY-DATUM
,WK_P_BEG_06 LIKE SY-DATUM
,WK_P_END_06 LIKE SY-DATUM
,WK_P_BEG_07 LIKE SY-DATUM
,WK_P_END_07 LIKE SY-DATUM
,WK_P_BEG_08 LIKE SY-DATUM
,WK_P_END_08 LIKE SY-DATUM
,WK_P_BEG_09 LIKE SY-DATUM
,WK_P_END_09 LIKE SY-DATUM
,WK_P_BEG_10 LIKE SY-DATUM
,WK_P_END_10 LIKE SY-DATUM
,WK_P_BEG_11 LIKE SY-DATUM
,WK_P_END_11 LIKE SY-DATUM
,WK_P_BEG_12 LIKE EKKO-AEDAT
,WK_P_END_12 LIKE EKKO-AEDAT
.

DATA:
G_REPID LIKE SY-REPID,
G_TITLE LIKE SY-TITLE,
RECORDS(8) TYPE C.

*================= PARAMETER & SELECT-OPTIONS ==================*

SELECTION-SCREEN BEGIN OF BLOCK PARM1 WITH FRAME TITLE TEXT-S01.

SKIP.

PARAMETERS Z_LFMON LIKE RM03Q-LFMON OBLIGATORY. " PERIOD MONTH MM
PARAMETERS Z_LFGJA LIKE RM03Q-LFGJA OBLIGATORY. " PERIOD YEAR YYCC

SKIP.

SELECTION-SCREEN END OF BLOCK PARM1.

SKIP.

SELECTION-SCREEN BEGIN OF BLOCK SEL2 WITH FRAME TITLE TEXT-S02.

SKIP.

SELECT-OPTIONS: Z_MATNR FOR EKPO-MATNR

,Z_LIFNR FOR EKKO-LIFNR.

SKIP.

SELECTION-SCREEN END OF BLOCK SEL2.

SKIP.

************************************************************************
* INITIALIZATION.
************************************************************************

INITIALIZATION.

*-------------------------------------------------------------------
* TO 'AID' USERS MINIMIZE KEYSTROKES
* INPUT MOST LIKELY INITIAL VALUES FOR USERS
*-------------------------------------------------------------------

WK_DATE = SY-DATUM. " CURRENT DATE

WK_LFGJA = WK_DATE+0(4). " PERIOD YEAR
WK_LFMON = WK_DATE+4(2). " PERIOD MONTH

WK_MONTH = WK_LFMON - 1.
WK_LFMON = WK_MONTH.

IF WK_MONTH < 1.
WK_LFMON = 12.
WK_LFGJA = WK_LFGJA - 1.
ENDIF.

MOVE WK_LFMON TO Z_LFMON. " INPUT PARM PERIOD MONTH
MOVE WK_LFGJA TO Z_LFGJA. " INPUT PARM PERIOD YEAR


************************************************************************
* START-OF-SELECTION. *
************************************************************************
START-OF-SELECTION.

PERFORM SET_REPORT_PERIODS.

PERFORM GET_DATA.

IF CTR_TWK1 > 0.
PERFORM WRITE_RPT.
ENDIF.


************************************************************************
* END-OF-SELECTION. *
************************************************************************
END-OF-SELECTION.

G_REPID = 'ZPO_TOTALS - PURCHASE ORDER LIST REPORT, 12 PERIODS'.

DESCRIBE TABLE TWK1 LINES RECORDS.

SKIP 2.

WRITE: / RECORDS, 'PO MATERIALS Selected As Per Your Selection'.

IF TWK1[] IS INITIAL.
MESSAGE I000(Z0) WITH 'NO RECORDS FOUND!'.
EXIT.
ENDIF.

PERFORM FIELDCAT_INIT USING ALV_FIELDCAT.
ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ALV_LAYOUT-ZEBRA = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = G_REPID
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = G_TITLE
* I_GRID_SETTINGS =
IS_LAYOUT = ALV_LAYOUT
IT_FIELDCAT = ALV_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = STRU_DISVAR
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_ADD_FIELDCAT =
* IT_HYPERLINK =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = TWK1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

*&---------------------------------------------------------------------*
*& Form FIELDCAT_INIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ALV_FIELDCAT text
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT USING P_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA:
LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-REF_TABNAME = 'MARA'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MAKTX'.
LS_FIELDCAT-REF_TABNAME = 'MAKT'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'LIFNR'.
LS_FIELDCAT-REF_TABNAME = 'EKKO'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE1'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '11 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE2'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '10 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE3'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '9 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE4'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '8 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE5'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '7 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE6'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '6 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE7'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '5 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE8'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '4 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGE9'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '3 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGEA'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '2 MTH PREV'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGEB'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = 'PREV MONTH'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGEC'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = 'INPUT MONTH'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MENGET'.
LS_FIELDCAT-REF_TABNAME = 'TWK1'.
LS_FIELDCAT-SELTEXT_L = '12 MONTHS TOTAL'.
LS_FIELDCAT-KEY = 'X'.
APPEND LS_FIELDCAT TO P_FIELDCAT.

ENDFORM. "FIELDCAT_INIT


*&--------------------------------------------------------------------*
*& Form SET_REPORT_PERIODS
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM SET_REPORT_PERIODS.

WK_YEAR = Z_LFGJA.
WK_MONTH = Z_LFMON.

WK_P_BEG_12+0(4) = WK_YEAR.
WK_P_END_12+0(4) = WK_YEAR.
WK_P_BEG_12+4(2) = WK_MONTH.
WK_P_END_12+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_11+0(4) = WK_YEAR.
WK_P_END_11+0(4) = WK_YEAR.
WK_P_BEG_11+4(2) = WK_MONTH.
WK_P_END_11+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_10+0(4) = WK_YEAR.
WK_P_END_10+0(4) = WK_YEAR.
WK_P_BEG_10+4(2) = WK_MONTH.
WK_P_END_10+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_09+0(4) = WK_YEAR.
WK_P_END_09+0(4) = WK_YEAR.
WK_P_BEG_09+4(2) = WK_MONTH.
WK_P_END_09+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_08+0(4) = WK_YEAR.
WK_P_END_08+0(4) = WK_YEAR.
WK_P_BEG_08+4(2) = WK_MONTH.
WK_P_END_08+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_07+0(4) = WK_YEAR.
WK_P_END_07+0(4) = WK_YEAR.
WK_P_BEG_07+4(2) = WK_MONTH.
WK_P_END_07+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_06+0(4) = WK_YEAR.
WK_P_END_06+0(4) = WK_YEAR.
WK_P_BEG_06+4(2) = WK_MONTH.
WK_P_END_06+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_05+0(4) = WK_YEAR.
WK_P_END_05+0(4) = WK_YEAR.
WK_P_BEG_05+4(2) = WK_MONTH.
WK_P_END_05+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_04+0(4) = WK_YEAR.
WK_P_END_04+0(4) = WK_YEAR.
WK_P_BEG_04+4(2) = WK_MONTH.
WK_P_END_04+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_03+0(4) = WK_YEAR.
WK_P_END_03+0(4) = WK_YEAR.
WK_P_BEG_03+4(2) = WK_MONTH.
WK_P_END_03+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_02+0(4) = WK_YEAR.
WK_P_END_02+0(4) = WK_YEAR.
WK_P_BEG_02+4(2) = WK_MONTH.
WK_P_END_02+4(2) = WK_MONTH.

PERFORM SET_PREV_PERIOD.

WK_P_BEG_01+0(4) = WK_YEAR.
WK_P_END_01+0(4) = WK_YEAR.
WK_P_BEG_01+4(2) = WK_MONTH.
WK_P_END_01+4(2) = WK_MONTH.

MOVE '01' TO: WK_P_BEG_01+6(2)
,WK_P_BEG_02+6(2)
,WK_P_BEG_03+6(2)
,WK_P_BEG_04+6(2)
,WK_P_BEG_05+6(2)
,WK_P_BEG_06+6(2)
,WK_P_BEG_07+6(2)
,WK_P_BEG_08+6(2)
,WK_P_BEG_09+6(2)
,WK_P_BEG_10+6(2)
,WK_P_BEG_11+6(2)
,WK_P_BEG_12+6(2).

MOVE '31' TO: WK_P_END_01+6(2)
,WK_P_END_02+6(2)
,WK_P_END_03+6(2)
,WK_P_END_04+6(2)
,WK_P_END_05+6(2)
,WK_P_END_06+6(2)
,WK_P_END_07+6(2)
,WK_P_END_08+6(2)
,WK_P_END_09+6(2)
,WK_P_END_10+6(2)
,WK_P_END_11+6(2)
,WK_P_END_12+6(2).

ENDFORM. " SET_REPORT_PERIODS.


*&--------------------------------------------------------------------*
*& Form SET_PREV_PERIOD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM SET_PREV_PERIOD.

WK_MONTH = WK_MONTH - 1.

IF WK_MONTH < 1.
WK_MONTH = 12.
WK_YEAR = WK_YEAR - 1.
ENDIF.

ENDFORM. " SET_PREV_PERIOD.


*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* EXTRACT DATA FROM EKKO & EKPO
*----------------------------------------------------------------------*
FORM GET_DATA.

REFRESH:
TWK1
,TWK2
,TWK3
,TWK4.
CLEAR:
TWK1
,TWK2
,TWK3
,TWK4.

SELECT LIFNR
AEDAT
EBELN

INTO TWK2

FROM EKKO

WHERE AEDAT >= WK_P_BEG_01
AND AEDAT <= WK_P_END_12
AND BSTYP = 'F'
AND LOEKZ < 'C'
AND LIFNR IN Z_LIFNR.

PERFORM GET_PO_ITEMS.

CLEAR TWK2.

ENDSELECT.

DESCRIBE TABLE TWK4 LINES CTR_TWK4.

IF CTR_TWK4 = 0.
EXIT.
ENDIF.

SORT TWK4 BY MATNR LIFNR PERIOD.

WK_FIRST = 'Y'. " FIRST TIME THRU

CLEAR: WK_P_MATNR
,WK_P_LIFNR.

LOOP AT TWK4.

IF WK_FIRST = 'Y'.
PERFORM GET_MATL_DESCR.
MOVE TWK4-LIFNR TO WK_P_LIFNR.
MOVE TWK4-MATNR TO WK_P_MATNR.
ELSE.
IF TWK4-MATNR = WK_P_MATNR AND TWK4-LIFNR = WK_P_LIFNR.
ELSE.
PERFORM APPEND_TWK1.
ENDIF.
ENDIF.

MOVE: TWK4-MATNR TO TWK1-MATNR
,TWK4-LIFNR TO TWK1-LIFNR
,WK_MAKTX TO TWK1-MAKTX.

PERFORM DO_CORRECT_PERIOD.

WK_FIRST = 'N'. " NO LONGER FIRST TIME

ENDLOOP.

APPEND TWK1. " APPEND THE LAST FINAL RECORD
CLEAR TWK1.

DESCRIBE TABLE TWK1 LINES CTR_TWK1.

SORT TWK1 BY MATNR LIFNR.

ENDFORM. " GET_DATA


*&--------------------------------------------------------------------*
*& Form APPEND_TWK1
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM APPEND_TWK1.

APPEND TWK1.
CLEAR TWK1.

IF NOT TWK4-MATNR = WK_P_MATNR.
PERFORM GET_MATL_DESCR.
MOVE TWK4-MATNR TO WK_P_MATNR.
ENDIF.

MOVE TWK4-LIFNR TO WK_P_LIFNR.

ENDFORM. " APPEND_TWK1.


*&--------------------------------------------------------------------*
*& Form DO_CORRECT_PERIOD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DO_CORRECT_PERIOD.

IF TWK4-PERIOD = '01'.
MOVE TWK4-MENGE TO TWK1-MENGE1.
ELSEIF TWK4-PERIOD = '02'.
MOVE TWK4-MENGE TO TWK1-MENGE2.
ELSEIF TWK4-PERIOD = '03'.
MOVE TWK4-MENGE TO TWK1-MENGE3.
ELSEIF TWK4-PERIOD = '04'.
MOVE TWK4-MENGE TO TWK1-MENGE4.
ELSEIF TWK4-PERIOD = '05'.
MOVE TWK4-MENGE TO TWK1-MENGE5.
ELSEIF TWK4-PERIOD = '06'.
MOVE TWK4-MENGE TO TWK1-MENGE6.
ELSEIF TWK4-PERIOD = '07'.
MOVE TWK4-MENGE TO TWK1-MENGE7.
ELSEIF TWK4-PERIOD = '08'.
MOVE TWK4-MENGE TO TWK1-MENGE8.
ELSEIF TWK4-PERIOD = '09'.
MOVE TWK4-MENGE TO TWK1-MENGE9.
ELSEIF TWK4-PERIOD = '10'.
MOVE TWK4-MENGE TO TWK1-MENGEA.
ELSEIF TWK4-PERIOD = '11'.
MOVE TWK4-MENGE TO TWK1-MENGEB.
ELSEIF TWK4-PERIOD = '12'.
MOVE TWK4-MENGE TO TWK1-MENGEC.
ELSEIF TWK4-PERIOD = '13'.
MOVE TWK4-MENGE TO TWK1-MENGET.
ELSE.
WRITE: /'PROBLEM IN PROGRAM, UNKNOWN PERIOD - ', TWK4-PERIOD.
ENDIF.

ENDFORM. " DO_CORRECT_PERIOD.


*&--------------------------------------------------------------------*
*& Form GET_PO_ITEMS
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GET_PO_ITEMS.

IF TWK2-AEDAT >= WK_P_BEG_01 AND TWK2-AEDAT <= WK_P_END_01.
MOVE '01' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_02 AND TWK2-AEDAT <= WK_P_END_02.
MOVE '02' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_03 AND TWK2-AEDAT <= WK_P_END_03.
MOVE '03' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_04 AND TWK2-AEDAT <= WK_P_END_04.
MOVE '04' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_05 AND TWK2-AEDAT <= WK_P_END_05.
MOVE '05' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_06 AND TWK2-AEDAT <= WK_P_END_06.
MOVE '06' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_07 AND TWK2-AEDAT <= WK_P_END_07.
MOVE '07' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_08 AND TWK2-AEDAT <= WK_P_END_08.
MOVE '08' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_09 AND TWK2-AEDAT <= WK_P_END_09.
MOVE '09' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_10 AND TWK2-AEDAT <= WK_P_END_10.
MOVE '10' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_11 AND TWK2-AEDAT <= WK_P_END_11.
MOVE '11' TO TWK2-PERIOD.
ELSEIF TWK2-AEDAT >= WK_P_BEG_12 AND TWK2-AEDAT <= WK_P_END_12.
MOVE '12' TO TWK2-PERIOD.
ELSE.
WRITE: /'PROBLEM, DATE SHOULD NOT BE EXTRACTED - ', TWK2-AEDAT.
ENDIF.

MOVE: TWK2-LIFNR TO TWK4-LIFNR
,TWK2-PERIOD TO TWK4-PERIOD.

SELECT MATNR
MENGE

INTO TWK3

FROM EKPO
WHERE EBELN = TWK2-EBELN
AND MATNR > ' '
AND MATNR IN Z_MATNR
AND LOEKZ < 'L'.

IF SY-SUBRC = 0.
MOVE: TWK2-LIFNR TO TWK4-LIFNR
,TWK2-PERIOD TO TWK4-PERIOD
,TWK3-MATNR TO TWK4-MATNR
,TWK3-MENGE TO TWK4-MENGE.

COLLECT TWK4.

CLEAR: TWK4-PERIOD.
MOVE '13' TO TWK4-PERIOD. " PERIOD / COLUMN 13 FOR TOTALS
COLLECT TWK4.

CLEAR: TWK3
,TWK4.

ENDIF.
ENDSELECT.

ENDFORM. " GET_PO_ITEMS.


*&--------------------------------------------------------------------*
*& Form GET_MATL_DESCR
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GET_MATL_DESCR.

* Material name

SELECT SINGLE MAKTX
INTO WK_MAKTX
FROM MAKT
WHERE MATNR = TWK4-MATNR
AND SPRAS = SY-LANGU.

ENDFORM. " GET_MATL_DESCR


*---------------------------------------------------------------------*
* FORM WRITE_RPT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM WRITE_RPT.

PERFORM PRINT_HEADER.

LOOP AT TWK1.

WRITE: /001 TWK1-MATNR
,018 TWK1-LIFNR
,023 TWK1-MENGE1
,039 TWK1-MENGE2
,055 TWK1-MENGE3
,071 TWK1-MENGE4
,087 TWK1-MENGE5
,103 TWK1-MENGE6
,119 TWK1-MENGE7
,135 TWK1-MENGE8
,151 TWK1-MENGE9
,167 TWK1-MENGEA
,183 TWK1-MENGEB
,200 TWK1-MENGEC
,218 TWK1-MENGET
,235 TWK1-MAKTX.

ENDLOOP.

ENDFORM. " WRITE_RPT.


*&--------------------------------------------------------------------*
*& Form PRINT_HEADER
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM PRINT_HEADER.

WRITE: /001 'DATE '
,006 SY-DATUM
,018 'TIME '
,023 SY-UZEIT
,057 'PURCHASE ORDERS REPORT'
,090 'GOING BACK 12 MONTHS, STARTING - '
,123 Z_LFGJA, Z_LFMON
,226 'PAGE '
,231 SY-PAGNO NO-ZERO.
SKIP.

WRITE: /001 'MATERIAL'
,018 'VENDOR'
,028 '11 MTH PREV'
,044 '10 MTH PREV'
,061 '9 MTH PREV'
,077 '8 MTH PREV'
,093 '7 MTH PREV'
,109 '6 MTH PREV'
,125 '5 MTH PREV'
,141 '4 MTH PREV'
,157 '3 MTH PREV'
,173 '2 MTH PREV'
,189 'PREV MONTH'
,205 'INPUT MONTH'
,219 '12 MONTHS TOTAL'
,235 'MATERIAL DESCRIPTION'.

SKIP.

ULINE.

ENDFORM. " PRINT_HEADER



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-07-25  
  12345
6789101112
13141516171819
20212223242526
2728293031  

我的存档

数据统计

  • 访问量: 974
  • 日志数: 966
  • 建立时间: 2007-12-12
  • 更新时间: 2007-12-12

RSS订阅

Open Toolbar