You are on page 1of 101

******

* m001 mpl 2000.09.06 added order type zi16


* m002 mpl 2002.06.04 display plant 2400 in lbs not tonnes
* m003 mpl 2002.06.12 for report run for many plants, 2400 will
* print in TO regardless of check box
* m004 smr 2002.08.05 Add logic to stop report from wrapping when
*** the summary report is specified.
* m005 smr 2003.06.25 Removed check for plant 5700 type 261/262.
* All 261/262 transactions will now be moved
* to the tables as 963/Net.
* m006 smr 2003.07.14 Create join for mkpf and mseg for performance.
* m007 smr 2003.07.31 Removed coding for ytd totals for 5150.
* m008 smr 2003.08.18 Removed monthly and yearly quality summary.
* m009 smr 2004.04.16 Changed program to add selection button to
* allow report to list only the material
* entered on the selection screen.
* m010 smr 2004.06.18 Added logic for field Mara-kzwsm for
* active ingredient weight calculation.
* m011 smr 2004.08.03 Corrected issue with page break for months
* that have over 5 weeks.
* m012 smr 2005.01.11 Removed block for record type 309 and 310.
* Added check to see if these two transaction
* types are for OFF-Spec material.
* 2005.01.17 Removed M012 until further investigation of
* the 309 process.
* M013 SMR 2007.02.19 Removed adjustment order check for HAWA
* materials.
***************************************************************************
**
* Date Programmer Mod # Transport ALITRIS # SAP Version
*
* -------- ---------- ----- ---------- --------- -----------
*
* 09/24/2010 SROCK m014 MIDK996564 31518 ECC 6.0
*
* Description: Removed plant 2400 St Helenas, and replaced the logic and
*
* screen selection to plant 4305 ITP.
*
*
*
***************************************************************************
**
************************************************************************
* DATE REF# CORRECTION SAP ALTIRIS# USER ID *
* ----------------------------------------------------------------------
* 2012.09.24 MIDK9A03D7 ECC6 DBARBER
* Description: Back Active Ingredient mods out of MID
*
*=======================================================================

*&---------------------------------------------------------------------*
*& Report ZPPR2030: This is a copy of report zppr2001. This program *
*& has been changed for new logic for confirmations *
*& and performance.
*&---------------------------------------------------------------------*
*& Author: Per Westman *
*& Final Product Confirmation Report *
*& This report summarises all final product confirmations *
*& (transactions 101,102), and presents it giving a YTD & MTD figures *
*& as well as production week totals, (production weeks may start and *
*& end outside a calendar months since it allways runs Monday - Sunday *
*& The detail section of the report gives the daily confirmations *
*& by product in a spreadsheet like grid *
*& This is a copy of ZPPR0701 with an option to run the report from *
*& a summary table created with program ZPPR1901 *
*&---------------------------------------------------------------------*
*
INCLUDE ZPPINCL2. " global Data

INITIALIZATION.
PERFORM INIT.

TOP-OF-PAGE.
PERFORM HEADINGS.

TOP-OF-PAGE DURING LINE-SELECTION.


PERFORM HEADINGS_LINE_SELECTION.

AT SELECTION-SCREEN.
PERFORM SETUP_SELECTIONS.

START-OF-SELECTION.
PERFORM GET_DATA.

AT LINE-SELECTION.
PERFORM GET_LINE_SELECTION.

AT USER-COMMAND.
PERFORM USER_COMMAND.

END-OF-SELECTION.
IF WEEKLY EQ 'X' OR BOTH EQ 'X'.
PERFORM WRITE_REPORT.
ENDIF.
IF SUMMARY EQ 'X' OR BOTH EQ 'X'.
PERFORM PRINT_SUMMARY_PAGE.
ENDIF.
*&---------------------------------------------------------------------*
*& Form INIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INIT.
PERFORM DEFAULT_TEXT_EXCL_YN.

* today's date.
CALL FUNCTION 'Z_DATE'
EXPORTING
INPUT_DATE = SY-DATLO
INPUT_LANGUAGE = 'E'
IMPORTING
OUTPUT_DATE = Z_DATE_CHAR
EXCEPTIONS
OTHERS = 1.

PERIOD = SY-DATLO.
CLEAR: HEADING_LENGTH, HEADING_MAX, SUMMARY_SUB_TOTALS.
* Get maximum length of transaction type heading
WRITE: 'GROSS PRODUCTION'(037) TO CHAR100.
PERFORM CHECK_MAX_HEADING.
WRITE: 'Off Spec. to Wip'(035) TO CHAR100.
PERFORM CHECK_MAX_HEADING.
WRITE: 'Rework to Slurry'(036) TO CHAR100.
PERFORM CHECK_MAX_HEADING.
WRITE: 'NET PRODUCTION'(038) TO CHAR100.
PERFORM CHECK_MAX_HEADING.
WRITE: 'WIP Consumed'(039) TO CHAR100.
PERFORM CHECK_MAX_HEADING.
EXCL_N = 'X'.
ENDFORM. " INIT
*&---------------------------------------------------------------------*
*& Form GET_PER_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
FORM GET_PER_DATES.

CLEAR PER_DATES.
REFRESH PER_DATES.
PER_DATES-SIGN = 'I'.
PER_DATES-OPTION = 'BT'.
CONCATENATE PERIOD '01' INTO PER_DATES-LOW.
MOVE PERIOD(4) TO YEAR.
REST = YEAR MOD 2.
MOVE PERIOD+4(2) TO MONTH.
PERFORM GET_DAY.
CONCATENATE PERIOD DAY INTO PER_DATES-HIGH.
APPEND PER_DATES.

ENDFORM. " GET_PER_DATES


*&---------------------------------------------------------------------*
*& Form GET_DAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DAY.
CASE MONTH.
WHEN 01 OR 03 OR 05 OR 07 OR 08 OR 10 OR 12.
DAY = 31.
WHEN 04 OR 06 OR 09 OR 11.
DAY = 30.
WHEN 02.
IF REST EQ 0.
DAY = 29.
ELSE.
DAY = 28.
ENDIF.
ENDCASE.
ENDFORM. " GET_DAY
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA.

PERFORM CHECK_MAT_ONLY_SELECTION. "m009


PERFORM CREATE_WORK_INTERNAL_TABLE.
PERFORM CREATE_DTL_TAB.
PERFORM ADD_YTD_MATERIALS_TO_MTD.
PERFORM ADD_MISSING_DATES_TO_DTL.
PERFORM ADD_YTD_MATERIALS_TO_DTL.
PERFORM SUB_TOTALS TABLES YTD_TOT.
PERFORM SUB_TOTALS TABLES MTD_TOT.
PERFORM DTL_SUB_TOTALS.
PERFORM SUMMARY_SUB_TOTALS.
PERFORM GET_MTD_MAXLEN.
* perform get_wip_consumed.
PERFORM ADD_SUBT_WIP_CONSUMED.
PERFORM CROSS_REFERENCE_TABLES.
PERFORM DTL_MAX_LEN_FROM_YTD.

ENDFORM. " GET_DATA


*&---------------------------------------------------------------------*
*& Form GET_YTD_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_YTD_DATES.

CLEAR: YTD_DATES, SEL_DATES.


REFRESH: YTD_DATES, SEL_DATES.

YTD_DATES-SIGN = 'I'.
YTD_DATES-OPTION = 'BT'.
CONCATENATE PERIOD(4) '01' '01' INTO YTD_DATES-LOW.
MOVE PERIOD(4) TO YEAR.
REST = YEAR MOD 2.
YTD_DATES-HIGH = PER_DATES-HIGH.
APPEND YTD_DATES.

SEL_DATES-SIGN = 'I'.
SEL_DATES-OPTION = 'BT'.
IF WKLY_DATES-LOW LT YTD_DATES-LOW.
SEL_DATES-LOW = WKLY_DATES-LOW.
ELSE.
SEL_DATES-LOW = YTD_DATES-LOW.
ENDIF.
SEL_DATES-HIGH = YTD_DATES-HIGH.
APPEND SEL_DATES.

ENDFORM. " GET_YTD_DATES


*&---------------------------------------------------------------------*
*& Form GET_WKLY_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_WKLY_DATES.
CLEAR WKLY_DATES.
REFRESH WKLY_DATES.
WKLY_DATES-SIGN = 'I'.
WKLY_DATES-OPTION = 'BT'.
CONCATENATE PERIOD '01' INTO WKLY_DATES-LOW.
MOVE PERIOD(4) TO YEAR.
REST = YEAR MOD 2.
MOVE PERIOD+4(2) TO MONTH.
PERFORM GET_DAY.
CONCATENATE PERIOD(4) MONTH DAY INTO WKLY_DATES-HIGH.
DATE1 = '19970106'.
DAYS = WKLY_DATES-LOW - DATE1.
REST = DAYS MOD 7.
WKLY_DATES-LOW = WKLY_DATES-LOW - REST.
APPEND WKLY_DATES.
HIGH_DATE = WKLY_DATES-HIGH.
* IF SUMMF EQ 'X'.
* LOOP AT WKLY_DATES.
* IF WKLY_DATES-HIGH GE SY-DATLO.
* WKLY_DATES-HIGH = SY-DATLO - 1.
* MODIFY WKLY_DATES.
* ENDIF.
* ENDLOOP.
* ENDIF.
ENDFORM. " GET_WKLY_DATES
*&---------------------------------------------------------------------*
*& Form SETUP_SELECTIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SETUP_SELECTIONS.
PERFORM DEFAULT_TEXT_EXCL_YN.

IF ONE EQ 'X'.
DCMLS = 1.
ELSEIF TWO EQ 'X'.
DCMLS = 2.
ELSE.
DCMLS = 3.
ENDIF.

* CONCATENATE '__' MICR '%' INTO BATCH.


CONDENSE BATCH NO-GAPS.
CLEAR: MATERIAL, TR_TYPE.
REFRESH: MATERIAL, TR_TYPE.
HALB_MATERIALS-SIGN = 'I'.
HALB_MATERIALS-OPTION = 'BT'.
HALB_MATERIALS-LOW = '000000000000020000'.
HALB_MATERIALS-HIGH = '000000000000029999'.
APPEND HALB_MATERIALS.
HAWA_MATERIALS-SIGN = 'I'.
HAWA_MATERIALS-OPTION = 'BT'.
HAWA_MATERIALS-LOW = '000000000000900000'.
HAWA_MATERIALS-HIGH = '000000000000999999'.
APPEND HAWA_MATERIALS.
MATERIAL-SIGN = 'I'.
MATERIAL-OPTION = 'BT'.
MATERIAL-LOW = '000000000000010000'.
MATERIAL-HIGH = '000000000000019999'.
APPEND MATERIAL.
MATERIAL-SIGN = 'I'. "Rockingham materials
MATERIAL-OPTION = 'BT'.
MATERIAL-LOW = 'M0001 '.
MATERIAL-HIGH = 'M0003 '.
APPEND MATERIAL.

REFRESH ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-SIGN = 'I'.
ADJUSTMENT_ORDER_TYPES-OPTION = 'EQ'.
ADJUSTMENT_ORDER_TYPES-LOW = 'Z100'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI01'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI02'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI08'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI11'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI13'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI15'.
APPEND ADJUSTMENT_ORDER_TYPES.
ADJUSTMENT_ORDER_TYPES-LOW = 'ZI17'.
APPEND ADJUSTMENT_ORDER_TYPES.

MOVE PERIOD(4) TO P_YEAR.

TR_TYPE-SIGN = 'I'.
TR_TYPE-OPTION = 'BT'.
TR_TYPE-LOW = '101'.
TR_TYPE-HIGH = '102'.
APPEND TR_TYPE.

IF '5700' IN PLANT. "Thann Only


TR_TYPE-LOW = '261'.
TR_TYPE-HIGH = '262'.
APPEND TR_TYPE.
TR_TYPE-LOW = '531'.
TR_TYPE-HIGH = '532'.
APPEND TR_TYPE.
ENDIF.
**
REFRESH TR_TYPE_ALL.
APPEND LINES OF TR_TYPE TO TR_TYPE_ALL.
TR_TYPE_ALL-SIGN = 'I'.
TR_TYPE_ALL-OPTION = 'BT'.
TR_TYPE_ALL-LOW = '309'.
TR_TYPE_ALL-HIGH = '310'.
APPEND TR_TYPE_ALL.
TR_TYPE_ALL-LOW = '909'.
TR_TYPE_ALL-HIGH = '910'.
APPEND TR_TYPE_ALL.
TR_TYPE_ALL-LOW = '963'.
TR_TYPE_ALL-HIGH = '964'.
APPEND TR_TYPE_ALL.
**
TR_TYPE2-SIGN = 'I'.
TR_TYPE2-OPTION = 'BT'.
TR_TYPE2-LOW = '309'.
TR_TYPE2-HIGH = '310'.
APPEND TR_TYPE2.
* begin of insertion process types 909 and 910 - MDM 11/08/99 M001
TR_TYPE2-SIGN = 'I'.
TR_TYPE2-OPTION = 'BT'.
TR_TYPE2-LOW = '909'.
TR_TYPE2-HIGH = '910'.
APPEND TR_TYPE2.
TR_TYPE2-SIGN = 'I'.
TR_TYPE2-OPTION = 'BT'.
TR_TYPE2-LOW = '963'.
TR_TYPE2-HIGH = '964'.
APPEND TR_TYPE2.
* TR_TYPE2-SIGN = 'I'.
* TR_TYPE2-OPTION = 'BT'.
* TR_TYPE2-LOW = '963'.
* TR_TYPE2-HIGH = '964'.
* APPEND TR_TYPE2.
* TR_TYPE2-SIGN = 'I'.
* TR_TYPE2-OPTION = 'BT'.
* TR_TYPE2-LOW = '901'.
* TR_TYPE2-HIGH = '902'.
* APPEND TR_TYPE2.
TR_TYPE3-SIGN = 'E'.
TR_TYPE3-OPTION = 'BT'.
TR_TYPE3-LOW = '309'.
TR_TYPE3-HIGH = '310'.
APPEND TR_TYPE3.
* begin of insertion process types 909 and 910 - MDM 11/08/99 M001
TR_TYPE3-SIGN = 'E'.
TR_TYPE3-OPTION = 'BT'.
TR_TYPE3-LOW = '909'.
TR_TYPE3-HIGH = '910'.
APPEND TR_TYPE3.
TR_TYPE3-SIGN = 'E'.
TR_TYPE3-OPTION = 'BT'.
TR_TYPE3-LOW = '963'.
TR_TYPE3-HIGH = '964'.
APPEND TR_TYPE3.
TR_TYPE3-SIGN = 'E'.
TR_TYPE3-OPTION = 'BT'.
TR_TYPE3-LOW = '261'.
TR_TYPE3-HIGH = '262'.
APPEND TR_TYPE3.
TR_TYPE3-SIGN = 'E'.
TR_TYPE3-OPTION = 'BT'.
TR_TYPE3-LOW = '971'.
TR_TYPE3-HIGH = '972'.
APPEND TR_TYPE3.
TR_TYPE4-SIGN = 'I'.
TR_TYPE4-OPTION = 'BT'.
TR_TYPE4-LOW = '309'.
TR_TYPE4-HIGH = '310'.
APPEND TR_TYPE4.
TR_TYPE4-SIGN = 'I'.
TR_TYPE4-OPTION = 'BT'.
TR_TYPE4-LOW = '909'.
TR_TYPE4-HIGH = '910'.
APPEND TR_TYPE4.
TR_TYPE5-SIGN = 'I'.
TR_TYPE5-OPTION = 'BT'.
TR_TYPE5-LOW = '309'.
TR_TYPE5-HIGH = '310'.
APPEND TR_TYPE5.
TR_TYPE6-SIGN = 'I'.
TR_TYPE6-OPTION = 'BT'.
TR_TYPE6-LOW = '963'.
TR_TYPE6-HIGH = '964'.
APPEND TR_TYPE6.
TR_TYPE7-SIGN = 'I'.
TR_TYPE7-OPTION = 'BT'.
TR_TYPE7-LOW = '901'.
TR_TYPE7-HIGH = '902'.
APPEND TR_TYPE7.
TR_TYPE8-SIGN = 'I'.
TR_TYPE8-OPTION = 'BT'.
TR_TYPE8-LOW = '261'.
TR_TYPE8-HIGH = '262'.
APPEND TR_TYPE8.
TR_TYPE9-SIGN = 'I'.
TR_TYPE9-OPTION = 'BT'.
TR_TYPE9-LOW = '531'.
TR_TYPE9-HIGH = '532'.
APPEND TR_TYPE9.
TR_TYPE_WIP_CONSUMED-SIGN = 'I'.
TR_TYPE_WIP_CONSUMED-OPTION = 'BT'.
TR_TYPE_WIP_CONSUMED-LOW = '971'.
TR_TYPE_WIP_CONSUMED-HIGH = '972'.
APPEND TR_TYPE_WIP_CONSUMED.
TR_TYPE_OFF_SPEC-SIGN = 'I'.
TR_TYPE_OFF_SPEC-OPTION = 'BT'.
TR_TYPE_OFF_SPEC-LOW = '909'.
TR_TYPE_OFF_SPEC-HIGH = '910'.
APPEND TR_TYPE_OFF_SPEC.
TR_TYPE_OFF_SPEC-LOW = '309'.
TR_TYPE_OFF_SPEC-HIGH = '310'.
APPEND TR_TYPE_OFF_SPEC.
TR_TYPE_REWORK-SIGN = 'I'.
TR_TYPE_REWORK-OPTION = 'BT'.
TR_TYPE_REWORK-LOW = '963'.
TR_TYPE_REWORK-HIGH = '964'.
APPEND TR_TYPE_REWORK.
* Transaction codes on header document
T_CODE-SIGN = 'I'.
T_CODE-OPTION = 'EQ'.
T_CODE-LOW = 'COR6'.
APPEND T_CODE.
T_CODE-LOW = 'CORS'.
APPEND T_CODE.
T_CODE-LOW = 'MB31'.
APPEND T_CODE.
T_CODE-LOW = ' '.
APPEND T_CODE.
IF NETT EQ 'X'
OR SUMMARY EQ 'X'
OR BOTH EQ 'X'.
T_CODE-LOW = 'MB1A'.
APPEND T_CODE.
T_CODE-LOW = 'MB1B'.
APPEND T_CODE.
ENDIF.
USA_PLANTS-SIGN = 'I'.
USA_PLANTS-OPTION = 'BT'.
USA_PLANTS-LOW = '5300'.
USA_PLANTS-HIGH = '5400'.
APPEND USA_PLANTS.
*
USA_PRO-SIGN = 'I'.
USA_PRO-OPTION = 'EQ'.
USA_PRO-LOW = 'ZI05'.
APPEND USA_PRO.
USA_PRO-LOW = 'ZI06'.
APPEND USA_PRO.
USA_PRO-LOW = 'ZI09'.
APPEND USA_PRO.
USA_PRO_NEW-SIGN = 'I'.
USA_PRO_NEW-OPTION = 'EQ'.
USA_PRO_NEW-LOW = 'ZI03'.
APPEND USA_PRO_NEW.
USA_PRO_NEW-LOW = 'ZI04'.
APPEND USA_PRO_NEW.
USA_PRO_NEW-LOW = 'ZI07'.
APPEND USA_PRO_NEW.
USA_PRO_NEW-LOW = 'ZI14'.
APPEND USA_PRO_NEW.
* begin of m001
USA_PRO_NEW-LOW = 'ZI16'.
APPEND USA_PRO_NEW.
* end of m001
EXCL_DOCS-SIGN = 'I'.
EXCL_DOCS-OPTION = 'EQ'.
EXCL_DOCS-LOW = '0049014759'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049014824'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049014825'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049023744'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049023745'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049031573'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049031630'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049031648'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049031663'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049031726'.
APPEND EXCL_DOCS.
EXCL_DOCS-LOW = '0049035840'.
APPEND EXCL_DOCS.
REFRESH GROSS_NET.
GROSS_NET-SIGN = 'I'.
GROSS_NET-OPTION = 'EQ'.
GROSS_NET-LOW = 'GROSS'.
APPEND GROSS_NET.
IF NETT EQ 'X' OR SUMMARY EQ 'X' OR BOTH EQ 'X'.
GROSS_NET-LOW = 'NET '.
APPEND GROSS_NET.
ENDIF.
REFRESH ALL_TYPES.
APPEND LINES OF GROSS_NET TO ALL_TYPES.
ALL_TYPES-SIGN = 'I'.
ALL_TYPES-OPTION = 'EQ'.
ALL_TYPES-LOW = SPACE.
APPEND ALL_TYPES.

* Enter all types in the type10 range for comparison.


TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '101'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '102'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '261'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '262'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '309'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '310'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '531'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '532'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '909'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '910'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '963'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '964'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '971'.
APPEND TR_TYPE10.
TR_TYPE10-SIGN = 'I'.
TR_TYPE10-OPTION = 'EQ'.
TR_TYPE10-LOW = '972'.
APPEND TR_TYPE10.

CLEAR ZP07PDT.
REFRESH TODAY_DATES.
SELECT SINGLE * FROM ZP07PDT WHERE WERKS = '5300'.
TODAY_DATES-SIGN = 'I'.
TODAY_DATES-OPTION = 'GE'.
TODAY_DATES-LOW = ZP07PDT-LDATE + 1.
APPEND TODAY_DATES.

PERFORM GET_TYPE_RANGE.
PERFORM GET_PER_DATES.
PERFORM GET_WKLY_DATES.
PERFORM GET_YTD_DATES.

ENDFORM. " SETUP_SELECTIONS


*&---------------------------------------------------------------------*
*& Form UPDATE_YTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPDATE_YTD.
PERFORM MATNR_CONVERSION CHANGING WA_MSEG-MATNR.
loop at ytd_tot where matnr eq wa_MSEG-matnr.
PERFORM ADD_YTD.
MODIFY YTD_TOT.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR YTD_TOT.
ytd_tot-matnr = wa_MSEG-matnr.
ytd_tot-group = wa_mara-matkl.
SPLIT WA_MARA-MAKTX AT ';' INTO YTD_TOT-MAKTX MAKTX.
perform get_s_matnr using wa_MSEG-matnr
CHANGING YTD_TOT-SUBT
YTD_TOT-S_MATNR.
PERFORM ADD_YTD.
APPEND YTD_TOT.
ENDIF.
ENDFORM. " UPDATE_YTD
*&---------------------------------------------------------------------*
*& Form ADD_YTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_YTD.
YTD_TOT-NO_MOVES = YTD_TOT-NO_MOVES + 1.
if wa_MSEG-shkzg eq 'H'.
subtract wa_MSEG-menge from ytd_tot-qty.
ELSE.
add wa_MSEG-menge to ytd_tot-qty.
ENDIF.
QTY = YTD_TOT-QTY.
PERFORM CHECK_LENGTH USING YTD_TOT-QTY
YTD_TOT-MATNR
YTD_TOT-MAKTX
CHANGING YTD_TOT-MAX_LEN.
ENDFORM. " ADD_YTD
*&---------------------------------------------------------------------*
*& Form UPDATE_MTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPDATE_MTD.
PERFORM MATNR_CONVERSION CHANGING WA_MSEG-MATNR.
loop at mtd_tot where matnr eq wa_MSEG-matnr.
PERFORM ADD_MTD.
MODIFY MTD_TOT.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR MTD_TOT.
mtd_tot-matnr = wa_MSEG-matnr.
mtd_tot-group = wa_mara-matkl.
perform get_s_matnr using wa_MSEG-matnr
CHANGING MTD_TOT-SUBT
MTD_TOT-S_MATNR.
PERFORM ADD_MTD.
APPEND MTD_TOT.
ENDIF.
ENDFORM. " UPDATE_MTD

*&---------------------------------------------------------------------*
*& Form ADD_MTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_MTD.
ADD 1 TO MTD_TOT-NO_MOVES.
if wa_MSEG-shkzg eq 'H'.
subtract wa_MSEG-menge from mtd_tot-qty.
ELSE.
add wa_MSEG-menge to mtd_tot-qty.
ENDIF.
ENDFORM. " ADD_MTD
*&---------------------------------------------------------------------*
*& Form ADD_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_QTY.
WA_QTYS-NO_MOVES = WA_QTYS-NO_MOVES + 1.
IF WA_QTYS-MATNR EQ '000000000000010123'.
TEST = 'X'.
ENDIF.
IF DATE_TAB-SHKZG EQ 'H'.
SUBTRACT DATE_TAB-MENGE FROM WA_QTYS-QTY.
ELSE.
ADD DATE_TAB-MENGE TO WA_QTYS-QTY.
ENDIF.

ENDFORM. " ADD_QTY


*&---------------------------------------------------------------------*
*& Form CREATE_WORK_INTERNAL_TABLE
*& This subroutine creates the internal table date_tab
*& as well as updates the internal tables YTD_TOT and MTD_TOT
*& The temporary internal work table date_tab is then sorted
*& to enable the nested internal table dtl_tab to be created
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_WORK_INTERNAL_TABLE.

REFRESH: QBTAB.
PERFORM GET_SUMMARY_TABLE.
PERFORM GET_SOURCE_DATA.

SORT DATE_TAB BY BUDAT.


* Delete any records from date_tab that are not in the selection date
LOOP AT DATE_TAB.
IF NOT DATE_TAB-BUDAT IN SEL_DATES.
DELETE DATE_TAB.
ENDIF.
ENDLOOP.

* Only do the add material routine if the user did not select the
* listed materials only checkbox. "m009
IF MAT_ONLY IS INITIAL. "m009
PERFORM ADD_SELECTED_MATERIALS.
ENDIF. "m009

SORT YTD_TOT BY GROUP SUBT S_MATNR.

ENDFORM. " CREATE_WORK_INTERNAL_TABLE


*&---------------------------------------------------------------------*
*& Form CREATE_DTL_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_DTL_TAB.

SORT DATE_TAB BY WEEKNO BUDAT GROUP MATNR.

LOOP AT DATE_TAB.
AT NEW WEEKNO.
DTL_TAB-WEEKNO = DATE_TAB-WEEKNO.
ENDAT.

AT NEW BUDAT.
DTL_TAB-DATE = DATE_TAB-BUDAT.
CLEAR: DTL_TAB-QTYS, DTL_TAB-DATE_QTY, WA_QTYS.
REFRESH: DTL_TAB-QTYS.
ENDAT.

AT NEW GROUP.
wa_qtys-group = date_tab-group.
ENDAT.

AT NEW MATNR.
CLEAR: WA_QTYS-QTY.
WA_QTYS-MATNR = DATE_TAB-MATNR.
PERFORM GET_S_MATNR USING WA_QTYS-MATNR
CHANGING WA_QTYS-SUBT
WA_QTYS-S_MATNR.
ENDAT.
PERFORM ADD_QTY.
AT END OF MATNR.
APPEND WA_QTYS TO DTL_TAB-QTYS.
IF DTL_TAB-DATE IN PER_DATES.
ADD WA_QTYS-QTY TO DTL_TAB-DATE_QTY.
ENDIF.
ENDAT.
AT END OF BUDAT.
LOOP AT DTL_TAB-QTYS INTO WA_QTYS.
PERFORM UPDATE_LENGTH.
ENDLOOP.
APPEND DTL_TAB.
ENDAT.
ENDLOOP.
* REFRESH DATE_TAB.
ENDFORM. " CREATE_DTL_TAB
*&---------------------------------------------------------------------*
*& Form CHECK_LENGTH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_length using qty like wa_MSEG-menge
matnr like wa_MSEG-matnr
MAKTX LIKE MAKT-MAKTX
CHANGING MAX_LEN LIKE YTD_TOT-MAX_LEN.
DATA: DCMLS TYPE I.
IF ONE EQ 'X'.
DCMLS = 1.
ELSEIF TWO EQ 'X'.
DCMLS = 2.
ELSE.
DCMLS = 3.
ENDIF.
LONGER = 'N'.
WRITE MATNR TO CHAR18.
LENGTH = STRLEN( CHAR18 ).
IF LENGTH GT MAX_LEN.
LONGER = 'Y'.
MAX_LEN = LENGTH.
ENDIF.
LENGTH = STRLEN( MAKTX ).
IF LENGTH GT MAX_LEN.
LONGER = 'Y'.
IF LENGTH GT 18.
MAX_LEN = 18.
ELSE.
MAX_LEN = LENGTH.
ENDIF.
ENDIF.
WRITE QTY TO CHAR17 DECIMALS DCMLS.
CONDENSE CHAR17.
LENGTH = STRLEN( CHAR17 ).
IF QTY GT 0.
ADD 1 TO LENGTH.
ENDIF.
IF LENGTH GT MAX_LEN.
LONGER = 'Y'.
MAX_LEN = LENGTH.
ENDIF.
ENDFORM. " CHECK_LENGTH

*&---------------------------------------------------------------------*
*& Form UPDATE_LENGTH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPDATE_LENGTH.
LOOP AT YTD_TOT WHERE MATNR EQ WA_QTYS-MATNR.
PERFORM CHECK_LENGTH USING WA_QTYS-QTY
WA_QTYS-MATNR
WA_QTYS-MAKTX
CHANGING YTD_TOT-MAX_LEN.
IF LONGER EQ 'Y'.
MODIFY YTD_TOT.
ENDIF.
ENDLOOP.
ENDFORM. " UPDATE_LENGTH
*&---------------------------------------------------------------------*
*& Form GET_MTD_MAXLEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MTD_MAXLEN.
LOOP AT MTD_TOT.
LOOP AT YTD_TOT WHERE S_MATNR EQ MTD_TOT-S_MATNR.
PERFORM CHECK_LENGTH USING MTD_TOT-QTY
MTD_TOT-MATNR
MTD_TOT-MAKTX
CHANGING YTD_TOT-MAX_LEN.
IF LONGER EQ 'Y'.
MODIFY YTD_TOT.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_MTD_MAXLEN

*&---------------------------------------------------------------------*
*& Form ADD_YTD_MATERIALS_TO_MTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_YTD_MATERIALS_TO_MTD.
LOOP AT YTD_TOT.
WRITE YTD_TOT-MATNR TO CHAR18.
LENGTH = STRLEN( CHAR18 ).
IF LENGTH GT YTD_TOT-MAX_LEN.
YTD_TOT-MAX_LEN = LENGTH.
MODIFY YTD_TOT.
ENDIF.
LENGTH = STRLEN( YTD_TOT-MAKTX ).
IF LENGTH GT YTD_TOT-MAX_LEN.
IF LENGTH GT 18.
YTD_TOT-MAX_LEN = 18.
ELSE.
YTD_TOT-MAX_LEN = LENGTH.
ENDIF.
MODIFY YTD_TOT.
ENDIF.
LOOP AT MTD_TOT WHERE S_MATNR EQ YTD_TOT-S_MATNR.
MTD_TOT-MAX_LEN = YTD_TOT-MAX_LEN.
MODIFY MTD_TOT.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR MTD_TOT.
MTD_TOT-MATNR = YTD_TOT-MATNR.
MTD_TOT-MAX_LEN = YTD_TOT-MAX_LEN.
MTD_TOT-GROUP = YTD_TOT-GROUP.
MTD_TOT-S_MATNR = YTD_TOT-S_MATNR.
APPEND MTD_TOT.
ENDIF.
ENDLOOP.

SORT MTD_TOT BY GROUP SUBT S_MATNR.


ENDFORM. " ADD_YTD_MATERIALS_TO_MTD
*&---------------------------------------------------------------------*
*& Form ADD_YTD_MATERIALS_TO_DTL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_YTD_MATERIALS_TO_DTL.
LOOP AT DTL_TAB.
LOOP AT YTD_TOT.
LOOP AT DTL_TAB-QTYS INTO WA_QTYS
WHERE S_MATNR EQ YTD_TOT-S_MATNR.
WA_QTYS-MAX_LEN = YTD_TOT-MAX_LEN.
MODIFY DTL_TAB-QTYS FROM WA_QTYS.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR WA_QTYS.
WA_QTYS-MATNR = YTD_TOT-MATNR.
WA_QTYS-GROUP = YTD_TOT-GROUP.
WA_QTYS-S_MATNR = YTD_TOT-S_MATNR.
PERFORM GET_S_MATNR USING WA_QTYS-MATNR
CHANGING WA_QTYS-SUBT
WA_QTYS-S_MATNR.
WA_QTYS-MAX_LEN = YTD_TOT-MAX_LEN.
APPEND WA_QTYS TO DTL_TAB-QTYS.
ENDIF.
ENDLOOP.
SORT DTL_TAB-QTYS BY GROUP SUBT S_MATNR.
MODIFY DTL_TAB.
ENDLOOP.
SORT DTL_TAB BY WEEKNO DATE.
ENDFORM. " ADD_YTD_MATERIALS_TO_DTL
*&---------------------------------------------------------------------*
*& Form HEADINGS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM HEADINGS.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
NEW_PAGE = 'Y'.
WRITE: /1 'Date: '(010),
8 Z_DATE_CHAR,
25 'CRISTAL'(001),
67 'Page: '(009),
73 SY-PAGNO,
83 'Time:'(013),
89 SY-TIMLO,
98 'User: '(012),
104 SY-UNAME,
116 'Final Product Confirmation Report'(011),
155 SY-REPID.
WRITE: 'Plant'(016), PLANT-LOW.
IF GROSS EQ 'X'.
WRITE: ' GROSS'(017).
ELSE.
WRITE: ' NET'(018).
ENDIF.
* IF MICR NE SPACE.
* WRITE: 'Micronizer:'(014), MICR.
* ENDIF.
IF PR_HEAD EQ 'X'.
PERFORM WRITE_SELECTIONS.
ENDIF.
IF SUMMARY_HEADING EQ 'Y'.
SKIP 2.
PAGE_BREAK_AFTER_SELECTIONS = 'Y'.
ENDIF.
IF RUN_TIME EQ 'X' AND PAGE_BREAK_AFTER_SELECTIONS EQ 'Y'
OR RUN_TIME NE 'X'.
IF SUMMARY_HEADING NE 'Y'.
PERFORM WRITE_ULINE.
PERFORM PRINT_YTD_TOT.
PERFORM WRITE_ULINE_AFTER.
PERFORM PRINT_MTD_TOT.
PERFORM WRITE_ULINE_AFTER.
PERFORM WRITE_MATERIAL_HEADING.
PERFORM WRITE_ULINE_AFTER.
ENDIF.
ENDIF.
ENDFORM. " HEADINGS

*&---------------------------------------------------------------------*
*& Form WRITE_LAST_POSITION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_LAST_POSITION.
WRITE 255 SY-VLINE.
ENDFORM. " WRITE_LAST_POSITION
*&---------------------------------------------------------------------*
*& Form WRITE_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_REPORT.
SET PF-STATUS 'BASE'.
DO.
ADD 1 TO CURR_PRINT.
IF CURR_PRINT GT 1.
NEW-PAGE.
P_STATUS = 0. "m011
ENDIF.
IF PAGE_BREAK_AFTER_SELECTIONS NE 'Y'.
IF RUN_TIME EQ 'X' AND PR_HEAD EQ 'X'.
* Dummy write to force page break
WRITE: /1 ' '.
NEW-PAGE.
ENDIF.
PAGE_BREAK_AFTER_SELECTIONS = 'Y'.
ENDIF.
PERFORM WRITE_DTL_LINE.
IF CURR_LEN LE 254.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " WRITE_REPORT
*&---------------------------------------------------------------------*
*& Form WRITE_QTY_SEGMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_QTY_SEGMENT.
CASE LENGTH.
WHEN 18.
WRITE QTY TO CHAR18.
CONCATENATE CHAR18 SY-VLINE INTO CHAR19.
WRITE CHAR19.
WHEN 17.
WRITE QTY TO CHAR17.
CONCATENATE CHAR17 SY-VLINE INTO CHAR18.
WRITE CHAR18.
WHEN 16.
WRITE QTY TO CHAR16.
CONCATENATE CHAR16 SY-VLINE INTO CHAR17.
WRITE CHAR17.
ENDCASE.
ENDFORM. " WRITE_QTY_SEGMENT
*&---------------------------------------------------------------------*
*& Form WRITE_ULINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_ULINE.
CLEAR CURR_LEN.
WRITE: /1 SY-ULINE(15) NO-GAP.
ADD 15 TO CURR_LEN.
* loop at ytd_tot where printed eq 0. "m011
LOOP AT YTD_TOT WHERE PRINTED EQ P_STATUS. "m011
CURR_LEN = CURR_LEN + YTD_TOT-MAX_LEN + 1.
* Check if next column will fit in allowing with allowance for
* a vertical line at the end.
IF CURR_LEN GT 254.
* m007 ( ytd_tot-group gt 'RCL575' and uline_ovflw ne 'Y'
* m007 and '5150' in plant ).
ULINE_OVFLW = 'Y'.
EXIT.
ENDIF.
PERFORM WRITE_ULINE_SEGMENT.
ENDLOOP.

ENDFORM. " WRITE_ULINE


*&---------------------------------------------------------------------*
*& Form WRITE_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_qty using qty like wa_MSEG-menge
MAX_LEN LIKE YTD_TOT-MAX_LEN
SUBT LIKE YTD_TOT-SUBT.
DATA: MAX TYPE I,
SHIFT_BY TYPE I,
FIELD_LEN TYPE I.
MAX = MAX_LEN + 1.
IF SUBT EQ 'X'.
FORMAT COLOR COL_TOTAL.
ENDIF.
WRITE QTY TO CHAR30 NO-ZERO DECIMALS DCMLS.
SHIFT CHAR30 LEFT DELETING LEADING SPACE.
FIELD_LEN = STRLEN( CHAR30 ).
SHIFT_BY = MAX_LEN - FIELD_LEN.
IF QTY GT 0.
SHIFT_BY = SHIFT_BY - 1.
ENDIF.
SHIFT CHAR30 RIGHT BY SHIFT_BY PLACES.
CONCATENATE SY-VLINE CHAR30 INTO CHAR31.
WRITE AT (MAX) CHAR31 NO-GAP.
ENDFORM. " WRITE_QTY

*&---------------------------------------------------------------------*
*& Form WRITE_ULINE_SEGMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_ULINE_SEGMENT.
CASE YTD_TOT-MAX_LEN.
WHEN 1.
WRITE SY-ULINE(2) NO-GAP.
WHEN 2.
WRITE SY-ULINE(3) NO-GAP.
WHEN 3.
WRITE SY-ULINE(4) NO-GAP.
WHEN 4.
WRITE SY-ULINE(5) NO-GAP.
WHEN 5.
WRITE SY-ULINE(6) NO-GAP.
WHEN 6.
WRITE SY-ULINE(7) NO-GAP.
WHEN 7.
WRITE SY-ULINE(8) NO-GAP.
WHEN 8.
WRITE SY-ULINE(9) NO-GAP.
WHEN 9.
WRITE SY-ULINE(10) NO-GAP.
WHEN 10.
WRITE SY-ULINE(11) NO-GAP.
WHEN 11.
WRITE SY-ULINE(12) NO-GAP.
WHEN 12.
WRITE SY-ULINE(13) NO-GAP.
WHEN 13.
WRITE SY-ULINE(14) NO-GAP.
WHEN 14.
WRITE SY-ULINE(15) NO-GAP.
WHEN 15.
WRITE SY-ULINE(16) NO-GAP.
WHEN 16.
WRITE SY-ULINE(17) NO-GAP.
WHEN 17.
WRITE SY-ULINE(18) NO-GAP.
WHEN 18.
WRITE SY-ULINE(19) NO-GAP.
WHEN OTHERS.
WRITE SY-ULINE(19) NO-GAP.
ENDCASE.
ENDFORM. " WRITE_ULINE_SEGMENT

*&---------------------------------------------------------------------*
*& Form WRITE_ULINE_AFTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_ULINE_AFTER.
WRITE: /1 SY-ULINE(15) NO-GAP.
LOOP AT YTD_TOT WHERE PRINTED EQ CURR_PRINT. "m011
* loop at ytd_tot where printed eq p_status. "m011
PERFORM WRITE_ULINE_SEGMENT.
ENDLOOP.
ENDFORM. " WRITE_ULINE_AFTER
*&---------------------------------------------------------------------*
*& Form PRINT_YTD_TOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_YTD_TOT.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
CLEAR: CURR_LEN, WEEK_TOTAL, MTD_TOTAL.
YTD_TOTAL = 'X'.
CONCATENATE SY-VLINE ' YTD Total'(002) INTO CHAR14.
WRITE: /1 CHAR14 NO-GAP.
ADD 14 TO CURR_LEN.
* loop at ytd_tot where printed eq 0. "m011
LOOP AT YTD_TOT WHERE PRINTED EQ P_STATUS. "m011
CURR_LEN = CURR_LEN + YTD_TOT-MAX_LEN + 1.
* Check if next column will fit in allowing with allowance for
* a vertical line at the end.
IF CURR_LEN GT 254.
* m007 ( ytd_tot-group gt 'RCL575' and ytd_ovflw ne 'Y'
* m007 and '5150' in plant ).
YTD_OVFLW = 'Y'.
EXIT.
ENDIF.
PERFORM WRITE_QTY USING YTD_TOT-QTY
YTD_TOT-MAX_LEN
YTD_TOT-SUBT.
HIDE: YTD_TOTAL, WEEK_TOTAL, MTD_TOTAL, CURR_PRINT.
YTD_TOT-PRINTED = CURR_PRINT.
YTD_TOT-BEG_POS = CURR_LEN - YTD_TOT-MAX_LEN.
YTD_TOT-END_POS = YTD_TOT-BEG_POS + YTD_TOT-MAX_LEN - 1.
MODIFY YTD_TOT.
ENDLOOP.
WRITE: SY-VLINE.
CLEAR YTD_TOTAL.
ENDFORM. " PRINT_YTD_TOT
*&---------------------------------------------------------------------*
*& Form PRINT_MTD_TOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_MTD_TOT.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
CLEAR: CURR_LEN, YTD_TOTAL, WEEK_TOTAL.
MTD_TOTAL = 'X'.
WRITE PERIOD TO CHAR07.
CONCATENATE SY-VLINE CHAR07 ' Total'(003) INTO CHAR14.
WRITE: /1 CHAR14 NO-GAP.
ADD 14 TO CURR_LEN.
* loop at mtd_tot where printed eq 0. "m011
LOOP AT MTD_TOT WHERE PRINTED EQ P_STATUS. "m011
CURR_LEN = CURR_LEN + MTD_TOT-MAX_LEN + 1.
* Check if next column will fit in allowing with allowance for
* a vertical line at the end.
IF CURR_LEN GT 254.
* m007 ( mtd_tot-group gt 'RCL575' and mtd_ovflw ne 'Y'
* m007 and '5150' in plant ).
MTD_OVFLW = 'Y'.
EXIT.
ENDIF.
PERFORM WRITE_QTY USING MTD_TOT-QTY
MTD_TOT-MAX_LEN
MTD_TOT-SUBT.
HIDE: MTD_TOTAL, WEEK_TOTAL, YTD_TOTAL, CURR_PRINT.
MTD_TOT-PRINTED = CURR_PRINT.
MODIFY MTD_TOT.
ENDLOOP.
WRITE: SY-VLINE.
CLEAR: MTD_TOTAL.
P_STATUS = CURR_PRINT. "m011
ENDFORM. " PRINT_MTD_TOT
*&---------------------------------------------------------------------*
*& Form WRITE_DTL_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_DTL_LINE.
* dummy write to force TOP-OF-PAGE event
WRITE: ' '.
LOOP AT DTL_TAB.
AT NEW WEEKNO.
CLEAR: WEEK_TOT, WEEKS_TAB-QTYS, WEEK_TOTAL.
REFRESH: WEEK_TOT, WEEKS_TAB-QTYS.
* Begin of m011: force page break if week is greater than 5.
IF DTL_TAB-WEEKNO = 6.
NEW-PAGE.
WRITE: ' '.
ENDIF.
* End of m011.
ENDAT.
CLEAR CURR_LEN.
WRITE DTL_TAB-WEEKNO TO CHAR02.
SHIFT CHAR02 RIGHT.
WRITE DTL_TAB-DATE TO CHAR10.
CONCATENATE SY-VLINE CHAR02 SY-VLINE CHAR10 INTO CHAR14.
PERFORM GROUP_STRIPING.
CLEAR CURR_LEN.
WRITE: /1 CHAR14 NO-GAP.
ADD 14 TO CURR_LEN.
PERFORM STRIPING.
LOOP AT DTL_TAB-QTYS INTO WA_QTYS WHERE PRINTED EQ 0.
CURR_LEN = CURR_LEN + WA_QTYS-MAX_LEN + 1.
* Check if next column will fit in allowing with allowance for
* a vertical line at the end.
IF CURR_LEN GT 254.
* m007 ( wa_qtys-group gt 'RCL575' and dtl_tab-dtl_ovflw ne 'Y'
* m007 and '5150' in plant ).
DTL_TAB-DTL_OVFLW = 'Y'.
CURR_LEN = 255.
EXIT.
ENDIF.
CLEAR: MTD_TOTAL, YTD_TOTAL, WEEK_TOTAL.
PERFORM WRITE_QTY USING WA_QTYS-QTY
WA_QTYS-MAX_LEN
WA_QTYS-SUBT.
HIDE: WA_QTYS-QTY, DTL_TAB-WEEKNO, WEEK_TOTAL, MTD_TOTAL,
YTD_TOTAL, DTL_TAB-DATE, CURR_PRINT.
FORMAT COLOR COL_NORMAL.
WA_QTYS-PRINTED = CURR_PRINT.
MODIFY DTL_TAB-QTYS FROM WA_QTYS.
PERFORM ADD_WEEKLY_TOTAL.
ENDLOOP.
MODIFY DTL_TAB.
WRITE: SY-VLINE.
AT END OF WEEKNO.
PERFORM WRITE_ULINE_AFTER.
PERFORM WRITE_WEEK_TOTAL.
PERFORM WRITE_ULINE_AFTER.
ENDAT.
ENDLOOP.
ENDFORM. " WRITE_DTL_LINE
*&---------------------------------------------------------------------*
*& Form WRITE_MATERIAL_HEADING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_MATERIAL_HEADING.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
CONCATENATE SY-VLINE 'Wk| Date '(004) INTO CHAR14.
WRITE: /1 CHAR14 NO-GAP.
* loop at ytd_tot where printed eq curr_print. "m011
LOOP AT YTD_TOT WHERE PRINTED EQ P_STATUS. "m011
MAX_LEN = YTD_TOT-MAX_LEN.
MATNR = YTD_TOT-MATNR.
PERFORM WRITE_MATERIAL.
ENDLOOP.
WRITE: SY-VLINE.
CONCATENATE SY-VLINE ' | ' INTO CHAR14.
WRITE: /1 CHAR14 NO-GAP.
* loop at ytd_tot where printed eq curr_print. "m011
LOOP AT YTD_TOT WHERE PRINTED EQ P_STATUS. "m011
MAX_LEN = YTD_TOT-MAX_LEN.
MATNR = YTD_TOT-MAKTX.
PERFORM WRITE_MATERIAL.
ENDLOOP.
WRITE: SY-VLINE.

ENDFORM. " WRITE_MATERIAL_HEADING


*&---------------------------------------------------------------------*
*& Form WRITE_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_MATERIAL.
CASE MAX_LEN.
WHEN 1.
WRITE MATNR TO CHAR01.
CONCATENATE SY-VLINE CHAR01 INTO CHAR02.
WRITE CHAR02 NO-GAP.
WHEN 2.
WRITE MATNR TO CHAR02.
CONCATENATE SY-VLINE CHAR02 INTO CHAR03.
WRITE CHAR03 NO-GAP.
WHEN 3.
WRITE MATNR TO CHAR03.
CONCATENATE SY-VLINE CHAR03 INTO CHAR04.
WRITE CHAR04 NO-GAP.
WHEN 4.
WRITE MATNR TO CHAR04.
CONCATENATE SY-VLINE CHAR04 INTO CHAR05.
WRITE CHAR05 NO-GAP.
WHEN 5.
WRITE MATNR TO CHAR05.
CONCATENATE SY-VLINE CHAR05 INTO CHAR06.
WRITE CHAR06 NO-GAP.
WHEN 6.
WRITE MATNR TO CHAR06.
CONCATENATE SY-VLINE CHAR06 INTO CHAR07.
WRITE CHAR07 NO-GAP.
WHEN 7.
WRITE MATNR TO CHAR07.
CONCATENATE SY-VLINE CHAR07 INTO CHAR08.
WRITE CHAR08 NO-GAP.
WHEN 8.
WRITE MATNR TO CHAR08.
CONCATENATE SY-VLINE CHAR08 INTO CHAR09.
WRITE CHAR09 NO-GAP.
WHEN 9.
WRITE MATNR TO CHAR09.
CONCATENATE SY-VLINE CHAR09 INTO CHAR10.
WRITE CHAR10 NO-GAP.
WHEN 10.
WRITE MATNR TO CHAR10.
CONCATENATE SY-VLINE CHAR10 INTO CHAR11.
WRITE CHAR11 NO-GAP.
WHEN 11.
WRITE MATNR TO CHAR11.
CONCATENATE SY-VLINE CHAR11 INTO CHAR12.
WRITE CHAR12 NO-GAP.
WHEN 12.
WRITE MATNR TO CHAR12.
CONCATENATE SY-VLINE CHAR12 INTO CHAR13.
WRITE CHAR13 NO-GAP.
WHEN 13.
WRITE MATNR TO CHAR13.
CONCATENATE SY-VLINE CHAR13 INTO CHAR14.
WRITE CHAR14 NO-GAP.
WHEN 14.
WRITE MATNR TO CHAR14.
CONCATENATE SY-VLINE CHAR14 INTO CHAR15.
WRITE CHAR15 NO-GAP.
WHEN 15.
WRITE MATNR TO CHAR15.
CONCATENATE SY-VLINE CHAR15 INTO CHAR16.
WRITE CHAR16 NO-GAP.
WHEN 16.
WRITE MATNR TO CHAR16.
CONCATENATE SY-VLINE CHAR16 INTO CHAR17.
WRITE CHAR17 NO-GAP.
WHEN 17.
WRITE MATNR TO CHAR17.
CONCATENATE SY-VLINE CHAR17 INTO CHAR18.
WRITE CHAR18 NO-GAP.
WHEN 18.
WRITE MATNR TO CHAR18.
CONCATENATE SY-VLINE CHAR18 INTO CHAR19.
WRITE CHAR19 NO-GAP.
WHEN OTHERS.
WRITE MATNR TO CHAR18.
CONCATENATE SY-VLINE CHAR18 INTO CHAR19.
WRITE CHAR19 NO-GAP.
ENDCASE.
ENDFORM. " WRITE_MATERIAL
*&---------------------------------------------------------------------*
*& Form STRIPING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM STRIPING.
IF CHECK_FIELD EQ 'X'.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
CHECK_FIELD = ' '.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
CHECK_FIELD = 'X'.
ENDIF.
ENDFORM. " STRIPING
*&---------------------------------------------------------------------*
*& Form GROUP_STRIPING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GROUP_STRIPING.
IF CHECK_FIELD_GROUP EQ 'X'.
FORMAT COLOR COL_GROUP INTENSIFIED OFF.
CHECK_FIELD_GROUP = ' '.
ELSE.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
CHECK_FIELD_GROUP = 'X'.
ENDIF.
ENDFORM. " GROUP_STRIPING
*&---------------------------------------------------------------------*
*& Form ADD_WEEKLY_TOTAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_WEEKLY_TOTAL.
LOOP AT WEEK_TOT WHERE S_MATNR EQ WA_QTYS-S_MATNR
AND GROUP EQ WA_QTYS-GROUP.
ADD WA_QTYS-QTY TO WEEK_TOT-QTY.
ADD WA_QTYS-NO_MOVES TO WEEK_TOT-NO_MOVES.
MODIFY WEEK_TOT.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR WEEK_TOT.
WEEK_TOT-GROUP = WA_QTYS-GROUP.
WEEK_TOT-S_MATNR = WA_QTYS-S_MATNR.
WEEK_TOT-MATNR = WA_QTYS-MATNR.
WEEK_TOT-MAX_LEN = WA_QTYS-MAX_LEN.
ADD WA_QTYS-QTY TO WEEK_TOT-QTY.
ADD WA_QTYS-NO_MOVES TO WEEK_TOT-NO_MOVES.
APPEND WEEK_TOT.
ENDIF.
ENDFORM. " ADD_WEEKLY_TOTAL

*&---------------------------------------------------------------------*
*& Form WRITE_WEEK_TOTAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_WEEK_TOTAL.
CLEAR: MTD_TOTAL, YTD_TOTAL.
WRITE DTL_TAB-WEEKNO TO CHAR02.
WEEK_TOTAL = 'X'.
SHIFT CHAR02 RIGHT.
WRITE ' Total'(003) TO CHAR10.
CONCATENATE SY-VLINE CHAR02 SY-VLINE CHAR10 INTO CHAR14.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE: /1 CHAR14 NO-GAP.
PERFORM UPDATE_WEEKS_TAB TABLES WEEK_TOT
USING DTL_TAB-WEEKNO.
LOOP AT WEEK_TOT WHERE PRINTED EQ 0.
PERFORM WRITE_QTY USING WEEK_TOT-QTY
WEEK_TOT-MAX_LEN
WEEK_TOT-SUBT.
HIDE: DTL_TAB-WEEKNO, WEEK_TOT-QTY, CURR_PRINT, WEEK_TOTAL,
MTD_TOTAL, YTD_TOTAL.
WEEK_TOT-PRINTED = CURR_PRINT.
MODIFY WEEK_TOT.
ENDLOOP.
WRITE: SY-VLINE.
CLEAR: WEEK_TOTAL.
ENDFORM. " WRITE_WEEK_TOTAL
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM USER_COMMAND.
CASE SY-UCOMM.
WHEN 'MTDG'.
PERFORM MTD_GRAPH.
WHEN 'DTEG'.
PERFORM DATE_GRAPH.
WHEN 'DWNL'.
PERFORM DOWNLOAD_TO_SPREADSHEET.
WHEN 'BTCH'.
PERFORM MATERIAL_TRANS_POPUP.
WHEN 'QUAL'.
PERFORM QUALITY_SUMMARY.
ENDCASE.
ENDFORM. " USER_COMMAND
*&---------------------------------------------------------------------*
*& Form MTD_GRAPH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MTD_GRAPH.
CLEAR: COUNT, GRAPH_TAB.
REFRESH: GRAPH_TAB.
LOOP AT MTD_TOT.
IF MTD_TOT-QTY NE 0.
IF MTD_TOT-SUBT EQ 'X'.
IF MTD_TOT-MATNR CS 'Grand-Total'.
ELSE.
MOVE MTD_TOT-GROUP TO CHAR01.
ADD 1 TO COUNT.
GRAPH_TAB-QTY = MTD_TOT-QTY.
WRITE MTD_TOT-MAKTX TO GRAPH_TAB-CHAR18.
SHIFT GRAPH_TAB-CHAR18 BY 1 PLACES RIGHT.
MOVE '_' TO GRAPH_TAB-CHAR18+17(1).
APPEND GRAPH_TAB.
ENDIF.
ENDIF.
ENDIF.
IF COUNT EQ 32.
EXIT.
ENDIF.

ENDLOOP.
CALL FUNCTION 'GRAPH_2D'
EXPORTING
DISPLAY_TYPE = 'HB'
TITL = 'MTD Confirmed Production'
TABLES
DATA = GRAPH_TAB
EXCEPTIONS
OTHERS = 1.
ENDFORM. " MTD_GRAPH
*&---------------------------------------------------------------------*
*& Form DATE_GRAPH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DATE_GRAPH.
CLEAR: COUNT, GRAPH_TAB.
REFRESH: GRAPH_TAB.
LOOP AT DTL_TAB.
IF MTD_TOT-SUBT EQ 'X'.
IF MTD_TOT-MATNR CS 'Grand-Total'.
ELSE.
ADD 1 TO COUNT.
GRAPH_TAB-QTY = DTL_TAB-DATE_QTY.
WRITE DTL_TAB-DATE TO GRAPH_TAB-CHAR18.
SHIFT GRAPH_TAB-CHAR18 BY 1 PLACES RIGHT.
MOVE '_' TO GRAPH_TAB-CHAR18+17(1).
APPEND GRAPH_TAB.
ENDIF.
ENDIF.
IF COUNT EQ 32.
EXIT.
ENDIF.
ENDLOOP.
WRITE PERIOD TO CHAR07.
CONCATENATE 'Total Production MTD' CHAR07 INTO CHAR40
SEPARATED BY SPACE.
CALL FUNCTION 'GRAPH_2D'
EXPORTING
DISPLAY_TYPE = 'LN'
TITL = CHAR40
TABLES
DATA = GRAPH_TAB
EXCEPTIONS
OTHERS = 1.

ENDFORM. " DATE_GRAPH


*&---------------------------------------------------------------------*
*& Form WRITE_SELECTIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SELECTIONS.
IF SELECTIONS_PRINTED NE 'Y'.
WRITE: /1 SY-ULINE.
WRITE: /1 SY-VLINE,
10 'Run Time Parameters'(005).
PERFORM WRITE_LAST_POSITION.
WRITE: /1 SY-VLINE,
10 'Period:'(007),
23 PERIOD.
PERFORM WRITE_LAST_POSITION.
WRITE: /1 SY-VLINE,
10 'Plant:'(006).
PERFORM WRITE_SELECTED_PLANTS.
WRITE /1 SY-ULINE.
SELECTIONS_PRINTED = 'Y'.
PAGE_BREAK_AFTER_SELECTIONS = 'N'.
ENDIF.
ENDFORM. " WRITE_SELECTIONS

*&---------------------------------------------------------------------*
*& Form WRITE_SELECTED_PLANTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SELECTED_PLANTS.
DESCRIBE TABLE PLANT LINES COUNT.
IF COUNT EQ 0.
WRITE: 23 'ALL'.
ELSE.
CLEAR COUNT.
SELECT * FROM T001W WHERE WERKS IN PLANT.
ADD 1 TO COUNT.
IF COUNT EQ 1.
WRITE: 23 T001W-WERKS, T001W-NAME1.
PERFORM WRITE_LAST_POSITION.
ELSE.
WRITE: /1 SY-VLINE,
23 T001W-WERKS,
T001W-NAME1.
PERFORM WRITE_LAST_POSITION.
ENDIF.
ENDSELECT.
ENDIF.
ENDFORM. " WRITE_SELECTED_PLANTS
*&---------------------------------------------------------------------*
*& Form ADD_MISSING_DATES_TO_DTL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_MISSING_DATES_TO_DTL.
* Get start date for first week
LOOP AT WKLY_DATES.
DATE = WKLY_DATES-LOW.
ENDLOOP.

* Add Missing dates - (dates with no production) - so that


* all dates are still printed on the report
CLEAR DATES_TAB.
REFRESH DATES_TAB.
SORT DTL_TAB BY DATE.

LOOP AT DTL_TAB.
FR_DATE = DTL_TAB-DATE.
CLEAR COUNT.
WHILE FR_DATE GT DATE.
DATES_TAB-DATE = DATE.
APPEND DATES_TAB.
ADD 1 TO DATE.
ADD 1 TO COUNT.
ENDWHILE.
ADD 1 TO DATE.
ENDLOOP.
FR_DATE = DTL_TAB-DATE.
IF FR_DATE EQ 0.
FR_DATE = WKLY_DATES-LOW - 1.
ENDIF.
IF FR_DATE NE 0.
WHILE FR_DATE LT HIGH_DATE.
ADD 1 TO FR_DATE.
DATES_TAB-DATE = FR_DATE.
APPEND DATES_TAB.
ENDWHILE.
ENDIF.
LOOP AT DATES_TAB.
CLEAR: DTL_TAB-QTYS, DTL_TAB.
REFRESH DTL_TAB-QTYS.
DTL_TAB-DATE = DATES_TAB-DATE.
APPEND DTL_TAB.
ENDLOOP.
CLEAR COUNT.
SORT DTL_TAB BY DATE.
WEEKNO = 1.
LOOP AT DTL_TAB.
ADD 1 TO COUNT.
DTL_TAB-WEEKNO = WEEKNO.
MODIFY DTL_TAB.
IF COUNT EQ 7.
COUNT = 0.
ADD 1 TO WEEKNO.
ENDIF.
ENDLOOP.

ENDFORM. " ADD_MISSING_DATES_TO_DTL


*&---------------------------------------------------------------------*
*& Form GET_S_MATNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_S_MATNR USING MATNR LIKE MAKT-MATNR
CHANGING SUBT LIKE YTD_TOT-SUBT
S_MATNR LIKE MAKT-MATNR.
CASE MATNR.
WHEN '000000000000010140'.
S_MATNR = '000000000000000010'.
WHEN '000000000000010780'.
S_MATNR = '000000000000000010'.
WHEN '000000000000010142'.
S_MATNR = '000000000000000020'.
WHEN '000000000000010782'.
S_MATNR = '000000000000000020'.
WHEN '000000000000010141'.
S_MATNR = '000000000000000030'.
WHEN '000000000000010781'.
S_MATNR = '000000000000000030'.
WHEN '000000000000010139'.
S_MATNR = '000000000000000040'.
WHEN '000000000000010779'.
S_MATNR = '000000000000000040'.
WHEN '000000000000010143'.
S_MATNR = '000000000000000050'.
WHEN '000000000000010503'.
S_MATNR = '000000000000000050'.
WHEN '000000000000010165'.
S_MATNR = '000000000000000060'.
WHEN '000000000000010516'.
S_MATNR = '000000000000000060'.
WHEN '000000000000010144'.
S_MATNR = '000000000000000070'.
WHEN '000000000000010567'.
S_MATNR = '000000000000000070'.
WHEN '000000000000010123'.
S_MATNR = '000000000000000080'.
WHEN '000000000000010769'.
S_MATNR = '000000000000000080'.
WHEN '000000000000010136'.
S_MATNR = '000000000000000090'.
WHEN '000000000000010777'.
S_MATNR = '000000000000000090'.
WHEN '000000000000010132'.
S_MATNR = '000000000000000100'.
WHEN '000000000000010774'.
S_MATNR = '000000000000000100'.
WHEN '000000000000010134'.
S_MATNR = '000000000000000110'.
WHEN '000000000000010775'.
S_MATNR = '000000000000000110'.
WHEN '000000000000010124'.
S_MATNR = '000000000000000120'.
WHEN '000000000000010770'.
S_MATNR = '000000000000000120'.
WHEN '000000000000010135'.
S_MATNR = '000000000000000130'.
WHEN '000000000000010776'.
S_MATNR = '000000000000000130'.
WHEN '000000000000010137'.
S_MATNR = '000000000000000131'.
WHEN '000000000000010778'.
S_MATNR = '000000000000000131'.
WHEN '000000000000010125'.
S_MATNR = '000000000000000140'.
WHEN '000000000000010606'.
S_MATNR = '000000000000000140'.
WHEN '000000000000010130'.
S_MATNR = '000000000000000150'.
WHEN '000000000000010772'.
S_MATNR = '000000000000000150'.
WHEN '000000000000010131'.
S_MATNR = '000000000000000160'.
WHEN '000000000000010773'.
S_MATNR = '000000000000000160'.
WHEN '000000000000010126'.
S_MATNR = '000000000000000170'.
WHEN '000000000000010771'.
S_MATNR = '000000000000000170'.
WHEN '000000000000010647'.
S_MATNR = '000000000000000173'.
WHEN '000000000000010146'.
S_MATNR = '000000000000000180'.
WHEN '000000000000010370'.
S_MATNR = '000000000000000180'.
WHEN '000000000000010147'.
S_MATNR = '000000000000000190'.
WHEN '000000000000010526'.
S_MATNR = '000000000000000190'.
WHEN '000000000000010148'.
S_MATNR = '000000000000000200'.
WHEN '000000000000010783'.
S_MATNR = '000000000000000200'.
WHEN '000000000000010149'.
S_MATNR = '000000000000000210'.
WHEN '000000000000010784'.
S_MATNR = '000000000000000210'.
WHEN '000000000000010150'.
S_MATNR = '000000000000000220'.
WHEN '000000000000010785'.
S_MATNR = '000000000000000220'.
WHEN '000000000000010152'.
S_MATNR = '000000000000000230'.
WHEN '000000000000010787'.
S_MATNR = '000000000000000230'.
WHEN OTHERS.
IF SUBT EQ 'X'.
CONCATENATE S_GROUP '999991' INTO WRK_TAB-S_MATNR.
ELSE.
S_MATNR = MATNR.
ENDIF.
ENDCASE.
ENDFORM. " GET_S_MATNR
*&---------------------------------------------------------------------*
*& Form GET_SUB_TOTALS_TO_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*&---------------------------------------------------------------------*
*& Form GET_MATNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MATNR USING GROUP LIKE YTD_TOT-GROUP
changing matnr like wa_MSEG-matnr
MAKTX LIKE MAKT-MAKTX
SUBT LIKE WRK_TAB-SUBT.
MATNR = 'Sub-Tot'(098).
MAKTX = GROUP.
SUBT = 'X'.
ENDFORM. " GET_MATNR

*&---------------------------------------------------------------------*
*& Form SUB_TOTALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_YTD_TOT text *
*----------------------------------------------------------------------*
FORM SUB_TOTALS TABLES P_TAB STRUCTURE YTD_TOT.

SORT P_TAB BY GROUP SUBT S_MATNR.


REFRESH WRK_TAB.
LOOP AT P_TAB.
S_GROUP = P_TAB-GROUP.
AT NEW GROUP.
CLEAR COUNT_S_MATNR.
ENDAT.
AT NEW S_MATNR.
ADD 1 TO COUNT_S_MATNR.
ENDAT.
AT END OF GROUP.
IF COUNT_S_MATNR GT 1
OR YES EQ 'X'
OR SUMMARY_SUB_TOTALS EQ 'Y'.
SUM.
CLEAR WRK_TAB.
WRK_TAB-QTY = P_TAB-QTY.
WRK_TAB-GROUP = S_GROUP.
PERFORM GET_MATNR USING P_TAB-GROUP
CHANGING WRK_TAB-MATNR
WRK_TAB-MAKTX
WRK_TAB-SUBT.
PERFORM GET_S_MATNR USING WRK_TAB-MATNR
CHANGING WRK_TAB-SUBT
WRK_TAB-S_MATNR.
PERFORM CHECK_LENGTH USING WRK_TAB-QTY
WRK_TAB-MATNR
WRK_TAB-MAKTX
CHANGING WRK_TAB-MAX_LEN.
APPEND WRK_TAB.
ENDIF.
ENDAT.
AT LAST.
SUM.
CLEAR WRK_TAB.
WRK_TAB-QTY = P_TAB-QTY.
WRK_TAB-GROUP = '002'.
WRK_TAB-SUBT = 'X'.
WRK_TAB-MATNR = 'Grand-Total '.
WRK_TAB-S_MATNR = 'Grand-Total999991'.
WRK_TAB-MAKTX = SPACE.
PERFORM CHECK_LENGTH USING WRK_TAB-QTY
WRK_TAB-MATNR
WRK_TAB-MAKTX
CHANGING WRK_TAB-MAX_LEN.
APPEND WRK_TAB.
* Begin of m007: remove special coding for plant 5150
* IF '5150' IN PLANT.
* CONCATENATE 'RCL575' '999999' INTO WRK_TAB-GROUP.
* WRK_TAB-MATNR = 'Grand-Total '.
* WRK_TAB-SUBT = 'X'.
* WRK_TAB-S_MATNR = 'Grand-Total999992'.
* WRK_TAB-MAKTX = SPACE.
* PERFORM CHECK_LENGTH USING WRK_TAB-QTY
* WRK_TAB-MATNR
* WRK_TAB-MAKTX
* CHANGING WRK_TAB-MAX_LEN.
* APPEND WRK_TAB.
* ENDIF.
* end m007
ENDAT.
ENDLOOP.

APPEND LINES OF WRK_TAB TO P_TAB.


SORT P_TAB BY GROUP SUBT S_MATNR.

ENDFORM. " SUB_TOTALS


*&---------------------------------------------------------------------*
*& Form REASSIGN_MATNR_AND_MAKTX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_YTD_TOT-GROUP text *
* <--P_WRK_TAB-MATNR text *
* <--P_WRK_TAB-MAKTX text *
*----------------------------------------------------------------------*
FORM REASSIGN_MATNR_AND_MAKTX USING GROUP
CHANGING MATNR
MAKTX.
CASE GROUP.
WHEN '010'.
MATNR = '373 Sub- '.
MAKTX = 'Total '.
WHEN '030'.
MATNR = '535 Sub- '.
MAKTX = 'Total '.
WHEN '040'.
MATNR = '575 Sub- '.
MAKTX = 'Total '.
WHEN '049'.
MATNR = 'Grand '.
MAKTX = 'Total '.
WHEN '050'.
MATNR = '666 Sub- '.
MAKTX = 'Total '.
WHEN '060'.
MATNR = '69 Sub- '.
MAKTX = 'Total '.
WHEN '002'.
MATNR = 'Grand '.
MAKTX = 'Total '.
WHEN '070'.
MATNR = '128 Sub- '.
MAKTX = 'Total '.
ENDCASE.

ENDFORM. " REASSIGN_MATNR_AND_MAKTX

*&---------------------------------------------------------------------*
*& Form DTL_SUB_TOTALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DTL_SUB_TOTALS.
LOOP AT DTL_TAB.
PERFORM SUB_TOTALS TABLES DTL_TAB-QTYS.
MODIFY DTL_TAB.
ENDLOOP.
ENDFORM. " DTL_SUB_TOTALS
*&---------------------------------------------------------------------*
*& Form DTL_MAX_LEN_FROM_YTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DTL_MAX_LEN_FROM_YTD.
LOOP AT DTL_TAB.
LOOP AT DTL_TAB-QTYS INTO WA_QTYS.
LOOP AT YTD_TOT WHERE S_MATNR EQ WA_QTYS-S_MATNR.
PERFORM CHECK_LENGTH USING YTD_TOT-QTY
YTD_TOT-MATNR
YTD_TOT-MAKTX
CHANGING WA_QTYS-MAX_LEN.
ENDLOOP.
IF LONGER = 'Y' AND SY-SUBRC EQ 0.
MODIFY DTL_TAB-QTYS FROM WA_QTYS.
ENDIF.
ENDLOOP.
MODIFY DTL_TAB.
ENDLOOP.
ENDFORM. " DTL_MAX_LEN_FROM_YTD
*&---------------------------------------------------------------------*
*& Form CONVERT_UOM_TO_TONNES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONVERT_UOM_TO_TONNES.

CLEAR: WS_MEINS.

* begin of m002
IF PLANT IS INITIAL. "m003
WS_MEINS = 'TO'. "m003
ELSE. "m003
IF CNVLBS = 'X'
AND WA_MSEG-WERKS = '4305'.
WS_MEINS = 'LB'.
ELSE.
WS_MEINS = 'TO'.
ENDIF.
ENDIF.
"m003
* end of m002
CALL FUNCTION 'Z_CONVERT_QUANTITY_UOM'
EXPORTING
quantity = wa_MSEG-menge
uom_from = wa_MSEG-meins
* uom_to = 'TO' "m002
UOM_TO = WS_MEINS "m002
IMPORTING
quantity_converted = wa_MSEG-menge
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
OVERFLOW = 2
TYPE_INVALID = 3
UNITS_MISSING = 4
UNIT_IN_NOT_FOUND = 5
UNIT_OUT_NOT_FOUND = 6
OTHERS = 7.

* Begin of m010: Recalculate values if material is marked as a


* proportion unit.
IF WA_MARA-KZWSM = 'A'.
PERFORM DETERMINE_NEW_VALUES.
ENDIF.
* End of m010

ENDFORM. " CONVERT_UOM_TO_TONNES


*&---------------------------------------------------------------------*
*& Form MATNR_CONVERSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MATNR_CONVERSION CHANGING MATNR LIKE MSEG-MATNR.
CASE MATNR.
WHEN '000000000000010123'.
MATNR = '000000000000010769'.
WHEN '000000000000010124'.
MATNR = '000000000000010770'.
WHEN '000000000000010125'.
MATNR = '000000000000010606'.
WHEN '000000000000010126'.
MATNR = '000000000000010771'.
WHEN '000000000000010130'.
MATNR = '000000000000010772'.
WHEN '000000000000010131'.
MATNR = '000000000000010773'.
WHEN '000000000000010132'.
MATNR = '000000000000010774'.
WHEN '000000000000010134'.
MATNR = '000000000000010775'.
WHEN '000000000000010135'.
MATNR = '000000000000010776'.
WHEN '000000000000010136'.
MATNR = '000000000000010777'.
WHEN '000000000000010137'.
MATNR = '000000000000010778'.
WHEN '000000000000010139'.
MATNR = '000000000000010779'.
WHEN '000000000000010140'.
MATNR = '000000000000010780'.
WHEN '000000000000010141'.
MATNR = '000000000000010781'.
WHEN '000000000000010142'.
MATNR = '000000000000010782'.
WHEN '000000000000010143'.
MATNR = '000000000000010503'.
WHEN '000000000000010144'.
MATNR = '000000000000010567'.
WHEN '000000000000010145'.
MATNR = '000000000000010481'.
WHEN '000000000000010146'.
MATNR = '000000000000010370'.
WHEN '000000000000010147'.
MATNR = '000000000000010526'.
WHEN '000000000000010148'.
MATNR = '000000000000010783'.
WHEN '000000000000010149'.
MATNR = '000000000000010784'.
WHEN '000000000000010150'.
MATNR = '000000000000010785'.
WHEN '000000000000010151'.
MATNR = '000000000000010786'.
WHEN '000000000000010152'.
MATNR = '000000000000010787'.
WHEN '000000000000010163'.
MATNR = '000000000000010788'.
WHEN '000000000000010164'.
MATNR = '000000000000010486'.
WHEN '000000000000010165'.
MATNR = '000000000000010516'.
WHEN '000000000000010166'.
MATNR = '000000000000010313'.
WHEN '000000000000010167'.
MATNR = '000000000000010789'.
WHEN '000000000000010168'.
MATNR = '000000000000010790'.
ENDCASE.

ENDFORM. " MATNR_CONVERSION


*&---------------------------------------------------------------------*
*& Form UPDATE_TOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_MTD_TOT text *
*----------------------------------------------------------------------*
FORM UPDATE_TOT TABLES P_TOT STRUCTURE MTD_TOT.
PERFORM MATNR_CONVERSION CHANGING WA_MSEG-MATNR.

LOOP AT P_TOT WHERE MATNR EQ WA_MSEG-MATNR


AND GROUP EQ WA_MARA-MATKL.

PERFORM ADD_TOT USING P_TOT-MATNR


P_TOT-MAKTX
CHANGING P_TOT-QTY
P_TOT-NO_MOVES
P_TOT-MAX_LEN.
MODIFY P_TOT.
ENDLOOP.

IF SY-SUBRC NE 0.
CLEAR P_TOT.
P_TOT-MATNR = WA_MSEG-MATNR.
P_TOT-GROUP = WA_MARA-MATKL.
SPLIT WA_MARA-MAKTX AT ';' INTO P_TOT-MAKTX MAKTX.
perform get_s_matnr using wa_MSEG-matnr
CHANGING P_TOT-SUBT
P_TOT-S_MATNR.
PERFORM ADD_TOT USING P_TOT-MATNR
P_TOT-MAKTX
CHANGING P_TOT-QTY
P_TOT-NO_MOVES
P_TOT-MAX_LEN.
APPEND P_TOT.
ENDIF.
ENDFORM. " UPDATE_TOT

*&---------------------------------------------------------------------*
*& Form ADD_TOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_TOT-QTY text *
*----------------------------------------------------------------------*
FORM ADD_TOT USING P_TOT-MATNR
P_TOT-MAKTX
CHANGING P_TOT-QTY
P_TOT-NO_MOVES
P_TOT-MAX_LEN.
ADD 1 TO MTD_TOT-NO_MOVES.
if wa_MSEG-shkzg eq 'H'.
SUBTRACT WA_MSEG-MENGE FROM P_TOT-QTY.
ELSE.
ADD WA_MSEG-MENGE TO P_TOT-QTY.
ENDIF.
PERFORM CHECK_LENGTH USING P_TOT-QTY
P_TOT-MATNR
P_TOT-MAKTX
CHANGING P_TOT-MAX_LEN.
ENDFORM. " ADD_TOT
*&---------------------------------------------------------------------*
*& Form SUMMARY_SUB_TOTALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUMMARY_SUB_TOTALS.
SUMMARY_SUB_TOTALS = 'Y'.
IF SUMMARY EQ 'X' OR BOTH EQ 'X'.
PERFORM SUB_TOTALS TABLES GROSS_MTD.
perform sub_totals tables off_spec_mtd.
perform sub_totals tables rework_to_slurry_mtd.
PERFORM SUB_TOTALS TABLES NETT_MTD.
* perform sub_totals tables wip_consumed_mtd.
PERFORM SUB_TOTALS TABLES GROSS_YTD.
PERFORM SUB_TOTALS TABLES OFF_SPEC_YTD.
PERFORM SUB_TOTALS TABLES REWORK_TO_SLURRY_YTD.
PERFORM SUB_TOTALS TABLES NETT_YTD.
* PERFORM SUB_TOTALS TABLES WIP_CONSUMED_YTD.
ENDIF.
ENDFORM. " SUMMARY_SUB_TOTALS
*&---------------------------------------------------------------------*
*& Form SUMMARY_MAX_LEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUMMARY_MAX_LEN.
perform get_max_len tables off_spec_mtd gross_mtd.
perform get_max_len tables rework_to_slurry_mtd gross_mtd.
perform get_max_len tables wip_consumed_mtd gross_mtd.
PERFORM GET_MAX_LEN TABLES NETT_MTD GROSS_MTD.
ENDFORM. " SUMMARY_MAX_LEN

*&---------------------------------------------------------------------*
*& Form GET_MAX_LEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_OFF_SPEC text *
* -->P_GROSS_MTD text *
*----------------------------------------------------------------------*
form get_max_len tables p_to structure off_spec_mtd
P_FROM STRUCTURE GROSS_MTD.
LOOP AT P_FROM.
LOOP AT P_TO WHERE S_MATNR EQ P_FROM-S_MATNR.
PERFORM CHECK_LENGTH USING P_FROM-QTY
P_FROM-MATNR
P_FROM-MAKTX
CHANGING P_TO-MAX_LEN.
IF LONGER EQ 'Y'.
MODIFY P_TO.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_MAX_LEN
*&---------------------------------------------------------------------*
*& Form PRINT_SUMMARY_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_SUMMARY_PAGE.
SUMMARY_HEADING = 'Y'.
NEW-PAGE.
WRITE: /1 ' '.
PERFORM WRITE_SUMMARY_COLUMN.
ENDFORM. " PRINT_SUMMARY_PAGE
*&---------------------------------------------------------------------*
*& Form CHECK_MAX_HEADING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_MAX_HEADING.
HEADING_LENGTH = STRLEN( CHAR100 ).
IF HEADING_LENGTH GT HEADING_MAX.
HEADING_MAX = HEADING_LENGTH.
ENDIF.
ENDFORM. " CHECK_MAX_HEADING

*&---------------------------------------------------------------------*
*& Form WRITE_SUMMARY_HEADING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SUMMARY_HEADING USING MAX LIKE HEADING_MAX.
DATA: OUT_LEN TYPE I.
OUT_LEN = MAX + 1.
CONCATENATE U_V_LINE CHAR100 INTO CHAR101.
IF FIRST NE 'N'.
WRITE: AT /1(OUT_LEN) CHAR101 NO-GAP.
ELSE.
WRITE: AT (OUT_LEN) CHAR101 NO-GAP.
ENDIF.
FIRST = 'N'.
ENDFORM. " WRITE_SUMMARY_HEADING
*&---------------------------------------------------------------------*
*& Form WRITE_SUMMARY_COLUMN_HEADING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SUMMARY_COLUMN_HEADING TABLES P_TABLE STRUCTURE GROSS_MTD
USING P_TEXT LIKE CHAR100.
CLEAR: CHAR100, CHAR07, CHAR14, FIRST,
CURR_LEN, MAX_LENGTH. "m004
WRITE P_TEXT TO CHAR100.
MOVE SY-VLINE TO U_V_LINE.
PERFORM WRITE_SUMMARY_HEADING USING HEADING_MAX.
CURR_LEN = HEADING_MAX + 1. "m004

LOOP AT P_TABLE WHERE SUBT EQ 'X' AND GROUP NE 'RCL575999'


AND PRINTED = 0. "m004
* Begin of m004
CURR_LEN = CURR_LEN + P_TABLE-MAX_LEN + 1.
MAX_LENGTH = CURR_LEN.
IF CURR_LEN GT 254.
CURR_LEN = 255.
EXIT.
ENDIF.
* End of m004
MOVE SY-VLINE TO U_V_LINE.
WRITE: P_TABLE-MATNR TO CHAR100.
PERFORM WRITE_SUMMARY_HEADING USING P_TABLE-MAX_LEN.
ENDLOOP.

WRITE: SY-VLINE NO-GAP.


CLEAR: CHAR100, FIRST, CURR_LEN.
PERFORM WRITE_SUMMARY_HEADING USING HEADING_MAX.
CURR_LEN = HEADING_MAX + 1. "m004

LOOP AT P_TABLE WHERE SUBT EQ 'X' AND GROUP NE 'RCL575999'


AND PRINTED = 0. "m004
* Begin of m004
CURR_LEN = CURR_LEN + P_TABLE-MAX_LEN + 1.
IF CURR_LEN GT 254.
CURR_LEN = 255.
EXIT.
ENDIF.
* End of m004
MOVE SY-VLINE TO U_V_LINE.
WRITE: P_TABLE-MAKTX TO CHAR100.
PERFORM WRITE_SUMMARY_HEADING USING P_TABLE-MAX_LEN.
ENDLOOP.
WRITE: SY-VLINE NO-GAP.
CLEAR: CHAR100.
ENDFORM. " WRITE_SUMMARY_COLUMN_HEADING
*&---------------------------------------------------------------------*
*& Form WRITE_ULINE_2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_ULINE_2 TABLES P_TABLE STRUCTURE MTD_TOT.
MOVE SY-ULINE TO U_V_LINE.
CLEAR: CHAR100, FIRST, CURR_LEN.
MOVE SY-ULINE(100) TO CHAR100.
PERFORM WRITE_SUMMARY_HEADING USING HEADING_MAX.
MOVE SY-ULINE TO U_V_LINE.
CURR_LEN = HEADING_MAX + 1. "m004

LOOP AT P_TABLE WHERE SUBT EQ 'X' AND GROUP NE 'RCL575999'.


* Begin of m004
IF SUMMARY_LEVEL = 0.
CHECK P_TABLE-PRINTED = 0.
ELSE.
READ TABLE PRINT_ITAB WITH KEY GROUP = P_TABLE-GROUP
SUBT = P_TABLE-SUBT
S_MATNR = P_TABLE-S_MATNR
MATNR = P_TABLE-MATNR.
CHECK SY-SUBRC = 0.
ENDIF.

CURR_LEN = CURR_LEN + P_TABLE-MAX_LEN + 1.


IF CURR_LEN GT 254.
CURR_LEN = 255.
EXIT.
ENDIF.

* End of m004

PERFORM WRITE_SUMMARY_HEADING USING P_TABLE-MAX_LEN.


ENDLOOP.

WRITE: SY-ULINE(1) NO-GAP.


ENDFORM. " WRITE_ULINE_2
*&---------------------------------------------------------------------*
*& Form WRITE_SUMMARY_COLUMN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_SUMMARY_COLUMN.
DATA: HEADER_TEXT(100) TYPE C,
Q_MODE(1) TYPE C.

* Build the yearly and period quality summary display tables.


* perform build_group_quality. "m008

* Create the modified summary tables for quality.


* q_mode = 'Y'. "m008
* perform print_group_quality using q_mode. "m008

* Print the summary tables.


FORMAT COLOR COL_HEADING INTENSIFIED ON.
PERFORM WRITE_ULINE_2 TABLES GROSS_MTD.
WRITE ' YTD Total'(002) TO HEADER_TEXT.
SHIFT HEADER_TEXT LEFT DELETING LEADING SPACE.
SORT WIP_CONSUMED_YTD BY MATNR.
PERFORM WRITE_SUMMARY_TABLES TABLES GROSS_YTD
OFF_SPEC_YTD
REWORK_TO_SLURRY_YTD
NETT_YTD
WIP_CONSUMED_YTD
* FPP_ITAB "m008
* FAIL_ITAB "m008
* NORES_ITAB "m008
* TOTQUA_ITAB "m008
* PCTFPP_ITAB "m008
USING HEADER_TEXT.

SKIP 2.
Q_MODE = 'M'.
* perform print_group_quality using q_mode. "m008
* new-page.
* write: /1 ' '.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
PERFORM WRITE_ULINE_2 TABLES GROSS_MTD.
WRITE PERIOD TO CHAR07.
CONCATENATE CHAR07 ' Total'(003) INTO CHAR14.
MOVE CHAR14 TO HEADER_TEXT.
SORT WIP_CONSUMED_MTD BY MATNR.
PERFORM WRITE_SUMMARY_TABLES TABLES GROSS_MTD
OFF_SPEC_MTD
REWORK_TO_SLURRY_MTD
NETT_MTD
WIP_CONSUMED_MTD
* FPP_ITAB "m008
* FAIL_ITAB "m008
* NORES_ITAB "m008
* TOTQUA_ITAB "m008
* PCTFPP_ITAB "m008
USING HEADER_TEXT.

ENDFORM. " WRITE_SUMMARY_COLUMN


*&---------------------------------------------------------------------*
*& Form WRITE_SUMMARY_COLUMN_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_4965 text *
* -->P_GROSS_MTD text *
* -->P_WRITE text *
* -->P_'GROSS PRODUCTION'(037) text *
* -->P_TO text *
* -->P_CHAR30 text *
*----------------------------------------------------------------------*
FORM WRITE_SUMMARY_COLUMN_LINE TABLES P_SUMMARY STRUCTURE GROSS_MTD
USING CHAR100 LIKE CHAR100.

CLEAR: CURR_LEN, MAX_LENGTH. "m004


MOVE SY-VLINE TO U_V_LINE.
FORMAT COLOR COL_GROUP.
PERFORM WRITE_SUMMARY_HEADING USING HEADING_MAX.
CURR_LEN = HEADING_MAX + 1. "m004
PERFORM STRIPING.

LOOP AT P_SUMMARY WHERE SUBT EQ 'X' AND GROUP NE 'RCL575999'


AND PRINTED = 0. "m004
CURR_LEN = CURR_LEN + P_SUMMARY-MAX_LEN + 1. "m004
MAX_LENGTH = CURR_LEN.
IF CURR_LEN GT 254. "m004
CURR_LEN = 255. "m004
EXIT. "m004
ENDIF. "m004
P_SUMMARY-PRINTED = 1. "m004
MOVE SY-VLINE TO U_V_LINE.
PERFORM WRITE_QTY USING P_SUMMARY-QTY
P_SUMMARY-MAX_LEN
SPACE.
MODIFY P_SUMMARY. "m004

* Begin of M004
READ TABLE PRINT_ITAB WITH KEY GROUP = P_SUMMARY-GROUP
SUBT = P_SUMMARY-SUBT
S_MATNR = P_SUMMARY-S_MATNR
MATNR = P_SUMMARY-MATNR.
IF SY-SUBRC <> 0.
MOVE: P_SUMMARY-GROUP TO PRINT_ITAB-GROUP,
P_SUMMARY-SUBT TO PRINT_ITAB-SUBT,
P_SUMMARY-S_MATNR TO PRINT_ITAB-S_MATNR,
P_SUMMARY-MATNR TO PRINT_ITAB-MATNR.
APPEND PRINT_ITAB.
ENDIF.
* end of M004
ENDLOOP.
WRITE: SY-VLINE NO-GAP.
ENDFORM. " WRITE_SUMMARY_COLUMN_LINE
*&---------------------------------------------------------------------*
*& Form ADD_YTD_MATERIALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_MTD_TOT text *
*----------------------------------------------------------------------*
FORM ADD_YTD_MATERIALS TABLES FROM_TABLE STRUCTURE MTD_TOT
TO_TABLE STRUCTURE MTD_TOT.
LOOP AT FROM_TABLE.
WRITE FROM_TABLE-MATNR TO CHAR18.
LENGTH = STRLEN( CHAR18 ).
IF LENGTH GT FROM_TABLE-MAX_LEN.
FROM_TABLE-MAX_LEN = LENGTH.
MODIFY FROM_TABLE.
ENDIF.
LENGTH = STRLEN( FROM_TABLE-MAKTX ).
IF LENGTH GT FROM_TABLE-MAX_LEN.
IF LENGTH GT 18.
FROM_TABLE-MAX_LEN = 18.
ELSE.
FROM_TABLE-MAX_LEN = LENGTH.
ENDIF.
MODIFY FROM_TABLE.
ENDIF.
LOOP AT TO_TABLE WHERE S_MATNR EQ FROM_TABLE-S_MATNR
AND GROUP EQ FROM_TABLE-GROUP.
IF FROM_TABLE-MAX_LEN GT TO_TABLE-MAX_LEN.
TO_TABLE-MAX_LEN = FROM_TABLE-MAX_LEN.
MODIFY TO_TABLE.
ENDIF.
ENDLOOP.
IF SY-SUBRC NE 0.
CLEAR TO_TABLE.
TO_TABLE-MATNR = FROM_TABLE-MATNR.
TO_TABLE-MAX_LEN = FROM_TABLE-MAX_LEN.
TO_TABLE-GROUP = FROM_TABLE-GROUP.
TO_TABLE-S_MATNR = FROM_TABLE-S_MATNR.
TO_TABLE-SUBT = FROM_TABLE-SUBT.
TO_TABLE-MAKTX = FROM_TABLE-MAKTX.
APPEND TO_TABLE.
ENDIF.
ENDLOOP.
SORT TO_TABLE BY GROUP SUBT S_MATNR.
ENDFORM. " ADD_YTD_MATERIALS

*&---------------------------------------------------------------------*
*& Form CROSS_REFERENCE_TABLES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CROSS_REFERENCE_TABLES.
PERFORM CROSS_REFERENCE_DTL_TO_YTD.
PERFORM CROSS_REFERENCE_YTD_TO_DTL.
PERFORM ADD_YTD_MATERIALS TABLES YTD_TOT
MTD_TOT.
PERFORM ADD_YTD_MATERIALS TABLES OFF_SPEC_YTD
OFF_SPEC_MTD.
perform add_ytd_materials tables off_spec_mtd
GROSS_MTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
GROSS_MTD.
PERFORM ADD_YTD_MATERIALS TABLES REWORK_TO_SLURRY_YTD
REWORK_TO_SLURRY_MTD.
perform add_ytd_materials tables rework_to_slurry_mtd
GROSS_MTD.
PERFORM ADD_YTD_MATERIALS TABLES NETT_YTD
NETT_MTD.
PERFORM ADD_YTD_MATERIALS TABLES NETT_MTD
GROSS_MTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_MTD
off_spec_mtd.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_MTD
rework_to_slurry_mtd.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_MTD
NETT_MTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
GROSS_MTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_MTD
GROSS_YTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
OFF_SPEC_YTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
REWORK_TO_SLURRY_YTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
NETT_YTD.
PERFORM ADD_YTD_MATERIALS TABLES OFF_SPEC_YTD
GROSS_YTD.
PERFORM ADD_YTD_MATERIALS TABLES REWORK_TO_SLURRY_YTD
GROSS_YTD.
PERFORM ADD_YTD_MATERIALS TABLES NETT_YTD
GROSS_YTD.
PERFORM ADD_YTD_MATERIALS TABLES GROSS_YTD
GROSS_MTD.
ENDFORM. " CROSS_REFERENCE_TABLES
*&---------------------------------------------------------------------*
*& Form GET_WIP_CONSUMED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_WIP_CONSUMED.
IF SUMMARY EQ 'X' OR BOTH EQ 'X'.
PERFORM GET_WIP_CONSUMED_SRCE_DTA.
ENDIF.

ENDFORM. " GET_WIP_CONSUMED


*&---------------------------------------------------------------------*
*& Form ADD_SUMMARY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_SUMMARY_DATA.

IF NOT WA_MSEG-BWART IN TR_TYPE_WIP_CONSUMED.


IF WA_MSEG-BUDAT IN PER_DATES. "m006
* if wa_mkpf-budat in per_dates. "m006
PERFORM UPDATE_TOT TABLES NETT_MTD.
IF WA_MSEG-BWART IN TR_TYPE_OFF_SPEC AND WA_MARA-MATKL NE 'HCL'.
PERFORM UPDATE_TOT TABLES OFF_SPEC_MTD.
ELSEIF WA_MSEG-BWART IN TR_TYPE_REWORK.
perform update_tot tables rework_to_slurry_mtd.
ELSE.
PERFORM UPDATE_TOT TABLES GROSS_MTD.
ENDIF.
ENDIF.
IF WA_MSEG-BUDAT IN YTD_DATES. "m006
* if wa_mkpf-budat in ytd_dates. "m006
PERFORM UPDATE_TOT TABLES NETT_YTD.
IF WA_MSEG-BWART IN TR_TYPE_OFF_SPEC AND WA_MARA-MATKL NE 'HCL'.
PERFORM UPDATE_TOT TABLES OFF_SPEC_YTD.
ELSEIF WA_MSEG-BWART IN TR_TYPE_REWORK.
PERFORM UPDATE_TOT TABLES REWORK_TO_SLURRY_YTD.
ELSE.
PERFORM UPDATE_TOT TABLES GROSS_YTD.
ENDIF.
ENDIF.
ELSE.
IF WA_MSEG-BUDAT IN PER_DATES. "m006
* if wa_mkpf-budat in per_dates. "m006
perform update_tot tables wip_consumed_mtd.
ENDIF.
IF WA_MSEG-BUDAT IN YTD_DATES. "m006
* if wa_mkpf-budat in ytd_dates. "m006
PERFORM UPDATE_TOT TABLES WIP_CONSUMED_YTD.
ENDIF.
ENDIF.
ENDFORM. " ADD_SUMMARY_DATA

*&---------------------------------------------------------------------*
*& Form WRITE_SUMMARY_tables
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GROSS_MTD text *
* -->P_OFF_SPEC_MTD text *
* -->P_REWORK_TO_SLURRY_MTD text *
* -->P_NETT_MTD text *
* -->P_WIP_CONSUMED_MTD text *
*----------------------------------------------------------------------*
FORM WRITE_SUMMARY_TABLES TABLES P_GROSS STRUCTURE GROSS_MTD
P_OFF_SPEC STRUCTURE OFF_SPEC_MTD
P_REWORK_TO_SLURRY STRUCTURE REWORK_TO_SLURRY_MTD
P_NETT STRUCTURE NETT_MTD
P_WIP_CONSUMED STRUCTURE WIP_CONSUMED_MTD
* P_FPP_ITAB STRUCTURE FPP_ITAB
* P_FAIL_ITAB STRUCTURE FAIL_ITAB
* P_NORES_ITAB STRUCTURE NORES_ITAB
* P_TOTQUA_ITAB STRUCTURE TOTQUA_ITAB
* P_PCTFPP_ITAB STRUCTURE PCTFPP_ITAB
USING P_HEADER LIKE CHAR100.

FIRST_PASS = 0. "M004

LOOP AT P_GROSS WHERE SUBT EQ 'X' "m004


AND PRINTED EQ 0. "m004

CLEAR: PRINT_ITAB[], PRINT_ITAB. "m004


SUMMARY_LEVEL = 0. "m004

IF FIRST_PASS = 1. "m004
PERFORM WRITE_ULINE_2 TABLES P_GROSS. "m004
ELSE. "m004
FIRST_PASS = 1. "m004
ENDIF. "m004

PERFORM WRITE_SUMMARY_COLUMN_HEADING TABLES P_GROSS


USING P_HEADER.
PERFORM WRITE_ULINE_2 TABLES P_GROSS.
CLEAR: CHAR100, FIRST.
WRITE: 'GROSS PRODUCTION'(037) TO CHAR100.
PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_GROSS
USING CHAR100.
SUMMARY_LEVEL = 1.
PERFORM WRITE_ULINE_2 TABLES P_GROSS.
CLEAR: CHAR100, FIRST.
WRITE: 'Off Spec. to Wip(909/910, 309/310)'(035) TO CHAR100.
PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_OFF_SPEC
USING CHAR100.
PERFORM WRITE_ULINE_2 TABLES P_GROSS.
CLEAR: CHAR100, FIRST.
WRITE: 'Rework to Slurry(963/964)'(036) TO CHAR100.
PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_REWORK_TO_SLURRY
USING CHAR100.
PERFORM WRITE_ULINE_2 TABLES P_GROSS.
CLEAR: CHAR100, FIRST.
WRITE: 'NETT PRODUCTION'(038) TO CHAR100.
PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_NETT
USING CHAR100.
SUMMARY_LEVEL = 1.
PERFORM WRITE_ULINE_2 TABLES P_GROSS.
SKIP 1.

* Begin of m008
* Write the quality information for each material group.
* SUMMARY_LEVEL = 0.
* PERFORM WRITE_ULINE_2 TABLES P_FPP_ITAB.
* PERFORM WRITE_SUMMARY_COLUMN_HEADING TABLES P_FPP_ITAB
* USING P_HEADER.
* PERFORM WRITE_ULINE_2 TABLES P_FPP_ITAB.
* CLEAR: CHAR100, FIRST.
* WRITE: 'FPP'(070) TO CHAR100.
* PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_FPP_ITAB
* USING CHAR100.

* PERFORM WRITE_ULINE_2 TABLES P_FAIL_ITAB.


* CLEAR: CHAR100, FIRST.
* WRITE: 'Fail'(068) TO CHAR100.
* PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_FAIL_ITAB
* USING CHAR100.
*
* PERFORM WRITE_ULINE_2 TABLES P_NORES_ITAB.
* CLEAR: CHAR100, FIRST.
* WRITE: 'No Result'(073) TO CHAR100.
* PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_NORES_ITAB
* USING CHAR100.
*
* PERFORM WRITE_ULINE_2 TABLES P_TOTQUA_ITAB.
* CLEAR: CHAR100, FIRST.
* WRITE: 'Total Quailty'(102) TO CHAR100.
* PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_TOTQUA_ITAB
* USING CHAR100.
*
* PERFORM WRITE_ULINE_2 TABLES P_PCTFPP_ITAB.
* CLEAR: CHAR100, FIRST.
* WRITE: '% FPP'(103) TO CHAR100.
* PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_PCTFPP_ITAB
* USING CHAR100.
* SUMMARY_LEVEL = 1.
* PERFORM WRITE_ULINE_2 TABLES P_GROSS.
* SKIP 1.
* End of m008
ENDLOOP. "m004

SKIP 1.
SUMMARY_LEVEL = 0. "m004
PERFORM WRITE_ULINE_2 TABLES P_WIP_CONSUMED.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
PERFORM WRITE_SUMMARY_COLUMN_HEADING TABLES P_WIP_CONSUMED
USING P_HEADER.
PERFORM WRITE_ULINE_2 TABLES P_WIP_CONSUMED.
CLEAR: CHAR100, FIRST.
WRITE: 'WIP Consumed(971/972)'(039) TO CHAR100.
PERFORM WRITE_SUMMARY_COLUMN_LINE TABLES P_WIP_CONSUMED
USING CHAR100.
SUMMARY_LEVEL = 1.
PERFORM WRITE_ULINE_2 TABLES P_WIP_CONSUMED.
SUMMARY_LEVEL = 0. "m004

ENDFORM. " WRITE_SUMMARY_TABLES


*&---------------------------------------------------------------------*
*& Form GET_MATERIAL_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MATERIAL_DETAILS.
SELECT SINGLE MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MATNR EQ WA_MSEG-MATNR
AND SPRAS EQ SY-LANGU.
SELECT SINGLE
MATNR MTART MATKL BISMT FROM MARA
INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MATNR EQ WA_MSEG-MATNR.
ENDFORM. " GET_MATERIAL_DETAILS
*&---------------------------------------------------------------------*
*& Form CROSS_REFERENCE_DTL_TO_YTD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CROSS_REFERENCE_DTL_TO_YTD.
LOOP AT DTL_TAB.
PERFORM ADD_YTD_MATERIALS TABLES DTL_TAB-QTYS
YTD_TOT.
MODIFY DTL_TAB.
ENDLOOP.
ENDFORM. " CROSS_REFERENCE_DTL_TO_YTD
*&---------------------------------------------------------------------*
*& Form ADD_SELECTED_MATERIALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_SELECTED_MATERIALS.

DATA: SEL_MAT TYPE I.


DESCRIBE TABLE MATNR_SL LINES SEL_MAT.

IF SEL_MAT GT 0.
SELECT * FROM MAKT INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MATNR IN MATNR_SL
AND SPRAS EQ SY-LANGU.

SELECT MATNR WERKS FROM MARD


INTO CORRESPONDING FIELDS OF WA_MARD
WHERE MATNR EQ WA_MARA-MATNR
AND WERKS IN PLANT.
EXIT.
ENDSELECT.

IF SY-SUBRC EQ 0.
LOOP AT YTD_TOT WHERE MATNR EQ WA_MARA-MATNR.
EXIT.
ENDLOOP.
ENDIF.

IF SY-SUBRC NE 0.
SELECT SINGLE
MATNR MTART MATKL BISMT FROM MARA
INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MATNR EQ WA_MARA-MATNR.
PERFORM ADD_YTD_TAB_DUMMY.
ENDIF.
ENDSELECT.
ENDIF.

ENDFORM. " ADD_SELECTED_MATERIALS

*&---------------------------------------------------------------------*
*& Form ADD_YTD_TAB_DUMMY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_YTD_TAB_DUMMY.
* This subroutine adds a dummy record to the ytd_tot internal table
* to ensure that all FG's materials are presented on the report even
* if no MSEG records were selected for a particular material
* in the selected year
WA_MSEG-MATNR = WA_MARA-MATNR.
WA_MSEG-MENGE = 0.
PERFORM UPDATE_TOT TABLES YTD_TOT.
ENDFORM. " ADD_YTD_TAB_DUMMY
*&---------------------------------------------------------------------*
*& Form CROSS_REFERENCE_YTD_TO_DTL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CROSS_REFERENCE_YTD_TO_DTL.
LOOP AT DTL_TAB.
PERFORM ADD_YTD_MATERIALS TABLES YTD_TOT
DTL_TAB-QTYS.
MODIFY DTL_TAB.
ENDLOOP.
ENDFORM. " CROSS_REFERENCE_YTD_TO_DTL
*&---------------------------------------------------------------------*
*& Form CHANGE_MATERIAL_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHANGE_MATERIAL_GROUP.
* For movement type 963/964 which is only used in the summary report
* the qty should be shown against the "material group" of the
* material in the variance order for which they were created.
* The material group of the material on MSEG may be RCL9 for
* instance. The material on the variance order would then be
* ZRCS9_GRADE. The material group RCS9 is then extracted out of
* the name of the material to achieve this with the logic below.
* This is not a perfect link between the two material groups but
* the best that is available to us
*
DATA: UNDER_SCORE_POSITION TYPE I,
MAT_GROUP LIKE AFKO-PLNBEZ,
MAT_GROUP_REST LIKE AFKO-PLNBEZ,
LEN1 TYPE I.

CLEAR WA_AFKO.
SELECT SINGLE PLNBEZ FROM AFKO INTO WA_AFKO-PLNBEZ
WHERE AUFNR EQ WA_MSEG-AUFNR.
IF SY-SUBRC EQ 0.
SEARCH WA_AFKO-PLNBEZ FOR '_'.
IF SY-SUBRC EQ 0.
SPLIT WA_AFKO-PLNBEZ AT '_' INTO MAT_GROUP MAT_GROUP_REST.
LEN1 = STRLEN( MAT_GROUP ).
LEN1 = LEN1 - 1.
CLEAR WA_MARA-MATKL.
MOVE MAT_GROUP+1(LEN1) TO WA_MARA-MATKL.
ELSE.
LOOP AT GROSS_YTD WHERE MATNR EQ WA_MSEG-MATNR.
WA_MARA-MATKL = GROSS_YTD-GROUP.
EXIT.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " CHANGE_MATERIAL_GROUP
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TO_SPREADSHEET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWNLOAD_TO_SPREADSHEET.
* This subroutine generates a dynamic program/subroutine
* which is then called to download the contents of the internal
* tables used to produce the report into a lotus 123 spreadsheet.
* This saves the users from getting rid of all the extra information,
* rows and columns which are generated when the standard SAP Report
* List save to local file option is used. It also enables the report
* to be presented on one page as opposed to the SAP report which
* has a limitation to how many columns that can be included on one page.
APPEND 'REPORT dwnl_tab.' TO SOURCE_TABLE.
APPEND 'data: begin of dwnl_tab occurs 0,' TO SOURCE_TABLE.
APPEND 'Week(2) type c,' TO SOURCE_TABLE.
APPEND 'Date(13) type c,' TO SOURCE_TABLE.
LOOP AT YTD_TOT WHERE S_MATNR NE 'Grand-Total999992'.
MOVE SY-TABIX TO FIELDN2.
CHAR02 = YTD_TOT-MAX_LEN.
CONCATENATE 'COL' FIELDN2 INTO FIELDN.
CONCATENATE FIELDN '(' CHAR02 ') type C,' INTO WORK72.
APPEND WORK72 TO SOURCE_TABLE.
ENDLOOP.
APPEND 'end of dwnl_tab.' TO SOURCE_TABLE.
APPEND 'types: begin of qtys_type,' TO SOURCE_TABLE.
APPEND 'group like mara-matkl,' TO SOURCE_TABLE.
APPEND 'subt(1) type c,' TO SOURCE_TABLE.
APPEND 's_matnr like mseg-matnr,' TO SOURCE_TABLE.
APPEND 'matnr like mseg-matnr,' TO SOURCE_TABLE.
APPEND 'maktx like makt-maktx,' TO SOURCE_TABLE.
APPEND 'qty like mseg-menge,' TO SOURCE_TABLE.
APPEND 'no_moves type i,' TO SOURCE_TABLE.
APPEND 'max_len type i,' TO SOURCE_TABLE.
* begin of m002
APPEND 'beg_pos type i,' TO SOURCE_TABLE.
APPEND 'end_pos type i,' TO SOURCE_TABLE.
* end of m002
APPEND 'printed type i,' TO SOURCE_TABLE.
APPEND 'mode(1) type c,' TO SOURCE_TABLE. "new
APPEND 'qua_type(9) type c,' TO SOURCE_TABLE. "new
APPEND 'end of qtys_type,' TO SOURCE_TABLE.

APPEND 'begin of line_type,' TO SOURCE_TABLE.


APPEND 'weekno(2) type p,' TO SOURCE_TABLE.
APPEND 'date like mkpf-budat,' TO SOURCE_TABLE.
APPEND 'date_qty like mseg-menge,' TO SOURCE_TABLE.
APPEND 'dtl_ovflw,' TO SOURCE_TABLE.
APPEND 'qtys type qtys_type occurs 0,' TO SOURCE_TABLE.
APPEND 'end of line_type,' TO SOURCE_TABLE.
APPEND 'begin of weeks_type,' TO SOURCE_TABLE.
APPEND 'weekno(2) type p,' TO SOURCE_TABLE.
APPEND 'qtys type qtys_type occurs 0,' TO SOURCE_TABLE.
APPEND 'end of weeks_type.' TO SOURCE_TABLE.

APPEND 'data: wa_qtys type qtys_type.' TO SOURCE_TABLE.


APPEND 'data: ytd_tot type qtys_type occurs 0 with header line,'
TO SOURCE_TABLE.
APPEND 'mtd_tot type qtys_type occurs 0 with header line,'
TO SOURCE_TABLE.
APPEND 'dtl_tab type line_type occurs 0 with header line,'
TO SOURCE_TABLE.
APPEND 'week_tot type qtys_type occurs 0 with header line,'
TO SOURCE_TABLE.
APPEND 'weeks_tab type weeks_type occurs 0 with header line,'
TO SOURCE_TABLE.
APPEND 'z_tab type qtys_type occurs 0 with header line.'
TO SOURCE_TABLE.
APPEND 'data: dcmls type i.' TO SOURCE_TABLE.
APPEND 'data: out_file like rlgrap-filename' TO SOURCE_TABLE.
CLEAR: WORK72.
WRITE: PERIOD TO CHAR07.
CONCATENATE 'value ''l:_'Plant_' PLANT-LOW
'_Period_' CHAR07 '.XLS''.' INTO WORK72.
APPEND WORK72 TO SOURCE_TABLE.
APPEND 'FORM dwnl_T TABLES Y_tab STRUCTURE ytd_tot' TO SOURCE_TABLE.
APPEND 'm_tab structure mtd_tot' TO SOURCE_TABLE.
APPEND 'w_tab structure weeks_tab' TO SOURCE_TABLE.
APPEND 'd_tab structure dtl_tab' TO SOURCE_TABLE.
APPEND 'using p_dcmls like dcmls.' TO SOURCE_TABLE.
PERFORM ADD_COLUMNS USING 'Q1'
' '
'''YTD Total'''
'Y_TAB'.
WRITE: PERIOD TO CHAR07.
CONCATENATE '''' CHAR07 INTO CHAR08.
CONCATENATE 'Total' '''' INTO CHAR06.
CONCATENATE CHAR08 CHAR06 INTO CHAR15 SEPARATED BY SPACE.
PERFORM ADD_COLUMNS USING 'Q1'
' '
CHAR15
'M_TAB'.
PERFORM ADD_COLUMNS USING 'H1'
'''Wk'''
''' Date '''
'Y_TAB'.
PERFORM ADD_COLUMNS USING 'H2'
''' '''
''' '''
'Y_TAB'.
APPEND 'loop at d_tab.' TO SOURCE_TABLE.
APPEND 'z_tab[] = d_tab-qtys[].' TO SOURCE_TABLE.
PERFORM ADD_COLUMNS USING 'Q2'
SPACE
SPACE
'z_TAB'.
APPEND 'at end of weekno.' TO SOURCE_TABLE.
APPEND 'loop at w_tab where weekno eq d_tab-weekno.' TO SOURCE_TABLE.
APPEND 'refresh: week_Tot.' TO SOURCE_TABLE.
APPEND 'append lines of w_tab-qtys to week_tot.' TO SOURCE_TABLE.
APPEND 'endloop.' TO SOURCE_TABLE.
PERFORM ADD_COLUMNS USING 'Q3'
SPACE
SPACE
'week_tot'.
APPEND 'endat.' TO SOURCE_TABLE.
APPEND 'endloop.' TO SOURCE_TABLE.
S_TAB[] = SOURCE_TABLE[].
APPEND 'call function ''DOWNLOAD''' TO SOURCE_TABLE.
APPEND 'exporting' TO SOURCE_TABLE.
APPEND 'filename = out_file' TO SOURCE_TABLE.
APPEND 'filetype = ''DAT''' TO SOURCE_TABLE.
APPEND 'tables' TO SOURCE_TABLE.
APPEND 'data_tab = dwnl_tab' TO SOURCE_TABLE.
APPEND 'exceptions' TO SOURCE_TABLE.
APPEND 'invalid_filesize = 1' TO SOURCE_TABLE.
APPEND 'invalid_table_width = 2' TO SOURCE_TABLE.
APPEND 'invalid_type = 3' TO SOURCE_TABLE.
APPEND 'no_batch = 4' TO SOURCE_TABLE.
APPEND 'unknown_error = 5' TO SOURCE_TABLE.
APPEND 'others = 6.' TO SOURCE_TABLE.
APPEND 'ENDFORM.' TO SOURCE_TABLE.
GENERATE SUBROUTINE POOL SOURCE_TABLE NAME PROGRAM_NAME
MESSAGE SYNTAX_CHECK_MESSAGE
LINE LINE_NO.
IF SY-SUBRC NE 0.
WRITE: / 'Syntax error, message'(100), SYNTAX_CHECK_MESSAGE,
/ 'in line'(101), LINE_NO.
EXIT.
ENDIF.
PERFORM DWNL_T IN PROGRAM (PROGRAM_NAME) TABLES YTD_TOT
MTD_TOT
WEEKS_TAB
DTL_TAB
USING DCMLS.
CLEAR: S_TAB, SOURCE_TABLE.
REFRESH: S_TAB, SOURCE_TABLE.
ENDFORM. " DOWNLOAD_TO_SPREADSHEET
*&---------------------------------------------------------------------*
*& Form ADD_COLUMNS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_5550 text *
* -->P_5551 text *
* -->P_5552 text *
*----------------------------------------------------------------------*
FORM ADD_COLUMNS USING TYPE_02 LIKE CHAR02 "H1/2=Heading Q = Quantity
WEEK_02 LIKE CHAR04
DATE_13 LIKE CHAR15
TAB_NAME LIKE CHAR08.
IF TYPE_02 NE 'Q2' AND TYPE_02 NE 'Q3'.
CLEAR WORK72.
IF WEEK_02 EQ SPACE.
APPEND 'dwnl_tab-week = space.' TO SOURCE_TABLE.
ELSE.
CONCATENATE 'dwnl_tab-week =' WEEK_02 '.' INTO WORK72
SEPARATED BY SPACE.
APPEND WORK72 TO SOURCE_TABLE.
ENDIF.
CLEAR WORK72.
CONCATENATE 'dwnl_tab-date =' DATE_13 '.' INTO WORK72
SEPARATED BY SPACE.
APPEND WORK72 TO SOURCE_TABLE.
ELSE.
APPEND 'dwnl_tab-week = d_tab-weekno.' TO SOURCE_TABLE.
IF TYPE_02 EQ 'Q2'.
APPEND 'write d_tab-date to dwnl_tab-date.' TO SOURCE_TABLE.
ELSE.
APPEND 'dwnl_tab-date = ''Total''.' TO SOURCE_TABLE.
ENDIF.
ENDIF.
CLEAR WORK72.
CONCATENATE 'Loop at' TAB_NAME '.' INTO WORK72 SEPARATED BY SPACE.
APPEND WORK72 TO SOURCE_TABLE.
CLEAR: WORK72.
CONCATENATE 'IF' TAB_NAME INTO WORK72 SEPARATED BY SPACE.
CONCATENATE WORK72 '-S_MATNR' INTO WORK72.
CONCATENATE WORK72 'ne ''Grand-Total999992''.' INTO WORK72
SEPARATED BY SPACE.
APPEND WORK72 TO SOURCE_TABLE.
APPEND 'case sy-tabix.' TO SOURCE_TABLE.
LOOP AT YTD_TOT WHERE S_MATNR NE 'Grand-Total999992'.
CLEAR: WORK72.
MOVE SY-TABIX TO FIELDN2.
CONCATENATE 'WHEN' FIELDN2 '.' INTO WORK72 SEPARATED BY SPACE.
APPEND WORK72 TO SOURCE_TABLE.
CLEAR WORK72.
CONCATENATE 'COL' FIELDN2 INTO FIELDN.
CONCATENATE 'dWNL_tab-' FIELDN INTO TAB_FIELD.
CLEAR: WORK72.
CASE TYPE_02.
WHEN 'Q1' OR 'Q2' OR 'Q3'.
CONCATENATE 'write' TAB_NAME INTO WORK72 SEPARATED BY SPACE.
CONCATENATE WORK72 '-qty' INTO WORK72.
CONCATENATE WORK72 'to' TAB_FIELD INTO WORK72
SEPARATED BY SPACE.
WRITE: DCMLS TO CHAR02.
CONCATENATE WORK72 'decimals' CHAR02 '.'
INTO WORK72 SEPARATED BY SPACE.
WHEN 'H1'.
CONCATENATE 'write Y_TAB-MATNR to' TAB_FIELD '.' INTO WORK72
SEPARATED BY SPACE.
WHEN 'H2'.
CONCATENATE 'write Y_TAB-MAKTX to' TAB_FIELD '.' INTO WORK72
SEPARATED BY SPACE.
ENDCASE.
APPEND WORK72 TO SOURCE_TABLE.
ENDLOOP.
APPEND 'endcase.' TO SOURCE_TABLE.
APPEND 'endif.' TO SOURCE_TABLE.
APPEND 'endloop.' TO SOURCE_TABLE.
APPEND 'append dwnl_tab.' TO SOURCE_TABLE.
ENDFORM. " ADD_COLUMNS
*&---------------------------------------------------------------------*
*& Form UPDATE_WEEKS_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_DTL_TAB-WEEKNO text *
* -->P_WEEK_TOT text *
*----------------------------------------------------------------------*
FORM UPDATE_WEEKS_TAB TABLES P_WEEK_TOT STRUCTURE WEEK_TOT
USING P_WEEKNO LIKE DTL_TAB-WEEKNO.
LOOP AT WEEKS_TAB WHERE WEEKNO EQ P_WEEKNO.
LOOP AT P_WEEK_TOT WHERE PRINTED EQ 0.
APPEND P_WEEK_TOT TO WEEKS_TAB-QTYS.
ENDLOOP.
MODIFY WEEKS_TAB.
ENDLOOP.
IF SY-SUBRC NE 0.
WEEKS_TAB-WEEKNO = P_WEEKNO.
LOOP AT P_WEEK_TOT WHERE PRINTED EQ 0.
APPEND P_WEEK_TOT TO WEEKS_TAB-QTYS.
ENDLOOP.
APPEND WEEKS_TAB.
ENDIF.
ENDFORM. " UPDATE_WEEKS_TAB
*&---------------------------------------------------------------------*
*& Form PROCESS_MSEG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESS_MSEG.
* 309/310 should no longer be used for Final product
* Except for Material Group HCL
IF WA_MSEG-BWART EQ '309' AND WA_MARA-MATKL NE 'HCL'
OR WA_MSEG-BWART EQ '310' AND WA_MARA-MATKL NE 'HCL'.
* if wa_mseg-umwrk is initial. "m012
EXIT.
* endif. "m012
ENDIF.

PERFORM CONVERT_UOM_TO_TONNES.

IF WA_MSEG-WERKS IN USA_PLANTS AND WA_MARA-MAKTX CS 'sb '.


CLEAR: AFPO, WA_AFPO.
SELECT SINGLE DAUAT FROM AFPO INTO WA_AFPO-DAUAT
WHERE AUFNR EQ WA_MSEG-AUFNR.
* and posnr eq wa_mseg-aufps.

IF SY-SUBRC = 0.
* Begin of m006
IF ( WA_AFPO-DAUAT IN USA_PRO AND WA_MSEG-BUDAT LT '20000501' )
OR ( WA_AFPO-DAUAT IN USA_PRO_NEW AND WA_MSEG-BUDAT GE '20000501' ).
* if ( wa_afpo-dauat in usa_pro and wa_mkpf-budat lt '20000501' )
* or ( wa_afpo-dauat in usa_pro_new and wa_mkpf-budat ge '20000501' ).
* End of m006
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDIF.

* Update Summary tables


IF SUMMARY EQ 'X' OR BOTH EQ 'X'.
PERFORM ADD_SUMMARY_DATA.
ENDIF.

IF ( WA_MSEG-BWART IN
TR_TYPE2 AND NETT EQ 'X' ) OR
( WA_MSEG-BWART IN
TR_TYPE6 AND NETT EQ 'X' ) OR
( WA_MSEG-BWART IN
TR_TYPE8 AND NETT EQ 'X' ) OR
( WA_MSEG-BWART IN
TR_TYPE3 ) OR
( WA_MSEG-BWART IN
TR_TYPE5 AND WA_MARA-MATKL EQ 'HCL' ).
* ( WA_MSEG-BWART
IN TR_TYPE6 AND WA_MARA-MTART EQ 'HALB'
* AND NETT EQ 'X').
IF WA_MSEG-BUDAT IN YTD_DATES. "m006
* if wa_mkpf-budat in ytd_dates. "m006
PERFORM UPDATE_TOT TABLES YTD_TOT.
ENDIF.
IF WA_MSEG-BUDAT IN PER_DATES. "m006
* if wa_mkpf-budat in per_dates. "m006
PERFORM UPDATE_TOT TABLES MTD_TOT.
ENDIF.
IF WA_MSEG-BUDAT IN WKLY_DATES. "m006
* if wa_mkpf-budat in wkly_dates. "m006
* perform get_week_no using wa_mkpf-budat "m006
PERFORM GET_WEEK_NO USING WA_MSEG-BUDAT "m006
WKLY_DATES-LOW
CHANGING DATE_TAB-WEEKNO.
MOVE-CORRESPONDING WA_MSEG TO DATE_TAB.
* move-corresponding wa_mkpf to date_tab.
date_tab-group = wa_mara-matkl.
PERFORM MATNR_CONVERSION CHANGING DATE_TAB-MATNR.
APPEND DATE_TAB.
PERFORM UPDATE_QBTAB.
ENDIF.
ENDIF.
ENDFORM. " PROCESS_MSEG

*&---------------------------------------------------------------------*
*& Form GET_ZFRTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ZFRTS.

CLEAR: MTD_TOT, YTD_TOT.


YTD_TOT-MATNR = WA_MARA-MATNR.
MTD_TOT-MATNR = WA_MARA-MATNR.
*
IF WA_MSEG-BWART IN TR_TYPE
AND WA_MSEG-MATNR IN MATERIAL
AND WA_MSEG-WERKS IN PLANT
AND WA_MSEG-AUFNR NE SPACE
* OR WA_MSEG-MBLNR EQ WA_MKPF-MBLNR "m006
* AND WA_MSEG-MJAHR EQ WA_MKPF-MJAHR "m006
* and wa_mseg-bwart in tr_type2 "m006
OR WA_MSEG-BWART IN TR_TYPE2 "m006
AND WA_MSEG-MATNR IN MATERIAL
AND WA_MSEG-UMWRK IN PLANT
* OR WA_MSEG-MBLNR EQ WA_MKPF-MBLNR "m006
* AND WA_MSEG-MJAHR EQ WA_MKPF-MJAHR "m006
* and wa_mseg-bwart in tr_type2 "m006
OR WA_MSEG-BWART IN TR_TYPE2 "m006
AND WA_MSEG-MATNR IN MATERIAL
AND WA_MSEG-WERKS IN PLANT
OR ( NETT EQ 'X' OR BOTH EQ 'X' )
* and wa_mseg-mblnr eq wa_mkpf-mblnr "m006
* and wa_mseg-mjahr eq wa_mkpf-mjahr "m006
AND WA_MSEG-BWART IN TR_TYPE6
AND AUFK-AUART IN ADJUSTMENT_ORDER_TYPES
AND WA_MSEG-MATNR IN MATERIAL
AND WA_MSEG-WERKS IN PLANT
* or wa_mseg-mblnr eq wa_mkpf-mblnr "m006
* and wa_mseg-mjahr eq wa_mkpf-mjahr "m006
* and wa_mseg-bwart in tr_type_wip_consumed "m006
OR WA_MSEG-BWART IN TR_TYPE_WIP_CONSUMED "m006
AND WA_MSEG-WERKS IN PLANT
AND WA_MSEG-AUFNR NE SPACE.
IF WA_MSEG-MBLNR IN EXCL_DOCS.
EXIT.
ENDIF.
IF WA_MSEG-BWART IN TR_TYPE9.
IF WA_MSEG-WERKS EQ '5700'
AND WA_MSEG-MATNR = '000000000000010413'.
MOVE ' ' TO CHAR18.
ELSE.
EXIT.
ENDIF.
ENDIF.

CLEAR WA_MARA.
SELECT SINGLE MATNR MTART MATKL BISMT MEINS KZWSM FROM MARA
INTO (WA_MARA-MATNR, WA_MARA-MTART, WA_MARA-MATKL, WA_MARA-BISMT,
WA_MARA-MEINS, WA_MARA-KZWSM)
WHERE MATNR EQ WA_MSEG-MATNR.

* If order type is an adjustment type - Chg mtrl group based on order


IF AUFK-AUART IN ADJUSTMENT_ORDER_TYPES.
PERFORM CHANGE_MATERIAL_GROUP_ADJ_ORD.
ENDIF.

SELECT SINGLE MAKTX FROM MAKT INTO WA_MARA-MAKTX


WHERE MATNR EQ WA_MSEG-MATNR
AND SPRAS EQ SY-LANGU.

PERFORM PROCESS_MSEG.
ENDIF.

ENDFORM. " GET_ZFRTS


*&---------------------------------------------------------------------*
*& Form GET_HALBS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
FORM GET_HALBS.
CHECK PLANT-LOW IN USA_PLANTS.

*
IF WA_MSEG-BWART IN TR_TYPE6
AND WA_MSEG-MATNR IN HALB_MATERIALS
AND WA_MSEG-WERKS IN PLANT
AND WA_MSEG-AUFNR NE SPACE
OR WA_MSEG-BWART IN TR_TYPE6
AND WA_MSEG-MATNR IN HAWA_MATERIALS
AND WA_MSEG-WERKS IN PLANT.
* and aufk-auart in adjustment_order_types. "M013
IF WA_MSEG-MBLNR IN EXCL_DOCS.
EXIT.
ENDIF.

CLEAR WA_MARA.
SELECT SINGLE MATNR MTART MATKL BISMT FROM MARA
INTO (WA_MARA-MATNR, WA_MARA-MTART, WA_MARA-MATKL, WA_MARA-BISMT)
WHERE MATNR EQ WA_MSEG-MATNR.

SELECT SINGLE MAKTX FROM MAKT INTO WA_MARA-MAKTX


WHERE MATNR EQ WA_MSEG-MATNR
AND SPRAS EQ SY-LANGU.

CLEAR: MTD_TOT, YTD_TOT.


YTD_TOT-MATNR = WA_MARA-MATNR.
MTD_TOT-MATNR = WA_MARA-MATNR.

* Material group will be switched for 963/964 transactions used


* in summary report but re-instated again for the next transaction
OLD_GROUP = WA_MARA-MATKL.
IF WA_MSEG-BWART IN TR_TYPE6.
* If order type is an adjustment type - Chg mtrl group based on order
IF AUFK-AUART IN ADJUSTMENT_ORDER_TYPES.
PERFORM CHANGE_MATERIAL_GROUP_ADJ_ORD.
ELSEIF WA_MARA-BISMT EQ SPACE.
PERFORM CHANGE_MATERIAL_GROUP.
ELSE.
WA_MARA-MATKL = WA_MARA-BISMT.
ENDIF.
ENDIF.

PERFORM PROCESS_MSEG.
* Material group reset here for next transaction
WA_MARA-MATKL = OLD_GROUP.
ENDIF.

ENDFORM. " GET_HALBS


*&---------------------------------------------------------------------*
*& Form GET_LINE_SELECTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_LINE_SELECTION.
CASE SY-LSIND.
WHEN 1.
PERFORM MATERIAL_TRANS_POPUP.
WHEN 2.
IF BATCH_LIST EQ 'Y'.
PERFORM DISPLAY_QUALITY_RESULTS.
ELSE.
PERFORM DISPLAY_MATERIAL_DOCUMENT.
ENDIF.
ENDCASE.
ENDFORM. " GET_LINE_SELECTION
*&---------------------------------------------------------------------*
*& Form HEADINGS_LINE_SELECTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM HEADINGS_LINE_SELECTION.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
IF YTD_TOTAL EQ 'X'.
WRITE: /1 'YTD Total'(061),
86 SPACE.
ELSEIF MTD_TOTAL EQ 'X'.
WRITE: /1 'MTD Total'(062),
86 SPACE.
ENDIF.
IF YTD_TOT-SUBT NE 'X'.
SELECT SINGLE * FROM MAKT WHERE MATNR EQ DATE_TAB-MATNR
AND SPRAS EQ SY-LANGU.
WRITE DATE_TAB-MATNR TO CHAR08.
WRITE: /1 CHAR08,
MAKT-MAKTX,
86 SPACE.
ELSE.
WRITE: /1 YTD_TOT-MATNR,
YTD_TOT-MAKTX,
86 SPACE.
ENDIF.
IF YTD_TOTAL EQ 'X'.
WRITE: /1 SEL_DATES-LOW,
'-',
SEL_DATES-HIGH.
ELSEIF MTD_TOTAL EQ 'X'.
WRITE: /1 PER_DATES-LOW,
'-',
PER_DATES-HIGH.
ELSEIF WEEK_TOTAL EQ 'X'.
WRITE: /1 'Week:'(060),
DTL_TAB-WEEKNO.
PERFORM GET_FROM_AND_TO_DATES USING WKLY_DATES-LOW
DTL_TAB-WEEKNO
CHANGING FROM_DATE
TO_DATE.
WRITE: FROM_DATE DD/MM/YYYY,
'-',
TO_DATE DD/MM/YYYY.
ELSE.
WRITE: /1 'Date:'(050),
S_DATE DD/MM/YYYY.
ENDIF.
WRITE: 86 SPACE.
IF SY-UCOMM NE 'QUAL'.
PERFORM WRITE_ULINE_POPUP_1.
ENDIF.
* begin of m002
DATA: UOM_OUT(6) TYPE C.
IF PLANT IS INITIAL. "m003
UOM_OUT = 'Tonnes'. "m003
ELSE. "m003
IF CNVLBS = 'X'
AND DATE_TAB-WERKS = '4305'.
UOM_OUT = 'LBs'.
ELSE.
UOM_OUT = 'Tonnes'.
ENDIF.
ENDIF. "m003
* end of m002
IF SY-UCOMM EQ 'BTCH'.
WRITE: /2 'Batch'(065),
13 'Gross/Net'(066),
23 'Date'(059),
34 'Material'(058),
43 'Quality'(067),
51 UOM_OUT, "m002
* 51 'Tonnes'(052), "m002
69 'Total '(053).
PERFORM HEADING_COLUMNS_LINE_SELECT_2.
ELSEIF SY-UCOMM NE 'QUAL'.
WRITE: /2 'Document'(054),
13 'Year'(056),
18 'Line'(055),
23 'Date'(059),
34 'Material'(058),
43 'Tr.Type'(051),
51 UOM_OUT, "m002
* 51 'Tonnes'(052), "m002
69 'Total '(053).
PERFORM HEADING_COLUMNS_LINE_SELECT_1.
ELSEIF SY-UCOMM EQ 'QUAL'.
* IF GROSS EQ 'X'.
IF PLANT IS INITIAL. "m003
WRITE: /1 'Gross Tonnes Quality Summary'(077), "m003
86 ' '. "m003
ELSE. "m003
IF CNVLBS = 'X' "m002
AND DATE_TAB-WERKS = '4305'.
WRITE: /1 'Gross LBs Quality Summary', "m002
86 ' '. "m002
ELSE. "m002
WRITE: /1 'Gross Tonnes Quality Summary'(077),
86 ' '.
ENDIF. "m002
ENDIF. "m003

* ELSE.
* WRITE: /1 'Net Tonnes Quality Summary'(078),
* 86 ' '.
* ENDIF.
ENDIF.
PERFORM WRITE_ULINE_POPUP_1.
ENDFORM. " HEADINGS_LINE_SELECTION
*&---------------------------------------------------------------------*
*& Form HEADING_COLUMNS_LINE_SELECT_1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM HEADING_COLUMNS_LINE_SELECT_1.
WRITE: 1 SY-VLINE,
12 SY-VLINE,
17 SY-VLINE,
22 SY-VLINE,
33 SY-VLINE,
42 SY-VLINE,
50 SY-VLINE,
68 SY-VLINE,
86 SY-VLINE.
ENDFORM. " HEADING_COLUMNS_LINE_SELECT_1
*&---------------------------------------------------------------------*
*& Form WRITE_ULINE_POPUP_1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_ULINE_POPUP_1.
WRITE: /1 SY-ULINE(86).
ENDFORM. " WRITE_ULINE_POPUP_1
*&---------------------------------------------------------------------*
*& Form MATERIAL_TRANS_POPUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MATERIAL_TRANS_POPUP.
REFRESH: QTAB, DATE_R.
IF SY-UCOMM EQ 'BTCH'.
BATCH_LIST = 'Y'.
ELSE.
CLEAR BATCH_LIST.
ENDIF.
GET CURSOR FIELD FIELDNAME.
CLEAR: TOTAL.
* S_DATE = DTL_TAB-DATE - 1.
S_DATE = DTL_TAB-DATE.
GET CURSOR LINE ROW OFFSET COLUMN.

LOOP AT YTD_TOT WHERE PRINTED EQ CURR_PRINT


AND BEG_POS LE COLUMN
AND END_POS GE COLUMN.
NEW-PAGE.
IF SY-UCOMM NE 'BTCH'.
SET PF-STATUS 'DETAIL'.
SET TITLEBAR 'DTL'.
ELSE.
SET PF-STATUS 'BTCH'.
SET TITLEBAR 'BTC'.
ENDIF.
WINDOW STARTING AT 05 6 ENDING AT 90 20.
IF YTD_TOTAL EQ 'X'.
* write: /1 'YTD Details currently not available'(063).
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN YTD_DATES
AND TYPE IN TYPE_R.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN YTD_DATES
AND TYPE IN TYPE_R.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ELSEIF MTD_TOTAL EQ 'X'.
IF YTD_TOT-SUBT EQ 'X'.
IF YTD_TOT-S_MATNR CS 'Grand-Total'.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT IN PER_DATES.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND TYPE IN TYPE_R.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND TYPE IN TYPE_R.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT IN PER_DATES
AND GROUP EQ YTD_TOT-GROUP.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ ZQ08SDTL-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
PERFORM COLLECT_QTAB.
ENDIF.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ QBTAB-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDIF.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT IN PER_DATES
AND MATNR EQ YTD_TOT-MATNR.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND MATNR EQ YTD_TOT-MATNR
AND TYPE IN TYPE_R.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN PER_DATES
AND MATNR EQ YTD_TOT-MATNR
AND TYPE IN TYPE_R.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ELSEIF WEEK_TOTAL EQ 'X'.
IF YTD_TOT-SUBT EQ 'X'.
IF YTD_TOT-S_MATNR CS 'Grand-Total'.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE WEEKNO EQ DTL_TAB-WEEKNO.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
PERFORM GET_WEEK_DATES.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE WEEKNO EQ DTL_TAB-WEEKNO
AND GROUP EQ YTD_TOT-GROUP.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
PERFORM GET_WEEK_DATES.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ ZQ08SDTL-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
PERFORM COLLECT_QTAB.
ENDIF.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ QBTAB-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDIF.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE WEEKNO EQ DTL_TAB-WEEKNO
AND MATNR EQ YTD_TOT-MATNR.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
PERFORM GET_WEEK_DATES.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R
AND MATNR EQ YTD_TOT-MATNR.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT IN DATE_R
AND TYPE IN TYPE_R
AND MATNR EQ YTD_TOT-MATNR.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ELSE.
IF YTD_TOT-SUBT EQ 'X'.
IF YTD_TOT-S_MATNR CS 'Grand-Total'.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT EQ S_DATE.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT EQ S_DATE
AND GROUP EQ YTD_TOT-GROUP.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ ZQ08SDTL-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
PERFORM COLLECT_QTAB.
ENDIF.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R.
SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
WHERE MATNR EQ QBTAB-MATNR.
IF SY-SUBRC EQ 0 AND MARA-MATKL EQ YTD_TOT-MAKTX.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDIF.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ELSE.
IF SY-UCOMM NE 'BTCH'.
LOOP AT DATE_TAB WHERE BUDAT EQ S_DATE
AND MATNR EQ YTD_TOT-MATNR.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ELSE.
SELECT * FROM ZQ08SDTL WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R
AND MATNR EQ YTD_TOT-MATNR.
PERFORM COLLECT_QTAB.
ENDSELECT.
* Add todays transactions
LOOP AT QBTAB WHERE WERKS IN PLANT
AND BUDAT EQ S_DATE
AND TYPE IN TYPE_R
AND MATNR EQ YTD_TOT-MATNR.
MOVE-CORRESPONDING QBTAB TO ZQ08SDTL.
PERFORM COLLECT_QTAB.
ENDLOOP.
PERFORM PRINT_BATCH_SUMMARY.
ENDIF.
ENDIF.
ENDIF.
IF SY-SUBRC EQ 0 AND SY-LINNO NE 65.
PERFORM WRITE_ULINE_POPUP_1.
ENDIF.
ENDLOOP.
* CLEAR: WEEK_TOTAL, MTD_TOTAL, YTD_TOTAL.
ENDFORM. " MATERIAL_TRANS_POPUP

*&---------------------------------------------------------------------*
*& Form DISPLAY_MATERIAL_DOCUMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_MATERIAL_DOCUMENT.
SET PARAMETER ID 'MBN' FIELD DATE_TAB-MBLNR.
SET PARAMETER ID 'MJA' FIELD DATE_TAB-MJAHR.
CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
ENDFORM. " DISPLAY_MATERIAL_DOCUMENT
*&---------------------------------------------------------------------*
*& Form PRINT_DOCUMENT_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_DOCUMENT_DETAILS.
PERFORM STRIPING.

IF DATE_TAB-SHKZG EQ 'H'.
QUANTITY = DATE_TAB-MENGE * -1.
ELSE.
QUANTITY = DATE_TAB-MENGE.
ENDIF.
ADD QUANTITY TO TOTAL.
WRITE: DATE_TAB-MATNR TO CHAR08.
WRITE: /2 DATE_TAB-MBLNR,
13 DATE_TAB-MJAHR,
18 DATE_TAB-ZEILE,
23 DATE_TAB-BUDAT DD/MM/YYYY,
34 CHAR08,
43 DATE_TAB-BWART,
51 QUANTITY.
FORMAT COLOR COL_TOTAL.
WRITE: 68 TOTAL.
HIDE: DATE_TAB-MBLNR,
DATE_TAB-MJAHR,
DATE_TAB-ZEILE.
PERFORM HEADING_COLUMNS_LINE_SELECT_1.
IF SY-LINNO EQ 64.
PERFORM WRITE_ULINE_POPUP_1.
ENDIF.
ENDFORM. " PRINT_DOCUMENT_DETAILS
*&---------------------------------------------------------------------*
*& Form GET_FROM_AND_TO_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WKLY_DATES-LOW text *
* -->P_DTL_TAB-WEEKNO text *
* <--P_FROM_DATE text *
* <--P_TO_DATE text *
*----------------------------------------------------------------------*
FORM GET_FROM_AND_TO_DATES USING P_DATE LIKE FROM_DATE
P_WEEKNO LIKE DTL_TAB-WEEKNO
CHANGING P_FROM_DATE LIKE FROM_DATE
P_TO_DATE LIKE TO_DATE.
DATA: DAYS TYPE I,
WEEKS TYPE I.
IF P_WEEKNO EQ 1.
P_FROM_DATE = P_DATE.
ELSE.
WEEKS = P_WEEKNO - 1.
DAYS = WEEKS * 7.
P_FROM_DATE = P_DATE + DAYS.
ENDIF.
P_TO_DATE = P_FROM_DATE + 6.
ENDFORM. " GET_FROM_AND_TO_DATES
*&---------------------------------------------------------------------*
*& Form GET_MATNRS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MATNRS.
REFRESH: S_MATNR, WA_MARA.
SELECT MATNR MTART MATKL BISMT FROM MARA
INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MTART IN MAT_TYPE.
SELECT MAKTX FROM MAKT INTO WA_MARA-MAKTX
WHERE MATNR EQ WA_MARA-MATNR
AND SPRAS EQ SY-LANGU.
APPEND WA_MARA.
ENDSELECT.
ENDSELECT.
SORT WA_MARA BY MATNR.
S_MATNR-SIGN ='I'.
LOOP AT WA_MARA.
CH_MATNR = WA_MARA-MATNR+10(8).
C_MATNR = CH_MATNR.
IF S_MATNR-LOW IS INITIAL.
S_MATNR-LOW = WA_MARA-MATNR.
P_MATNR = C_MATNR.
ELSE.
P_MATNR = P_MATNR + 1.
ENDIF.
IF P_MATNR EQ C_MATNR.
P_MATNR = C_MATNR.
CONTINUE.
ELSE.
P_MATNR = P_MATNR - 1.
PERFORM ADD_S_MATNR.
ENDIF.
AT LAST.
PERFORM ADD_S_MATNR.
ENDAT.
ENDLOOP.
ENDFORM. " GET_ZFRT_MATNRS
*&---------------------------------------------------------------------*
*& Form ADD_S_MATNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_S_MATNR.
CH_MATNR = P_MATNR.
MOVE CH_MATNR TO S_MATNR-HIGH+10(8).
TRANSLATE S_MATNR-HIGH USING ' 0'.
IF S_MATNR-HIGH EQ S_MATNR-LOW.
S_MATNR-OPTION = 'EQ'.
CLEAR S_MATNR-HIGH.
ELSE.
S_MATNR-OPTION = 'BT'.
ENDIF.
APPEND S_MATNR.
S_MATNR-LOW = WA_MARA-MATNR.
CH_MATNR = WA_MARA-MATNR+10(8).
P_MATNR = CH_MATNR.
ENDFORM. " ADD_S_MATNR
*&---------------------------------------------------------------------*
*& Form GET_WEEK_NO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_MKPF-BUDAT text *
* -->P_WKLY_DATES-LOW text *
* <--P_DATE_TAB-WEEKNO text *
*----------------------------------------------------------------------*
FORM GET_WEEK_NO USING P_BUDAT LIKE MKPF-BUDAT
P_START_DATE LIKE MKPF-BUDAT
CHANGING P_WEEKNO LIKE DATE_TAB-WEEKNO.
CLEAR P_WEEKNO.
DAYS = P_BUDAT - P_START_DATE + 1.
P_WEEKNO = DAYS DIV 7.
REST = DAYS MOD 7.
IF REST NE 0.
ADD 1 TO P_WEEKNO.
ENDIF.
ENDFORM. " GET_WEEK_NO
*&---------------------------------------------------------------------*
*& Form MAP_FIELDS_FOR_UPDATE_TOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAP_FIELDS_FOR_UPDATE_TOT.
WA_MSEG-MATNR = DATE_TAB-MATNR.
wa_mara-matkl = date_tab-group.
CLEAR WA_MARA-MAKTX.
SELECT SINGLE MAKTX INTO WA_MARA-MAKTX FROM MAKT
WHERE MATNR EQ DATE_TAB-MATNR
AND SPRAS EQ SY-LANGU.
WA_MSEG-SHKZG = DATE_TAB-SHKZG.
WA_MSEG-MENGE = DATE_TAB-MENGE.
WA_MSEG-BWART = DATE_TAB-BWART.
WA_MSEG-BUDAT = DATE_TAB-BUDAT. "m006
* wa_mkpf-budat = date_tab-budat. "m006
ENDFORM. " MAP_FIELDS_FOR_UPDATE_TOT
*&---------------------------------------------------------------------*
*& Form GET_SOURCE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SOURCE_DATA.

* Begin of m006:
* Retrieve the material documents for any record that was entered on or
* after the last run date of the batch update program.
* SELECT MBLNR MJAHR BUDAT TCODE TCODE2 CPUDT CPUTM
* INTO TABLE WA_MKPF FROM MKPF WHERE CPUDT >= CPU_DATE.
*
** Retrieve the document segment information for all materials.
* SELECT MBLNR MJAHR ZEILE BWART MATNR WERKS CHARG SHKZG MENGE
* MEINS AUFNR UMWRK AUFPS INTO TABLE WA_MSEG FROM MSEG
* FOR ALL ENTRIES IN WA_MKPF
* WHERE MBLNR = WA_MKPF-MBLNR
* AND MJAHR = WA_MKPF-MJAHR.
SELECT MKPF~MBLNR MKPF~MJAHR MKPF~VGART MKPF~BUDAT MKPF~CPUDT
MKPF~CPUTM MSEG~ZEILE MSEG~BWART MSEG~MATNR MSEG~WERKS
MSEG~CHARG MSEG~SHKZG MSEG~MENGE MSEG~MEINS MSEG~AUFNR
MSEG~UMWRK MSEG~AUFPS INTO TABLE WA_MSEG FROM
( MKPF INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND
MKPF~MJAHR = MSEG~MJAHR )
WHERE MKPF~CPUDT >= CPU_DATE
AND MKPF~VGART IN ('WA', 'WR', 'WF')
AND MSEG~WERKS IN PLANT
AND MSEG~BWART IN TR_TYPE10
OR MKPF~CPUDT >= CPU_DATE
AND MKPF~VGART IN ('WA', 'WR', 'WF')
AND MSEG~UMWRK IN PLANT
AND MSEG~BWART IN TR_TYPE10.
* End of m006

CHECK SY-SUBRC = 0.
* Process the confirmations. For records equal the date extracted from
* the run table, the time must be greater than last run time. For all
* dates greater, all times are processed.
* loop at wa_mkpf. "m006
* Retrieve the document segment information.
* loop at wa_mseg where mblnr = wa_mkpf-mblnr "m006
* and mjahr = wa_mkpf-mjahr. "m006
LOOP AT WA_MSEG.

* Begin of m009: If only material entered check box is selected process


* only those materials.
IF NOT MAT_ONLY IS INITIAL.
IF NOT WA_MSEG-MATNR IN MATNR_SL.
CONTINUE.
ENDIF.
ENDIF.
* End of m009

IF WA_MSEG-CPUDT = CPU_DATE. "m006


IF WA_MSEG-CPUTM > CPU_TIME. "m006
* if wa_mkpf-cpudt = cpu_date. "m006
* if wa_mkpf-cputm > cpu_time. "m006
* Check order type
PERFORM CHECK_ORDER_TYPE.
PERFORM GET_ZFRTS.
IF NETT EQ 'X' OR BOTH EQ 'X'.
PERFORM GET_HALBS.
ENDIF.
ENDIF.
ELSE.
PERFORM CHECK_ORDER_TYPE.
PERFORM GET_ZFRTS.
IF NETT EQ 'X' OR BOTH EQ 'X'.
PERFORM GET_HALBS.
ENDIF.
ENDIF.
ENDLOOP.
* endloop. "m006

ENDFORM. " GET_SOURCE_DATA

*&---------------------------------------------------------------------*
*& Form GET_SUMMARY_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SUMMARY_TABLE.

REFRESH ZP07_ITAB.

IF MAT_ONLY IS INITIAL. "m009


SELECT CPUDT WERKS MATNR BUDAT BWART MICRO MATKL MENGE MEINS
TYPE DTEUPD INTO TABLE ZP07_ITAB FROM ZP07SHDR
WHERE WERKS IN PLANT
AND BUDAT IN SEL_DATES
AND TYPE IN ALL_TYPES.
ELSE.
* Begin of m009
SELECT CPUDT WERKS MATNR BUDAT BWART MICRO MATKL MENGE MEINS
TYPE DTEUPD INTO TABLE ZP07_ITAB FROM ZP07SHDR
WHERE WERKS IN PLANT
AND MATNR IN MATNR_SL
AND BUDAT IN SEL_DATES
AND TYPE IN ALL_TYPES.
ENDIF.
* End of m009

SORT ZP07_ITAB DESCENDING BY BUDAT MATNR.

LOOP AT ZP07_ITAB.

* begin of m002
IF ( ZP07_ITAB-WERKS = '4305' AND CNVLBS <> 'X' )
OR ( ZP07_ITAB-WERKS = '4305' AND PLANT IS INITIAL ). "m003
CALL FUNCTION 'Z_CONVERT_QUANTITY_UOM'
EXPORTING
QUANTITY = ZP07_ITAB-MENGE
UOM_FROM = ZP07_ITAB-MEINS
UOM_TO = 'TO'
IMPORTING
QUANTITY_CONVERTED = ZP07_ITAB-MENGE
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
OVERFLOW = 2
TYPE_INVALID = 3
UNITS_MISSING = 4
UNIT_IN_NOT_FOUND = 5
UNIT_OUT_NOT_FOUND = 6
OTHERS = 7.
ENDIF.
* end of m002

DATE_TAB-BUDAT = ZP07_ITAB-BUDAT.
DATE_TAB-MATNR = ZP07_ITAB-MATNR.
DATE_TAB-WERKS = ZP07_ITAB-WERKS.
DATE_TAB-BWART = ZP07_ITAB-BWART.
DATE_TAB-MENGE = ZP07_ITAB-MENGE.
DATE_TAB-GROUP = ZP07_ITAB-MATKL.

IF DATE_TAB-MENGE LT 0.
DATE_TAB-SHKZG = 'H'.
DATE_TAB-MENGE = DATE_TAB-MENGE * -1.
ELSE.
CLEAR DATE_TAB-SHKZG.
ENDIF.

PERFORM MAP_FIELDS_FOR_UPDATE_TOT.

* Update Summary tables


IF SUMMARY EQ 'X' OR BOTH EQ 'X'.
PERFORM ADD_SUMMARY_DATA.
ENDIF.

IF ( WA_MSEG-BWART IN TR_TYPE2 AND NETT EQ 'X' ) OR


( WA_MSEG-BWART IN TR_TYPE6 AND NETT EQ 'X' ) OR
( WA_MSEG-BWART IN TR_TYPE8 AND NETT EQ 'X' ) OR
( WA_MSEG-BWART IN TR_TYPE3 ) OR
( WA_MSEG-BWART IN TR_TYPE5 AND WA_MARA-MATKL EQ 'HCL' ).
IF WA_MSEG-BUDAT IN YTD_DATES. "m006
* if wa_mkpf-budat in ytd_dates. "m006
PERFORM UPDATE_TOT TABLES YTD_TOT.
ENDIF.
IF WA_MSEG-BUDAT IN PER_DATES. "m006
* if wa_mkpf-budat in per_dates. "m006
PERFORM UPDATE_TOT TABLES MTD_TOT.
ENDIF.
IF WA_MSEG-BUDAT IN WKLY_DATES. "m006
* if wa_mkpf-budat in wkly_dates. "m006
PERFORM GET_WEEK_NO USING DATE_TAB-BUDAT
WKLY_DATES-LOW
CHANGING DATE_TAB-WEEKNO.
APPEND DATE_TAB.
ENDIF.
ENDIF.
ENDLOOP.

ENDFORM. " GET_SUMMARY_TABLE


*&---------------------------------------------------------------------*
*& Form ADD_SUBT_WIP_CONSUMED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_SUBT_WIP_CONSUMED.
loop at wip_consumed_mtd.
wip_consumed_mtd-subt = 'X'.
modify wip_consumed_mtd.
ENDLOOP.
LOOP AT WIP_CONSUMED_YTD.
WIP_CONSUMED_YTD-SUBT = 'X'.
MODIFY WIP_CONSUMED_YTD.
ENDLOOP.
ENDFORM. " ADD_SUBT_WIP_CONSUMED
*&---------------------------------------------------------------------*
*& Form GET_SRCE_DOCUMENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SRCE_DOCUMENTS.
REFRESH DATE_TAB.
PERFORM GET_SOURCE_DATA.
LOOP AT DATE_TAB.
PERFORM PRINT_DOCUMENT_DETAILS.
ENDLOOP.
ENDFORM. " GET_SRCE_DOCUMENTS
*&---------------------------------------------------------------------*
*& Form GET_WIP_CONSUMED_SRCE_DTA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_WIP_CONSUMED_SRCE_DTA.

SORT WA_MSEG BY MBLNR MJAHR. "m006


* sort wa_mkpf by mblnr mjahr. "m006

LOOP AT WA_MSEG WHERE MJAHR = P_YEAR


AND BWART IN TR_TYPE_WIP_CONSUMED
AND WERKS IN PLANT
AND AUFNR NE SPACE.

* read table wa_mkpf with key mblnr = wa_mseg-mblnr


* mjahr = wa_mseg-mjahr.
* check sy-subrc = 0.
* SELECT MATNR SHKZG BWART MBLNR MJAHR WERKS AUFNR AUFPS
* MENGE MEINS CHARG INTO TABLE WA_MSEG FROM MSEG
* WHERE MJAHR EQ P_YEAR
* AND BWART IN TR_TYPE_WIP_CONSUMED
* AND WERKS IN PLANT
* AND AUFNR NE SPACE.

PERFORM CONVERT_UOM_TO_TONNES.

IF WA_MSEG-MBLNR IN EXCL_DOCS.
CONTINUE.
ENDIF.

IF WA_MSEG-BUDAT IN PER_DATES. "m006


* if wa_mkpf-budat in per_dates. "m006
PERFORM GET_MATERIAL_DETAILS.
perform update_tot tables wip_consumed_mtd.
ENDIF.

IF WA_MSEG-BUDAT IN YTD_DATES. "m006


* if wa_mkpf-budat in ytd_dates. "m006
PERFORM GET_MATERIAL_DETAILS.
PERFORM UPDATE_TOT TABLES WIP_CONSUMED_YTD.
ENDIF.

ENDLOOP.

ENDFORM. " GET_WIP_CONSUMED_SRCE_DTA

*&---------------------------------------------------------------------*
*& Form GET_WIP_CONSUMED_SMRY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM GET_WIP_CONSUMED_SMRY.
* CHECK EXCL_N EQ 'X'.
*
* SELECT MBLNR MJAHR BUDAT FROM MKPF
* INTO CORRESPONDING FIELDS OF WA_MKPF
* WHERE CPUDT IN TODAY_DATES
* AND BUDAT IN YTD_DATES.
*
* SELECT MATNR SHKZG BWART MBLNR MJAHR WERKS AUFNR AUFPS
* MENGE MEINS CHARG
* FROM MSEG INTO CORRESPONDING FIELDS OF WA_MSEG
* WHERE MBLNR EQ WA_MKPF-MBLNR
* AND MJAHR EQ WA_MKPF-MJAHR
* AND BWART IN TR_TYPE_WIP_CONSUMED
* AND WERKS IN PLANT
* AND AUFNR NE SPACE.
* IF WA_MSEG-MBLNR IN EXCL_DOCS.
* CONTINUE.
* ENDIF.
* PERFORM CONVERT_UOM_TO_TONNES.
* if wa_mkpf-budat in per_dates.
* PERFORM GET_MATERIAL_DETAILS.
* perform update_tot tables wip_consumed_mtd.
* ENDIF.
* IF WA_MKPF-BUDAT IN YTD_DATES.
* PERFORM GET_MATERIAL_DETAILS.
* PERFORM UPDATE_TOT TABLES WIP_CONSUMED_YTD.
* ENDIF.
* ENDSELECT.
* ENDSELECT.
*ENDFORM. " GET_WIP_CONSUMED_SMRY
*&---------------------------------------------------------------------*
*& Form DEFAULT_TEXT_EXCL_YN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DEFAULT_TEXT_EXCL_YN.

DATA: P_PLANT LIKE MSEG-WERKS,


P_DATE(10).

LOOP AT PLANT.
EXIT.
ENDLOOP.

* This report can only be run for only one plant at a time. If the user
* does not enter a plant, retrieve the plant parameter value stored on
* his system profile.
IF PLANT-LOW EQ SPACE.
GET PARAMETER ID 'WRK' FIELD P_PLANT.
ELSE.
P_PLANT = PLANT-LOW.
ENDIF.

* Get the time from the default plant.


SELECT SINGLE * FROM ZP07PDT WHERE WERKS = '5300'.
IF SY-SUBRC EQ 0.
WRITE ZP07PDT-LDATE TO P_DATE.
MOVE: ZP07PDT-LDATE TO CPU_DATE,
ZP07PDT-LTIME TO CPU_TIME.
ELSE.
CLEAR P_DATE.
ENDIF.

CONCATENATE 'For Summary table - Exclude transactions after'(024)


P_DATE INTO EXCL_YN SEPARATED BY SPACE.
ENDFORM. " DEFAULT_TEXT_EXCL_YN
*&---------------------------------------------------------------------*
*& Form PRINT_BATCH_SUMMARY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_BATCH_SUMMARY.

SORT QTAB BY BUDAT.


LOOP AT QTAB.
PERFORM STRIPING.
ADD QTAB-MENGE TO TOTAL.
WRITE: QTAB-MATNR TO CHAR08.
DATE_TAB-MATNR = QTAB-MATNR.
WRITE: /2 QTAB-CHARG,
13 ' ',
23 QTAB-BUDAT DD/MM/YYYY,
34 CHAR08,
43 QTAB-QUALITY,
51 QTAB-MENGE.
CASE QTAB-TYPE.
WHEN 'GROSS'.
WRITE: 13 'Gross'(071).
WHEN 'NET'.
WRITE: 13 'Net '(072).
WHEN OTHERS.
WRITE: QTAB-TYPE.
ENDCASE.
CASE QTAB-QUALITY.
WHEN 'FAIL'.
WRITE: 43 'Fail'(068) COLOR COL_NEGATIVE INTENSIFIED ON.
WHEN 'PASS'.
WRITE: 43 'Pass'(069) COLOR COL_KEY INTENSIFIED ON.
WHEN 'FPP'.
WRITE: 43 'FPP '(070) COLOR COL_POSITIVE INTENSIFIED ON.
ENDCASE.
FORMAT COLOR COL_TOTAL.
WRITE: 68 TOTAL.
HIDE: QTAB-MATNR,
QTAB-WERKS,
QTAB-CHARG.
PERFORM HEADING_COLUMNS_LINE_SELECT_2.
IF SY-LINNO EQ 64.
PERFORM WRITE_ULINE_POPUP_1.
ENDIF.
ENDLOOP.
ENDFORM. " PRINT_BATCH_SUMMARY

*&---------------------------------------------------------------------*
*& Form HEADING_COLUMNS_LINE_SELECT_2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM HEADING_COLUMNS_LINE_SELECT_2.
WRITE: 1 SY-VLINE,
12 SY-VLINE,
22 SY-VLINE,
33 SY-VLINE,
42 SY-VLINE,
50 SY-VLINE,
68 SY-VLINE,
86 SY-VLINE.
ENDFORM. " HEADING_COLUMNS_LINE_SELECT_2

*&---------------------------------------------------------------------*
*& Form DISPLAY_QUALITY_RESULTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_QUALITY_RESULTS.
SET PARAMETER ID 'WRK' FIELD QTAB-WERKS.
SET PARAMETER ID 'MAT' FIELD QTAB-MATNR.
SET PARAMETER ID 'CHA' FIELD QTAB-CHARG.
CALL TRANSACTION 'ZQ17' AND SKIP FIRST SCREEN.
ENDFORM. " DISPLAY_QUALITY_RESULTS
*&---------------------------------------------------------------------*
*& Form GET_TYPE_RANGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_TYPE_RANGE.
REFRESH TYPE_R.
TYPE_R-SIGN = 'I'.
TYPE_R-OPTION = 'EQ'.
TYPE_R-LOW = 'GROSS'.
APPEND TYPE_R.
IF NETT EQ 'X'.
TYPE_R-LOW = 'NET '.
APPEND TYPE_R.
ENDIF.
ENDFORM. " GET_TYPE_RANGE

*&---------------------------------------------------------------------*
*& Form GET_WEEK_DATES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_WEEK_DATES.
DATE_R-SIGN = 'I'.
DATE_R-OPTION = 'EQ'.
LOOP AT DTL_TAB WHERE WEEKNO EQ DTL_TAB-WEEKNO.
DATE_R-LOW = DTL_TAB-DATE.
COLLECT DATE_R.
ENDLOOP.
ENDFORM. " GET_WEEK_DATES
*&---------------------------------------------------------------------*
*& Form UPDATE_QBTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPDATE_QBTAB.
DATA: RECS TYPE I.

CHECK EXCL_N EQ 'X'.


CLEAR QBQTY.

IF DATE_TAB-SHKZG EQ 'H'.
SUBTRACT DATE_TAB-MENGE FROM QBQTY.
ELSE.
ADD DATE_TAB-MENGE TO QBQTY.
ENDIF.

MOVE-CORRESPONDING DATE_TAB TO QBTAB.


QBTAB-WERKS = PLANT-LOW.
PERFORM GET_GROSS_NET_TYPE.
CHECK QBTAB-TYPE NE SPACE.

IF WA_MSEG-WERKS IN USA_PLANTS AND WA_MARA-MAKTX CS 'sb '.


ELSE.
REFRESH: FPPCHARS.
CALL FUNCTION 'Z_GET_BATCH_RESULTS'
EXPORTING
PLANT = QBTAB-WERKS
MATERIAL = QBTAB-MATNR
BATCHNO = QBTAB-CHARG
IMPORTING
QUAL = QBTAB-QUALITY
TABLES
ZRANGE_FPP = FPPRANGE
ZRANGE_PASS = PASSRANGE
ZCHARS_RES_FPP = FPPCHARS
ZCHARS_RES_PASS = PASSCHARS
EXCEPTIONS
MATERIAL_NOT_FOUND = 1
PLANT_FOR_MATERIAL_NOT_FOUND = 2
BATCH_NOT_FOUND = 3
INVALID_BATCH = 4
FPP_RANGE_NOT_FOUND = 5
PASS_RANGE_NOT_FOUND = 6
RESULTS_NOT_FOUND = 7
OTHERS = 8.
DESCRIBE TABLE FPPCHARS LINES RECS.
IF SY-SUBRC NE 0 OR RECS EQ 0.
CLEAR QBTAB-QUALITY.
ENDIF.
ENDIF.
QBTAB-MENGE = QBQTY.
COLLECT QBTAB.
ENDFORM. " UPDATE_QBTAB
*&---------------------------------------------------------------------*
*& Form GET_GROSS_NET_TYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_GROSS_NET_TYPE.
CASE DATE_TAB-BWART.
* when '101' or '102' or '261' or '262' or '531' or '532'.
WHEN '101' OR '102' OR '531' OR '532'.
QBTAB-TYPE = 'GROSS'.
WHEN '261' OR '262'.
* if date_tab-werks = '5700'. "Convert for Thann "m005
QBTAB-TYPE = 'NET '.
* else. "m005
* qbtab-type = 'GROSS'. "m005
* endif. "m005
WHEN '309' OR '310' OR '909' OR '910'.
QBTAB-TYPE = 'NET '.
WHEN '963' OR '964'.
QBTAB-TYPE = 'NET '.
WHEN '971' OR '972'.
QBTAB-TYPE = SPACE.
WHEN OTHERS.
QBTAB-TYPE = SPACE.
ENDCASE.
ENDFORM. " GET_GROSS_NET_TYPE
*&---------------------------------------------------------------------*
*& Form QUALITY_SUMMARY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM QUALITY_SUMMARY.
DATA: FPPQ LIKE MSEG-MENGE,
PASSQ LIKE MSEG-MENGE,
FAILQ LIKE MSEG-MENGE,
NORESQ LIKE MSEG-MENGE,
TOTQ LIKE MSEG-MENGE,
FPPP(6) TYPE P DECIMALS 4,
PASSP(6) TYPE P DECIMALS 4,
FAILP(6) TYPE P DECIMALS 4,
NORESP(6) TYPE P DECIMALS 4,
TOTP(6) TYPE P DECIMALS 4 VALUE 100,
CHAR1_10(10),
CHAR2_10(10).

SET PF-STATUS 'QUAL'.


SET TITLEBAR 'QAL'.
WINDOW STARTING AT 15 2 ENDING AT 55 15.

LOOP AT QTAB WHERE TYPE EQ 'GROSS'.


ADD QTAB-MENGE TO TOTQ.
CASE QTAB-QUALITY.
WHEN 'FPP'.
ADD QTAB-MENGE TO FPPQ.
WHEN 'PASS'.
ADD QTAB-MENGE TO PASSQ.
WHEN 'FAIL'.
ADD QTAB-MENGE TO FAILQ.
WHEN SPACE.
ADD QTAB-MENGE TO NORESQ.
ENDCASE.
ENDLOOP.

IF TOTQ NE 0.
FPPP = ( FPPQ / TOTQ ) * 100.
PASSP = ( PASSQ / TOTQ ) * 100.
FAILP = ( FAILQ / TOTQ ) * 100.
NORESP = ( NORESQ / TOTQ ) * 100.
ENDIF.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

* begin of m002
DATA: UOM_OUT(6) TYPE C.
IF PLANT IS INITIAL. "m003
UOM_OUT = 'Tonnes'. "m003
ELSE. "m003
IF CNVLBS = 'X'
AND PLANT-LOW = '4305'.
UOM_OUT = 'LBs'.
ELSE.
UOM_OUT = 'Tonnes'.
ENDIF.
ENDIF. "m003
* end of m002

WRITE: /1 SY-ULINE(34).
WRITE: /1 SY-VLINE,
12 SY-VLINE,
* 13 'Tonnes'(074), "m002
13 UOM_OUT, "m002
23 SY-VLINE,
24 ' %'(075),
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).
WRITE: FPPQ TO CHAR1_10 DECIMALS 1.
WRITE: FPPP TO CHAR2_10 DECIMALS 1.
WRITE: /1 SY-VLINE,
2 'FPP '(070) COLOR COL_POSITIVE INTENSIFIED ON,
12 SY-VLINE,
13 CHAR1_10,
23 SY-VLINE,
24 CHAR2_10,
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).
WRITE: PASSQ TO CHAR1_10 DECIMALS 1.
WRITE: PASSP TO CHAR2_10 DECIMALS 1.
WRITE: /1 SY-VLINE,
2 'Pass'(069) COLOR COL_KEY INTENSIFIED ON,
12 SY-VLINE,
13 CHAR1_10,
23 SY-VLINE,
24 CHAR2_10,
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).
WRITE: FAILQ TO CHAR1_10 DECIMALS 1.
WRITE: FAILP TO CHAR2_10 DECIMALS 1.
WRITE: /1 SY-VLINE,
2 'Fail'(068) COLOR COL_NEGATIVE INTENSIFIED ON,
12 SY-VLINE,
13 CHAR1_10,
23 SY-VLINE,
24 CHAR2_10,
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).
WRITE: NORESQ TO CHAR1_10 DECIMALS 1.
WRITE: NORESP TO CHAR2_10 DECIMALS 1.
WRITE: /1 SY-VLINE,
2 'No Result'(073),
12 SY-VLINE,
13 CHAR1_10,
23 SY-VLINE,
24 CHAR2_10,
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).
WRITE: TOTQ TO CHAR1_10 DECIMALS 1.
WRITE: TOTP TO CHAR2_10 DECIMALS 1.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE: /1 SY-VLINE,
2 'Total'(076),
12 SY-VLINE,
13 CHAR1_10,
23 SY-VLINE,
24 CHAR2_10,
34 SY-VLINE.
WRITE: /1 SY-ULINE(34).

ENDFORM. " QUALITY_SUMMARY


*&---------------------------------------------------------------------*
*& Form COLLECT_QTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM COLLECT_QTAB.
DATA: RECS TYPE I.
MOVE-CORRESPONDING ZQ08SDTL TO QTAB.
IF QTAB-QUALITY EQ SPACE.
IF ZQ08SDTL-WERKS IN USA_PLANTS.
SELECT MAKTX INTO WA_MARA-MAKTX FROM MAKT
WHERE MATNR = ZQ08SDTL-MATNR.
EXIT.
ENDSELECT.
ENDIF.
IF ZQ08SDTL-WERKS IN USA_PLANTS AND WA_MARA-MAKTX CS 'sb '.
CLEAR: QTAB-QUALITY.
ELSE.
REFRESH: FPPCHARS.
CALL FUNCTION 'Z_GET_BATCH_RESULTS'
EXPORTING
PLANT = QTAB-WERKS
MATERIAL = QTAB-MATNR
BATCHNO = QTAB-CHARG
IMPORTING
QUAL = QTAB-QUALITY
TABLES
ZRANGE_FPP = FPPRANGE
ZRANGE_PASS = PASSRANGE
ZCHARS_RES_FPP = FPPCHARS
ZCHARS_RES_PASS = PASSCHARS
EXCEPTIONS
MATERIAL_NOT_FOUND = 1
PLANT_FOR_MATERIAL_NOT_FOUND = 2
BATCH_NOT_FOUND = 3
INVALID_BATCH = 4
FPP_RANGE_NOT_FOUND = 5
PASS_RANGE_NOT_FOUND = 6
RESULTS_NOT_FOUND = 7
OTHERS = 8.
DESCRIBE TABLE FPPCHARS LINES RECS.
IF SY-SUBRC NE 0 OR RECS EQ 0.
CLEAR QTAB-QUALITY.
ENDIF.
ENDIF.
ENDIF.
COLLECT QTAB.
ENDFORM. " COLLECT_QTAB
*&---------------------------------------------------------------------*
*& Form CHECK_ORDER_TYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_ORDER_TYPE.
CLEAR AUFK.
IF WA_MSEG-BWART IN TR_TYPE6.
SELECT SINGLE * FROM AUFK WHERE AUFNR EQ WA_MSEG-AUFNR.
ENDIF.
ENDFORM. " CHECK_ORDER_TYPE
*&---------------------------------------------------------------------*
*& Form CHANGE_MATERIAL_GROUP_ADJ_ORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHANGE_MATERIAL_GROUP_ADJ_ORD.
* For adjustment order types, reassign material group
* based on the material group for the material in the variance order
*
CLEAR: AFKO, MARA.
SELECT SINGLE * FROM AFKO WHERE AUFNR EQ WA_MSEG-AUFNR.
SELECT SINGLE * FROM MARA WHERE MATNR EQ AFKO-PLNBEZ.
WA_MARA-MATKL = MARA-MATKL.
ENDFORM. " CHANGE_MATERIAL_GROUP_ADJ_ORD

* Begin of m009
*&---------------------------------------------------------------------*
*& Form Check_Mat_Only_Selection
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_MAT_ONLY_SELECTION.

IF NOT MAT_ONLY IS INITIAL AND


MATNR_SL IS INITIAL.
CLEAR MAT_ONLY.
ENDIF.

ENDFORM.
* End of m009
*=======================================================================
* Begin of m008: Remove the quality summary for month and yearly.
**&---------------------------------
**------------------------------------*
**& Form build_group_quality.
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------
**------------------------------------*
*FORM BUILD_GROUP_QUALITY.
*
* DATA: RECS TYPE I.
*
* SELECT CPUDT WERKS MATNR CHARG BUDAT TYPE MENGE QUALITY
* INTO TABLE YQTAB FROM ZQ08SDTL
* WHERE WERKS IN PLANT
* AND BUDAT IN YTD_DATES
* AND TYPE IN TYPE_R.
*
** Add todays transactions
* LOOP AT QBTAB WHERE WERKS IN PLANT
* AND BUDAT IN YTD_DATES
* AND TYPE IN TYPE_R.
* SELECT SINGLE MATKL INTO MARA-MATKL FROM MARA
* WHERE MATNR EQ QBTAB-MATNR.
* IF SY-SUBRC EQ 0.
* MOVE-CORRESPONDING QBTAB TO YQTAB.
* APPEND YQTAB.
* ENDIF.
* ENDLOOP.
*
** Retrieve the year to date quality for all materials.
* LOOP AT YQTAB.
* WA_MSEG-MATNR = YQTAB-MATNR.
* PERFORM GET_MATERIAL_DETAILS.
*
* IF YQTAB-QUALITY EQ SPACE.
* IF YQTAB-WERKS IN USA_PLANTS AND WA_MARA-MAKTX CS 'sb '.
* CLEAR: QTAB-QUALITY.
* ELSE.
* REFRESH: FPPCHARS.
* CALL FUNCTION 'Z_GET_BATCH_RESULTS'
* EXPORTING
* PLANT = YQTAB-WERKS
* MATERIAL = YQTAB-MATNR
* BATCHNO = YQTAB-CHARG
* IMPORTING
* QUAL = YQTAB-QUALITY
* TABLES
* ZRANGE_FPP = FPPRANGE
* ZRANGE_PASS = PASSRANGE
* ZCHARS_RES_FPP = FPPCHARS
* ZCHARS_RES_PASS = PASSCHARS
* EXCEPTIONS
* MATERIAL_NOT_FOUND = 1
* PLANT_FOR_MATERIAL_NOT_FOUND = 2
* BATCH_NOT_FOUND = 3
* INVALID_BATCH = 4
* FPP_RANGE_NOT_FOUND = 5
* PASS_RANGE_NOT_FOUND = 6
* RESULTS_NOT_FOUND = 7
* OTHERS = 8.
* DESCRIBE TABLE FPPCHARS LINES RECS.
* IF SY-SUBRC NE 0 OR RECS EQ 0.
* CLEAR YQTAB-QUALITY.
* ENDIF.
* ENDIF.
* ENDIF.
*
** Write the quality summary records for the year totals.
* MODE = 'Y'. "Yearly values".
* CLEAR GROUP_ID.
* MOVE: 'Grand-Total' TO QUAL_MODE,
* '002' TO GROUP_ID.
* PERFORM WRITE_GROUP_QUALITY.
* CLEAR: QUAL_MODE, GROUP_ID.
* GROUP_ID = WA_MARA-MATKL.
* MOVE 'Sub-Tot' TO QUAL_MODE.
* PERFORM WRITE_GROUP_QUALITY.
*
** Write the quality summary recrods for the period totals.
* IF YQTAB-BUDAT IN PER_DATES.
* MODE = 'M'. "Monthly values"
* CLEAR GROUP_ID.
* MOVE: 'Grand-Total' TO QUAL_MODE,
* '002' TO GROUP_ID.
* PERFORM WRITE_GROUP_QUALITY.
* CLEAR: QUAL_MODE, GROUP_ID.
* GROUP_ID = WA_MARA-MATKL.
* MOVE 'Sub-Tot' TO QUAL_MODE.
* PERFORM WRITE_GROUP_QUALITY.
* ENDIF.
*
* ENDLOOP.
*
* SORT YQUA_ITAB BY GROUP.
*
** Add any material that is not in the quality table.
* LOOP AT GROSS_YTD WHERE SUBT = 'X'.
* DO 4 TIMES.
* CLEAR Q_TYPE.
*
* CASE SY-INDEX.
* WHEN 1.
* Q_TYPE = 'FPP '.
* WHEN 2.
* Q_TYPE = 'PASS '.
* WHEN 3.
* Q_TYPE = 'FAIL '.
* ENDCASE.
*
** Yearly
* READ TABLE YQUA_ITAB WITH KEY GROUP = GROSS_YTD-GROUP
* QUA_TYPE = Q_TYPE
* MODE = 'Y'.
* IF SY-SUBRC <> 0.
* MOVE-CORRESPONDING GROSS_YTD TO YQUA_ITAB.
* CLEAR YQUA_ITAB-QTY.
* MOVE: 'Y' TO YQUA_ITAB-MODE,
* Q_TYPE TO YQUA_ITAB-QUA_TYPE.
* APPEND YQUA_ITAB.
* ENDIF.
** Monthly
* READ TABLE YQUA_ITAB WITH KEY GROUP = GROSS_YTD-GROUP
* QUA_TYPE = Q_TYPE
* MODE = 'M'.
* IF SY-SUBRC <> 0.
* MOVE-CORRESPONDING GROSS_YTD TO YQUA_ITAB.
* CLEAR YQUA_ITAB-QTY.
* APPEND YQUA_ITAB.
* MOVE: 'M' TO YQUA_ITAB-MODE,
* Q_TYPE TO YQUA_ITAB-QUA_TYPE.
* APPEND YQUA_ITAB.
* ENDIF.
*
* ENDDO.
* ENDLOOP.
*
* SORT YQUA_ITAB BY MODE QUA_TYPE GROUP.
*
*ENDFORM.
**&---------------------------------
**------------------------------------*
**& Form Print_Group_Quality.
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------
**------------------------------------*
*FORM PRINT_GROUP_QUALITY USING R_MODE LIKE MODE.
*
* CLEAR: FPP_ITAB[], PASS_ITAB[], FAIL_ITAB[], NORES_ITAB[],
* TOTQUA_ITAB[], PCTFPP_ITAB[].
* REFRESH: FPP_ITAB, PASS_ITAB, FAIL_ITAB, NORES_ITAB, TOTQUA_ITAB,
* PCTFPP_ITAB.
*
** Build the results tables for the material groups.
* LOOP AT YQUA_ITAB WHERE MODE = R_MODE.
* CLEAR: FPP_ITAB, PASS_ITAB, FAIL_ITAB, NORES_ITAB, TOTQUA_ITAB,
* PCTFPP_ITAB.
* CASE YQUA_ITAB-QUA_TYPE.
* WHEN 'FPP '.
* FPP_ITAB = YQUA_ITAB.
* COLLECT FPP_ITAB.
** when 'PASS '.
** pass_itab = yqua_itab.
** collect pass_itab.
* WHEN 'FAIL '.
* FAIL_ITAB = YQUA_ITAB.
* COLLECT FAIL_ITAB.
* WHEN SPACE.
* NORES_ITAB = YQUA_ITAB.
* COLLECT NORES_ITAB.
* ENDCASE.
*
** Update the total quantity table.
* READ TABLE TOTQUA_ITAB WITH KEY GROUP = YQUA_ITAB-GROUP.
* IF SY-SUBRC <> 0.
* TOTQUA_ITAB = YQUA_ITAB.
* TOTQUA_ITAB-S_MATNR = 'Grand-Total999991'.
* TOTQUA_ITAB-MATNR = 'Grand-Total'.
* TOTQUA_ITAB-MAKTX = SPACE.
* TOTQUA_ITAB-SUBT = 'X'.
* CLEAR TOTQUA_ITAB-QUA_TYPE.
* APPEND TOTQUA_ITAB.
* ELSE.
* ADD YQUA_ITAB-QTY TO TOTQUA_ITAB-QTY.
* MODIFY TOTQUA_ITAB INDEX SY-TABIX.
* ENDIF.
*
* ENDLOOP.
*
** Create the percentage of fpp for the summary listings.
* LOOP AT FPP_ITAB.
* READ TABLE TOTQUA_ITAB WITH KEY GROUP = FPP_ITAB-GROUP.
* IF SY-SUBRC <> 0.
* CONTINUE.
* ELSE.
* READ TABLE PCTFPP_ITAB WITH KEY GROUP = FPP_ITAB-GROUP.
* IF SY-SUBRC <> 0.
* PCTFPP_ITAB = FPP_ITAB.
* PCTFPP_ITAB-S_MATNR = 'Grand-Total999991'.
* PCTFPP_ITAB-MATNR = 'Grand-Total'.
* PCTFPP_ITAB-MAKTX = SPACE.
* PCTFPP_ITAB-SUBT = 'X'.
* CLEAR PCTFPP_ITAB-QUA_TYPE.
* PCTFPP_ITAB-QTY = ( FPP_ITAB-QTY / TOTQUA_ITAB-QTY ) * 100.
* APPEND PCTFPP_ITAB.
* ELSE.
* PCTFPP_ITAB-QTY = ( FPP_ITAB-QTY / TOTQUA_ITAB-QTY ) * 100.
* MODIFY PCTFPP_ITAB INDEX SY-TABIX.
* ENDIF.
* ENDIF.
* ENDLOOP.
*
* SORT FPP_ITAB BY GROUP MAKTX.
* SORT PASS_ITAB BY GROUP MAKTX.
* SORT FAIL_ITAB BY GROUP MAKTX.
* SORT NORES_ITAB BY GROUP MAKTX.
* SORT TOTQUA_ITAB BY GROUP MAKTX.
* SORT PCTFPP_ITAB BY GROUP MAKTX.
*
*ENDFORM.
**&---------------------------------
**------------------------------------*
**& Form Write_Group_Quality.
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------
**------------------------------------*
*FORM WRITE_GROUP_QUALITY.
*
** Retrieve the len for the grand total box.
* READ TABLE YTD_TOT WITH KEY GROUP = GROUP_ID
* SUBT = 'X'
* MATNR = QUAL_MODE.
* IF SY-SUBRC <> 0.
* YTD_TOT-GROUP = 'No Group'.
* YTD_TOT-MAX_LEN = 9.
* ENDIF.
*
** Add the quantity to the year to date quality summary table.
* READ TABLE YQUA_ITAB WITH KEY GROUP = YTD_TOT-GROUP
* QUA_TYPE = YQTAB-QUALITY
* SUBT = 'X'
* MATNR = QUAL_MODE
* MODE = MODE.
* IF SY-SUBRC = 0.
* ADD YQTAB-MENGE TO YQUA_ITAB-QTY.
* MODIFY YQUA_ITAB INDEX SY-TABIX.
* ELSE.
* MOVE: QUAL_MODE TO YQUA_ITAB-MATNR,
* YQTAB-MENGE TO YQUA_ITAB-QTY,
* YTD_TOT-S_MATNR TO YQUA_ITAB-S_MATNR,
* YTD_TOT-GROUP TO YQUA_ITAB-GROUP,
* YTD_TOT-MAX_LEN TO YQUA_ITAB-MAX_LEN,
* YTD_TOT-MAKTX TO YQUA_ITAB-MAKTX,
* MODE TO YQUA_ITAB-MODE,
* YQTAB-QUALITY TO YQUA_ITAB-QUA_TYPE,
* YTD_TOT-SUBT TO YQUA_ITAB-SUBT.
* APPEND YQUA_ITAB.
* ENDIF.
*
*ENDFORM.
* End of m008
************************************************************************
* Begin of m010:
* Determine_new_values.
************************************************************************
FORM DETERMINE_NEW_VALUES.
* Begin of m004: If material is marked as a proportion unit, convert the
* quantity to the new unit value before the tons/lbs
* conversion.
REFRESH: GT_MCH1_OBJEK, GT_OBJEK, LT_CONV_TAB.
CLEAR: M_OBJEK, GT_MCH1_OBJEK, GT_OBJEK, LT_CONV_TAB,
LS_MCH1_KEY, LS_MCH1_OBJEK, LS_OBJEK.

* Build object key


LS_MCH1_KEY-MATNR = WA_MSEG-MATNR.
LS_MCH1_KEY-CHARG = WA_MSEG-CHARG.
LS_OBJEK-OBJEK = LS_MCH1_KEY.
APPEND LS_OBJEK TO GT_OBJEK.
* Build mch1 object table
LS_MCH1_OBJEK-CHARG = WA_MSEG-CHARG.
LS_MCH1_OBJEK-OBJEK = LS_MCH1_KEY.
APPEND LS_MCH1_OBJEK TO GT_MCH1_OBJEK.
*Begin of Insert by ERPUSER
Loop at LT_CONV_TAB.
Move-Corresponding LT_CONV_TAB to temp_LT_CONV_TAB.
Append temp_LT_CONV_TAB.
Endloop.

*End of insert by ERPUSER


CALL FUNCTION 'MURC_ALL_BATCH_FACTORS_NEW'
EXPORTING
IF_MATNR = WA_MSEG-MATNR
IF_KZDCH = '1'
IF_MEINS = BASE_MEINS
IF_MEINH = MEINS_NEW
TABLES
IT_SEL_CHARG = MS_CHARG_BESTAND[]
IT_SEL_WERKS = MS_WERKS_BESTAND[]
IT_MCH1_OBJEK = GT_MCH1_OBJEK
IT_OBJEK = GT_OBJEK
* ET_CONV_TAB = LT_CONV_TAB "COMMENTED BY ERPUSER
ET_CONV_TAB = TEMP_LT_CONV_TAB "INSERTED BY ERPUSER
EXCEPTIONS
NOT_FOUND = 1
NO_BATCH_CONVERSION = 2
OTHERS = 3.

CLEAR: LT_CONV_TAB.
REFRESH: LT_CONV_TAB.

LOOP AT TEMP_LT_CONV_TAB.
MOVE-CORRESPONDING TEMP_LT_CONV_TAB TO LT_CONV_TAB.
APPEND LT_CONV_TAB.
ENDLOOP.

* Retrieve the unit of conversion factors for detemining the new value.
READ TABLE LT_CONV_TAB INDEX 1.
WA_MSEG-MENGE = WA_MSEG-MENGE *
( LT_CONV_TAB-UMREN / LT_CONV_TAB-UMREZ ).

* End of m010

ENDFORM.
_

You might also like