Professional Documents
Culture Documents
*&---------------------------------------------------------------------*
*& 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.
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.
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.
IF ONE EQ 'X'.
DCMLS = 1.
ELSEIF TWO EQ 'X'.
DCMLS = 2.
ELSE.
DCMLS = 3.
ENDIF.
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.
TR_TYPE-SIGN = 'I'.
TR_TYPE-OPTION = 'BT'.
TR_TYPE-LOW = '101'.
TR_TYPE-HIGH = '102'.
APPEND TR_TYPE.
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.
*&---------------------------------------------------------------------*
*& 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.
REFRESH: QBTAB.
PERFORM GET_SUMMARY_TABLE.
PERFORM GET_SOURCE_DATA.
* 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
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.
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& 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.
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.
*&---------------------------------------------------------------------*
*& Form SUB_TOTALS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_YTD_TOT text *
*----------------------------------------------------------------------*
FORM SUB_TOTALS TABLES P_TAB STRUCTURE YTD_TOT.
*&---------------------------------------------------------------------*
*& 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.
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
* End of m004
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.
* 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.
*&---------------------------------------------------------------------*
*& 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
IF FIRST_PASS = 1. "m004
PERFORM WRITE_ULINE_2 TABLES P_GROSS. "m004
ELSE. "m004
FIRST_PASS = 1. "m004
ENDIF. "m004
* 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.
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
IF SEL_MAT GT 0.
SELECT * FROM MAKT INTO CORRESPONDING FIELDS OF WA_MARA
WHERE MATNR IN MATNR_SL
AND SPRAS EQ SY-LANGU.
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.
*&---------------------------------------------------------------------*
*& 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.
PERFORM CONVERT_UOM_TO_TONNES.
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.
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 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.
PERFORM PROCESS_MSEG.
ENDIF.
*
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.
PERFORM PROCESS_MSEG.
* Material group reset here for next transaction
WA_MARA-MATKL = OLD_GROUP.
ENDIF.
* 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.
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& Form GET_SUMMARY_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SUMMARY_TABLE.
REFRESH ZP07_ITAB.
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.
PERFORM CONVERT_UOM_TO_TONNES.
IF WA_MSEG-MBLNR IN EXCL_DOCS.
CONTINUE.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& 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.
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.
*&---------------------------------------------------------------------*
*& 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.
IF DATE_TAB-SHKZG EQ 'H'.
SUBTRACT DATE_TAB-MENGE FROM QBQTY.
ELSE.
ADD DATE_TAB-MENGE TO QBQTY.
ENDIF.
IF TOTQ NE 0.
FPPP = ( FPPQ / TOTQ ) * 100.
PASSP = ( PASSQ / TOTQ ) * 100.
FAILP = ( FAILQ / TOTQ ) * 100.
NORESP = ( NORESQ / TOTQ ) * 100.
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 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).
* Begin of m009
*&---------------------------------------------------------------------*
*& Form Check_Mat_Only_Selection
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_MAT_ONLY_SELECTION.
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.
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.
_