*----------------------------------------------------------------------* ***INCLUDE /MPDV/LZ_PP_HYINFO_GETF01 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form /MPDV/satzart_am *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_WA_HYINFO_ORDERID text * -->P_WA_HYINFO_SEQUENCE text * -->P_WA_HYINFO_OPERATION text * -->P_WA_HYINFO_SUB_OPER text * -->P_WA_HYINFO_SUBSYSTEM_GROUPING text * <--P_NEW_HYINFO text *----------------------------------------------------------------------* FORM /mpdv/satzart_am USING sub_orderid TYPE aufnr " Auftragsnr. sub_sequence TYPE aplfl " Folgennr. sub_operation TYPE vornr " Vorgangsnr. sub_sub_oper TYPE uvorn " U-Vorg.nr. sub_subsystem_grouping TYPE bdegr " BDE-Grupp. * Die selektierten Daten werden an die bestehende Tabelle * für die neuen Sätze angefügt. CHANGING value(sub_hyinfo) TYPE /mpdv/hyinfo_tab. * Konstante für die Satzart CONSTANTS sub_recordtype TYPE /mpdv/recordtype VALUE 'AM'. * Lokale ITAB für alle Komponentendaten und Materialkurztext TYPES: BEGIN OF komplist_str, matnr LIKE resb-matnr, " Materialnummer potx1 LIKE resb-potx1, " Zusatztext Stelle 1..30 potx2 LIKE resb-potx2, " Zusatztext Stelle 1..30 esmng LIKE resb-esmng, " Einsatzmng f. 1 Teil Vor.menge meins LIKE resb-meins, " Mengeneinheit bdmng LIKE resb-bdmng, " Bed.mng. f. gesamte Vor.menge posnr LIKE resb-posnr, " Nummer der Stücklistenposition fmeng LIKE resb-fmeng, " Kennzeichen fixe Menge rgekz LIKE resb-rgekz, " Kennz. retrograde Entnahme werks LIKE resb-werks, " Werk lgort LIKE resb-lgort, " Lagerort maktg LIKE makt-maktg, " Materialkurztext END OF komplist_str. * Struktur für die Zuweisung zu Infotext1 TYPES: BEGIN OF infotext1_str, matnr TYPE matnr, " Materialnummer END OF infotext1_str. * Struktur für die Zuweisung zu Infotext2 TYPES: BEGIN OF infotext2_str, potx1 TYPE potx1, " Zusatztext Stelle 1..30 potx2 TYPE potx2, " Zusatztext Stelle 1..30 END OF infotext2_str. * Struktur für die Zuweisung zu Infotext3 TYPES: BEGIN OF infotext3_str, * ACHTUNG: ESMNG in dieser Sturktur vom Typ CHAR wg. Typkonvertierung esmng TYPE char15, " Einsatzmenge für 1 Teil Vor.menge meins TYPE meins, " Mengeneinheit * ACHTUNG: BDMNG in dieser Sturktur vom Typ CHAR wg. Typkonvertierung bdmng TYPE char15, " Bedarfsmenge für gesamte Vor.menge posnr TYPE aposn, " Nummer der Stücklistenposition fmeng TYPE fmeng, " Kennzeichen fixe Menge rgekz TYPE rgekz, " Kennzeichen retrograde Entnahme werks TYPE werks, " Werk lgort TYPE lgort_d, " Lagerort END OF infotext3_str. * Struktur für die Zuweisung zu Infotext4 TYPES: BEGIN OF infotext4_str, maktg TYPE maktg, " Materialkurztext END OF infotext4_str. * Dann die ITAB aufbauen DATA my_komplist TYPE STANDARD TABLE OF komplist_str WITH DEFAULT KEY. * Und zum Schluss den Arbeitsbereich einrichten DATA wa_my_komplist TYPE komplist_str. * Variablen für Infotextfelder deklarieren * Ist zwar etwas umständlicher, macht aber hintenraus * die Zuordnung leichter. DATA: my_infotext1 TYPE infotext1_str, my_infotext2 TYPE infotext2_str, my_infotext3 TYPE infotext3_str, my_infotext4 TYPE infotext4_str. * Variable für die Seitenzahl DATA sub_pageno TYPE /mpdv/pageno VALUE '0'. * Lokaler Arbeitsbereich für HYINFO-ITAB DATA wa_sub_hyinfo TYPE /mpdv/hyinfo_struct. * Zur Umwandlung Exponentialdarstellung wird das Feld ESMNG zuerst * in eine Dezimalzahl umgewandelt. DATA esmng_dec TYPE bdmng. ************************************************************ ************************************************************ * * BEGIN DER VERARBEITUNG * ************************************************************* ************************************************************* * Selektion der benötigten Felder aus der RESB. Einstieg mit Auftrag, * Folge, Vorgang; Auswertung des Löschenkennzeichens und zusätzlich * Selektion des technischen Materialkurztextes (nur Grossbuchstaben) * unter Berücksichtigung des Systemweiten Default-Sprachschlüssels. SELECT resb~matnr " Materialnummer resb~potx1 " Zusatztext Stelle 1..30 resb~potx2 " Zusatztext Stelle 1..30 resb~esmng " Einsatzmenge für 1 Teil Vorgangmenge resb~meins " Mengeneinheit resb~bdmng " Bedarfsmenge für gesamte Vorgangsmenge resb~posnr " Nummer der Stücklistenposition resb~fmeng " Kennzeichen fixe Menge resb~rgekz " Kennzeichen retrograde Entnahme resb~werks " Werk resb~lgort " Lagerort makt~maktg " Materialkurztext FROM resb AS resb INNER JOIN makt AS makt ON resb~matnr = makt~matnr INTO TABLE my_komplist WHERE resb~aufnr = sub_orderid AND resb~plnfl = sub_sequence AND resb~vornr = sub_operation AND resb~xloek NE 'X' AND makt~spras = sy-langu. * Über die Ergebnistabelle loopen und jeweils die Ergebnisse * in die HYINFO-Ergebnistabelle übertragen. LOOP AT my_komplist INTO wa_my_komplist. * Seitenzahl belegen sub_pageno = sub_pageno + 1. * Infotext1 belegen my_infotext1-matnr = wa_my_komplist-matnr. * Infotext2 belegen my_infotext2-potx1 = wa_my_komplist-potx1. my_infotext2-potx2 = wa_my_komplist-potx1. * Infotext3 belegen esmng_dec = wa_my_komplist-esmng. my_infotext3-esmng = esmng_dec. my_infotext3-meins = wa_my_komplist-meins. my_infotext3-bdmng = wa_my_komplist-bdmng. my_infotext3-posnr = wa_my_komplist-posnr. my_infotext3-fmeng = wa_my_komplist-fmeng. my_infotext3-rgekz = wa_my_komplist-rgekz. my_infotext3-werks = wa_my_komplist-werks. my_infotext3-lgort = wa_my_komplist-lgort. * Infotext4 belegen my_infotext4-maktg = wa_my_komplist-maktg. * Jetzt noch die Infotextfelder an die HYINFO-Struktur übergeben wa_sub_hyinfo-orderid = sub_orderid. wa_sub_hyinfo-sequence = sub_sequence. wa_sub_hyinfo-operation = sub_operation. wa_sub_hyinfo-recordtype = sub_recordtype. wa_sub_hyinfo-pageno = sub_pageno. wa_sub_hyinfo-infotext1 = my_infotext1. wa_sub_hyinfo-infotext2 = my_infotext2. wa_sub_hyinfo-infotext3 = my_infotext3. wa_sub_hyinfo-infotext4 = my_infotext4. * Generierten HYINFO-Satz an FORM-lokale Tabelle anhängen APPEND wa_sub_hyinfo TO sub_hyinfo. ENDLOOP. ENDFORM. " /MPDV/satzart_am *&---------------------------------------------------------------------* *& Form /MPDV/satzart_ai *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_WA_HYINFO_ORDERID text * -->P_WA_HYINFO_SEQUENCE text * -->P_WA_HYINFO_OPERATION text * -->P_WA_HYINFO_SUB_OPER text * -->P_WA_HYINFO_SUBSYSTEM_GROUPING text * <--P_NEW_HYINFO text *----------------------------------------------------------------------* FORM /mpdv/satzart_ai USING sub_orderid TYPE aufnr " Auftragsnr. sub_sequence TYPE aplfl " Folgennr. sub_operation TYPE vornr " Vorgangsnr. sub_sub_oper TYPE uvorn " U-Vorg.nr. sub_subsystem_grouping TYPE bdegr " BDE-Grupp. * Die selektierten Daten werden an die bestehende Tabelle * für die neuen Sätze angefügt. CHANGING value(sub_hyinfo) TYPE /mpdv/hyinfo_tab. * Konstante für die Satzart CONSTANTS sub_recordtype TYPE /mpdv/recordtype VALUE 'AI'. * Struktur für Textgeader (siehe Funktion 'K_LTXT_CHK_LANGU_EXIST') TYPES: BEGIN OF kkek0_ltext, "Hilfsstruktur für Textheader tdobject LIKE thead-tdobject, tdid LIKE thead-tdid, tdname LIKE thead-tdname, tdspras LIKE thead-tdspras, END OF kkek0_ltext. * Variable für die Seitenzahl DATA sub_pageno TYPE /mpdv/pageno VALUE '0'. * Lokaler Arbeitsbereich für HYINFO-ITAB DATA wa_sub_hyinfo TYPE /mpdv/hyinfo_struct. * Lokale ITAB für Zusatzdaten DATA my_tline TYPE TABLE OF tline. DATA wa_my_tline TYPE tline. DATA my_name TYPE tdobname. * Struktur für Check ob Langtext vorhanden DATA my_ltext TYPE kkek0_ltext. DATA my_langu LIKE sy-langu. DATA my_rc LIKE sy-subrc. * Variablen für die Beschaffung der Schlüsseldaten DATA my_afko TYPE afko. DATA my_afvc TYPE afvc. * Variablen zur Berechnung und Steuerung der Durchläufe beim * Auslesen der TLINES-Tabelle: * Anzahl der zu durchlaudenden 10er Schritte DATA z_count TYPE i. * Interne Zähler um zu wissen, der wievielte Durchlauf gerade * stattfindet DATA z_count_intern TYPE i. * Der eigene Tabellenindex (in welcher Zeile der TLINES ist man) DATA my_index TYPE i VALUE 0. * Anzahl der Zeilen in TLINE-ITAB DATA max_lines TYPE i. * Zeilennummer pro 10er Durchlauf DATA line_nr TYPE i. * Wieviel Zeilen stehen innerhalb eines aktuellen 10er Blocks * tatsächlich mit Daten zur Verfügung DATA do_count TYPE i. * Sonstiges DATA frac_result TYPE f. ************************************************************ ************************************************************ * * BEGIN DER VERARBEITUNG * ************************************************************* * Selektion der Schlüsselwerte zum Laden der Zusatzdaten SELECT SINGLE * FROM afko INTO my_afko WHERE aufnr = sub_orderid. SELECT SINGLE * FROM afvc INTO my_afvc WHERE aufpl = my_afko-aufpl AND vornr = sub_operation. * Aufbereitung des Schlüssel für READ_TEXT und für die Existenz- * prüfung vorweg CONCATENATE sy-mandt my_afvc-aufpl my_afvc-aplzl INTO my_name. my_ltext-tdobject = 'AUFK'. my_ltext-tdid = 'AVOT'. my_ltext-tdname = my_name. my_ltext-tdspras = sy-langu. * Prüfung, ob ein Langtext in der Systemsprache vorhanden ist, * um Laufzeitfehler zu vermeiden... CALL FUNCTION 'K_LTXT_CHK_LANGU_EXIST' EXPORTING ltext = my_ltext " ID IMPORTING selected_language = my_langu " RC verfügbare Sprache rc = my_rc. " Returncode * Bei 0 (Ltext vorhanden) und 1 (vorhanden in der Sprache aus * SELECTED_LANGUAGE weitermachen, sonst alles überspringen IF my_rc LT 2. * Lesen der Langtexte über STD-Baustein CALL FUNCTION 'READ_TEXT' EXPORTING client = sy-mandt id = 'AVOT' language = my_langu name = my_name object = 'AUFK' * ARCHIVE_HANDLE = 0 * LOCAL_CAT = ' ' * IMPORTING * HEADER = TABLES lines = my_tline. * Exceptionbehandlung kann wegfallen, da vorher auf Existenz geprüft * EXCEPTIONS. * ID = 1 * LANGUAGE = 2 * NAME = 3 * NOT_FOUND = 4 * OBJECT = 5 * REFERENCE_CHECK = 6 * WRONG_ACCESS_TO_ARCHIVE = 7 * OTHERS = 8. * Anzahl der Zeilen in der Ergebnis-Tabelle bestimmen DESCRIBE TABLE my_tline LINES max_lines. * Entspricht die Anzahl der Zeilen einem Vielfachen von 10 ??? frac_result = FRAC( max_lines / 10 ). * Wenn max_lines < 10, dann nur einen 10er Block Durchlauf IF max_lines LE 10. z_count = 1. * Sonderbehandlung wenn Anzahl Zeilen ein Vielfaches von 10 ELSEIF ( max_lines GT 10 ) AND ( frac_result EQ 0 ). z_count = ( max_lines DIV 10 ). * Und schliesslich der Normalfall ELSE. z_count = ( max_lines DIV 10 ) + 1. ENDIF. * Initialisierung des internen 10er Block Zählers z_count_intern = 0. * Durchführen von z_count 10er Blöcken DO z_count TIMES. * Initialisierung der internen Zähler z_count_intern = z_count_intern + 1. " interne 10er Blockzähler line_nr = 0. " immer mit 1. Zeile anfangen * 1 mal pro 10er Durchlauf die Kopffelder zuweisen. CLEAR wa_sub_hyinfo. wa_sub_hyinfo-orderid = sub_orderid. wa_sub_hyinfo-sequence = sub_sequence. wa_sub_hyinfo-operation = sub_operation. wa_sub_hyinfo-recordtype = sub_recordtype. wa_sub_hyinfo-pageno = z_count_intern. do_count = max_lines - my_index. IF do_count LT 10. do_count = do_count. ELSE. do_count = 10. ENDIF. * Anzahl Durchläufe entspricht Anzahl der (verbleibenden) Zeilen DO do_count TIMES. * Zeilen Zahl erhöhen line_nr = line_nr + 1. * Index in Tabelle TLINES berechnen my_index = ( ( z_count_intern - 1 ) * 10 ) + line_nr. * Ergebnistabelle TLINES auslesen READ TABLE my_tline INDEX my_index INTO wa_my_tline. * Ergebnis abhängig von Zeilennummer auf INFOTEXTE verteilen CASE line_nr. WHEN 1. wa_sub_hyinfo-infotext1 = wa_my_tline-tdline. WHEN 2. wa_sub_hyinfo-infotext2 = wa_my_tline-tdline. WHEN 3. wa_sub_hyinfo-infotext3 = wa_my_tline-tdline. WHEN 4. wa_sub_hyinfo-infotext4 = wa_my_tline-tdline. WHEN 5. wa_sub_hyinfo-infotext5 = wa_my_tline-tdline. WHEN 6. wa_sub_hyinfo-infotext6 = wa_my_tline-tdline. WHEN 7. wa_sub_hyinfo-infotext7 = wa_my_tline-tdline. WHEN 8. wa_sub_hyinfo-infotext8 = wa_my_tline-tdline. WHEN 9. wa_sub_hyinfo-infotext9 = wa_my_tline-tdline. WHEN 10. wa_sub_hyinfo-infotext10 = wa_my_tline-tdline. ENDCASE. * Ende der Zeilendurchläufe ENDDO. * Generierten HYINFO-Satz an FORM-lokale Tabelle anhängen APPEND wa_sub_hyinfo TO sub_hyinfo. * Ende der 10er Block Durchläufe ENDDO. ELSE. ENDIF. ENDFORM. "/MPDV/satzart_ai *&---------------------------------------------------------------------* *& Form /MPDV/satzart_ak *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_WA_HYINFO_ORDERID text * -->P_WA_HYINFO_SEQUENCE text * -->P_WA_HYINFO_OPERATION text * -->P_WA_HYINFO_SUB_OPER text * -->P_WA_HYINFO_SUBSYSTEM_GROUPING text * <--P_NEW_HYINFO text *----------------------------------------------------------------------* FORM /mpdv/satzart_ak USING sub_orderid TYPE aufnr " Auftragsnr. sub_sequence TYPE aplfl " Folgennr. sub_operation TYPE vornr " Vorgangsnr. sub_sub_oper TYPE uvorn " U-Vorg.nr. sub_subsystem_grouping TYPE bdegr " BDE-Grupp. * Die selektierten Daten werden an die bestehende Tabelle * für die neuen Sätze angefügt. CHANGING value(sub_hyinfo) TYPE /mpdv/hyinfo_tab. * Konstante für die Satzart CONSTANTS sub_recordtype TYPE /mpdv/recordtype VALUE 'AK'. * Struktur für die Zuweisung zu Infotext1 TYPES: BEGIN OF infotext1_str, sbmng TYPE char15, " Basismenge sbmeh TYPE meins, " Basismengeneinheit gasmg TYPE char15, " Auftragsauschussmenge gamng TYPE char15, " Aufragskopfmengen END OF infotext1_str. * Struktur für die Zuweisung zu Infotext2 TYPES: BEGIN OF infotext2_str, gltrp TYPE co_gltrp, " Eckendtermin gluzp TYPE co_gluzp, " Eckenduhrzeit gstrp TYPE co_gstrp, " Eckstarttermin gsuzp TYPE co_gsuzp, " Eckstartuhrzeit gltrs TYPE co_gltrs, " Terminiertes Ende gluzs TYPE co_gluzs, " Terminiertes Ende (Uhrzeit) gstrs TYPE co_gstrs, " Terminierter Start gsuzs TYPE co_gsuzs, " Terminierter Start (Uhrzeit) terkz TYPE termkz, " Terminierungsart END OF infotext2_str. * Struktur für die Zuweisung zu Infotext3 TYPES: BEGIN OF infotext3_str, kdauf TYPE kdauf, " Kundenauftrag kdpos TYPE kdpos, " Kundenauftragsposition dispo TYPE co_dispo," Disponent / Fertigungssteuerer fevor TYPE fevor, " Fertigungssteuerer plnnr TYPE plnnr, " Plangruppe plnal TYPE plnal, " Plangruppenzähler END OF infotext3_str. TYPES: BEGIN OF infotext4_str, matnr TYPE matnr, " Materialnummer matxt TYPE co_matxt," Materialkurztext END OF infotext4_str. * Variable für die Seitenzahl DATA sub_pageno TYPE /mpdv/pageno VALUE '1'. * Lokaler Arbeitsbereich für HYINFO-ITAB DATA wa_sub_hyinfo TYPE /mpdv/hyinfo_struct. * Variablen für die Beschaffung der Schlüsseldaten DATA my_afko TYPE afko. DATA my_afpo TYPE afpo. * Strukturen für Infotexte definieren DATA: my_infotext1 TYPE infotext1_str, my_infotext2 TYPE infotext2_str, my_infotext3 TYPE infotext3_str, my_infotext4 TYPE infotext4_str. * Zur Umwandlung Exponentialdarstellung werden Mengenfelder zuerst * in eine Dezimalzahl umgewandelt. DATA menge_dec TYPE bdmng. ************************************************************ ************************************************************ * * BEGIN DER VERARBEITUNG * ************************************************************* * Selektion der Schlüsselwerte zum Laden der Zusatzdaten SELECT SINGLE * FROM afko INTO my_afko WHERE aufnr = sub_orderid. SELECT SINGLE * FROM afpo INTO my_afpo WHERE aufnr = sub_orderid. PERFORM /mpdv/get_maktxt USING my_afko-plnbez sy-langu CHANGING my_infotext4-matxt. * Infotext1 aus AFKO füllen menge_dec = my_afko-sbmng. my_infotext1-sbmng = menge_dec. my_infotext1-sbmeh = my_afko-sbmeh. menge_dec = my_afko-gasmg. my_infotext1-gasmg = menge_dec. menge_dec = my_afko-gamng. my_infotext1-gamng = menge_dec. * Infotext2 aus AFKO füllen my_infotext2-gltrp = my_afko-gltrp. my_infotext2-gluzp = my_afko-gluzp. my_infotext2-gstrp = my_afko-gstrp. my_infotext2-gsuzp = my_afko-gsuzp. my_infotext2-gltrs = my_afko-gltrs. my_infotext2-gluzs = my_afko-gluzs. my_infotext2-gstrs = my_afko-gstrs. my_infotext2-gsuzs = my_afko-gsuzs. my_infotext2-terkz = my_afko-terkz. * Infotext3 aus AFKO und AFPO füllen my_infotext3-kdauf = my_afpo-kdauf. my_infotext3-kdpos = my_afpo-kdpos. my_infotext3-dispo = my_afko-dispo. my_infotext3-fevor = my_afko-fevor. my_infotext3-plnnr = my_afko-plnnr. my_infotext3-plnal = my_afko-plnal. * Infotext4 aus AFKO füllen my_infotext4-matnr = my_afko-plnbez. * Aufbau des HYINFO-Satzes wa_sub_hyinfo-orderid = sub_orderid. wa_sub_hyinfo-sequence = sub_sequence. wa_sub_hyinfo-operation = sub_operation. wa_sub_hyinfo-recordtype = sub_recordtype. wa_sub_hyinfo-pageno = sub_pageno. wa_sub_hyinfo-infotext1 = my_infotext1. wa_sub_hyinfo-infotext2 = my_infotext2. wa_sub_hyinfo-infotext3 = my_infotext3. wa_sub_hyinfo-infotext4 = my_infotext4. * Und Einfügen in neue Tabelle. APPEND wa_sub_hyinfo TO sub_hyinfo. ENDFORM. " /MPDV/satzart_ak *&---------------------------------------------------------------------* *& Form /MPDV/get_maktxt *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_MY_AFKO_MATNR text * -->P_SY_LANGU text * <--P_MY_INFOTEXT1_MATXT text *----------------------------------------------------------------------* FORM /mpdv/get_maktxt USING sub_matnr TYPE afko-plnbez sub_langu TYPE sy-langu CHANGING value(sub_matxt) TYPE makt-maktg. SELECT SINGLE maktg FROM makt INTO sub_matxt WHERE matnr = sub_matnr AND spras = sub_langu. ENDFORM. " /MPDV/get_maktxt *&---------------------------------------------------------------------* *& Form /MPDV/satzart_dlg_string *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_WA_HYINFO_ORDERID text * -->P_WA_HYINFO_SEQUENCE text * -->P_WA_HYINFO_OPERATION text * -->P_WA_HYINFO_SUB_OPER text * -->P_WA_HYINFO_SUBSYSTEM_GROUPING text * <--P_NEW_HYINFO text *----------------------------------------------------------------------* FORM /mpdv/satzart_dlg_string USING sub_orderid TYPE aufnr " Auftragsnr. sub_sequence TYPE aplfl " Folgennr. sub_operation TYPE vornr " Vorgangsnr. sub_sub_oper TYPE uvorn " U-Vorg.nr. sub_subsystem_grouping TYPE bdegr " BDE-Grupp. CHANGING value(sub_dlg) TYPE /mpdv/dlg_tab. * Loakaler Arbeitsbereich für Dialogdaten-Tabelle DATA my_dlg TYPE /mpdv/dlg_struct. * String zur Aufbereitung des Dialogstring DATA my_string TYPE /mpdv/dlg_string. CLEAR my_string. CONCATENATE 'DLG=AUNR.MODIFY' '|ANR.ATYP=AU' '|ANR.ANR=' sub_orderid '|ANR.AUART=0' '|ANR.ATK=Mein Material' '|' INTO my_string. my_dlg-dlg_transaktion = 'ANR.MODIFY'. my_dlg-dlg_bemerkung = 'Auftragskopf ändern'. my_dlg-dlg_string = my_string. APPEND my_dlg TO sub_dlg. ENDFORM. " /MPDV/satzart_dlg_string