pagedown

Getting started ... Alles für einen gelungenen Start.
30 Beiträge • Vorherige Seite 2 von 2 (current)
30 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
entschuldige, dass ich Probleme nicht genau beschrieben habe, also ich werde mich bemühen.
das programm funktioniert nicht, weil die Daten nicht hineingeschrieben werden, dass heisst,
die Daten bleiben wie vorher. Leider weiss ich nicht, wo das Problem liegt, wenn ich in der Transaktion
se37 Funktion BAPI_MATERIAL_MAINTAINDATA_RT teste und Daten wie Batchinput hineinschreiben, werden die
Daten in der Datenbank auch nicht geändert. Wo kann ich Anwendungslog anschauen?
Jetzt habe ich gesehen, dass Fehler ausgegeben werden, also L_RETURN-TYPE gleich E
gruss kostonstyle

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
ich habe weitere informationen gefunden.

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.                                                                       
ich befürchte, dass es um type fehler handelt :?:

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.                                                          

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
hallo abapprogrammer
ich habe mein Programm wie folgt umprogrammiert, damit es genauere Fehlermeldung anzeigt.

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.
In der Zeile

Code: Alles auswählen.

WRITE: / I_RETURN-MESSAGE. 
findet ich keine Spur von Fehler, der Fehlermeldungstext ist leer
aber in der Zeile, ein paar Zeile weiter oben

Code: Alles auswählen.

WRITE:/ L_RETURN-TYPE, L_RETURN-MESSAGE.
werden Fehler wie folgt angezeigt

Code: Alles auswählen.

E                                                                    
Meldungen zum Material 000000000000000007: Lognummer 0000000000000282
ist komisch oder?
Bitte um Hilfe danke kostonstyle

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
Fehlermeldung

Code: Alles auswählen.

00000000000000046522                                                     
Material 000000000000000007 ist kein Retail-Material (MAW1-Segment fehlt)
wo kann MAW1 finden oder wie kann ich dieses Problem beheben?

Gruss kostosntyle

Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Hallo kostonstyle,

1. Wie Du schon schreibst, gibt es beim Aufruf des FuBa
"BAPI_TRANSACTION_COMMIT" einen Typkonflikt bei der Variable WAIT. Das ist leicht zu korrigieren, nimm genau den Typ, der im Fuba definiert ist.

2. Wegen der Meldung bzgl. des fehlenden MAW1-Satzes: jetzt befürchte ich, dass ich Dir ggf. einen falschen FuBa genannt habe, der nur im IS-Retail genutzt werden kann/soll?! Habe gerade keinen Systemzugriff, um das irgendwie zu prüfen. Sorry.
Der MAW1-Satz (sofern vorhanden) macht ein Material zu einem Artikel im IS-Retail. Da er bei Dir nicht vorhanden ist, arbeitest Du im MM und nicht im IS-Retail.
Tausche bitte den Fuba gegen einen ähnlichen aus (ich glaube BAPI_MATERIAL_SAVEDATA oder so), die Strukturen/Tabellen sind meines Wissens sehr ähnlich.
Viele Grüße
Britta

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
hallo
vielen vielen dank für deine hilfe, du bist echt super :-)
habe jetzt das programm dementsprechend angepasst, und es hat geklappt.
einfach super. Ich möchte mich nochmals bei euch alle, wo sich mühe genommen haben und versucht mich zu helfen, ganz herzlich bedanken.
leute ihr seit super.
Hier noch der Code

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

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
hallo miteinder
bekomme manchmal ein paar fehlermeldung zu sehen

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 an
muss man bei den clientdata felder füllen? Ich habe nämlich nichts ausgefüllt.

gruss kostonstyle

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
jetzt erscheint nur noch die Fehlermeldung

Code: Alles auswählen.

34.450  40  >  Die Konzerndaten des Materials 000000000000000005 sind von Benutzer USER912 gesperrt
was ich sehr komisch an ganze sache ist, trotz diese Fehlermeldung werden Hoehe eingetragen.

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
hallo miteinander
ich habe wieder mal in mein programm folgender Fehler entdeckt.
wenn ich die daten in meinem programm so einspiele bekommen immer diese fehlermeldung,
obwohl am 12 Längeneinheit vorhanden ist

Batchinputdaten

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
Fehlerausgabe

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

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
programmcode

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.

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
habe den fehler mit dem Längeneiheit herraus gefunden
das Problem liegt darin Tabelle zu löschen.

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

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
wenn ich das programm bis am schluss debugge erscheint die meldung nicht

Code: Alles auswählen.

34.450  40  >  Die Konzerndaten des Materials 000000000000000005 sind von Benutzer USER912 gesperrt 
warum?

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
Bitte unbedingt um Hilfe
warum wird das ausgegebe, ich bin der user912 aber ich habe nichts 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

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
bitte ich euch schnell um hilfe
könnte mir bitte jemand sagen, wo der Fehler liegen könnte?

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
danke kostonstyle

Beitrag von kostonstyle (Specialist / 247 / 0 / 0 ) »
habe das problem inzwischen herrausgefunden, der fehler ist der commit work befehl

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

Vergleichbare Themen

1
Antw.
1078
Views
PageDown im ALV Tree?
von Lukas R. » 09.03.2017 09:04 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

LSMW-Problem
vor 5 Tagen von mazu gelöst 5 / 1704
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 1718

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

LSMW-Problem
vor 5 Tagen von mazu gelöst 5 / 1704
ATC Finding in Smartforms
vor einer Woche von sap_enthusiast 2 / 1718

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 87541
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 140748