ZPO_GR_ONLY
上一篇 / 下一篇 2007-12-11 00:00:00 / 个人分类:工作日記
REPORT ZPO_GR_ONLY LINE-SIZE 255 LINE-COUNT 65
NO STANDARD PAGE HEADING.
************************************************************************
* Program ID : ZPO_GR_ONLY *
* Program Name : List of Goods Receipt 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/28 Bok Tan Initial Cording *
*----------------------------------------------------------------------*
* *
*----------------------------------------------------------------------*
************************************************************************
*----- TABLE -----*
TABLES: MAKT
,EKKO
,EKPO
,EKBE
.
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 GR QTY
MENGE2 LIKE EKPO-MENGE, " PO GR QTY
MENGE3 LIKE EKPO-MENGE, " PO GR QTY
MENGE4 LIKE EKPO-MENGE, " PO GR QTY
MENGE5 LIKE EKPO-MENGE, " PO GR QTY
MENGE6 LIKE EKPO-MENGE, " PO GR QTY
MENGE7 LIKE EKPO-MENGE, " PO GR QTY
MENGE8 LIKE EKPO-MENGE, " PO GR QTY
MENGE9 LIKE EKPO-MENGE, " PO GR QTY
MENGEA LIKE EKPO-MENGE, " PO GR QTY
MENGEB LIKE EKPO-MENGE, " PO GR QTY
MENGEC LIKE EKPO-MENGE, " PO GR QTY
MENGET LIKE EKPO-MENGE, " MATL GR 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
MATNR LIKE EKBE-MATNR, " MATERIAL NUMBER
BUDAT LIKE EKBE-BUDAT, " Posting Date in Document
MENGE LIKE EKBE-MENGE, " PO GR QTY
BWART LIKE EKBE-BWART, " MOVEMENT TYPE
END OF TYPE_EKKO.
DATA: TWK2 TYPE TYPE_EKKO OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF TYPE_XTRACT,
MATNR LIKE EKPO-MATNR, " MATERIAL NUMBER
LIFNR LIKE EKKO-LIFNR, " PO VENDOR
PERIOD(2),
MENGE LIKE EKPO-MENGE, " PO GR QTY
END OF TYPE_XTRACT.
DATA: TWK3 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_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_GR_CCYYMM(6) " PERIOD CCYYMM
,WK_PERIOD(2) " PERIOD FROM 01 THRU 12
,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_MIGO_MVT_TYP(1)
,WK_FIRST(1)
.
*----- PERIODS -----*
DATA: WK_PERIOD_01(6)
,WK_PERIOD_02(6)
,WK_PERIOD_03(6)
,WK_PERIOD_04(6)
,WK_PERIOD_05(6)
,WK_PERIOD_06(6)
,WK_PERIOD_07(6)
,WK_PERIOD_08(6)
,WK_PERIOD_09(6)
,WK_PERIOD_10(6)
,WK_PERIOD_11(6)
,WK_PERIOD_12(6).
DATA: WK_P_BEG_01 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,
'GOODS RECEIPTS 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_END_12+0(4) = WK_YEAR.
WK_P_END_12+4(2) = WK_MONTH.
WK_P_END_12+6(2) = '31'.
WK_PERIOD_12+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_12+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_12+4(1) = '0'.
WK_PERIOD_12+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_11+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_11+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_11+4(1) = '0'.
WK_PERIOD_11+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_10+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_10+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_10+4(1) = '0'.
WK_PERIOD_10+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_09+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_09+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_09+4(1) = '0'.
WK_PERIOD_09+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_08+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_08+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_08+4(1) = '0'.
WK_PERIOD_08+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_07+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_07+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_07+4(1) = '0'.
WK_PERIOD_07+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_06+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_06+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_06+4(1) = '0'.
WK_PERIOD_06+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_05+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_05+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_05+4(1) = '0'.
WK_PERIOD_05+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_04+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_04+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_04+4(1) = '0'.
WK_PERIOD_04+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_03+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_03+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_03+4(1) = '0'.
WK_PERIOD_03+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_02+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_02+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_02+4(1) = '0'.
WK_PERIOD_02+5(1) = WK_MONTH.
ENDIF.
PERFORM SET_PREV_PERIOD.
WK_PERIOD_01+0(4) = WK_YEAR.
IF WK_MONTH > 9.
WK_PERIOD_01+4(2) = WK_MONTH.
ELSE.
WK_PERIOD_01+4(1) = '0'.
WK_PERIOD_01+5(1) = WK_MONTH.
ENDIF.
WK_P_BEG_01+0(4) = WK_YEAR.
WK_P_BEG_01+4(2) = WK_MONTH.
WK_P_BEG_01+6(2) = '01'.
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 EKBE & EKKO
*----------------------------------------------------------------------*
FORM GET_DATA.
REFRESH:
TWK1
,TWK2
,TWK3.
CLEAR:
TWK1
,TWK2
,TWK3.
SELECT
EKKO~LIFNR
EKBE~MATNR
EKBE~BUDAT
EKBE~MENGE
EKBE~BWART
INTO TABLE TWK2
FROM ( EKBE INNER JOIN EKKO
ON EKBE~EBELN = EKKO~EBELN )
WHERE
EKBE~BUDAT >= WK_P_BEG_01
AND EKBE~BUDAT <= WK_P_END_12
AND EKBE~MATNR > ' '
AND EKBE~MATNR IN Z_MATNR
AND EKBE~VGABE = '1'
AND EKKO~LIFNR IN Z_LIFNR
AND EKKO~BSTYP = 'F'.
DESCRIBE TABLE TWK2 LINES CTR_TWK2.
IF CTR_TWK2 = 0.
EXIT.
ENDIF.
SORT TWK2 BY MATNR LIFNR BUDAT.
LOOP AT TWK2.
MOVE TWK2-BUDAT+0(6) TO WK_GR_CCYYMM.
MOVE TWK2-BWART+2(1) TO WK_MIGO_MVT_TYP. " JUST CHECK LAST DIGIT
MOVE TWK2-LIFNR TO TWK3-LIFNR.
MOVE TWK2-MATNR TO TWK3-MATNR.
PERFORM DETERMINE_GR_PERIOD.
PERFORM DETERMINE_RECEIPTS_OR_RETURNS.
COLLECT TWK3.
CLEAR: TWK3-PERIOD.
MOVE '13' TO TWK3-PERIOD. " PERIOD / COLUMN 13 FOR TOTALS
COLLECT TWK3.
CLEAR TWK3.
ENDLOOP.
WK_FIRST = 'Y'. " FIRST TIME THRU
CLEAR: WK_P_MATNR
,WK_P_LIFNR.
LOOP AT TWK3.
IF WK_FIRST = 'Y'.
PERFORM GET_MATL_DESCR.
MOVE TWK3-LIFNR TO WK_P_LIFNR.
MOVE TWK3-MATNR TO WK_P_MATNR.
ELSE.
IF TWK3-MATNR = WK_P_MATNR AND TWK3-LIFNR = WK_P_LIFNR.
ELSE.
PERFORM APPEND_TWK1.
ENDIF.
ENDIF.
MOVE: TWK3-MATNR TO TWK1-MATNR
,TWK3-LIFNR TO TWK1-LIFNR
,WK_MAKTX TO TWK1-MAKTX.
PERFORM DO_CORRECT_PERIOD.
WK_FIRST = 'N'. " NO LONGER FIRST TIME
ENDLOOP.
* " POSSIBLE TO HAVE ALL 12 PERIODS WITH ZERO QTY
* " IN THE SAME PERIOD, RECEIPT & RETURN SAME QTY
IF TWK1-MENGE1 <> 0
OR TWK1-MENGE2 <> 0
OR TWK1-MENGE3 <> 0
OR TWK1-MENGE4 <> 0
OR TWK1-MENGE5 <> 0
OR TWK1-MENGE6 <> 0
OR TWK1-MENGE7 <> 0
OR TWK1-MENGE8 <> 0
OR TWK1-MENGE9 <> 0
OR TWK1-MENGEA <> 0
OR TWK1-MENGEB <> 0
OR TWK1-MENGEC <> 0.
APPEND TWK1. " APPEND THE LAST FINAL RECORD
ENDIF.
CLEAR TWK1.
DESCRIBE TABLE TWK1 LINES CTR_TWK1.
SORT TWK1 BY MATNR LIFNR.
ENDFORM. " GET_DATA
*&--------------------------------------------------------------------*
*& Form APPEND_TWK1
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM APPEND_TWK1.
* " POSSIBLE TO HAVE ALL 12 PERIODS WITH ZERO QTY
* " IN THE SAME PERIOD, RECEIPT & RETURN SAME QTY
IF TWK1-MENGE1 <> 0
OR TWK1-MENGE2 <> 0
OR TWK1-MENGE3 <> 0
OR TWK1-MENGE4 <> 0
OR TWK1-MENGE5 <> 0
OR TWK1-MENGE6 <> 0
OR TWK1-MENGE7 <> 0
OR TWK1-MENGE8 <> 0
OR TWK1-MENGE9 <> 0
OR TWK1-MENGEA <> 0
OR TWK1-MENGEB <> 0
OR TWK1-MENGEC <> 0.
APPEND TWK1.
ENDIF.
CLEAR TWK1.
IF NOT TWK3-MATNR = WK_P_MATNR.
PERFORM GET_MATL_DESCR.
MOVE TWK3-MATNR TO WK_P_MATNR.
ENDIF.
MOVE TWK3-LIFNR TO WK_P_LIFNR.
ENDFORM. " APPEND_TWK1.
*&--------------------------------------------------------------------*
*& Form DO_CORRECT_PERIOD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DO_CORRECT_PERIOD.
IF TWK3-PERIOD = '01'.
MOVE TWK3-MENGE TO TWK1-MENGE1.
ELSEIF TWK3-PERIOD = '02'.
MOVE TWK3-MENGE TO TWK1-MENGE2.
ELSEIF TWK3-PERIOD = '03'.
MOVE TWK3-MENGE TO TWK1-MENGE3.
ELSEIF TWK3-PERIOD = '04'.
MOVE TWK3-MENGE TO TWK1-MENGE4.
ELSEIF TWK3-PERIOD = '05'.
MOVE TWK3-MENGE TO TWK1-MENGE5.
ELSEIF TWK3-PERIOD = '06'.
MOVE TWK3-MENGE TO TWK1-MENGE6.
ELSEIF TWK3-PERIOD = '07'.
MOVE TWK3-MENGE TO TWK1-MENGE7.
ELSEIF TWK3-PERIOD = '08'.
MOVE TWK3-MENGE TO TWK1-MENGE8.
ELSEIF TWK3-PERIOD = '09'.
MOVE TWK3-MENGE TO TWK1-MENGE9.
ELSEIF TWK3-PERIOD = '10'.
MOVE TWK3-MENGE TO TWK1-MENGEA.
ELSEIF TWK3-PERIOD = '11'.
MOVE TWK3-MENGE TO TWK1-MENGEB.
ELSEIF TWK3-PERIOD = '12'.
MOVE TWK3-MENGE TO TWK1-MENGEC.
ELSEIF TWK3-PERIOD = '13'.
MOVE TWK3-MENGE TO TWK1-MENGET.
ELSE.
WRITE: /'PGM BUG, DO_CORRECT_PERIOD, UNKNOWN PERIOD ', TWK3-PERIOD.
ENDIF.
ENDFORM. " DO_CORRECT_PERIOD.
*&--------------------------------------------------------------------*
*& Form DETERMINE_GR_PERIOD
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DETERMINE_GR_PERIOD.
IF WK_GR_CCYYMM = WK_PERIOD_01.
MOVE '01' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_02.
MOVE '02' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_03.
MOVE '03' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_04.
MOVE '04' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_05.
MOVE '05' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_06.
MOVE '06' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_07.
MOVE '07' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_08.
MOVE '08' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_09.
MOVE '09' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_10.
MOVE '10' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_11.
MOVE '11' TO TWK3-PERIOD.
ELSEIF WK_GR_CCYYMM = WK_PERIOD_12.
MOVE '12' TO TWK3-PERIOD.
ELSE.
WRITE: /'PROBLEM, SHOULD NOT BE EXTRACTED - ', TWK2-BUDAT.
ENDIF.
ENDFORM. " DETERMINE_GR_PERIOD
*&--------------------------------------------------------------------*
*& Form DETERMINE_RECEIPTS_OR_RETURNS
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DETERMINE_RECEIPTS_OR_RETURNS.
IF WK_MIGO_MVT_TYP = '2'
OR WK_MIGO_MVT_TYP = '4'.
TWK3-MENGE = TWK2-MENGE * ( -1 ). " GOODS RETURNS
ELSE. " LAST DIGIT 1 FOR 101
TWK3-MENGE = TWK2-MENGE. " GOODS RECEIPTS
ENDIF.
ENDFORM. " DETERMINE_RECEIPTS_OR_RETURNS.
*&--------------------------------------------------------------------*
*& Form GET_MATL_DESCR
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GET_MATL_DESCR.
* Material name
SELECT SINGLE MAKTX
INTO WK_MAKTX
FROM MAKT
WHERE MATNR = TWK3-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
,040 TWK1-MENGE2
,057 TWK1-MENGE3
,074 TWK1-MENGE4
,091 TWK1-MENGE5
,108 TWK1-MENGE6
,125 TWK1-MENGE7
,142 TWK1-MENGE8
,159 TWK1-MENGE9
,176 TWK1-MENGEA
,193 TWK1-MENGEB
,211 TWK1-MENGEC
,230 TWK1-MENGET
,247 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 'GOODS RECEIPTS REPORT'
,090 'GOING BACK 12 MONTHS, STARTING - '
,123 Z_LFGJA, Z_LFMON
,241 'PAGE '
,246 SY-PAGNO NO-ZERO.
SKIP.
WRITE: /001 'MATERIAL'
,018 'VENDOR'
,028 '11 MTH PREV'
,045 '10 MTH PREV'
,063 '9 MTH PREV'
,080 '8 MTH PREV'
,097 '7 MTH PREV'
,114 '6 MTH PREV'
,131 '5 MTH PREV'
,148 '4 MTH PREV'
,165 '3 MTH PREV'
,182 '2 MTH PREV'
,199 'PREV MONTH'
,216 'INPUT MONTH'
,231 '12 MONTHS TOTAL'
,247 'MATERIAL DESCRIPTION'.
SKIP.
ULINE.
ENDFORM. " PRINT_HEADER
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:

