Tabelle MARC editieren

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
Hallo,

MARC Tabelle mit BAPI BAPI_MATERIAL_SAVEDATA updaten funktioniert nicht wie gewünscht.

1. MARC erweitert mit Append Struktur
2. BAPI_TE_MARC & BAPI_TE_MARCX erweitert mit Append
3. In Transaktion OMSR das FELD MARC-Z.. hinzugefügt (mit einer beliebigen Field Selection Group)
4. BAPI aufrufen.

Ich bekommen auch eine Erfolgsmeldung, aber die Tabelle hat leider nicht das Z-Feld aktualisiert.
Ich glaube, es liegt an der Transaktion OMSR. Anscheinend mache ich hier etwas falsch.

Kann mir weiterhelfe? Danke

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


Re: Tabelle MARC editieren

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Hast du einen BAPI_TRANSACTION_COMMIT programmiert?

Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
ewx hat geschrieben:
07.11.2024 13:28
Hast du einen BAPI_TRANSACTION_COMMIT programmiert?
ja mit BAPI_TRANSACTION_COMMIT

Re: Tabelle MARC editieren

Beitrag von Murdock (Specialist / 123 / 58 / 10 ) »
retsch hat geschrieben:
07.11.2024 12:04
3. In Transaktion OMSR das FELD MARC-Z.. hinzugefügt (mit einer beliebigen Field Selection Group)
Habt ihr nicht evtl. schon Z-Felder an der MARC, für die entsprechende View, an denen Du dich bzgl. Feldauswahlgruppe orientieren kannst? Ansonsten tippe ich auf den falschen Pflegestatus der Feldauswahlgruppe.

Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
Murdock hat geschrieben:
07.11.2024 15:11
retsch hat geschrieben:
07.11.2024 12:04
3. In Transaktion OMSR das FELD MARC-Z.. hinzugefügt (mit einer beliebigen Field Selection Group)
Habt ihr nicht evtl. schon Z-Felder an der MARC, für die entsprechende View, an denen Du dich bzgl. Feldauswahlgruppe orientieren kannst? Ansonsten tippe ich auf den falschen Pflegestatus der Feldauswahlgruppe.
Nein, das wären die ersten Felder in MARC.
Wie finde ich heraus, in welcher Gruppe das gehört?

Re: Tabelle MARC editieren

Beitrag von Murdock (Specialist / 123 / 58 / 10 ) »
retsch hat geschrieben:
07.11.2024 16:52
Nein, das wären die ersten Felder in MARC.
Wie finde ich heraus, in welcher Gruppe das gehört?
Wenn sich dein Z-Feld genauso verhalten soll, wie andere Felder auf der Materialstammsicht, zu der es gehört (im Sinne von Einblenden / Ausblenden, Muss / Kann), dann schau in der OMSR in welcher Gruppe diese anderen Felder sind und nimm die.

Du musst dann die zu dem Pflegestatus entsprechende Sicht beim Aufruf des BAPIs auch in der "headdata" Struktur "ankreuzen".

Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
Murdock hat geschrieben:
08.11.2024 06:50
retsch hat geschrieben:
07.11.2024 16:52
Nein, das wären die ersten Felder in MARC.
Wie finde ich heraus, in welcher Gruppe das gehört?
Wenn sich dein Z-Feld genauso verhalten soll, wie andere Felder auf der Materialstammsicht, zu der es gehört (im Sinne von Einblenden / Ausblenden, Muss / Kann), dann schau in der OMSR in welcher Gruppe diese anderen Felder sind und nimm die.

Du musst dann die zu dem Pflegestatus entsprechende Sicht beim Aufruf des BAPIs auch in der "headdata" Struktur "ankreuzen".

habe ich alles getan.
Ich bekomme ja eine Erfolgsmeldung. Aber die Tabelle hat nicht den neuen Wert übernommen.

Das Coding:

Code: Alles auswählen.


    DATA: header           TYPE bapimathead,
          return           TYPE bapiret2,
          extension        TYPE STANDARD TABLE OF bapiparex,
          extensionx       TYPE STANDARD TABLE OF bapiparexx,
          marc             TYPE bapi_marc,
          marcx            TYPE bapi_marcx,
          wa_bapi_te_marc  TYPE bapi_te_marc,
          wa_bapi_te_marcx TYPE bapi_te_marcx.

    header = VALUE #( material = iv_matnr
                                 mrp_view = abap_true ).

    wa_bapi_te_marc-plant = iv_plant.
    wa_bapi_te_marc-ZZFELD = iv_value.

    wa_bapi_te_marcx-plant =  iv_plant.
    wa_bapi_te_marcx-ZZFELD = abap_true.

    APPEND INITIAL LINE TO extension ASSIGNING FIELD-SYMBOL(<extension>).
    IF <extension> IS ASSIGNED.
      <extension>-structure = 'BAPI_TE_MARC'.
      <extension>-valuepart1+0(4) = wa_bapi_te_marc-plant.
      <extension>-valuepart1+25(10) = wa_bapi_te_marc-ZZFELD   "<<<---- eventuell ist hier Fehler

      APPEND INITIAL LINE TO extensionx ASSIGNING FIELD-SYMBOL(<extensionx>).
      IF <extensionx> IS ASSIGNED.
        <extensionx>-structure = 'BAPI_TE_MARCX'.
        <extensionx>-valuepart1+0(4) = wa_bapi_te_marcx-plant.
        <extensionx>-valuepart1+7(1) = wa_bapi_te_marcx-ZZFELD.
      ENDIF.
    ENDIF.

    marc  = VALUE #( plant = '2001' ).
    marcx = VALUE #( plant = '2001' ).

    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        headdata     = header
        plantdata    = marc
        plantdatax   = marcx
*       forecastparameters   =
*       forecastparametersx  =
*       planningdata =
*       planningdatax        =
*       storagelocationdata  =
*       storagelocationdatax =
*       valuationdata        =
*       valuationdatax       =
*       warehousenumberdata  =
*       warehousenumberdatax =
*       salesdata    =
*       salesdatax   =
*       storagetypedata      =
*       storagetypedatax     =
*       flag_online  = space
*       flag_cad_call        = space
*       no_dequeue   = space
*       no_rollback_work     = space
*       clientdatacwm        =
*       clientdatacwmx       =
*       valuationdatacwm     =
*       valuationdatacwmx       =
*       matplstadata =
*       matplstadatax        =
*       marc_aps_extdata     =
*       marc_aps_extdatax    =
      IMPORTING
        return       = return
      TABLES
        extensionin  = extension
        extensioninx = extensionx.

    IF return-type CA 'EA'.
      ROLLBACK WORK.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    ENDIF.

Re: Tabelle MARC editieren

Beitrag von Murdock (Specialist / 123 / 58 / 10 ) »
Die BAPI_TE_MARCX ist eine "Ankreuzstruktur". Da gehört zwar das Werk ausgeschrieben rein, aber der Rest, also die Felder die "upgedatet" werden sollen, bekommen nur ein 'X' und nicht den Wert des Z-Feldes (bzw. das erste Zeichen, was unter Umständen ja auch mal ein Space sein kann).

Ansonsten sind die Zuweisung mit den Offsets und Längenangaben recht fehleranfällig und unnötig. Du kannst einfach Deine komplette wa_bapi_te... Struktur in die Zielstruktur hinter den Strukturnamen schieben.

Folgende Benutzer bedankten sich beim Autor Murdock für den Beitrag:
retsch


Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
Murdock hat geschrieben:
08.11.2024 08:10
Ansonsten sind die Zuweisung mit den Offsets und Längenangaben recht fehleranfällig und unnötig. Du kannst einfach Deine komplette wa_bapi_te... Struktur in die Zielstruktur hinter den Strukturnamen schieben.

Danke. Genau da war das Problem :)

Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
Murdock hat geschrieben:
08.11.2024 08:10
Die BAPI_TE_MARCX ist eine "Ankreuzstruktur". Da gehört zwar das Werk ausgeschrieben rein, aber der Rest, also die Felder die "upgedatet" werden sollen, bekommen nur ein 'X' und nicht den Wert des Z-Feldes (bzw. das erste Zeichen, was unter Umständen ja auch mal ein Space sein kann).

Ansonsten sind die Zuweisung mit den Offsets und Längenangaben recht fehleranfällig und unnötig. Du kannst einfach Deine komplette wa_bapi_te... Struktur in die Zielstruktur hinter den Strukturnamen schieben.
ich habe auf die gleiche weise versucht ein zweites Z-Feld zu bearbeiten.
Leider verändert sich da nichts.

Ich habe auch den Parameter valuepart2 für das andere zweite Feld genommen.

Re: Tabelle MARC editieren

Beitrag von tar (ForumUser / 90 / 22 / 28 ) »
retsch hat geschrieben:
08.11.2024 10:34
Ich habe auch den Parameter valuepart2 für das andere zweite Feld genommen.
Arbeite nicht mit den Valueparts, stattdessen wie gewohnt deine Struktur befüllen und dann nach dem Strukturnamensfeld übernehmen. Du kannst die Länge dieses Feldes so bestimmen:

Code: Alles auswählen.

describe field <extension>-structure length data(lv_length) in character mode.
Das kannst du dann als Offset nutzen. Die Länge des Strukturnamensfeldes ist meines Wissen aber für alle Extension-IN/OUT-Strukturen (BAPIPAREX, usw.) identisch (nämlich Länge = 30). Könntest du also auch fix reinknallen und das sähe dann so aus:

Code: Alles auswählen.

append initial line to lt_extension assigning field-symbol(<extension>).
<extension>-structure = 'BAPI_TE_MARC'.
<extension>+30 = value bapi_te_marc(
  plant   = iv_plant
  zzfeld1 = iv_value1
  zzfeld2 = iv_value2
  " usw.
).
Identisch dann für die Updateflags:

Code: Alles auswählen.

append initial line to lt_extension_x assigning field-symbol(<extension_x>).
<extension_x>-structure = 'BAPI_TE_MARCX'.
<extension_x>+30 = value bapi_te_marcx(
  plant   = iv_plant
  zzfeld1 = abap_true
  zzfeld2 = abap_true
  " usw.
).
Du brauchst auch das ASSIGN nach einem APPEND nicht prüfen. Wenn das schief geht, würde es dumpen (bspw. bei sortierten Tabellen, bei denen man INSERT nehmen sollte).

Re: Tabelle MARC editieren

Beitrag von retsch (ForumUser / 48 / 5 / 1 ) »
.

Seite 1 von 1

Vergleichbare Themen

11
Antw.
3056
Views
Tabelle editieren
von christof » 03.05.2018 07:57 • Verfasst in ABAP® für Anfänger
3
Antw.
2212
Views
Ändern der Werte in der Tabelle MARC
von erubadhron » 05.04.2017 14:56 • Verfasst in ABAP® für Anfänger
6
Antw.
10080
Views
Tabelle zeilenweise lesen und editieren ohne SE16, SM30/31
von MindMOB » 22.10.2007 18:03 • Verfasst in ABAP® Core
1
Antw.
1806
Views
ALV Editieren
von Betze » 04.08.2006 09:00 • Verfasst in ABAP Objects®
2
Antw.
3115
Views
Anlagedatum MARC
von Bertelsmann » 13.02.2008 19:20 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



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

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.