MATERIAL_MAINTAIN_DARK

www.4AP.de - ABAP Syntaxbeispiel: Funktionsbaustein MATERIAL_MAINTAIN_DARK

Beispielcoding: Funktionsbaustein MATERIAL_MAINTAIN_DARK (kopieren erlaubt aber auf eigene Gefahr :-))



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