Ein Lager und/oder Werk mit dem Funktionsbaustein MATERIAL_MAINTAIN_DARK anlegen:
* * Coded by Thorsten Neubüser - www.4ap.de * * <SNIP>
*Die itab_marc enthält die anzulegenden Lagerorte in den Werken. *itab_marc-matnr *itab_marc-werks *itab_marc-lgort * Sie wird im Vorfeld gefüllt. Nachfolgend nur die wichtigsten * Datendeklarationen und das entscheidende Coding
*#############
* Datendeklarationen TABLES: marc. DATA: BEGIN OF itab_marc OCCURS 0, matnr LIKE marc-matnr, werks LIKE marc-werks, lgfsb LIKE marc-lgfsb, lgpro LIKE marc-lgpro, lgort LIKE mard-lgort, mtart like mara-mtart, END OF itab_marc, count_itab TYPE i.
* Fehlerauswertung DATA: BEGIN OF fehler_tab OCCURS 0, " Tabelle für Fehlermeldungen line LIKE sy-lisel, " 255 Char END OF fehler_tab, returncode(2).
* an den Fubau MATERIAL_MAINTAIN_DARK zu übergebende Daten DATA: amara_ueb LIKE mara_ueb OCCURS 0 WITH HEADER LINE, amarc_ueb LIKE marc_ueb OCCURS 0 WITH HEADER LINE, amard_ueb LIKE mard_ueb OCCURS 0 WITH HEADER LINE, amerrdat LIKE merrdat OCCURS 0 WITH HEADER LINE, * vom Fubau MATERIAL_MAINTAIN_DARK beschriebene Daten matnr_last LIKE mara-matnr, matnr_last_save LIKE mara-matnr, number_errors_transaction LIKE tbist-numerror, blank, fest_x VALUE 'X', fest_e VALUE 'E', zaehler LIKE amard_ueb-tranc. " jede Zeile = ein Material
* <SNIP>
*---------------------------------------------------------------------* * Form lager_anlegen *---------------------------------------------------------------------* FORM lager_anlegen. LOOP AT itab_marc.
* erstmal alles löschen clear: amara_ueb, amarc_ueb, amard_ueb, fehler_tab, amerrdat, zaehler, matnr_last_save. refresh: amara_ueb, amarc_ueb, amard_ueb, fehler_tab, amerrdat.
zaehler = zaehler + 1. amara_ueb-mandt = sy-mandt. amara_ueb-matnr = itab_marc-matnr. amara_ueb-tcode = 'MM01'. " Transaktionscode nicht vergessen!!! amara_ueb-tranc = zaehler. " Zuordnung Zeilen = Material APPEND amara_ueb.
amarc_ueb-mandt = sy-mandt. amarc_ueb-matnr = amara_ueb-matnr. amarc_ueb-werks = itab_marc-werks. amarc_ueb-tranc = zaehler. * es muss mindestens ein Feldinhalt geändert werden!!! * sonst wird ein weiteres Werk nicht angelegt amarc_ueb-KZKRI = 'X'. " Kennzeichen: kritisches Teil * das Kennzeichen wird später wieder entfernt! APPEND amarc_ueb.
amard_ueb-mandt = sy-mandt. amard_ueb-matnr = amara_ueb-matnr. amard_ueb-werks = amarc_ueb-werks. amard_ueb-lgort = itab_marc-lgort. amard_ueb-tranc = zaehler. * es muss mindestens ein Feldinhalt geändert werden!!! * sonst wird ein weiteres Lager nicht angelegt amard_ueb-LFGJA = '2004'. " Geschäftsjahr der laufenden Periode APPEND amard_ueb.
* letze matnr speichern matnr_last_save = amara_ueb-matnr.
* Cause I'm TNT. I'm dynamite. [AC/DC TNT 1976] *break-point.
* Materialstammpflege ohne Bilder * Der Funktionsbaustein kann aus jeder beliebigen Anwendung heraus * aufgerufen werden. * Die Übergabe der zu pflegenden Materialdaten erfolgt mittels der * Tabellen AMARA_UEB, AMARC_UEB, ... im internen Format. * Weiteres in der FUBAU-Doku [ ja, es gibt auch dokumentierte :-)) ] CALL FUNCTION 'MATERIAL_MAINTAIN_DARK' EXPORTING kz_activ_cad = blank flag_muss_pruefen = fest_x sperrmodus = fest_e max_errors = 0 " Anzahl akzeptierte fehler p_kz_no_warn = fest_x kz_prf = blank kz_verw = fest_x kz_aend = fest_x kz_dispo = fest_x kz_test = blank kz_mdip = blank kz_mprp = blank kz_ale = blank kz_actv = blank IMPORTING matnr_last = matnr_last " letzte prozessierte MATNR number_errors_transaction = number_errors_transaction TABLES amara_ueb = amara_ueb " Materialstamm: allgemeine Daten * AMAKT_UEB = AMAKT_UEB " Materialkurztexte amarc_ueb = amarc_ueb " Materialstamm-C-Segment amard_ueb = amard_ueb " Materialstamm-Lager/Chargen-Segment * AMFHM_UEB = " FHM-Felder im Materialstamm * AMARM_UEB = " Mengeneinheiten * AMEA1_UEB = " Verwaltung der EANs zum Material:DI * AMBEW_UEB = AMBEW_UEB " Materialbewertung * ASTEU_UEB = " für Steuern: Datenübernahme * ASTMM_UEB = " * AMLGN_UEB = " Materialdaten pro Lagernummer * AMLGT_UEB = " Materialdaten pro Lagertyp * AMPGD_UEB = " Änderungsbelegstruktur für Material- * stamm/Produktgruppe * AMPOP_UEB = " Prognoseparameter * AMVEG_UEB = " Materialstamm: Gesamtsverbräuche * AMVEU_UEB = " Materialstamm: ungeplante Verbräuche * AMVKE_UEB = AMVKE_UEB " Materialstamm: Verkaufsdaten * ALTX1_UEB = " Datenübernahme: Datenteil Langtexte * AMPRW_UEB = " Datenübernahme: Prognosewerte * AMFIELDRES = " Felder, die pro Transaktion zu * " initialisieren sind amerrdat = amerrdat " Struktur für Rückgabe von Fehlermeld. EXCEPTIONS kstatus_empty = 1 tkstatus_empty = 2 t130m_error = 3 internal_error = 4 too_many_errors = 5 update_error = 6 OTHERS = 7. * Auswertung IF sy-subrc NE 0. MOVE sy-subrc TO returncode. CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004) returncode INTO fehler_tab-line SEPARATED BY ' '. APPEND fehler_tab. ELSE. COMMIT WORK. ENDIF. IF NOT matnr_last = matnr_last_save. * das darf eigentlich nicht passieren! Dann ganze Verarbeitung fehlerh. CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004) 'Materialnummern ungleich'(005) itab_marc-matnr itab_marc-mtart matnr_last INTO fehler_tab-line SEPARATED BY ' '. APPEND fehler_tab. ELSE. " NOT matnr_last = matnr_last_save * das war also eine erfolgreiche Verbuchung!!! * Kennzeichen hart zurücksetzen *TNT *break-point. SELECT SINGLE * FROM marc CLIENT SPECIFIED WHERE mandt = sy-mandt AND matnr = matnr_last_save AND werks = itab_marc-werks. clear: marc-KZKRI. update marc.
ENDIF. " NOT matnr_last = matnr_last_save IF NOT number_errors_transaction IS INITIAL. CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004) 'Anzahl Fehler:'(007) number_errors_transaction INTO fehler_tab-line SEPARATED BY ' '. APPEND fehler_tab. ENDIF. " number_errors_transaction is initial IF NOT amerrdat[] IS INITIAL. * Auswertung der Antwort CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004) 'Meldungsliste'(006) itab_marc-matnr itab_marc-werks itab_marc-mtart itab_marc-lgfsb itab_marc-lgpro itab_marc-lgort INTO fehler_tab-line SEPARATED BY ' '. APPEND fehler_tab. DATA: amerrdat_index(3). LOOP AT amerrdat. MOVE sy-tabix TO amerrdat_index. * Fehlermeldung nachschlagen CALL FUNCTION 'RPY_MESSAGE_COMPOSE' EXPORTING language = sy-langu message_id = amerrdat-msgid message_number = amerrdat-msgno message_var1 = amerrdat-msgv1 message_var2 = amerrdat-msgv2 message_var3 = amerrdat-msgv3 message_var4 = amerrdat-msgv4 IMPORTING message_text = sy-lisel " fehler_tab-line * tables * longtext = EXCEPTIONS message_not_found = 1 OTHERS = 2. IF sy-subrc = 0. CONCATENATE amerrdat_index sy-lisel INTO fehler_tab-line SEPARATED BY blank. APPEND fehler_tab. ELSE. CONCATENATE 'RPY_MESSAGE_COMPOSE'(008) amerrdat_index amerrdat-msgid amerrdat-msgno amerrdat-msgv1(10) amerrdat-msgv2(10) amerrdat-msgv3(10) amerrdat-msgv4(10) INTO fehler_tab-line SEPARATED BY ' '. APPEND fehler_tab. ENDIF. ENDLOOP. " at amerrdat APPEND INITIAL LINE TO fehler_tab. ENDIF. " not amerrdat[] is initial
LOOP AT fehler_tab. WRITE / fehler_tab. ENDLOOP. uline.
*TNT *break-point.
ENDLOOP. " at itab_marc ENDFORM. " lager_anlegen
|