Posted: Wed Oct 03, 2007 2:17 pm Post subject: 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:
Code:
* <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.
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.
* 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
Code:
*&---------------------------------------------------------------------*
*& Form anlegen
*&---------------------------------------------------------------------*
FORM anlegen USING p_daten LIKE LINE OF t_daten.
DATA: amara_ueb TYPE STANDARD TABLE OF mara_ueb,
ambew_ueb TYPE STANDARD TABLE OF mbew_ueb,
amfieldres TYPE STANDARD TABLE OF mfieldres,
amerrdat TYPE STANDARD TABLE OF merrdat.
DATA: wa_amara_ueb TYPE mara_ueb,
wa_ambew_ueb TYPE mbew_ueb,
wa_amfieldres TYPE mfieldres,
wa_amerrdat TYPE merrdat.
IF NOT amara_ueb IS INITIAL. " Fehler
LOOP AT amerrdat INTO wa_amerrdat.
PERFORM message USING wa_amerrdat.
ENDLOOP.
ELSE.
IF sy-binpt = space.
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_ALL'.
ENDIF.
WRITE 'ok' COLOR 5.
ENDIF.
ULINE.
ENDFORM. " anlegen
*&---------------------------------------------------------------------*
*& Form message
*&---------------------------------------------------------------------*
FORM message USING p_error TYPE merrdat.
DATA: text(120).
CASE p_error-msgty.
WHEN 'I'.FORMAT COLOR 3 INTENSIFIED OFF.
WHEN 'E'.FORMAT COLOR 6 INTENSIFIED OFF.
WHEN 'W'.FORMAT COLOR 7 INTENSIFIED OFF.
WHEN OTHERS.FORMAT COLOR 1 INTENSIFIED OFF.
ENDCASE.
MESSAGE ID p_error-msgid TYPE 'I' NUMBER p_error-msgno
WITH p_error-msgv1 p_error-msgv2 p_error-msgv3 p_error-msgv4
INTO text.
WRITE:/ text.
ENDFORM. " message
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.