Code: Alles auswählen.
Der Abbruch trat im ABAP-Programm "ZRUTMENGE" auf, und zwar in
"HOEHE_FUELLEN". Das Hauptprogramm war "ZRUTMENGE ".
Im Quelltext befindet sich die Abbruchstelle in Zeile 526
des (Include-)Programms "ZRUTMENGE".
(bei Anwahl des Editors: 5260) der ABAP-Source "ZRUTMENGE".
Der Abbruch ist darauf zurückzuführen, daß die Ausnahme
"CX_SY_DYN_CALL_ILLEGAL_TYPE"
in der Prozedur "HOEHE_FUELLEN" "(FORM)" aufgetreten ist, aber weder
lokal behandelt wurde, noch in der RAISING-Klausel ihrer Signatur
angegeben wurde.
Die Prozedur befindet sich im Programm "ZRUTMENGE ", ihr Quelltext
beginnt in Zeile 468 des (Include-)Programms "ZRUTMENGE ".
Code: Alles auswählen.
Es ist eine Ausnahme aufgetreten, die weiter unten näher erläutert wird.
Die Ausnahme, der die Klasse 'CX_SY_DYN_CALL_ILLEGAL_TYPE' zugeordnet ist,
wurde in der Prozedur "HOEHE_FUELLEN" "(FORM)" weder abgefangen,
noch durch eine RAISING-Klausel propagiert.
Da der Aufrufer der Prozedur nicht mit dem Auftreten der Ausnahme
rechnen konnte, wurde das laufende Programm abgebrochen.
Der Grund für die Ausnahme ist:
Der Aufruf des Funktionsbausteins "BAPI_TRANSACTION_COMMIT" ist nicht korrekt:
In der Schnittstelle des Funktionsbausteins wurde festgelegt, daß
unter "WAIT" nur Felder eines bestimmten Typs angegeben werden
dürfen. Das aktuell mitgegebene Feld hat aber einen anderen
Feldtyp.
Code: Alles auswählen.
004960 ? L_HEADDATA-NO_APPL_LOG = ' '. "Applikationslog
004970 ? L_HEADDATA-NO_CHANGE_DOC = ' '. "Änderungsbelege
004980 ?
004990 ? CLEAR: I_DATEN, V_MATNR.
005000 ?
005010 ? LOOP AT I_DATEN.
005020 ? IF V_MATNR NE I_DATEN-MATNR.
005030 ? *** BEGIN Daten initialisieren
005040 ? CLEAR: LT_CLIENTDATA, LT_CLIENTDATAX, LT_BAPIE1MARMRT, LT_BAPIE1MA
005050 ? REFRESH: LT_CLIENTDATA, LT_CLIENTDATAX, LT_BAPIE1MARMRT, LT_BAPIE1
005060 ? *** ENDE Daten initialisieren
005070 ? L_HEADDATA-MATERIAL = I_DATEN-MATNR.
005080 ? LT_CLIENTDATA-MATERIAL = I_DATEN-MATNR.
005090 ? APPEND LT_CLIENTDATA.
005100 ? LT_CLIENTDATAX-MATERIAL = I_DATEN-MATNR.
005110 ? APPEND LT_CLIENTDATAX.
005120 ?
005130 ? LOOP AT I_DATEN_CL WHERE MATNR = I_DATEN-MATNR.
005140 ? "AND UMREZ NE I_DATEN-UMREZ.
005150 ?
005160 ? * Datensatz für Änderung an der MARM
005170 ? LT_BAPIE1MARMRT-MATERIAL = I_DATEN-MATNR. "key:matnr
005180 ? LT_BAPIE1MARMRT-ALT_UNIT = I_DATEN_CL-UMREZ. "key:me
005190 ? LT_BAPIE1MARMRT-HEIGHT = I_DATEN_CL-HOEHE. "Höhe
005200 ? LT_BAPIE1MARMRT-UNIT_DIM = I_DATEN_CL-MEABM. "Längen-Einheit
005210 ? APPEND LT_BAPIE1MARMRT.
005220 ?
005230 ? * Ankreuzfelder (die Schlüsselfelder genauso wie bei den Datenfelder
005240 ? * belegen, die restlichen Felder mit 'X')
005250 ? LT_BAPIE1MARMRTX-MATERIAL = I_DATEN-MATNR.
> ? LT_BAPIE1MARMRTX-ALT_UNIT = I_DATEN_CL-UMREZ.
005270 ? LT_BAPIE1MARMRTX-HEIGHT = 'X'.
005280 ? LT_BAPIE1MARMRTX-UNIT_DIM = 'X'.
005290 ? APPEND LT_BAPIE1MARMRTX.
005300 ? ENDLOOP.
Code: Alles auswählen.
FORM HOEHE_FUELLEN.
DATA: LT_BAPIE1MARMRT LIKE BAPIE1MARMRT OCCURS 0 WITH HEADER LINE,
LT_BAPIE1MARMRTX LIKE BAPIE1MARMRTX OCCURS 0 WITH HEADER LINE,
LT_CLIENTDATA LIKE BAPIE1MARART OCCURS 0 WITH HEADER LINE,
LT_CLIENTDATAX LIKE BAPIE1MARARTX OCCURS 0 WITH HEADER LINE,
L_HEADDATA LIKE BAPIE1MATHEAD,
L_RETURN LIKE BAPIRETURN1,
WAIT TYPE BAPIWAIT,
RETURN LIKE BAPIRET2,
L_CHAR(1) VALUE 'X',
LOGDATA LIKE BAPIALG OCCURS 0 WITH HEADER LINE.
DATA BEGIN OF I_RETURN OCCURS 0.
INCLUDE STRUCTURE BAPIRET2.
DATA END OF I_RETURN.
DATA BEGIN OF LOGKEY OCCURS 0.
INCLUDE STRUCTURE BAPIALF.
DATA END OF LOGKEY.
* DATA BEGIN OF LOGDATA OCCURS 0.
* INCLUDE STRUCTURE BAPIALG.
* DATA END OF LOGDATA.
* Kopfsatz füllen (headdata ist eine Struktur, die nicht nur die matnr enthält!)
* Die matnr wird später gefüllt
L_HEADDATA-BASIC_VIEW = 'X'. "Sicht Grunddaten
L_HEADDATA-NO_APPL_LOG = ' '. "Applikationslog
L_HEADDATA-NO_CHANGE_DOC = ' '. "Änderungsbelege
CLEAR: I_DATEN, V_MATNR.
REFRESH: LOGKEY, LOGDATA.
LOOP AT I_DATEN.
IF V_MATNR NE I_DATEN-MATNR.
*** BEGIN Daten initialisieren
CLEAR: LT_CLIENTDATA, LT_CLIENTDATAX, LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
REFRESH: LT_CLIENTDATA, LT_CLIENTDATAX, LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
*** ENDE Daten initialisieren
L_HEADDATA-MATERIAL = I_DATEN-MATNR.
LT_CLIENTDATA-MATERIAL = I_DATEN-MATNR.
APPEND LT_CLIENTDATA.
LT_CLIENTDATAX-MATERIAL = I_DATEN-MATNR.
APPEND LT_CLIENTDATAX.
LOOP AT I_DATEN_CL WHERE MATNR = I_DATEN-MATNR.
* Datensatz für Änderung an der MARM
LT_BAPIE1MARMRT-MATERIAL = I_DATEN-MATNR. "key:matnr
LT_BAPIE1MARMRT-ALT_UNIT = I_DATEN_CL-MEINH. "key:me
LT_BAPIE1MARMRT-HEIGHT = I_DATEN_CL-HOEHE. "Höhe
LT_BAPIE1MARMRT-UNIT_DIM = I_DATEN_CL-MEABM. "Längen-Einheit
APPEND LT_BAPIE1MARMRT.
* Ankreuzfelder (die Schlüsselfelder genauso wie bei den Datenfeldern
* belegen, die restlichen Felder mit 'X')
LT_BAPIE1MARMRTX-MATERIAL = I_DATEN-MATNR.
LT_BAPIE1MARMRTX-ALT_UNIT = I_DATEN_CL-MEINH.
LT_BAPIE1MARMRTX-HEIGHT = L_CHAR.
LT_BAPIE1MARMRTX-UNIT_DIM = L_CHAR.
APPEND LT_BAPIE1MARMRTX.
ENDLOOP.
* Änderungen durchführen je Material
CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
EXPORTING
HEADDATA = L_HEADDATA
IMPORTING
RETURN = L_RETURN
TABLES
CLIENTDATA = LT_CLIENTDATA
CLIENTDATAX = LT_CLIENTDATAX
UNITSOFMEASURE = LT_BAPIE1MARMRT
UNITSOFMEASUREX = LT_BAPIE1MARMRTX.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = WAIT
IMPORTING
RETURN = RETURN
EXCEPTIONS
OTHERS = 01.
MOVE I_DATEN-MATNR TO V_MATNR.
ENDIF.
*** Dieser BLOCK sollte vor das ENDIF in der Zeile darüber.
WRITE:/ L_RETURN-TYPE, L_RETURN-MESSAGE.
MOVE-CORRESPONDING L_RETURN TO LOGDATA.
MOVE L_RETURN-LOG_NO TO LOGDATA-LOGNUMBER.
MOVE L_RETURN-LOG_MSG_NO TO LOGDATA-MSGNUMBER.
APPEND LOGDATA.
MOVE L_RETURN-LOG_NO TO LOGKEY-LOGNUMBER.
MOVE L_RETURN-LOG_MSG_NO TO LOGKEY-MSGNUMBER.
APPEND LOGKEY.
CALL FUNCTION 'BAPI_APPLICATIONLOG_GETDETAIL'
EXPORTING
LANGUAGE = SY-LANGU
IMPORTING
RETURN = I_RETURN
TABLES
LOGKEYS = LOGKEY
LOGDATA = LOGDATA.
SKIP.
SKIP.
WRITE: / I_RETURN-MESSAGE.
*** BLOCK ENDE
ENDLOOP.
ENDFORM.
Code: Alles auswählen.
WRITE: / I_RETURN-MESSAGE. Code: Alles auswählen.
WRITE:/ L_RETURN-TYPE, L_RETURN-MESSAGE.Code: Alles auswählen.
E
Meldungen zum Material 000000000000000007: Lognummer 0000000000000282Code: Alles auswählen.
00000000000000046522
Material 000000000000000007 ist kein Retail-Material (MAW1-Segment fehlt)
Code: Alles auswählen.
FORM HOEHE_FUELLEN.
DATA: L_HEADDATA LIKE BAPIMATHEAD,
L_RETURN LIKE BAPIRET2,
WAIT TYPE BAPITA-WAIT,
RETURN LIKE BAPIRET2,
L_CHAR(1) VALUE 'X',
LOGDATA LIKE BAPIALG OCCURS 0 WITH HEADER LINE.
DATA BEGIN OF LT_BAPIE1MARMRT OCCURS 0.
INCLUDE STRUCTURE BAPI_MARM.
DATA END OF LT_BAPIE1MARMRT.
DATA BEGIN OF LT_BAPIE1MARMRTX OCCURS 0.
INCLUDE STRUCTURE BAPI_MARMX.
DATA END OF LT_BAPIE1MARMRTX.
DATA BEGIN OF I_RETURN OCCURS 0.
INCLUDE STRUCTURE BAPIRET2.
DATA END OF I_RETURN.
DATA BEGIN OF LOGKEY OCCURS 0.
INCLUDE STRUCTURE BAPIALF.
DATA END OF LOGKEY.
CLEAR: I_DATEN, V_MATNR.
REFRESH: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX, LOGKEY, LOGDATA.
LOOP AT I_DATEN.
*** BEGIN Daten initialisieren
CLEAR: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
*** ENDE Daten initialisieren
L_HEADDATA-MATERIAL = I_DATEN-MATNR.
L_HEADDATA-BASIC_VIEW = 'X'. "Sicht Grunddaten
READ TABLE I_DATEN_CL WITH KEY MATNR = I_DATEN-MATNR
MEINH = I_DATEN-MEINH.
* Datensatz für Änderung an der MARM
LT_BAPIE1MARMRT-ALT_UNIT = I_DATEN_CL-MEINH. "Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRT-HEIGHT = I_DATEN_CL-HOEHE. "Höhe
LT_BAPIE1MARMRT-UNIT_DIM = I_DATEN_CL-MEABM. "Längen-Einheit
APPEND LT_BAPIE1MARMRT.
* Ankreuzfelder (die Schlüsselfelder genauso wie bei den Datenfeldern
* belegen, die restlichen Felder mit 'X')
LT_BAPIE1MARMRTX-ALT_UNIT = I_DATEN_CL-MEINH.
LT_BAPIE1MARMRTX-HEIGHT = L_CHAR.
LT_BAPIE1MARMRTX-UNIT_DIM = L_CHAR.
APPEND LT_BAPIE1MARMRTX.
* Änderungen durchführen je Material
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = L_HEADDATA
IMPORTING
RETURN = L_RETURN
TABLES
UNITSOFMEASURE = LT_BAPIE1MARMRT
UNITSOFMEASUREX = LT_BAPIE1MARMRTX.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = WAIT
IMPORTING
RETURN = RETURN
EXCEPTIONS
OTHERS = 01.
*** Dieser BLOCK sollte vor das ENDIF in der Zeile darüber.
WRITE:/ L_RETURN-TYPE, L_RETURN-MESSAGE.
MOVE-CORRESPONDING L_RETURN TO LOGDATA.
MOVE L_RETURN-LOG_NO TO LOGDATA-LOGNUMBER.
APPEND LOGDATA.
MOVE L_RETURN-LOG_NO TO LOGKEY-LOGNUMBER.
APPEND LOGKEY.
CALL FUNCTION 'BAPI_APPLICATIONLOG_GETDETAIL'
EXPORTING
LANGUAGE = SY-LANGU
IMPORTING
RETURN = I_RETURN
TABLES
LOGKEYS = LOGKEY
LOGDATA = LOGDATA.
SKIP.
SKIP.
WRITE: / LOGDATA-LOGNUMBER, LOGDATA-MESSAGE.
*** BLOCK ENDE
ENDLOOP.
ENDFORM. "HOEHE_FUELLEN
Code: Alles auswählen.
34.450 40 > Die Konzerndaten des Materials 000000000000000005 sind von Benutzer USER912 gesperrt
13.000 STK > Geben Sie die Umrechnungsfaktoren zu der Mengeneinheit 15 an
34.000 8 > Die Konzerndaten des Materials 000000000000000006 sind von Benutzer USER912 gesperrt
1.000 12 > Geben Sie die Umrechnungsfaktoren zu der Mengeneinheit 15 an
1.000 16 > Die Konzerndaten des Materials 000000000000000006 sind von Benutzer USER912 gesperrt
1.000 20 > Geben Sie die Umrechnungsfaktoren zu der Mengeneinheit 15 anCode: Alles auswählen.
34.450 40 > Die Konzerndaten des Materials 000000000000000005 sind von Benutzer USER912 gesperrt
Code: Alles auswählen.
000000000000000003 RosHybr-06 STK 1 1 STK 23.000
000000000000000003 RosHybr-06 6 1 6 STK 23.000
000000000000000003 RosHybr-06 7 1 7 STK 23.000
000000000000000003 RosHybr-06 8 1 8 STK 23.000
000000000000000003 RosHybr-06 10 1 10 STK 23.000
000000000000000003 RosHybr-06 12 1 12 STK 23.000 CM
000000000000000003 RosHybr-06 16 1 16 STK 23.000 CM
000000000000000003 RosHybr-06 18 1 18 STK 23.000 CM
000000000000000003 RosHybr-06 20 1 20 STK 23.000 CM
000000000000000003 RosHybr-06 24 1 24 STK 23.000 CM
Code: Alles auswählen.
23.000 STK > Geben Sie die zugehörige Längeneinheit an
23.000 6 > Geben Sie die zugehörige Längeneinheit an
23.000 7 > Geben Sie die zugehörige Längeneinheit an
23.000 8 > Geben Sie die zugehörige Längeneinheit an
23.000 10 > Geben Sie die zugehörige Längeneinheit an
23.000 12 > Geben Sie die zugehörige Längeneinheit an
23.000 16 > Geben Sie die zugehörige Längeneinheit an
23.000 18 > Geben Sie die zugehörige Längeneinheit an
23.000 20 > Geben Sie die zugehörige Längeneinheit an
23.000 24 > Geben Sie die zugehörige Längeneinheit an
Code: Alles auswählen.
FORM HOEHE_FUELLEN.
DATA: L_HEADDATA LIKE BAPIMATHEAD,
L_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
WAIT TYPE BAPITA-WAIT,
RETURN LIKE BAPIRET2,
LOGDATA LIKE BAPIALG OCCURS 0 WITH HEADER LINE,
V_MATNR LIKE MARA-MATNR,
V_TEXT(200),
V_ZAHLER(3),
V_NULL(3),
V_MESSAGE(100).
DATA: BEGIN OF I_NULL OCCURS 0,
MATNR LIKE MARA-MATNR,
HOEHE LIKE MARM-HOEHE,
MEINH LIKE MARM-MEINH,
MEABM LIKE MARM-MEABM,
END OF I_NULL.
DATA: BEGIN OF I_UCCESS OCCURS 0,
MATNR LIKE MARA-MATNR,
HOEHE LIKE MARM-HOEHE,
MEINH LIKE MARM-MEINH,
MESSAGE LIKE BAPIRET2-MESSAGE,
MEABM LIKE MARM-MEABM,
END OF I_UCCESS.
DATA BEGIN OF LT_BAPIE1MARMRT OCCURS 0.
INCLUDE STRUCTURE BAPI_MARM.
DATA END OF LT_BAPIE1MARMRT.
DATA BEGIN OF LT_BAPIE1MARMRTX OCCURS 0.
INCLUDE STRUCTURE BAPI_MARMX.
DATA END OF LT_BAPIE1MARMRTX.
CLEAR: I_DATEN, V_MATNR, V_ZAHLER, V_NULL.
REFRESH: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX, I_NULL, I_UCCESS.
LOOP AT I_DATEN.
*** BEGIN Daten initialisieren
CLEAR: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
*** ENDE Daten initialisieren
L_HEADDATA-MATERIAL = I_DATEN-MATNR.
L_HEADDATA-BASIC_VIEW = 'X'. "Sicht Grunddaten
LOOP AT I_DATEN_CL WHERE MATNR = I_DATEN-MATNR
AND MEINH = I_DATEN-MEINH.
* Datensatz für Änderung an der MARM
LT_BAPIE1MARMRT-ALT_UNIT = I_DATEN_CL-MEINH. "Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRT-ALT_UNIT_ISO = I_DATEN_CL-MEINH.
LT_BAPIE1MARMRT-NUMERATOR = I_DATEN_CL-UMREZ.
LT_BAPIE1MARMRT-HEIGHT = I_DATEN_CL-HOEHE. "Höhe
LT_BAPIE1MARMRT-UNIT_DIM = I_DATEN_CL-MEABM. "Längen-Einheit
APPEND LT_BAPIE1MARMRT.
* Ankreuzfelder (die Schlüsselfelder genauso wie bei den Datenfeldern
* belegen, die restlichen Felder mit 'X')
LT_BAPIE1MARMRTX-ALT_UNIT = I_DATEN_CL-MEINH.
LT_BAPIE1MARMRTX-ALT_UNIT_ISO = I_DATEN_CL-MEINH.
LT_BAPIE1MARMRTX-NUMERATOR = 'X'.
LT_BAPIE1MARMRTX-HEIGHT = 'X'.
LT_BAPIE1MARMRTX-UNIT_DIM = 'X'.
APPEND LT_BAPIE1MARMRTX.
ENDLOOP.
IF LT_BAPIE1MARMRT-HEIGHT IS NOT INITIAL.
* Änderungen durchführen je Material
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = L_HEADDATA
IMPORTING
RETURN = L_RETURN
TABLES
UNITSOFMEASURE = LT_BAPIE1MARMRT
UNITSOFMEASUREX = LT_BAPIE1MARMRTX.
COMMIT WORK.
ENDIF.
*** Dieser BLOCK sollte vor das ENDIF in der Zeile darüber.
CLEAR: I_NULL, I_UCCESS.
* Wenn das Material nicht geändert wurde
IF L_RETURN-TYPE EQ 'E'.
PACK I_DATEN_CL-MATNR TO I_UCCESS-MATNR.
CONDENSE I_UCCESS-MATNR.
MOVE I_DATEN_CL-HOEHE TO I_UCCESS-HOEHE.
MOVE I_DATEN_CL-MEINH TO I_UCCESS-MEINH.
MOVE L_RETURN-MESSAGE TO I_UCCESS-MESSAGE.
V_ZAHLER = V_ZAHLER + 1.
APPEND I_UCCESS.
* Wenn die Hoehe gleich 0 ist
ELSEIF LT_BAPIE1MARMRT-HEIGHT IS INITIAL
AND LT_BAPIE1MARMRT-UNIT_DIM IS NOT INITIAL.
PACK I_DATEN_CL-MATNR TO I_NULL-MATNR.
CONDENSE I_NULL-MATNR.
MOVE I_DATEN_CL-HOEHE TO I_NULL-HOEHE.
MOVE I_DATEN_CL-MEINH TO I_NULL-MEINH.
MOVE I_DATEN_CL-MEABM TO I_NULL-MEABM.
V_NULL = V_NULL + 1.
APPEND I_NULL.
ENDIF.
CLEAR: L_RETURN.
ENDLOOP.
SKIP.
*-------------------------------------
* Ausgabe *
*-------------------------------------
IF V_ZAHLER NE 0.
WRITE: / TEXT-005.
WRITE /(35) SY-ULINE.
CLEAR: V_MATNR.
LOOP AT I_UCCESS.
IF I_UCCESS-MATNR NE V_MATNR.
CLEAR V_TEXT.
WRITE TEXT-010 TO V_TEXT.
WRITE I_UCCESS-MATNR TO V_TEXT+9.
WRITE TEXT-011 TO V_TEXT+14.
WRITE: / V_TEXT, 30 I_UCCESS-HOEHE, I_UCCESS-MEINH, '>', 55 I_UCCESS-MESSAGE.
MOVE I_UCCESS-MATNR TO V_MATNR.
ELSE.
WRITE: /30 I_UCCESS-HOEHE, I_UCCESS-MEINH, '>', 55 I_UCCESS-MESSAGE.
ENDIF.
ENDLOOP.
ENDIF.
SKIP.
SKIP.
IF V_NULL NE 0.
WRITE: / TEXT-006.
WRITE /(63) SY-ULINE.
CLEAR: V_MATNR.
LOOP AT I_NULL.
IF I_NULL-MATNR NE V_MATNR.
CLEAR V_TEXT.
WRITE TEXT-010 TO V_TEXT.
WRITE I_NULL-MATNR TO V_TEXT+9.
WRITE TEXT-002 TO V_TEXT+14.
WRITE: / V_TEXT, 30 I_NULL-MEINH.
MOVE I_NULL-MATNR TO V_MATNR.
ELSE.
WRITE: /30 I_NULL-MEINH.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.Code: Alles auswählen.
23.000 STK > Geben Sie die zugehörige Längeneinheit an
23.000 6 > Geben Sie die zugehörige Längeneinheit an
23.000 7 > Geben Sie die zugehörige Längeneinheit an
23.000 8 > Geben Sie die zugehörige Längeneinheit an
23.000 10 > Geben Sie die zugehörige Längeneinheit an
23.000 12 > Geben Sie die zugehörige Längeneinheit an
23.000 16 > Geben Sie die zugehörige Längeneinheit an
23.000 18 > Geben Sie die zugehörige Längeneinheit an
23.000 20 > Geben Sie die zugehörige Längeneinheit an
23.000 24 > Geben Sie die zugehörige Längeneinheit an
Code: Alles auswählen.
*** BEGIN Daten initialisieren
CLEAR: L_HEADDATA-MATERIAL,
L_HEADDATA-BASIC_VIEW,
LT_BAPIE1MARMRTX,
LT_BAPIE1MARMRT.
REFRESH: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
*** ENDE Daten initialisieren
Code: Alles auswählen.
34.450 40 > Die Konzerndaten des Materials 000000000000000005 sind von Benutzer USER912 gesperrt Code: Alles auswählen.
25.000 12 > Die Konzerndaten des Materials 000000000000000020 sind von Benutzer USER912 gesperrt
25.000 20 > Die Konzerndaten des Materials 000000000000000020 sind von Benutzer USER912 gesperrt
Code: Alles auswählen.
89.000 12 > Die Konzerndaten des Materials 000000000000000020 sind von Benutzer USER912 gesperrt
89.000 32 > Die Konzerndaten des Materials 000000000000000020 sind von Benutzer USER912 gesperrt
89.000 14 > Die Konzerndaten des Materials 000000000000000022 sind von Benutzer USER912 gesperrt
89.000 15 > Die Konzerndaten des Materials 000000000000000022 sind von Benutzer USER912 gesperrt
89.000 18 > Die Konzerndaten des Materials 000000000000000022 sind von Benutzer USER912 gesperrt
89.000 21 > Die Konzerndaten des Materials 000000000000000022 sind von Benutzer USER912 gesperrt
89.000 24 > Die Konzerndaten des Materials 000000000000000022 sind von Benutzer USER912 gesperrt
Code: Alles auswählen.
**********************************************************************
* Füllen der Hoehe und Längeneinheit mit Funktionsbaustein
* Struktur
* Material| Hoehe| Längeneinheit|
* --------|------|--------------|
* X| X| X|
**********************************************************************
FORM HOEHE_FUELLEN.
* Variablen definition
DATA: L_HEADDATA LIKE BAPIMATHEAD,"Kopfsegment mit Steuerungsinformation
L_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,"Returnparameter
V_MATNR LIKE MARA-MATNR,"Allgemeine Materialdaten
V_TEXT(200),"Material mit .......
V_ZAHLER(3),"Der Zaehler
V_NULL(3), "Der Zaehler
V_MESSAGE(100)."Message
* Interne Tabelledefinition
DATA: BEGIN OF I_NULL OCCURS 0,
MATNR LIKE MARA-MATNR,"Materialnummer
HOEHE LIKE MARM-HOEHE,"Höhe
MEINH LIKE MARM-MEINH,"Alternativmengeneinheit zur Lagermengeneinheit
MEABM LIKE MARM-MEABM,"Einheit für Länge/Breite/Höhe
END OF I_NULL.
DATA: BEGIN OF I_UCCESS OCCURS 0,
MATNR LIKE MARA-MATNR,"Materialnummer
HOEHE LIKE MARM-HOEHE,"Höhe
MEINH LIKE MARM-MEINH,"Alternativmengeneinheit zur Lagermengeneinheit
MESSAGE LIKE BAPIRET2-MESSAGE,"Meldungstext
MEABM LIKE MARM-MEABM,"Einheit für Länge/Breite/Höhe
END OF I_UCCESS.
* Mengeneinheiten
DATA BEGIN OF LT_BAPIE1MARMRT OCCURS 0.
INCLUDE STRUCTURE BAPI_MARM.
DATA END OF LT_BAPIE1MARMRT.
* Ankreuzleiste zu BAPI_MARM
DATA BEGIN OF LT_BAPIE1MARMRTX OCCURS 0.
INCLUDE STRUCTURE BAPI_MARMX.
DATA END OF LT_BAPIE1MARMRTX.
*---------------------------------*
* START-OF-FORM
*---------------------------------*
CLEAR: I_DATEN, V_MATNR, V_ZAHLER, V_NULL.
REFRESH: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX, I_NULL, I_UCCESS.
LOOP AT I_DATEN.
*** BEGIN Daten initialisieren
CLEAR: L_HEADDATA-MATERIAL,
L_HEADDATA-BASIC_VIEW,
LT_BAPIE1MARMRTX,
LT_BAPIE1MARMRT.
* Refreshen von Tabelle nötig, sonst ist der Fehlertyp immer noch im Speicher enthalten
REFRESH: LT_BAPIE1MARMRT, LT_BAPIE1MARMRTX.
*** ENDE Daten initialisieren
L_HEADDATA-MATERIAL = I_DATEN-MATNR."Materialnummer
L_HEADDATA-BASIC_VIEW = 'X'. "Sicht Grunddaten
* Liest nur ein einzige Datensatz herraus
READ TABLE I_DATEN_CL WITH KEY MATNR = I_DATEN-MATNR
MEINH = I_DATEN-MEINH.
* Datensatz für Änderung an der MARM
IF SY-SUBRC EQ 0.
LT_BAPIE1MARMRT-ALT_UNIT = I_DATEN_CL-MEINH. "Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRT-ALT_UNIT_ISO = I_DATEN_CL-MEINH."Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRT-NUMERATOR = I_DATEN_CL-UMREZ."Zähler
LT_BAPIE1MARMRT-HEIGHT = I_DATEN_CL-HOEHE. "Höhe
LT_BAPIE1MARMRT-UNIT_DIM = I_DATEN_CL-MEABM. "Längen-Einheit
APPEND LT_BAPIE1MARMRT.
* Ankreuzfelder (die Schlüsselfelder genauso wie bei den Datenfeldern
* belegen, die restlichen Felder mit 'X')
LT_BAPIE1MARMRTX-ALT_UNIT = I_DATEN_CL-MEINH."Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRTX-ALT_UNIT_ISO = I_DATEN_CL-MEINH."Alternativmengeneinheit zur Lagermengeneinheit
LT_BAPIE1MARMRTX-NUMERATOR = 'X'.
LT_BAPIE1MARMRTX-HEIGHT = 'X'.
LT_BAPIE1MARMRTX-UNIT_DIM = 'X'.
APPEND LT_BAPIE1MARMRTX.
ENDIF.
* Wenn Hoehe nicht gleich NULL ist
IF LT_BAPIE1MARMRT-HEIGHT IS NOT INITIAL.
* Änderungen durchführen je Material
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = L_HEADDATA
IMPORTING
RETURN = L_RETURN
TABLES
UNITSOFMEASURE = LT_BAPIE1MARMRT
UNITSOFMEASUREX = LT_BAPIE1MARMRTX.
ENDIF.
CLEAR: I_NULL, I_UCCESS.
* Wenn das Material nicht geändert wurde
IF L_RETURN-TYPE EQ 'E'.
PACK I_DATEN_CL-MATNR TO I_UCCESS-MATNR.
CONDENSE I_UCCESS-MATNR.
MOVE I_DATEN_CL-HOEHE TO I_UCCESS-HOEHE.
MOVE I_DATEN_CL-MEINH TO I_UCCESS-MEINH.
MOVE L_RETURN-MESSAGE TO I_UCCESS-MESSAGE.
V_ZAHLER = V_ZAHLER + 1.
APPEND I_UCCESS.
* Wenn die Hoehe gleich 0 ist
ELSEIF LT_BAPIE1MARMRT-HEIGHT IS INITIAL
AND LT_BAPIE1MARMRT-UNIT_DIM IS NOT INITIAL.
PACK I_DATEN_CL-MATNR TO I_NULL-MATNR.
CONDENSE I_NULL-MATNR.
MOVE I_DATEN_CL-HOEHE TO I_NULL-HOEHE.
MOVE I_DATEN_CL-MEINH TO I_NULL-MEINH.
MOVE I_DATEN_CL-MEABM TO I_NULL-MEABM.
V_NULL = V_NULL + 1.
APPEND I_NULL.
ENDIF.
CLEAR: L_RETURN.
ENDLOOP.
SKIP.
*-------------------------------------
* Ausgabeliste-Verarbeitung *
*-------------------------------------
* Wird ausgegeben, wenn Fehlermeldungen vorhanden sind
IF V_ZAHLER NE 0.
WRITE: / TEXT-005.
WRITE: /(50) SY-ULINE.
CLEAR: V_MATNR.
LOOP AT I_UCCESS.
IF I_UCCESS-MATNR NE V_MATNR.
CLEAR V_TEXT.
WRITE TEXT-010 TO V_TEXT.
WRITE I_UCCESS-MATNR TO V_TEXT+9.
WRITE TEXT-011 TO V_TEXT+14.
WRITE: / V_TEXT, 30 I_UCCESS-HOEHE, I_UCCESS-MEINH, '>', 55 I_UCCESS-MESSAGE.
MOVE I_UCCESS-MATNR TO V_MATNR.
ELSE.
WRITE: /30 I_UCCESS-HOEHE, I_UCCESS-MEINH, '>', 55 I_UCCESS-MESSAGE.
ENDIF.
ENDLOOP.
SKIP.
SKIP.
ENDIF.
* Wird ausgegeben, wenn Längeneinheiten vorhanden sind, aber Hoehe gleich 0
IF V_NULL NE 0.
WRITE: / TEXT-006.
WRITE /(63) SY-ULINE.
CLEAR: V_MATNR.
LOOP AT I_NULL.
IF I_NULL-MATNR NE V_MATNR.
CLEAR V_TEXT.
WRITE TEXT-010 TO V_TEXT.
WRITE I_NULL-MATNR TO V_TEXT+9.
WRITE TEXT-002 TO V_TEXT+14.
WRITE: / V_TEXT, 30 I_NULL-MEINH.
MOVE I_NULL-MATNR TO V_MATNR.
ELSE.
WRITE: /30 I_NULL-MEINH.
ENDIF.
ENDLOOP.
ENDIF.
* Wird ausgegeben, wenn in der Datenbank erfolgreich eingetragen wurde
IF V_NULL EQ 0 AND V_ZAHLER EQ 0.
WRITE: / TEXT-013.
WRITE: /(10) SY-ULINE.
WRITE: / TEXT-012.
ENDIF.
ENDFORM. "HOEHE_FUELLEN