Variablen in Textbausteinen

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

In Textbausteinen können Variablen deklariert werden (im Inline-Editor) durch einen Variablennamen, der umschlossen wird durch zwei "kaufmännische Und", z. B. &vbdkl-bstnk& (Bestellnummer des Kunden, im Lieferschein). Die Variablen werden zur Laufzeit von der Formularumgebung ersetzt durch den Variableninhalt.

Anlage von Textbausteinen

  • Transaktion SO10 (Standardtexte)
  • Transaktion SMARTFORMS (Reiter "Textbaustein")
  • Im Beleg (z. B. Lieferungsanlage Transaktion VL01N)

Deklaration Variablen im Formular

  • Jede Variable muss dem Formular bekannt sein. Hier wurde dem Formular in Adobe Forms (Transaktion SFP) in der Schnittstelle die Struktur VBDKL mit übergeben und somit wird dem Formular auch das Feld VBDKL-BSTNK bekannt sein und sofern es einen Wert hat, wird bei der Textbaustein bei der Formularausgebe mit der Bestellnummer des Kunden angezeigt.

Textbaustein1.JPG

  • Sofern die Information dem Formular nicht übergeben werden kann, kann die Variable trotzdem im Formular deklariert werden. Dann ist sie zwar nicht gefüllt, aber trotzdem dem Formular bekannt und es kommt nicht zu einem Fehler bei der Formularausgabe.

Gefahr Nutzung von Variablen in Textbausteinen

  • Ist die Variable in einem genutzten Textbausteinen während der Laufzeit im Formular nicht bekannt, wird die Formularausgabe abgebrochen und es kommt zu einer Fehlermeldung. Hier gibt es keine Möglichkeit trotzdem das Formular auszugeben. Daher sollte man bei der Eingabe von Variablen in Textbausteine besonders sorgfältig sein.
  • Ein Rechtschreibfehler in Variablen kann vom Textbausteineditor nicht erkannt werden, da ein Textbaustein nicht wissen kann in welcher Anwendung und von welchem Formular es aufgerufen wird und welche Variablen dort bekannt sind.
  • Hier bietet es sich an innerhalb der Gruppe der Formularentwickler klare Standards zu definieren, welche Variablen innerhalb der Textbausteine nutzbar sind und wie die Schnittstellenparameter zu benennen sind, bzw. welche Variablennamen innerhalb der Formular benutzt werden.
  • Zudem sollte die Pflege von Variablen in den Textbausteinen nur von Entwicklern, bzw. dem Fachbereich vorgenommen werden, die sich dieser Gefahr bewußt sind und sehr sorgfältig arbeiten.

Variablenersetzung im Druckrahmenprogramm mit 'REPLACE_TEXTSYMBOL'

  • Mit dem Funktionsbaustein REPLACE_TEXTSYMBOL können bereits im (Druck-)Rahmenprogramm Variablen ersetzt werden. Zunächst muss der Textbaustein mit dem Funktionsbaustein READ_TEXT gelesen werden.
  • In der itab CT_TLINE stehen die Zeilen, die mit dem Funktionsbaustein READ_TEXT gelesen wurden. Alle Variablen, die in dem jeweiligen Programm bekannt sind, werden nun mit dem Funktionsbaustein REPLACE_TEXTSYMBOL ersetzt. Es ist darauf zu achten, dass die zu ersetzenden Variablen global im Rahmenprogramm definiert sind, sonst werden sie im Funktionsbaustein REPLACE_TEXTSYMBOL nicht erkannt. Wird der Funktionsbaustein REPLACE_TEXTSYMBOL also z. B. von einem anderen Funktionsbaustein aufgerufen, so sind die zu ersetzenden Variablen im Top-Include der Funktionsgruppe des Funktionsbausteins zu definieren.
Data: ct_tline       TYPE tline_tab.

... (Textbaustein lesen mit READ_TEXT in ct_tline)

CALL FUNCTION 'REPLACE_TEXTSYMBOL'
  EXPORTING
    ENDLINE                = 100
    LANGUAGE               = is_thead-tdspras
    OPTION_DIALOG          = ' '
    REPLACE_PROGRAM        = 'X'
    REPLACE_STANDARD       = 'X'
    REPLACE_SYSTEM         = 'X'
    REPLACE_TEXT           = 'X'
    STARTLINE              = 1
* IMPORTING
*   CHANGED                =
 TABLES
   LINES                  = ct_tline.

Variablenersetzung im Funktionsbaustein mit 'TEXT_SYMBOL_REPLACE'

  • Der Funktionsbaustein 'TEXT_SYMBOL_REPLACE' hat im gegenüber dem Funktionsbaustein 'REPLACE_TEXTSYMBOL' den Vorteil, dass man hier noch das Programm angeben kann, aus dem die Variablen zu ersetzen sind.
  • Wichtig ist hier auch der Funktionsbaustein 'FORMAT_TEXTLINES', der für eine korrekte Zeilenaufbereitung sorgt, sodass die ersetzten Variablen wieder auf der Zeile der Textbausteintabelle stehen, wo vorher die Variablen standen.
  DATA: lt_tline TYPE tline_tab,
        ls_tline TYPE tline,
        lv_tabix type sy-tabix.

  DATA: ls_thead  TYPE thead,
        lv_report type sy-repid.

* Füllen globale Strukturen. VBDKL und LIKP sind hier im Top-Include des
* Funktionsbaustein definiert, in dem das Coding sich befindet. Es ist nicht das Druckrahmenprogramm
  vbdkl = is_vbdkl.

  Select single *
    into likp
    from likp
    where vbeln = is_vbdkl-vbeln.

* Füllen Header-Struktur
  ls_thead-tdobject = iv_object.
  ls_thead-tdname   = iv_name.
  ls_thead-tdid     = iv_id.
  ls_thead-tdspras  = iv_language.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = ls_thead-tdid
      language                = ls_thead-tdspras
      name                    = ls_thead-tdname
      object                  = ls_thead-tdobject
    TABLES
      lines                   = lt_tline
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.

  check lt_tline is not initial.

  DESCRIBE TABLE lt_tline lines lv_tabix.

  lv_report = sy-repid.

  CALL FUNCTION 'TEXT_SYMBOL_REPLACE'
    EXPORTING
      endline          = lv_tabix
      header           = ls_thead
      program          = lv_report
    TABLES
      lines            = lt_tline.

  CALL FUNCTION 'FORMAT_TEXTLINES'
       TABLES lines = lt_tline.