SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

SAP R/3 Vertrieb: Auftragsverwaltung, Versand und Transport, Fakturierung, Kreditmanagement, Außenhandel/Zoll...
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von creative235 (ForumUser / 9 / 5 / 0 ) »
Hallo zusammen,

ich weiß leider nicht weiter. Eventuell weiß ja einer von euch Rat? Ich realisiere eine Erweiterung in der SAPMV45A. Hier werden nach bestimmten Kriterien Artikel "on-the-fly" angelegt und in die Auftragspositionen gespielt. Das funktioniert auch alles problemlos. Nach Übernahme in die Positionen soll automatisiert ein Positionstext hinzugefügt werden. Hierfür arbeite ich mit den FMs 'SAVE_TEXT' und 'COMMIT_TEXT'. Beide FMs laufen mit initialem SY-SUBRC durch, allerdings übernimmt er den Text trotzdem nicht in der Position. Hier mein Code:

Code: Alles auswählen.

   DATA: memory_id(30)  VALUE 'SAPLSTXD',
         lv_header_text TYPE thead,
         lt_lines_text  TYPE STANDARD TABLE OF tline.
   DATA:
     BEGIN OF lt_catalog OCCURS 0,
       tdobject      LIKE thead-tdobject,
       tdname        LIKE thead-tdname,
       tdid          LIKE thead-tdid,
       tdspras       LIKE thead-tdspras,
       function(1)   TYPE c,
       keep(1)       TYPE c,
       rename(1)     TYPE c,
       id(6)         TYPE n,
       copyindex(4)  TYPE i,
       is_reftext(1) TYPE c,
     END   OF lt_catalog.
   DATA: wa_catalog LIKE LINE OF lt_catalog.

   IMPORT catalog TO lt_catalog FROM MEMORY ID memory_id.

   READ TABLE lt_catalog INTO wa_catalog INDEX 1.

   lv_header_text-tdobject = 'VBBP'.
   CONCATENATE wa_catalog-tdname xvbap-posnr INTO lv_header_text-tdname.
   lv_header_text-tdid     = 'Z001'.
   lv_header_text-tdspras  = wa_catalog-tdspras.

   APPEND INITIAL LINE TO lt_lines_text ASSIGNING FIELD-SYMBOL(<fs_line_text>).
   IF sy-subrc IS INITIAL.
     <fs_line_text>-tdline = 'Test'.
   ENDIF.

   CALL FUNCTION 'SAVE_TEXT'
     EXPORTING
       header   = lv_header_text
     TABLES
       lines    = lt_lines_text
     EXCEPTIONS
       id       = 1                " Text-Id in Textheader ungültig
       language = 2                " Sprache in Text-Header ungültig
       name     = 3                " Textname in Texthaeder ungültig
       object   = 4                " Textobjekt in Textheader ungültig
       OTHERS   = 5.

   IF sy-subrc IS INITIAL.
     CALL FUNCTION 'COMMIT_TEXT'
       EXPORTING
         object       = lv_header_text-tdobject
         name         = lv_header_text-tdname
         id           = lv_header_text-tdid
         language     = lv_header_text-tdspras
       IMPORTING
         commit_count = sy-index.
   ENDIF.
Falls die Info hilft: Der Code wird direkt nach dem User-Exit "USEREXIT_MOVE_FIELD_TO_VBAK" ausgeführt.

Viele Grüße,
Dennis

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


Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

bei den Texten gibt es da ein paar Stolperfallen. Nach SAVE_TEXT muss bei manchen Texten noch der Funktionsbaustein COMMIT_TEXT aufgerufen werden (steht in der Doku welche).
Danach commit work und dann ist Text endgültig gespeichert.

Gruß Wolfgang

Folgende Benutzer bedankten sich beim Autor wreichelt für den Beitrag:
creative235


Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von creative235 (ForumUser / 9 / 5 / 0 ) »
Hallo Wolfgang,

der Commit Work am Ende war's. Vielen, vielen Dank!!

Viele Grüße,
Dennis

Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Den Commit solltest du schnellstens wieder herausnehmen!!
Damit kannst du inkonsistente Daten erzeugen!
COMMIT_TEXT ist nicht notwendig.
Wenn der SAVE_TEXT nicht funktioniert, dann stimmt evtl. mit dem Namen was nicht. Warum machst du eine Änderung für eine Position in MOVE_FIELD_TO_VBAK und nicht in MOVE_FIELD_TO_VBAP?

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
creative235


Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von creative235 (ForumUser / 9 / 5 / 0 ) »
Hallo Enno,

die Position wird neu hinzugefügt und läuft über die Routine MOVE_FIELD_TO_VBAP. Danach wird nur nochmal das VBAK-Pendant durchlaufen um Kopfdaten zu ändern bzw. zu ergänzen (Rufe ich an der entsprechenden Stelle nochmals separat auf mittels PERFORM).

Da der Text direkt beim hinzufügen der Position hinzugefügt werden soll sieht der Input für den SAVE_TEXT-Baustein folgendermaßen aus:

Header
TDOBJECT: VBBP
TDNAME: XXXXXXXXXX000010
TDID: Z002
TDSPRAS: D

Andere Felder sind in der Struktur aktuell nicht gefüllt.

Lines
1 Zeile
TDFORMAT: *
TDLINE: Test-Text

Der korrespondierende Text in der Position hat folgende Eigenschaften (Weiß hier nicht, ob das wichtig ist):
Textname: XXXXXXXXXX000010
Sprache: DE
Text-ID: Z002
Textobjekt: VBBP

Eventuell habe ich in der Header-Struktur obligatorische Felder nicht gefüllt? In der Beschreibung des FM 'SAVE_TEXT' finde ich hier leider keine Hinweise darauf.

Der hinterlegte Sicherungsmodus (TTXOB) ist mit 'V' angegeben.

Viele Grüße,
Dennis

Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hey Dennis!
Sicherungsmodus "V" bedeutet, dass die Speicherung in der Verbuchung stattfindet.

Wenn du an der Stelle einen COMMIT machst, dann kann es sein, dass Teile des Auftrags bereits auf die DB geschrieben werden, obwohl der Auftrag noch nicht gesichert wurde. Probier das mal bei einem Auftrag, der unvollständig ist, so dass das Popup "Daten unvollständig. Daten bearbeiten oder sichern?" kommt. Dann "Bearbeiten" und dann die Bearbeitung des Auftrags abbrechen.

Folgendes Coding funktioniert bei mir einwandfrei:

Code: Alles auswählen.

FORM userexit_move_field_to_vbap.

  DATA ls_header     TYPE thead.
  DATA lt_lines      TYPE STANDARD TABLE OF tline.

  IF vbap-vbeln IS INITIAL.
    ls_header-tdname   = 'XXXXXXXXXX' && vbap-posnr.
  ELSE.
    ls_header-tdname   = vbap-vbeln && vbap-posnr.
  ENDIF.
  ls_header-tdobject = 'VBBP'.
  ls_header-tdid     = '0001'.
  ls_header-tdspras  = sy-langu.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id        = ls_header-tdid
      language  = ls_header-tdspras
      name      = ls_header-tdname
      object    = ls_header-tdobject
      local_cat = space
    IMPORTING
      header    = ls_header
    TABLES
      lines     = lt_lines
    EXCEPTIONS
      OTHERS    = 8.
  IF sy-subrc <> 0.
    lt_lines = VALUE #( ( tdformat = '*' tdline = |ARKTX: { vbap-arktx }| ) ).
    CALL FUNCTION 'SAVE_TEXT'
      EXPORTING
        header          = ls_header
        insert          = abap_true
        savemode_direct = space
        local_cat       = space
      TABLES
        lines           = lt_lines
      EXCEPTIONS
        OTHERS          = 5.
  ENDIF.

ENDFORM.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
creative235


Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

das Kennzeichen ob oder auch nicht kommt aus
notwendig weil in TB: TTXOB MVKE mit 'V' gekennzeichnet ist
In meinem Fall war es die Textart MVKE.

Gruß Wolfgang

Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von creative235 (ForumUser / 9 / 5 / 0 ) »
Hey Enno,

der Parameter "Insert" war im FM 'SAVE_TEXT' bei mir nicht versorgt. Jetzt funktioniert die Textanlage ohne den 'COMMIT_TEXT' und ohne ein COMMIT WORK. Das ein COMMIT WORK an der Stelle kritisch ist, da hätte ich ja auch mal selbst drauf kommen können :) Die Auswirkungen habe ich direkt "live" erlebt (Gott sei Dank nur im Entwicklungssystem). Jeder Auftrag hatte in Position 10 auf einmal den gleichen Text. Da in der STXH der Eintrag XXXX..XX000010 nun vorhanden war.

Vielen, vielen Dank euch beiden!

Viele Grüße,
Dennis

PS @Enno: Großes Lob für den Tricktresor. Dieser hat mir schon einige Male das Leben stark vereinfacht und ist vor allem für mich als "ABAP-Neuling" ( < 2 Jahre ) eine immense Erleichterung! :)

Re: SAPMV45A - Automatisiertes hinzufügen von Positionstexten

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Freut mich, dass es jetzt funktioniert!
Danke für die Rückmeldung!

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1036
Views
Archivierung von SD Kopf- und Positionstexten
von Piwi » 07.08.2007 10:55 • Verfasst in Sales and Distribution
5
Antw.
2730
Views
Automatisiertes Testen und Implementieren von UML-Diagrammen
von LGiesken » 02.08.2018 08:43 • Verfasst in ABAP® Core
0
Antw.
1188
Views
SAPMV45A - PS_PSP_PNR
von 82kolu1bma » 07.04.2016 14:27 • Verfasst in ABAP® für Anfänger
1
Antw.
2283
Views
Tabytrip / Dynprofolge im SAPMV45A
von gast4711 » 12.06.2007 16:10 • Verfasst in ABAP® Core
2
Antw.
505
Views
FCODE von SAP SAPMV45A aus einem anderen Report aus aufrufen ...
von jesse001 » 22.10.2019 17:29 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.