Code: Alles auswählen.
Zeitlimit überschritten
Was ist passiert?
Das Programm "ZRUTBAINHOEHE" hat die maximal zulässige Laufzeit ohne
Unterbrechung überschritten und wurde deshalb abgebrochen.
Was können Sie tun?
Notieren Sie bitte, welche Aktionen und Eingaben zu dem Fehler geführt
haben.
Wenden Sie sich bitte zur weiteren Bearbeitung des Problems an Ihren
SAP-Administrator.
Mit der Transaktion ST22 zur ABAP-Dumpanalyse können Sie
Abbruchmeldungen anschauen und verwalten, insbesondere längere Zeit
aufbewahren.
verwalten, insbesondere längere Zeit aufbewahren.
Code: Alles auswählen.
REPORT ZRUTIBAINPUT LINE-SIZE 100.
* Tabellen
TABLES: MARM.
* Excel Struktur nachbilden
DATA: I_ITAB TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE,
COUNT TYPE I.
*Interne Tabelle definition
DATA: BEGIN OF I_DATEN OCCURS 1,
MATNR LIKE MARA-MATNR, " Materialnummer
MAKTX LIKE MAKT-MAKTX, " Materialkurztext
MEINH LIKE MARM-MEINH, " AME
UMREN LIKE MARM-UMREN, " Nenner
UMREZ LIKE MARM-UMREZ, " Zähler
MEINS LIKE MARA-MEINS, " BME
HOEHE LIKE MARM-HOEHE, " Höhe
MEABM LIKE MARM-MEABM, " Einheit
END OF I_DATEN.
DATA: I_DATEN_CL LIKE I_DATEN OCCURS 1 WITH HEADER LINE.
* Interne Tabellen
DATA: BEGIN OF R_MES.
INCLUDE STRUCTURE MESSAGE.
DATA: END OF R_MES.
DATA: BEGIN OF I_BDC OCCURS 10.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF I_BDC.
* Variablen
DATA: V_LAE, " Nachrichten
V_INDEX LIKE SY-INDEX, " Schleifen, aktueller Schleifendurchlauf
OPEN, " Datei öffnen
V_ERR, " Fehler
P_BCOL TYPE I, " Spalteanfang
P_BROW TYPE I, " Zeileanfang
P_ECOL TYPE I, " Spalteende
P_EROW TYPE I, " Zeileende
V_SMTEXTH(20), " Hoehe Feld bestimmen
V_SMTEXTM(20), " Mass Feld bestimmen
V_MATNR LIKE MARA-MATNR, " Materialnummer
V_UMREZ LIKE MARM-UMREZ, " Zähler
V_HOEHE(13), " Höhe
V_MEABM LIKE MARM-MEABM," Einheit
V_COUNTER(2)," Zähler für Häheinhalt
V_ROW(5), " Für Spalten Berechnung
BILDFLAG LIKE T130F-KZREF,
RMMZU_BILDPROZ LIKE RMMZU-BILDPROZ,
RMMZU_BILDFOLGE LIKE RMMZU-BILDFOLGE.
* Parameter
PARAMETERS: P_PFAD LIKE RLGRAP-FILENAME OBLIGATORY. " Pfadangabe
************************************************************************
*
* Start der Selektion
*
************************************************************************
START-OF-SELECTION.
CLEAR: P_BCOL, P_BROW, P_ECOL, P_EROW.
* Spalte- und Zeileanfang und Spalte- und Zeileende bestimmen
P_BCOL = 1.
P_BROW = 2.
P_ECOL = 8.
P_EROW = 9000.
* Überprüfen, ob Datei vorhanden ist
PERFORM CHECK_PATH.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_PFAD
I_BEGIN_COL = P_BCOL
I_BEGIN_ROW = P_BROW
I_END_COL = P_ECOL
I_END_ROW = P_EROW
TABLES
INTERN = I_ITAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
* Wenn Datei leer ist
IF I_ITAB IS INITIAL.
WRITE: / TEXT-001.
EXIT.
ENDIF.
CLEAR: I_ITAB.
REFRESH: I_DATEN.
* Tabellekonvertierung
LOOP AT I_ITAB.
* Überprüft Zeilenummer
IF I_ITAB-ROW NE V_ROW.
MOVE I_ITAB-ROW TO V_ROW.
LOOP AT I_ITAB WHERE ROW EQ V_ROW.
IF I_ITAB-COL EQ '0001'. " Materialnummer
MOVE I_ITAB-VALUE TO I_DATEN-MATNR.
ENDIF.
IF I_ITAB-COL EQ '0002'. " Materialkurztext
MOVE I_ITAB-VALUE TO I_DATEN-MAKTX.
ENDIF.
IF I_ITAB-COL EQ '0003'. " AME
MOVE I_ITAB-VALUE TO I_DATEN-MEINH.
ENDIF.
IF I_ITAB-COL EQ '0004'. " Nenner
MOVE I_ITAB-VALUE TO I_DATEN-UMREN.
ENDIF.
IF I_ITAB-COL EQ '0005'. " Zähler
MOVE I_ITAB-VALUE TO I_DATEN-UMREZ.
ENDIF.
IF I_ITAB-COL EQ '0006'. " BME
MOVE I_ITAB-VALUE TO I_DATEN-MEINS.
ENDIF.
IF I_ITAB-COL EQ '0007'. " Höhe
MOVE I_ITAB-VALUE TO I_DATEN-HOEHE.
ENDIF.
IF I_ITAB-COL EQ '0008'. " Einheit
MOVE I_ITAB-VALUE TO I_DATEN-MEABM.
ENDIF.
ENDLOOP.
ENDIF.
* Daten werden nur gespeichert, wenn Inhalte nicht identisch sind
IF I_DATEN IS NOT INITIAL.
APPEND I_DATEN.
ENDIF.
CLEAR: I_DATEN.
ENDLOOP.
REFRESH I_DATEN_CL.
* I_DATEN-Werte kopieren
LOOP AT I_DATEN.
CLEAR I_DATEN_CL.
MOVE-CORRESPONDING I_DATEN TO I_DATEN_CL.
APPEND I_DATEN_CL.
ENDLOOP.
* Fehlermeldung ausgeben
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
* Beginnen mit den Höheeintrag
PERFORM HOEHE_FUELLEN.
ENDIF.
* Pfad selektieren per Fenster
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PFAD.
PERFORM F4_HELP_FOR_PATH USING P_PFAD.
END-OF-SELECTION.
*----------------------------------------------------------------------*
* Beginn of FORM
*----------------------------------------------------------------------*
***********************************************************************
* Öffnet den Datei-Dialog *
***********************************************************************
FORM F4_HELP_FOR_PATH CHANGING P_PATH.
DATA: LT_FILE_TABLE TYPE FILETABLE,
LS_FILE_TABLE TYPE FILE_TABLE,
LV_RC TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = 'Datei öffnen' " Fenster Titel
DEFAULT_EXTENSION = 'XLS' " Files bestimmen
CHANGING
FILE_TABLE = LT_FILE_TABLE
RC = LV_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LV_RC = 1.
READ TABLE LT_FILE_TABLE INDEX 1 INTO LS_FILE_TABLE.
P_PATH = LS_FILE_TABLE-FILENAME.
ENDIF.
ENDFORM. "F4_HELP_FOR_PATH
***********************************************************************
* Überprüft den angegebenen Pfad. *
***********************************************************************
FORM CHECK_PATH.
DATA : LV_RESULT TYPE ABAP_BOOL,
LV_FILENAME TYPE STRING.
LV_FILENAME = P_PFAD.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LV_FILENAME
RECEIVING
RESULT = LV_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LV_RESULT IS INITIAL.
MESSAGE E000(ZBINPUT) WITH P_PFAD.
ENDIF.
ENDFORM. " CHECK
**********************************************************************
* 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
Code: Alles auswählen.
1. Bereite dein Programm so auf, daß es auch im Batch lauffähig ist (also Dateien z.B. als CSV-Dateien auf einen Applikationsserver speichern etc.)
Er meint, dass du deine Datei wahrscheinlich vom lokalen Client (Präsentationsserver) aus lädst. Wenn du sie aber auf den Applikationsserver (also die Maschine, auf der auch das SAP läuft) hochlädst und DANN das Programm im Hintergrund startest* hast du das Problem nicht mehr.kostonstyle hat geschrieben:danke erstmal für deine antwort, aber kannst du den vorgang für mich bitte genauer beschreiben, variante 1?
Code: Alles auswählen.
1. Bereite dein Programm so auf, daß es auch im Batch lauffähig ist (also Dateien z.B. als CSV-Dateien auf einen Applikationsserver speichern etc.)
Code: Alles auswählen.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_pfad
i_begin_col = p_bcol
i_begin_row = p_brow
i_end_col = p_ecol
i_end_row = p_erow
TABLES
intern = i_itab
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
Er bricht also im Funktionsbaustein ab? Steht in der Doku was zu Laufzeitproblemen? Ich hab grad kein System zur Hand, darum kann ich mir das nicht angucken.kostonstyle hat geschrieben:Verantwortlich für abbruchstelle ist der zeile hierCode: Alles auswählen.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_pfad i_begin_col = p_bcol i_begin_row = p_brow i_end_col = p_ecol i_end_row = p_erow TABLES intern = i_itab EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3.
Code: Alles auswählen.
LOOP AT i_itab.
* Überprüft Zeilenummer
IF i_itab-row NE v_row.
MOVE i_itab-row TO v_row.
LOOP AT i_itab WHERE row EQ v_row.
IF i_itab-col EQ '0001'. " Materialnummer
MOVE i_itab-value TO i_daten-matnr.
ENDIF.
IF i_itab-col EQ '0002'. " Materialkurztext
MOVE i_itab-value TO i_daten-maktx.
ENDIF.
IF i_itab-col EQ '0003'. " AME
MOVE i_itab-value TO i_daten-meinh.
ENDIF.
IF i_itab-col EQ '0004'. " Nenner
MOVE i_itab-value TO i_daten-umren.
ENDIF.
IF i_itab-col EQ '0005'. " Zähler
MOVE i_itab-value TO i_daten-umrez.
ENDIF.
IF i_itab-col EQ '0006'. " BME
MOVE i_itab-value TO i_daten-meins.
ENDIF.
IF i_itab-col EQ '0007'. " Höhe
MOVE i_itab-value TO i_daten-hoehe.
ENDIF.
IF i_itab-col EQ '0008'. " Einheit
MOVE i_itab-value TO i_daten-meabm.
ENDIF.
ENDLOOP.
ENDIF.
* Daten werden nur gespeichert, wenn Inhalte nicht identisch sind
IF i_daten IS NOT INITIAL.
APPEND i_daten.
ENDIF.
CLEAR: i_daten.
ENDLOOP.
Code: Alles auswählen.
Nach einer bestimmten Zeit wird das Programm abgebrochen, um den
Arbeitsbereich für einen anderen wartenden Benutzer zu räumen.
Damit soll verhindert werden, daß ein Arbeitsbereich z.B. durch
- Endlosschleifen (DO, WHILE, ...),
- Datenbankzugriffe mit großer Ergebnismenge,
- Datenbankzugriffe ohne geeigneten Index (full table scan)
unnötig lang blockiert wird.
Die maximale Laufzeit eines Programms wird vom Systemprofilparameter
"rdisp/max_wprun_time" begrenzt. Die aktuelle Einstellung ist
600 Sekunden. Nach Überschreiten dieser Zeitgrenze wird versucht,
ein evtl. laufendes SQL-Statement abzubrechen bzw. dem ABAP-Prozessor
signalisiert, das laufende Programm abzubrechen. Danach wird nochmals
max. 60 Sekunden gewartet. Falls danach das Programm immer noch aktiv
ist, wird der Work-Prozeß durchgestartet.
erfolgreicher Bearbeitung nicht sofort abgebrochen wird, steht dem
Programm nochmal die Zeit von 600 Sekunden zur Verfügung.
Die maximale Laufzeit eines Programms beträgt dadurch mindestens den
doppelten Wert des Systemprofilparameters "rdisp/max_wprun_time".
Code: Alles auswählen.
LOOP AT i_itab.
* Überprüft Zeilenummer
IF i_itab-row NE v_row.
MOVE i_itab-row TO v_row.
LOOP AT i_itab WHERE row EQ v_row.
Code: Alles auswählen.
* Tabellekonvertierung
LOOP AT i_itab.
* Überprüft Zeilenummer
IF i_itab-row NE v_row.
MOVE i_itab-row TO v_row.
LOOP AT i_itab WHERE row EQ v_row.
IF i_itab-col EQ '0001'. " Materialnummer
MOVE i_itab-value TO i_daten-matnr.
ENDIF.
IF i_itab-col EQ '0002'. " Materialkurztext
MOVE i_itab-value TO i_daten-maktx.
ENDIF.
IF i_itab-col EQ '0003'. " AME
MOVE i_itab-value TO i_daten-meinh.
ENDIF.
IF i_itab-col EQ '0004'. " Nenner
MOVE i_itab-value TO i_daten-umren.
ENDIF.
IF i_itab-col EQ '0005'. " Zähler
MOVE i_itab-value TO i_daten-umrez.
ENDIF.
IF i_itab-col EQ '0006'. " BME
MOVE i_itab-value TO i_daten-meins.
ENDIF.
IF i_itab-col EQ '0007'. " Höhe
MOVE i_itab-value TO i_daten-hoehe.
ENDIF.
IF i_itab-col EQ '0008'. " Einheit
MOVE i_itab-value TO i_daten-meabm.
ENDIF.
ENDLOOP.
ENDIF.
v_count = v_count + 1.
* Daten werden nur gespeichert, wenn Inhalte nicht identisch sind
IF i_daten IS NOT INITIAL.
APPEND i_daten.
ENDIF.
CLEAR: i_daten.
IF v_count > 10000.
CLEAR v_count.
COMMIT WORK.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
Geben Sie eine Materialart ein
Aber die vielen Ratschläge nicht befolgt.kostonstyle hat geschrieben:so habe jetzt mein programm angepasst. Der commit work habe ich noch in loop eingefügt.