*---------------------------------------------------------------------*
* Z _ B J H _ S T X L *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Fließtexte auswerten und anzeigen können. Diese Texte entsprechen *
* der VPSS-Struktur SDATXT. Die Texte werden im Cluster angelegt. Die *
* Basis-(Header)-Tabelle ist die STXH. Dort werden die Daten heraus- *
* selektiert, welche dann durch den Funktionsbaustein anzeigegerecht *
* aufbereitet werden. Im Beispiel wird der Text im letzten Zeichen *
* verändert und durch den Gegen-Funktionsbaustein zurückgeschrieben. *
* *
* Diese Art der Fließtextbehandlung wird im gesamten SAP-System *
* benutzt, deswegen sind mehrere vordefinierte Typen angezeigt und *
* auch die Möglichkeit frei zu wählen. In diesem Beispiel werden die *
* einzeln aufbereiteten Zeilen am Bildschirm ausgegeben. *
*---------------------------------------------------------------------*
* FB 'READ_TEXT' und 'SAVE_DATA', Suchhilfe
*---------------------------------------------------------------------*
* 27.09.2003 BHaa: Programm erstellt mit 'READ_TEXT' *
* 11.06.2004 BHaa: um FB 'SAVE_DATA' erweitert *
* 05.08.2004 BHaa: mehrere Textarten im Auswahlbildschirm *
*---------------------------------------------------------------------*
REPORT z_bjh_stxl .
TABLES:
stxh. "STXD SAPscript Text-Datei Header
CONSTANTS:
gewuenschte_auswahl(1) TYPE c VALUE 'X'.
*---------------------------------------------------------------------*
* Textbasisdaten einlesen Tabellen STXH und STXL
*---------------------------------------------------------------------*
DATA:
t_thead LIKE thead OCCURS 1 WITH HEADER LINE.
DATA:
* falls der Schlüssel zusammengebaut werden muß
wa_tdname LIKE stxh-tdname.
*---------------------------------------------------------------------*
* Zwischentabelle für den aufgeteilten Text.
* der Fließtext wird gesplittet und in die Datenelemente
* abgespeichert
*---------------------------------------------------------------------*
DATA: BEGIN OF t_lines OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF t_lines.
DATA:
* Anzeigestruktur für die Ausgabe
wa_lines LIKE t_lines,
* Rückgabewert, wie der FB den Text bearbeitet hat
fb_aktion(1) TYPE c.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* Alle Radiobuttons zu einer Gruppe müssen im gleichen Block defi- *
* niert sein. *
*---------------------------------------------------------------------*
* Auswahlparameter zum Lesen eines Textes
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
* Vorbelegung zum Lesen eines Textes der Bestellung 4500001034.
PARAMETERS:
* Bestellungen. Vorbelegung ist eine Bestellposition
pmx_ekko RADIOBUTTON GROUP grp1 DEFAULT 'X',
pmekobj LIKE stxh-tdobject DEFAULT 'EKPO',
pmekname LIKE stxh-tdname DEFAULT '450000103400010',
* welcher Text (s.a.Customizing)
pmekid LIKE stxh-tdid DEFAULT 'F05'.
SELECTION-SCREEN: ULINE.
PARAMETERS:
* Materialstamm. Vorbelegung ist Materialnummer und Werk
pmx_mara RADIOBUTTON GROUP grp1,
pmmaobj LIKE stxh-tdobject DEFAULT 'MATERIAL'.
SELECT-OPTIONS:
* bei Bezug zu einem Werk => Lücke beachten. Aufbau ist Material(18),
* Trennzeichen(1), Werk(4)
somaname FOR stxh-tdname.
PARAMETERS:
* welcher Text zum Material
* Feld ist ausgestattet mit F4-Suchhilfe
pmmaid LIKE stxh-tdid DEFAULT 'IVER'.
SELECTION-SCREEN: ULINE.
PARAMETERS:
* Pläne (Positionsebene)
pmx_plpo RADIOBUTTON GROUP grp1,
pmplnty LIKE plpo-plnty DEFAULT 'N',
pmplnnr LIKE plpo-plnnr DEFAULT '50000023',
pmplnkn LIKE plpo-plnkn DEFAULT '00000002',
pmplzae LIKE plpo-zaehl DEFAULT '00000002'.
SELECTION-SCREEN: ULINE.
PARAMETERS:
* freier Texte von irgendwo. Freies Format
pmx_frei RADIOBUTTON GROUP grp1,
pmxxobj LIKE stxh-tdobject DEFAULT '?',
* welche Referenzierung
pmxxname LIKE stxh-tdname DEFAULT '?',
pmxxid LIKE stxh-tdid DEFAULT '????'.
SELECTION-SCREEN: END OF BLOCK a1.
* Aktionsrichtung, nur einlesen oder auch zurückschreiben
SELECTION-SCREEN: BEGIN OF BLOCK a2 WITH FRAME TITLE text-902.
PARAMETERS:
* nur einlesen und anzeigen
pmx_read RADIOBUTTON GROUP grp2 DEFAULT 'X',
* lesen, verändern, speichern
pmx_save RADIOBUTTON GROUP grp2.
SELECTION-SCREEN: END OF BLOCK a2.
***********************************************************************
* S U C H H I L F E *
* *
* für das Feld Status Identifikation Materialtexte *
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pmmaid.
DATA:
* Felder der Anzeige im Pop-Up
BEGIN OF felder OCCURS 10.
INCLUDE STRUCTURE help_value.
DATA:
END OF felder.
DATA:
* Werte für die Suchhilfe
BEGIN OF werte OCCURS 10,
text(100),
END OF werte.
DATA:
BEGIN OF zurueck,
obj LIKE stxh-tdobject,
id LIKE stxh-tdid,
END OF zurueck.
* Übergabetabellen für Funktionsbaustein initialisieren
CLEAR: felder, werte.
REFRESH: felder, werte.
* Felder besetzen
* nennen der Tabelle, von woher die Werte kommen sollen
MOVE 'STXH ' TO felder-tabname.
* Feld, welches zur Selektion dient (Teil des Pop-Ups)
MOVE 'TDOBJECT' TO felder-fieldname.
MOVE ' ' TO felder-selectflag.
APPEND felder.
MOVE 'STXH ' TO felder-tabname.
MOVE 'TDID' TO felder-fieldname.
MOVE 'X' TO felder-selectflag.
APPEND felder.
* Weiteres Feld (Kurztext) für das Pop-Up, nur Anzeige
MOVE 'T77FD' TO felder-tabname.
MOVE 'FTEXT' TO felder-fieldname.
MOVE ' ' TO felder-selectflag.
APPEND felder.
* Suchhilfetabelle auffüllen
MOVE 'MATERIAL' TO werte-text. APPEND werte.
MOVE 'BEST' TO werte-text. APPEND werte.
MOVE 'Bestelltexte' TO werte-text. APPEND werte.
MOVE 'MATERIAL' TO werte-text. APPEND werte.
MOVE 'GRUN' TO werte-text. APPEND werte.
MOVE 'Grunddaten' TO werte-text. APPEND werte.
MOVE 'MATERIAL' TO werte-text. APPEND werte.
MOVE 'IVER' TO werte-text. APPEND werte.
MOVE 'interne Vermerke' TO werte-text. APPEND werte.
MOVE 'MDTXT ' TO werte-text. APPEND werte.
MOVE 'LTXT' TO werte-text. APPEND werte.
MOVE 'Materialnotizen' TO werte-text. APPEND werte.
* Pop-Up aufrufen
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
display = ' '
fieldname = 'TDOBJECT'
tabname = 'STXH'
IMPORTING
select_value = zurueck
TABLES
fields = felder
valuetab = werte
EXCEPTIONS
OTHERS = 4.
* gültige Auswahl. Wert des Pop-Up übernehmen.
IF sy-subrc = 0.
MOVE zurueck TO pmmaid.
ENDIF.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
START-OF-SELECTION.
*---------------------------------------------------------------------*
* Einlesen des Objektes, welches benötigt wird.
* Hier im Beispiel ein Single-Read auf einen Text in einer Bestellung
* "tdobject": Objektname, hier: EKKO=Einkaufsbelegkopfdaten
* "tdname": Detail, hier: welche Bestellung soll ausgelesen werden
* "tdid" ist in diesem Fall die Kombination
* 1. Stelle: Belegart (fest programmiert)
* 2-3. Stelle: Fließtextart der Kopfdaten (weil EKKO)
* Customizing: IMG => Materialwirtschaft => Einkauf =>
* Bestellung => Textarten (Kopf oder Pos.)
* 4. Stelle: unbenutzt
*---------------------------------------------------------------------*
* es werden alle verfügbareb Sprachen eingelesen *
*---------------------------------------------------------------------*
CASE gewuenschte_auswahl.
* Bestellung einlesen. Kopfdaten oder Positionsdaten
WHEN pmx_ekko.
SELECT tdobject tdname tdid tdspras FROM stxh
INTO CORRESPONDING FIELDS OF TABLE t_thead
WHERE tdobject = pmekobj
AND tdname = pmekname
AND tdid = pmekid.
* Materialen
WHEN pmx_mara.
SELECT tdobject tdname tdid tdspras FROM stxh
INTO CORRESPONDING FIELDS OF TABLE t_thead
WHERE tdobject = pmmaobj
AND tdname IN somaname
AND tdid = pmmaid.
* Zusammenbauen des Schlüsses bei Plänen
WHEN pmx_plpo.
MOVE sy-mandt TO wa_tdname.
MOVE pmplnty TO wa_tdname+3(1).
MOVE pmplnnr TO wa_tdname+4(8).
MOVE pmplnkn TO wa_tdname+12(8).
MOVE pmplzae TO wa_tdname+20(8).
SELECT tdobject tdname tdid tdspras FROM stxh
INTO CORRESPONDING FIELDS OF TABLE t_thead
WHERE tdobject = 'ROUTING '
AND tdname = wa_tdname
AND tdid = 'PLPO'.
* freier Text. Offener Zugriff auf alles mögliche, da Schlüssel und
* Objekte frei vergeben werden können. Allerdings muß auf die stellen-
* gerechte Eingabe geachtet werden, da dieser Part nichts zusammenbaut
WHEN pmx_frei.
SELECT tdobject tdname tdid tdspras FROM stxh
INTO CORRESPONDING FIELDS OF TABLE t_thead
WHERE tdobject = pmxxobj
AND tdname = pmxxname
AND tdid = pmxxid.
ENDCASE.
*---------------------------------------------------------------------*
* Zwischentabelle für textbaustein jagen, um den Text
* splitten zu lassen und somit ausgabefreundlich zu gestalten
*---------------------------------------------------------------------*
IF sy-subrc <> 0.
CLEAR: t_lines.
ELSE.
LOOP AT t_thead.
* Überschriftszeile
FORMAT COLOR 3 ON INTENSIFIED OFF.
WRITE AT: /3 'Objekt :', 14 t_thead-tdobject, 84 '.'.
WRITE AT: /3 'Schlüssel:', 14 t_thead-tdname, 84 '.'.
WRITE AT: /3 'Ident :', 14 t_thead-tdid, 84 '.'.
WRITE AT: /3 'Sprache :', 14 t_thead-tdspras, 84 '.'.
FORMAT COLOR 3 OFF INTENSIFIED ON.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = t_thead-tdid
language = t_thead-tdspras
name = t_thead-tdname
object = t_thead-tdobject
TABLES
lines = t_lines.
*---------------------------------------------------------------------*
* Text ist gesplittet vorhanden, die einzelnen Textzeilen verarbeiten
* in diesem Fall einfach am Bildschirm ausgeben
*---------------------------------------------------------------------*
CLEAR wa_lines.
LOOP AT t_lines INTO wa_lines.
* 132. Teichen verändern, um das Updaten in SAP sichtbar zu machen
CASE wa_lines-tdline+131(1).
WHEN 'A'.
MOVE 'B' TO wa_lines-tdline+131(1).
WHEN 'B'.
MOVE 'C' TO wa_lines-tdline+131(1).
WHEN 'C'.
MOVE 'D' TO wa_lines-tdline+131(1).
WHEN OTHERS.
MOVE 'A' TO wa_lines-tdline+131(1).
ENDCASE.
MODIFY t_lines FROM wa_lines INDEX sy-tabix.
WRITE: / wa_lines-tdline.
ENDLOOP.
SKIP 1.
*---------------------------------------------------------------------*
* Änderung oder Neuanlage-Funktionsbaustein aufrufen
* gleiche Daten, gleiche Kopfdateninformationen wie beim Einlesen
*---------------------------------------------------------------------*
IF pmx_save = 'X'.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
* CLIENT = SY-MANDT
header = t_thead
insert = ' '
savemode_direct = 'X'
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
IMPORTING
function = fb_aktion
* NEWHEADER =
TABLES
lines = t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
ENDIF.
ENDLOOP.
ENDIF.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
***** E n d e *****
* Copyright BJH Software, Datei überarbeitet am: 26.5.2005