Здравствуйте! помогите пжалст со следующей задачей...
Через транзакцию "co04n" (печать производственных заказов) необходимо после того как выводится список заказов...если выделяю
две или больше строк то необходимые данные суммируются и выводятся в один формуляр (наряд суммарный).
-------------------------------
Алгоритм в ТЗ следующий:
1. Для выбора поля Р16 (AFPO-KDAUF), необходимо перейти в таблицу AFPO по Р1 (AFKO-AUFNR).
2. Для выбора поля Р17 (AFPO-KDPOS), необходимо перейти в таблицу AFPO по Р1 (AFKO-AUFNR).
3. Для выбора поля Р18 (AFVV-VGW02), Р19 (AFVV-VGE02), необходимо перейти в таблицу AFVV по Р14 (AFVV-AUFPL) и Р15 (AFVV-APLZL).
-------------------------------
Надо суммировать по одинаковым AFVR-ARBPL, AFPO-KDAUF. Поле сумма AFVV-VGW02.
tables: AFKO, CRHD, AFVC, MARA, AFVV, AFPO, T024A, MAKT.
data: F1 like AFKO-AUFNR, F2 like CRHD-ARBPL, P3 like CRHD-OBJID, P4 like AFVC-ARBID, F3 like AFVC-RUECK, F4 like MARA-BISMT, F5 like AFVC-VORNR, F6 like AFVC-LTXA1, F7(13) type c, F8 like AFVV-MEINH, F9 like AFVV-FSAVD, F10 like AFVV-SSEDD, F11 like T024A-TXT, F16 like AFPO-KDAUF, F17 like AFPO-KDPOS, F18 like AFVV-VGW02, F19 like AFVV-VGE02,
ZAUFPL like AFVC-AUFPL, ZAPLZL like AFVC-APLZL, ZVGW02 like AFVV-VGW02, ZVGE02 like AFVV-VGE02, ZKDAUF like AFPO-KDAUF, ZKDPOS like AFPO-KDPOS,
ZMAKTX like MAKT-MAKTX,
F1a like AFKO-AUFNR, F2a like CRHD-ARBPL, P3a like CRHD-OBJID, P4a like AFVC-ARBID, F3a like AFVC-RUECK, F4a like MARA-BISMT, F5a like AFVC-VORNR, F6a like AFVC-LTXA1, F7a(13) type c, F8a like AFVV-MEINH, F9a like AFVV-FSAVD, F10a like AFVV-SSEDD, F11a like T024A-TXT, F16a like AFPO-KDAUF, F17a like AFPO-KDPOS, F18a like AFVV-VGW02, F19a like AFVV-VGE02, ZMAKTXa like MAKT-MAKTX.
types: begin of My1, F1 like AFKO-AUFNR, F2 like CRHD-ARBPL, P3 like CRHD-OBJID, P4 like AFVC-ARBID, F3 like AFVC-RUECK, F4 like MARA-BISMT, F5 like AFVC-VORNR, F6 like AFVC-LTXA1, F7b(13) type p decimals 1, F7(13) type c, F8 like AFVV-MEINH, F9 like AFVV-FSAVD, F10 like AFVV-SSEDD, F11 like T024A-TXT, F16 like AFPO-KDAUF, F17 like AFPO-KDPOS, F18 like AFVV-VGW02, F19 like AFVV-VGE02, P14 like AFKO-PLNBEZ, P15 like AFKO-PLGRP, P16 like AFPO-KDAUF, P17 like AFPO-KDPOS, P18 like AFVV-VGW02, P19 like AFVV-VGE02, ZMAKTX like MAKT-MAKTX, P20 like AFKO-AUFPL, P181 like AFVC-AUFPL, P191 like AFVC-APLZL, end of My1, begin of My2, F5 like AFVC-VORNR, end of My2.
data: it type table of My1 with header line, wa_it type My1, itF5 type table of My2 with header line, cnt type i, P14 like AFKO-PLNBEZ, P15 like AFKO-PLGRP, P20 like AFKO-AUFPL .
*&--------------------------------------------------------------------- *
*REPORT PSFCSPLT MESSAGE-ID CO. *---------------------------------------------------------------------* * * * PPS-Print: Operation-split * * * *---------------------------------------------------------------------*
* DATA-Statements general INCLUDE PPCOINCL. * DATA-Statements specific for production orders INCLUDE CODRGT10.
* entry to print PERFORM PRINT_SUB.
*---------------------------------------------------------------------* * FORM PRINT_SUB * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM PRINT_SUB. DATA USE_DEFAULT.
* Document-tables INCLUDE LCODRINC.
LOOP AT ITAB_TDR WHERE OBJECT = OBJ-POS OR OBJECT = OBJ-SOP AND AUFNR = PRINT_CO-AUFNR. EXIT. ENDLOOP.
CHECK SY-SUBRC IS INITIAL.
* fill workarea of header (probably more than 1 order is to be printed)
READ TABLE ITAB_TDR WITH KEY OBJECT = OBJ-ALT AUFNR = PRINT_CO-AUFNR. CHECK SY-SUBRC IS INITIAL. * Save Indextable of header ITAB_ORD = ITAB_TDR.
READ TABLE CAUFVD_TAB WITH KEY AUFNR = ITAB_ORD-AUFNR. CHECK SY-SUBRC IS INITIAL.
PERFORM PPPR_STD_INIT_ORDER USING CAUFVD_TAB.
PERFORM PPPR_COLLECT_DESTINATIONS USING PRINT_CO.
*&--------------------------------------------------------------------- * loop at ITAB_TDR where AUFNR = PRINT_CO-AUFNR. itF5-F5 = ITAB_TDR-VORNR. append itF5. endloop. describe table itF5 lines cnt.
select single PLNBEZ PLGRP AUFPL into (P14, P15, P20) from AFKO where AUFNR = caufvd-aufnr.
P14 = caufvd-matnr.
data: where_cl type string.
select RUECK VORNR LTXA1 ARBID AUFPL APLZL into (wa_it-F3, wa_it-F5, wa_it-F6, wa_it-P4, wa_it-P181, wa_it-P191) from AFVC FOR ALL ENTRIES IN itF5 where AUFPL = P20 and VORNR = itF5-F5 .
wa_it-F1 = caufvd-aufnr. wa_it-P14 = P14. wa_it-P15 = P15. wa_it-P20 = P20.
select single BISMT into wa_it-F4 from MARA where MATNR = wa_it-P14.
select single MAKTX from MAKT into wa_it-ZMAKTX where MATNR = wa_it-P14.
select single TXT into wa_it-F11 from T024A where FEVOR = wa_it-P15.
select single ARBPL into wa_it-F2 from CRHD where OBJID = wa_it-P4.
wa_it-F2 = wa_it-F2(3).
select single MGVRG MEINH FSAVD SSEDD VGW02 VGE02 into (wa_it-F7b, wa_it-F8, wa_it-F9, wa_it-F10, wa_it-F18, wa_it-F19) from AFVV where AUFPL = wa_it-P181 and APLZL = wa_it-P191.
data p_temp(13) type p decimals 1. p_temp = wa_it-F7b - ceil( wa_it-F7b ). if ( p_temp = 0 ). wa_it-F7 = ceil( wa_it-F7b ). else. wa_it-F7 = wa_it-F7b. endif. *новый код select single KDAUF KDPOS "доб KDPOS from AFPO into (wa_it-F16, ZKDPOS) "доб ZKDPOS where AUFNR = wa_it-F1.
append wa_it to it. clear wa_it. endselect.
clear F5.
DO PRINT_CO-COPYS TIMES. IF SY-INDEX GT 1. MOVE TEXT-DUP TO PRINT_CO-DRTXT. ENDIF. * get destination USE_DEFAULT = 'X'. " default destination in 1st run LOOP AT DESTINATION_TAB. PR_OPTIONS-TDDEST = DESTINATION_TAB-DEST. * call OPEN_FORM to open formular PERFORM PPPR_OPEN_FORM USING 'MAIN'. * Print split tickets PERFORM SPLIT_TICKET USING PRINT_CO-USE_WCP DESTINATION_TAB-DEST USE_DEFAULT. * call CLOSE_FORM to finish formular PERFORM PPPR_CLOSE_FORM. CLEAR USE_DEFAULT. " default destination only in 1st run ENDLOOP. ENDDO. ENDFORM. *---------------------------------------------------------------------* * FORM SPLIT_TICKET * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM SPLIT_TICKET USING USE_WCP LIKE T496P-USE_WCP DESTINATION LIKE T496P-DRDEST USE_DEFAULT. DATA: COUNTER_ABS(4) TYPE N. DATA: NUMBER_OF_TICKETS(4) TYPE N. DATA: BEGIN OF B OCCURS 0. INCLUDE STRUCTURE KBEDP. DATA: END OF B. DATA: BEGIN OF A. INCLUDE STRUCTURE AFVGD. DATA: END OF A. DATA FLG_ACT_READ.
CLEAR COUNTER_ABS. LOOP AT ITAB_TDR WHERE OBJECT = OBJ-POS OR OBJECT = OBJ-SOP AND AUFNR = ITAB_ORD-AUFNR. * Save ITAB of operation ITAB_VRG = ITAB_TDR. * Get sequence (only if changed) IF ITAB_VRG-APLFL NE AFFLD-PLNFL OR ITAB_VRG-AUFNR NE AFFLD-AUFNR. READ TABLE AFFLD_TAB INDEX ITAB_TDR-INDEX_PLFL. AFFLD = AFFLD_TAB. PERFORM PPPR_GET_TABLES USING DRPART-SEQ. ENDIF. * initialize operation PERFORM PPPR_STD_INIT_OPERATION USING X_FIELD SPACE CONST-FLG_YES SPACE. CHECK NOT X_FIELD IS INITIAL. * output only for work center printer CHECK USE_WCP IS INITIAL "no use of wcp OR DESTINATION = AFVGD-PDEST "wcp requested OR ( AFVGD-PDEST IS INITIAL "if wcp not given ... AND NOT USE_DEFAULT IS INITIAL ). "... use default printer
CLEAR FLG_ACT_READ. READ TABLE KBEDP_TAB WITH KEY BEDID = AFVGD-BEDID BEDZL = AFVGD-BEDZL BINARY SEARCH TRANSPORTING NO FIELDS. IF SY-SUBRC = 0. LOOP AT KBEDP_TAB FROM SY-TABIX. IF KBEDP_TAB-BEDID <> AFVGD-BEDID OR KBEDP_TAB-BEDZL <> AFVGD-BEDZL. EXIT. ENDIF. KBEDP = KBEDP_TAB. MOVE-CORRESPONDING KBEDP TO A. * calculation of the activities using the operation-formalism perform get_activity(saplcodr) using a rcr01 ttl_activ afvgd-mgvrg caufvd. ADD 1 TO COUNTER_ABS. * check wether number of tickets on page greater than possible IF NOT PRINT_CO-AZABS IS INITIAL. IF COUNTER_ABS > PRINT_CO-AZABS. * CALL FUNCTION 'CONTROL_FORM' * EXPORTING * COMMAND = 'NEW-PAGE'. CLEAR COUNTER_ABS. ADD 1 TO COUNTER_ABS. ENDIF. ENDIF. ENDLOOP. * no kbeds found ELSE. * calculation of the activities using the operation-formalism perform get_activity(saplcodr) using afvgd rcr01 ttl_activ afvgd-mgvrg caufvd. IF AFVGD-SPANZ = 0. AFVGD-SPANZ = 1. ENDIF. DO AFVGD-SPANZ TIMES. KBEDP-SPLIT = SY-INDEX. ADD 1 TO COUNTER_ABS. * check wether number of tickets on page greater than possible IF NOT PRINT_CO-AZABS IS INITIAL. IF COUNTER_ABS > PRINT_CO-AZABS. * CALL FUNCTION 'CONTROL_FORM' * EXPORTING * COMMAND = 'NEW-PAGE'. CLEAR COUNTER_ABS. ADD 1 TO COUNTER_ABS. ENDIF. ENDIF. ENDDO. ENDIF. ENDLOOP.
data: i type i value '0', cnt type i value '0'. DESCRIBE TABLE it LINES cnt.
loop at it. i = i + 1. cnt = cnt - 1. if ( i = 1 ). F1 = IT-F1. F2 = IT-F2. F3 = IT-F3. F4 = IT-F4. F5 = IT-F5. F6 = IT-F6. F7 = IT-F7. F8 = IT-F8. F9 = IT-F9. F10 = IT-F10. F11 = IT-F11. F16 = IT-F16. F18 = IT-F18. F19 = IT-F19. ZMAKTX = IT-ZMAKTX.
*IT-ZMAKTX. else. F1A = IT-F1. F2A = IT-F2. F3A = IT-F3. F4A = IT-F4. F5A = IT-F5. F6A = IT-F6. F7A = IT-F7. F8A = IT-F8. F9A = IT-F9. F10A = IT-F10. F11A = IT-F11. F16A = IT-F16. F18A = IT-F18. F19A = IT-F19. ZMAKTXa = IT-ZMAKTX.
*IT-ZMAKTX.
i = 0. endif.
if ( ( i <> 1 ) or ( i = 1 and cnt = 0 ) ). * CALL FUNCTION 'END_FORM'. CALL FUNCTION 'START_FORM' EXPORTING FORM = ' ' .
if ( i = 1 ). call function 'WRITE_FORM' exporting element = 'FORM2' window = 'WINDOW96'. endif.
call function 'WRITE_FORM' exporting element = '&END&' window = 'MAIN'.
CALL FUNCTION 'END_FORM'.
F1A = ''. F2A = ''. F3A = ''. F4A = ''. F5A = ''. F6A = ''. F7A = ''. F8A = ''. F9A = ''. F10A = ''. F11A = ''. ZMAKTXa = ''. endif.
endloop.
ENDFORM.
*---------------------------------------------------------------------- * * INCLUDE CODRIF02 * *---------------------------------------------------------------------- * *---------------------------------------------------------------------* * FORM OPEN_AND_START_FORM * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM PPPR_OPEN_FORM USING STARTPAGE. CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' DIALOG = SPACE FORM = PRINT_CO-FORML LANGUAGE = PRINT_CO-SPRAS OPTIONS = PR_OPTIONS EXCEPTIONS CANCELED = 01 DEVICE = 02 FORM = 03 OPTIONS = 04 UNCLOSED = 05. * CALL FUNCTION 'START_FORM' * EXPORTING * STARTPAGE = STARTPAGE * . CLEAR FLG_MAIN_STARTED. ENDFORM. *---------------------------------------------------------------------* * FORM CLOSE_AND_END_FORM_FORM * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM PPPR_CLOSE_FORM. IF NOT FLG_MAIN_STARTED IS INITIAL. * CALL FUNCTION 'WRITE_FORM' * EXPORTING * ELEMENT = 'MAIN_FINISH' * WINDOW = 'MAIN'. ENDIF. * CALL FUNCTION 'END_FORM'. CALL FUNCTION 'CLOSE_FORM' IMPORTING RESULT = PR_RESULT EXCEPTIONS OTHERS = 01. ENDFORM. *---------------------------------------------------------------------* * FORM CLOSE_AND_END_FORM_FORM * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM PPPR_MAIN_START. IF FLG_MAIN_STARTED IS INITIAL. * CALL FUNCTION 'WRITE_FORM' * EXPORTING * ELEMENT = 'MAIN_START' * WINDOW = 'MAIN'. FLG_MAIN_STARTED = CONST-FLG_YES. ENDIF. ENDFORM.
* INCLUDE for ATAB-Table-Read INCLUDE CODRGETT. "PPPR-Form-Routinen: pppr_get_tables INCLUDE CODRIF01. "PPPR-Form-Routinen: Druck-Parts lesen *INCLUDE CODRIF02. "PPPR-Form-Routinen: Open/Close Form INCLUDE CODRIF04. "PPPR-Form-Routinen: read_mat INCLUDE CODRIF17. "PSFC-Form-Routinen: std_init_operation INCLUDE CODRIF20. "PSFC-Form-Routinen: ppr_collect_destinations
|
|