[50612] in SAPr3-news
ABAP Toolprogramme / Anzeige von FBDoku und Strukturdoku
daemon@ATHENA.MIT.EDU (volker Korrmann)
Tue Jul 13 07:14:17 2004
To: sapr3-news@mit.edu
Date: 13 Jul 2004 04:14:08 -0700
From: volker_korrmann@web.de (volker Korrmann)
Message-ID: <cdd58c09.0407130314.e600165@posting.google.com>
*Hallo Leute,
*
*anbei ein nettes Programm von mir zur Anzeige von Strukturen sowie zur
*Anzeige aller Datenelementdokumentationen!!! *Wenn Ihr also zu einer
*Tabelle nicht nur die Felder + Kurztexte braucht
*sondern auch die F1 Hilfe mit drucken wollt, dann gibt es da unter 4.6c
*nichts. Zumindest habe ich es nicht gefunden. *Nehmt also einfach
*diesen Report, gebt hier im ersten Feld eine oder *auch *mehrere
*Tabellen bzw. Strukturen ein und wählt die Option: DOKU_PRN aus .
*Im zweiten Feld kann man bei Bedarf durch Leerzeichen getrennt mehrere
*Filter für die auszugebenen Felder eingeben.
*
*Bitte vor dem Aufruf kontrollieren, ob unter
*"System/Benutzervorgaben/eigene *Daten" ein Drucker eingegeben ist.
*Denn sonst kommt ein Dialog, und Ihr
* müßt
*den Drucker zwei mal eingeben. Geht leider nicht anders!!!! Daher bitte
*einen festen Drucker in den eigenen Daten eintragen. Es wird nichts
*automatisch gedruckt! Dieser Drucker wird nur für die Dateiaufbereitung
*benötigt.
*Wenn Ihr nun F8 drückt, kommt der Acrobatreader in den Vordergrund und
*zeigt Euch alle Felder + zugehöriger F1 Hilfen an.
*
*Im Acrobatreader nun View/Continous auswählen und Strg A und Strg C
*drücken,
*nach Word gehen und Strg V betätigen. (Sonst wird nur eine Seite
*kopiert!)
*Fertig ist die DOKU!!
*Die Kopf und Fußzeilen, die beim kopieren nach Word stören würden, habe
* ich
*extra dafür aus der OTF Datei entfernt!
*
*Der Code ist zwar nicht so richtig sauber, aber ich hatte den Report
*dringend gebraucht und aus einem andern ganz alten Report von mir
*schnell
*mal eben so zusammengefrickelt. Also nicht zu kritisch reinsehen!
*
*Falls Ihr noch Verbesserungen hierzu habt, immer her damit!
*Auch andere gute Tips und Tricks oder nützliche Reports sind mir immer
*willkommen.
*
*Gruß Volker
* Texte für die Selektionsmaske:
*ANZ_DS Anzahl Datensätze anzeigen
*DOKU_PRN Datenelement Dokumentation
*ELEMENTE Elemente
*FB_DOC Dat für Funktionsbausteindoku
*FELDER Felder
*FILENAME Dateiname für Datenelementdoku
*P_DIALOG Druckdialog anzeigen
*P_FBDOKU Funktionsbausteindoku ausgeben
*SQLTRACE Tabellen aus SQL Trace
*S_FB Funktionsbaustein
*S_TAB2 Tabellenname
*TABELLEN Tabellen durch " " getrennt
*
* Show DDIC-Structure
REPORT zbrtoo09 LINE-SIZE 255 NO STANDARD PAGE HEADING.
* (C) Volker Korrmann 10.03.2002
TYPE-POOLS sqlt.
TABLES: trdir,dd02t, ddftx, dd02l, "Tabellen Tabelle
fupararef,
dd03l, *dd03l. "Datenelementen Tabelle
TABLES: sscrfields. "Hilfetabelle
* parameters:
* parameters:
* tabellen(900),
* felder(900),
* show like dntab-tabname no-display.
DATA: text(80), rc(1), tabellena(9000).
DATA: rest(200).
DATA: file TYPE string.
DATA: i TYPE i.
RANGES s_element FOR ddftx-rollname OCCURS 0.
RANGES s_tab FOR dd02l-tabclass OCCURS 0.
RANGES t1_element FOR ddftx-rollname OCCURS 0.
RANGES t2_element FOR ddftx-rollname OCCURS 0.
DATA BEGIN OF nametab OCCURS 0.
INCLUDE STRUCTURE dntab.
DATA: rollname LIKE ddftx-rollname.
DATA END OF nametab.
* Dynpro Selektionsfeld für die Anzeige des SQL-Traces
* Tabelle mit Trace-Sätzen und Haeder-Sätze
DATA: sql_trace_tab TYPE sqlt_trace_tab,
* rfc_trace_tab type SQLT_TRACE_TAB,
sql_bheader_tab TYPE sqlt_bheader_tab.
DATA: g_selopttab_tab TYPE sqlt_rtabn OCCURS 3 WITH HEADER LINE.
DATA: BEGIN OF it_tab1 OCCURS 0,
tabname LIKE dd02l-tabname,
* len(10) type c,
END OF it_tab1.
DATA BEGIN OF nametab2 OCCURS 0.
INCLUDE STRUCTURE dntab.
DATA: rollname LIKE ddftx-rollname.
DATA END OF nametab2.
DATA BEGIN OF it OCCURS 0.
INCLUDE STRUCTURE dntab.
DATA: rollname LIKE ddftx-rollname.
DATA: doppelt(1).
DATA END OF it.
DATA: BEGIN OF it_el OCCURS 0,
tabname LIKE ddftx-tabname,
zaehler TYPE i,
tabclass LIKE dd02l-tabclass,
END OF it_el.
DATA: BEGIN OF tabs OCCURS 0,
show LIKE dntab-tabname,
END OF tabs.
DATA: BEGIN OF it_fb OCCURS 0,
fb LIKE fupararef-funcname,
END OF it_fb.
DATA: BEGIN OF fields OCCURS 0,
line(200),
END OF fields.
DATA: BEGIN OF rollnames OCCURS 0,
line(30),
END OF rollnames.
DATA:
subrc LIKE sy-subrc,
tab_len LIKE sy-fdpos,
tabname LIKE dntab-tabname,
tabfield(21),
include LIKE sy-repid,
program LIKE sy-repid.
* Eingabe Maske
SELECTION-SCREEN BEGIN OF BLOCK eingabe WITH FRAME
TITLE text-001.
SELECTION-SCREEN SKIP.
PARAMETERS:
tabellen(9000).
SELECT-OPTIONS: s_tab2 FOR dd03l-tabname.
SELECT-OPTIONS: s_fb FOR fupararef-funcname.
PARAMETERS: p_fbdoku AS CHECKBOX.
PARAMETERS:
felder(9000).
PARAMETERS sqltrace AS CHECKBOX.
PARAMETERS anz_ds AS CHECKBOX .
SELECTION-SCREEN END OF BLOCK eingabe.
SELECTION-SCREEN BEGIN OF BLOCK eingabe2 WITH FRAME
TITLE text-003.
SKIP.
PARAMETERS: elemente(900).
SKIP.
SELECTION-SCREEN END OF BLOCK eingabe2.
PARAMETERS:
feld1 LIKE dd03d-rollname NO-DISPLAY,
feld2 LIKE dd03d-rollname NO-DISPLAY.
PARAMETERS: doku_prn AS CHECKBOX.
PARAMETERS: p_dialog AS CHECKBOX.
PARAMETERS: filename(50) TYPE c DEFAULT
'C:\temp\t1.pdf'.
PARAMETERS: fb_doc(50) TYPE c DEFAULT
'C:\temp\FB.pdf'.
DATA: tanz1(10) TYPE c VALUE 'Tabelle',
tanz2(10) TYPE c VALUE 'Struktur',
tanz3(10) TYPE c VALUE 'Cluster',
tanz4(10) TYPE c VALUE 'POOL',
tanz5(10) TYPE c VALUE 'View',
tanz6(15) TYPE c VALUE 'Append-struktur'.
DATA: info(60).
DATA: info2(200).
DATA: anzahl TYPE p DECIMALS 0.
START-OF-SELECTION.
CLEAR it. REFRESH it.
CLEAR tabs. REFRESH tabs.
CLEAR fields. REFRESH fields.
CLEAR nametab. REFRESH nametab.
CLEAR it_tab1. REFRESH it_tab1.
IF sqltrace = 'X'.
PERFORM get_trace.
ENDIF.
PERFORM datenelemente USING elemente CHANGING
tabellen.
SPLIT tabellen AT ' ' INTO TABLE tabs.
SPLIT felder AT ' ' INTO TABLE fields.
IF NOT s_tab2[] IS INITIAL.
SELECT DISTINCT tabname FROM dd02l APPENDING TABLE
tabs
WHERE tabname IN s_tab2.
ENDIF.
LOOP AT it_tab1.
tabs = it_tab1.
APPEND tabs.
ENDLOOP.
REFRESH it_fb.
IF NOT s_fb[] IS INITIAL.
WRITE: / 'Funktionsbausteine: '.
SELECT * FROM fupararef WHERE funcname IN s_fb
ORDER BY FUNCNAME paramtype DESCENDING pposition.
ON CHANGE OF fupararef-funcname.
WRITE: / fupararef-funcname.
it_fb = fupararef-funcname.
APPEND it_fb.
ENDON.
WRITE: / ' ', fupararef-paramtype, fupararef-parameter,
fupararef-structure(100).
CLEAR tabs.
SPLIT fupararef-structure AT '-' INTO tabs rest.
IF tabs <> ''.
APPEND tabs.
ENDIF.
ENDSELECT.
SKIP 2.
ULINE.
ENDIF.
IF p_fbdoku = 'X'.
PERFORM fbdokus.
ENDIF.
SORT tabs.
DELETE ADJACENT DUPLICATES FROM tabs.
IF felder IS INITIAL.
fields = '*'. APPEND fields.
ENDIF.
CONCATENATE fields 'akshjweruhzihnbaskehur' INTO
fields
SEPARATED BY ' '.
LOOP AT tabs.
CLEAR dd02t.
SELECT SINGLE * FROM dd02t WHERE tabname = tabs-show
AND ddlanguage = 'D'.
FORMAT COLOR 1 ON.
WRITE: / tabs-show, dd02t-ddtext.
IF anz_ds = 'X'.
SELECT * FROM dd02l UP TO 1 ROWS WHERE tabname = tabs-show
AND tabclass = 'TRANSP'.
ENDSELECT.
IF sy-subrc = 0.
SELECT COUNT(*) INTO anzahl FROM (tabs-show).
WRITE anzahl.
ENDIF.
ENDIF.
ENDLOOP.
SKIP. ULINE. SKIP 2.
LOOP AT tabs.
CLEAR dd02t.
SELECT SINGLE * FROM dd02t WHERE tabname = tabs-show
AND ddlanguage = 'D'.
SKIP 1.
CONCATENATE tabs-show ':' dd02t-ddtext INTO text
SEPARATED BY ' '.
FORMAT COLOR 1 ON.
WRITE: / text.
ULINE.
CLEAR nametab. REFRESH nametab.
PERFORM load_table USING tabs-show.
LOOP AT nametab. " Löschen der nicht in Frage kommenden Felder
CLEAR ddftx.
SELECT SINGLE * FROM ddftx WHERE tabname = tabs-show AND
fieldname = nametab-fieldname AND
ddlanguage = 'D'.
nametab-rollname = ddftx-rollname.
MODIFY nametab.
it = nametab. APPEND it.
rc = 1.
LOOP AT fields.
IF NOT fields CA '*'.
CONCATENATE fields '*' INTO fields.
ENDIF.
IF nametab-fieldname CP fields
OR nametab-keyflag = 'X'.
rc = 0.
ENDIF.
ENDLOOP.
IF rc = 1. DELETE nametab. ENDIF.
ENDLOOP.
PERFORM tabellenausgabe USING tabs-show.
LOOP AT nametab.
nametab2 = nametab. APPEND nametab2.
ENDLOOP.
ENDLOOP.
IF doku_prn = 'X'.
PERFORM dokuausgabe.
ENDIF.
*---------------------------------------------------------------------*
* FORM DOPPELTE_MARKIEREN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM doppelte_markieren.
DATA: rc(1), tabix LIKE sy-tabix.
DATA: f1 LIKE it-fieldname, r1 LIKE it-rollname.
f1 = ''. r1 = ''.
LOOP AT it.
rc = 1.
IF f1 = it-fieldname OR r1 = it-rollname.
rc = 0.
ENDIF.
f1 = it-fieldname.
r1 = it-rollname.
IF rc = 0. it-doppelt = 'X'. MODIFY it. ENDIF.
tabix = sy-tabix - 1.
ENDLOOP.
ENDFORM. "DOPPELTE_MARKIEREN
*---------------------------------------------------------------------*
* FORM TABELLENAUSGABE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM tabellenausgabe USING show.
* Generate SHOWTAB
FORMAT RESET.
FORMAT COLOR 2 ON.
LOOP AT nametab.
IF nametab-keyflag = 'X'.
FORMAT INTENSIFIED ON.
ELSE.
FORMAT INTENSIFIED OFF.
ENDIF.
WRITE: / nametab-fieldname.
WRITE nametab-keyflag.
WRITE nametab-rollname.
WRITE nametab-datatype.
WRITE nametab-inttype.
WRITE nametab-intlen.
WRITE nametab-decimals.
WRITE nametab-fieldtext.
ENDLOOP.
ENDFORM. "TABELLENAUSGABE
*---------------------------------------------------------------------*
* FORM LOAD_TABLE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> SHOW *
*---------------------------------------------------------------------*
FORM load_table USING show.
subrc = 0.
tabname = show.
tab_len = strlen( show ).
IF tab_len = 2.
* Segment
CASE tabname.
* System
WHEN 'SY'.
tabname = 'SYST'.
* Dynpro
WHEN 'DY'.
SELECT SINGLE * FROM trdir
WHERE name = program.
IF sy-subrc NE 0.
PERFORM exit.
ENDIF.
IF trdir-subc CN '1MF'.
include = program.
IF trdir-subc = 'I' AND
include+5(1) CO 'IOFDU'.
SHIFT include RIGHT BY 3 PLACES.
include(3) = 'SAP'.
program = include.
SELECT SINGLE * FROM trdir
WHERE name = program.
IF sy-subrc NE 0.
PERFORM exit.
ENDIF.
ENDIF.
ENDIF.
tabname = '$'.
tabname+1(2) = trdir-dbna.
tabname+3(1) = trdir-appl.
* WHEN OTHERS.
* SELECT SINGLE * FROM T032
* WHERE SEGMENT = TABNAME.
* IF SY-SUBRC NE 0.
* PERFORM EXIT.
* ENDIF.
* TABNAME = T032-QMACRO.
ENDCASE.
ENDIF.
* Get NAMETAB
REFRESH nametab.
IF tabname NE 'SCREEN'.
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
tabname = tabname
langu = sy-langu
TABLES
nametab = nametab
EXCEPTIONS
internal_error = 1
table_has_no_fields = 2
table_not_activ = 3.
ELSE.
CLEAR nametab.
CLEAR nametab.
nametab-datatype = 'CHAR'.
nametab-inttype = 'C'.
nametab-fieldname = 'NAME'.
nametab-intlen = 30.
nametab-fieldtext = 'Feldname'(101).
APPEND nametab.
nametab-fieldname = 'GROUP1'.
nametab-intlen = 3.
nametab-fieldtext = 'Bewertung der Modif.gruppe1'(102).
APPEND nametab.
nametab-fieldname = 'GROUP2'.
nametab-intlen = 3.
nametab-fieldtext = 'Bewertung der Modif.gruppe2'(103).
APPEND nametab.
nametab-fieldname = 'GROUP3'.
nametab-intlen = 3.
nametab-fieldtext = 'Bewertung der Modif.gruppe3'(104).
APPEND nametab.
nametab-fieldname = 'GROUP4'.
nametab-intlen = 3.
nametab-fieldtext = 'Bewertung der Modif.gruppe4'(105).
APPEND nametab.
nametab-fieldname = 'REQUIRED'.
nametab-intlen = 1.
nametab-fieldtext = 'Musseingabe'(106).
APPEND nametab.
nametab-fieldname = 'INPUT'.
nametab-intlen = 1.
nametab-fieldtext = 'Feld eingabebereit'(107).
APPEND nametab.
nametab-fieldname = 'OUTPUT'.
nametab-intlen = 1.
nametab-fieldtext = 'Feld wird angezeigt'(108).
APPEND nametab.
nametab-fieldname = 'INTENSIFIED'.
nametab-intlen = 1.
nametab-fieldtext = 'Feld hellleuchtend'(109).
APPEND nametab.
nametab-fieldname = 'INVISIBLE'.
nametab-intlen = 1.
nametab-fieldtext = 'Feld unsichtbar'(110).
APPEND nametab.
nametab-fieldname = 'LENGTH'.
nametab-datatype = 'HEX'.
nametab-inttype = 'X'.
nametab-intlen = 1.
nametab-fieldtext = 'Laenge des Feldes'(111).
APPEND nametab.
nametab-fieldname = 'ACTIVE'.
nametab-intlen = 1.
nametab-datatype = 'CHAR'.
nametab-inttype = 'C'.
nametab-fieldtext = 'Feld aktiv'(112).
APPEND nametab.
* NEW FIELDS IN SCREEN FOR 3.0
nametab-fieldname = 'DISPLAY_3D'.
nametab-intlen = 1.
nametab-datatype = 'CHAR'.
nametab-inttype = 'C'.
nametab-fieldtext = 'Feld 3-dimensional'(113).
APPEND nametab.
nametab-fieldname = 'VALUE_HELP'.
nametab-intlen = 1.
nametab-datatype = 'CHAR'.
nametab-inttype = 'C'.
nametab-fieldtext = 'Feld mit Wertehilfe'(114).
APPEND nametab.
nametab-fieldname = 'REQUEST'.
nametab-intlen = 1.
nametab-datatype = 'CHAR'.
nametab-inttype = 'C'.
nametab-fieldtext = 'Eingabe vorhanden (nur PAI)'(115).
APPEND nametab.
ENDIF.
subrc = sy-subrc.
IF sy-subrc > 3.
PERFORM exit.
ENDIF.
ENDFORM. "LOAD_TABLE
*---------------------------------------------------------------------*
* FORM EXIT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM exit.
STOP.
ENDFORM. "EXIT
*&---------------------------------------------------------------------*
*& Form DATENELEMENTE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ELEMENTE text *
* <--P_TABELLEN text *
*----------------------------------------------------------------------*
FORM datenelemente USING elemente
CHANGING tabellen.
CLEAR s_element. REFRESH s_element.
CLEAR rollnames. REFRESH rollnames.
CLEAR it_el. REFRESH it_el.
CLEAR s_tab. REFRESH s_tab.
IF elemente = ' '.
PERFORM suchen.
ELSE.
SPLIT elemente AT ' ' INTO TABLE rollnames.
LOOP AT rollnames.
MOVE: 'I' TO s_element-sign,
'EQ' TO s_element-option.
s_element-low = rollnames.
APPEND s_element.
ENDLOOP.
SELECT DISTINCT tabname COUNT(*) INTO
(it_el-tabname, it_el-zaehler)
FROM dd03l WHERE rollname IN s_element
GROUP BY TABNAME.
APPEND it_el.
ENDSELECT.
LOOP AT it_el.
SELECT SINGLE * FROM dd02l WHERE tabname =
it_el-tabname.
MOVE dd02l-tabclass TO it_el-tabclass.
MODIFY it_el.
ENDLOOP.
LOOP AT it_el WHERE tabclass IN s_tab.
CONCATENATE it_el-tabname tabellen INTO tabellen
SEPARATED BY ' '
.
ENDLOOP.
ENDIF.
ENDFORM. " DATENELEMENTE
*&---------------------------------------------------------------------*
*& Form SUCHEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM suchen.
ENDFORM. " SUCHEN
*---------------------------------------------------------------------*
* FORM Dokuausgabe
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
FORM dokuausgabe.
DATA: BEGIN OF it2 OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it2.
DATA: BEGIN OF it3 OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it3.
data rc.
TYPES: BEGIN OF t_it4,
rollname LIKE nametab-rollname,
text(50) TYPE c,
END OF t_it4.
DATA: it4 TYPE SORTED TABLE OF t_it4 WITH UNIQUE KEY
rollname WITH
HEADER LINE.
DATA: object LIKE dokhl-object.
DATA: header LIKE thead.
DATA: options LIKE itcpo.
DATA: bytes TYPE i.
DATA: it_otf TYPE STANDARD TABLE OF tline WITH
HEADER LINE.
DATA: it_pdf TYPE STANDARD TABLE OF tline WITH
HEADER LINE.
DATA: it_doc TYPE STANDARD TABLE OF docs WITH HEADER
LINE.
options-tdgetotf = 'X'.
REFRESH nametab.
nametab[] = nametab2[].
CALL FUNCTION 'DOCU_PRINT'
EXPORTING
dialog = ' '
form = 'P'
id = ''
langu = sy-langu
new_page = ' '
* object = ' '
operation = 'O'
printer = 'X'
typ = 'E'
TABLES
line = it3.
IF p_fbdoku <> 'X'.
CALL FUNCTION 'CLOSE_FORM'.
ENDIF.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
* APPLICATION = 'TX'
* ARCHIVE_INDEX =
* ARCHIVE_PARAMS =
* DEVICE = 'PRINTER'
dialog = p_dialog
form = 'S_DOCU_PRINT'
* LANGUAGE = SY-LANGU
options = options
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJECT =
* RAW_DATA_INTERFACE = '*'
* IMPORTING
* LANGUAGE =
* NEW_ARCHIVE_PARAMS =
* RESULT =
EXCEPTIONS
canceled = 1
device = 2
form = 3
options = 4
unclosed = 5
mail_options = 6
archive_error = 7
invalid_fax_number = 8
more_params_needed_in_batch = 9
spool_error = 10
codepage = 11
OTHERS = 12 .
IF sy-subrc = 0.
LOOP AT nametab.
* Prüfen auf Ausgabe doppelter Dokumentationen.
READ TABLE it4 WITH KEY rollname =
nametab-rollname.
IF sy-subrc = 0.
REFRESH it2.
it2-tdformat = 'ZH'.
CONCATENATE: nametab-tabname '-'
nametab-fieldname INTO
it2-tdline.
CONCATENATE: it2-tdline ' (Hilfetext siehe: '
it4-text ' ) '
INTO it2-tdline SEPARATED BY ' '.
APPEND it2.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
function = 'SET'
header = header
TABLES
lines = it2
EXCEPTIONS
OTHERS = 9.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
REFRESH it2.
it2-tdformat = 'ZH'.
CONCATENATE: nametab-tabname '-'
nametab-fieldname INTO
it2-tdline.
APPEND it2.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
function = 'SET'
header = header
TABLES
lines = it2
EXCEPTIONS
OTHERS = 9.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
object = nametab-rollname.
IF object <> ''.
REFRESH it_otf. CLEAR it_otf.
CALL FUNCTION 'DOCU_GET'
EXPORTING
id = 'DE'
langu = sy-langu
object = object
typ = 'E'
* IMPORTING
* HEAD = PHEAD
TABLES
line = it_otf
EXCEPTIONS
ret_code = 1.
IF sy-subrc = 0.
CALL FUNCTION 'DOCU_PRINT'
EXPORTING
dialog = ' '
form = 'P'
id = 'DE'
langu = sy-langu
new_page = 'X'
object = object
operation = 'C'
printer = 'X'
typ = 'E'
TABLES
line = it3.
REFRESH it_otf. CLEAR it_otf.
CALL FUNCTION 'DOCU_GET'
EXPORTING
id = 'DE'
langu = sy-langu
object = object
typ = 'E'
* IMPORTING
* HEAD = PHEAD
TABLES
line = it_otf
EXCEPTIONS
ret_code.
ENDIF.
ENDIF.
DESCRIBE TABLE it_otf LINES i.
IF i > 0.
REFRESH it2. CLEAR it2.
it2-tdformat = '*'.
it2-tdline = '.'.
APPEND it2.
APPEND it2.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
function = 'SET'
header = header
TABLES
lines = it2
EXCEPTIONS
OTHERS = 9.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Prüfen auf Ausgabe doppelter Dokumentationen.
READ TABLE it4 WITH KEY rollname =
nametab-rollname
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
it4-rollname = nametab-rollname.
CONCATENATE: nametab-tabname '-'
nametab-fieldname INTO
it4-text.
INSERT it4 INTO TABLE it4.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR it_otf. REFRESH it_otf.
CLEAR it_pdf. REFRESH it_pdf.
options-tdgetotf = 'X'.
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
* RESULT =
* RDI_RESULT =
TABLES
otfdata = it_otf
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SEND_ERROR = 3
* SPOOL_ERROR = 4
* CODEPAGE = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER
sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Löschen der Kopf und Fußzeilen im OTF Format.
DATA: ft.
rc = '0'. ft = 'X'.
LOOP AT it_otf.
IF it_otf(2) = 'IN'.rc = '1'.ENDIF.
IF it_otf = 'IN02MAIN' OR it_otf(2) = '//'.
rc = '0'. ft = ''.
ENDIF
.
IF rc = '1' AND ft = ''.
IF it_otf(2) <> 'IN'
AND it_otf(2) <> 'EP'
AND it_otf(2) <> 'OP'.
DELETE it_otf.
ENDIF.
ENDIF.
ENDLOOP.
DESCRIBE TABLE it_otf LINES i.
IF i = 0. EXIT. ENDIF.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
EXPORTING
use_otf_mc_cmd = ''
* ARCHIVE_INDEX =
IMPORTING
bin_filesize = bytes
TABLES
otf = it_otf
doctab_archive = it_doc
lines = it_pdf
EXCEPTIONS
err_conv_not_possible = 1
err_otf_mc_noendmarker = 2
OTHERS = 3 .
IF sy-subrc = 0.
file = filename.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bytes
filename = file
filetype = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = it_pdf
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc = 0.
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
document = 'X'
* CD = ' '
* COMMANDLINE = ' '
* INFORM = ' '
program = filename
* STAT = ' '
* WINID = ' '
* OSMAC_SCRIPT = ' '
* OSMAC_CREATOR = ' '
* WIN16_EXT = ' '
* EXEC_RC = ' '
* IMPORTING
* RBUFF =
* EXCEPTIONS
* FRONTEND_ERROR = 1
* NO_BATCH = 2
* PROG_NOT_FOUND = 3
* ILLEGAL_OPTION = 4
* GUI_REFUSE_EXECUTE = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "Dokuausgabe
*---------------------------------------------------------------------*
* FORM FBDOKUS
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
FORM fbdokus.
DATA: BEGIN OF it2 OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it2.
DATA: BEGIN OF it3 OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF it3.
TYPES: BEGIN OF t_it4,
rollname LIKE nametab-rollname,
text(50) TYPE c,
END OF t_it4.
DATA: it4 TYPE SORTED TABLE OF t_it4 WITH UNIQUE KEY
rollname WITH
HEADER LINE.
DATA: object LIKE dokhl-object.
DATA: header LIKE thead.
DATA: options LIKE itcpo.
DATA: bytes TYPE i.
DATA: it_otf TYPE STANDARD TABLE OF tline WITH
HEADER LINE.
DATA: it_pdf TYPE STANDARD TABLE OF tline WITH
HEADER LINE.
DATA: it_doc TYPE STANDARD TABLE OF docs WITH HEADER
LINE.
options-tdgetotf = 'X'.
REFRESH nametab.
nametab[] = nametab2[].
object = 'TDREFOBJ'.
CALL FUNCTION 'DOCU_PRINT'
EXPORTING
dialog = ' '
form = 'P'
id = ''
langu = sy-langu
new_page = ' '
object = object
operation = 'O'
printer = 'X'
typ = 'E'
TABLES
line = it3.
CALL FUNCTION 'CLOSE_FORM'.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
* APPLICATION = 'TX'
* ARCHIVE_INDEX =
* ARCHIVE_PARAMS =
* DEVICE = 'PRINTER'
dialog = p_dialog
form = 'S_DOCU_PRINT'
* LANGUAGE = SY-LANGU
options = options
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJECT =
* RAW_DATA_INTERFACE = '*'
* IMPORTING
* LANGUAGE =
* NEW_ARCHIVE_PARAMS =
* RESULT =
EXCEPTIONS
canceled = 1
device = 2
form = 3
options = 4
unclosed = 5
mail_options = 6
archive_error = 7
invalid_fax_number = 8
more_params_needed_in_batch = 9
spool_error = 10
codepage = 11
OTHERS = 12 .
IF sy-subrc = 0.
LOOP AT it_fb.
REFRESH it2.
it2-tdformat = 'ZH'.
it2-tdline = it_fb.
APPEND it2.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
function = 'SET'
header = header
TABLES
lines = it2
EXCEPTIONS
OTHERS = 9.
object = it_fb.
IF object <> ''.
CALL FUNCTION 'DOCU_PRINT'
EXPORTING
dialog = ' '
form = 'P'
id = 'FU'
langu = sy-langu
new_page = 'X'
object = object
operation = 'C'
printer = 'X'
typ = 'E'
TABLES
line = it3.
REFRESH it_otf. CLEAR it_otf.
CALL FUNCTION 'DOCU_GET'
EXPORTING
id = 'DE'
langu = sy-langu
object = object
typ = 'E'
* IMPORTING
* HEAD = PHEAD
TABLES
line = it_otf
EXCEPTIONS
ret_code.
ENDIF.
DESCRIBE TABLE it_otf LINES i.
IF i > 0.
REFRESH it2. CLEAR it2.
it2-tdformat = '*'.
it2-tdline = '.'.
APPEND it2.
APPEND it2.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
function = 'SET'
header = header
TABLES
lines = it2
EXCEPTIONS
OTHERS = 9.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR it_otf. REFRESH it_otf.
CLEAR it_pdf. REFRESH it_pdf.
options-tdgetotf = 'X'.
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
* RESULT =
* RDI_RESULT =
TABLES
otfdata = it_otf
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SEND_ERROR = 3
* SPOOL_ERROR = 4
* CODEPAGE = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER
sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Löschen der Kopf und Fußzeilen im OTF Format.
DATA: rc, ft.
rc = '0'. ft = 'X'.
LOOP AT it_otf.
IF it_otf(2) = 'IN'.rc = '1'.ENDIF.
IF it_otf = 'IN02MAIN' OR it_otf(2) = '//'.
rc = '0'. ft = ''.
ENDIF
.
IF rc = '1' AND ft = ''.
IF it_otf(2) <> 'IN'
AND it_otf(2) <> 'EP'
AND it_otf(2) <> 'OP'.
DELETE it_otf.
ENDIF.
ENDIF.
ENDLOOP.
DESCRIBE TABLE it_otf LINES i.
IF i = 0. EXIT. ENDIF.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
EXPORTING
use_otf_mc_cmd = ''
* ARCHIVE_INDEX =
IMPORTING
bin_filesize = bytes
TABLES
otf = it_otf
doctab_archive = it_doc
lines = it_pdf
EXCEPTIONS
err_conv_not_possible = 1
err_otf_mc_noendmarker = 2
OTHERS = 3 .
IF sy-subrc = 0.
file = fb_doc.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bytes
filename = file
filetype = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = it_pdf
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc = 0.
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
document = 'X'
* CD = ' '
* COMMANDLINE = ' '
* INFORM = ' '
program = fb_doc
* STAT = ' '
* WINID = ' '
* OSMAC_SCRIPT = ' '
* OSMAC_CREATOR = ' '
* WIN16_EXT = ' '
* EXEC_RC = ' '
* IMPORTING
* RBUFF =
* EXCEPTIONS
* FRONTEND_ERROR = 1
* NO_BATCH = 2
* PROG_NOT_FOUND = 3
* ILLEGAL_OPTION = 4
* GUI_REFUSE_EXECUTE = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "FB Dokus
*---------------------------------------------------------------------*
* FORM get_trace *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM get_trace.
FIELD-SYMBOLS: <f>.
DATA: filter_wa TYPE sqlt_filter.
DATA: trace_filter TYPE sqlt_trace_filter.
DATA: filename(sqlt_l_filename).
* Initialisieren
CLEAR: filter_wa, sql_trace_tab, sql_bheader_tab, trace_filter.
REFRESH: sql_trace_tab, sql_bheader_tab.
REFRESH: g_selopttab_tab.
DATA: wa TYPE sqlt_trecord.
* Texte für die Detailanzeige des Enqueue-Traces
DATA: entry LIKE rstrentrkl.
CLEAR entry.
CALL FUNCTION 'SQLT_DECODE_RFC_ENTRY'
EXPORTING
entry = entry
* IMPORTING
* SEC =
* MSEC =
* START_TIME =
* START_DATE =
* TCODE =
* LINKNUMBER =
* RETCODE =
* DURATION =
* L_STATEMENT =
* OFFSET =
* BYTES_SEND =
* BYTES_RECEIVE =
* RFC_TIME =
* REC_TYPE =
.
*
*CALL FUNCTION 'PERFORMANCE_TRACE_OFF'
* EXPORTING
* TRACE_USER = SY-UNAME
* SQL_TRACE_OFF = 'X'
* ENQ_TRACE_OFF = 'X'
* RFC_TRACE_OFF = 'X'
* BUF_TRACE_OFF = 'X' .
* Tracefilenamen lesen
CALL FUNCTION 'NAME_OF_CURRENT_TRACE_FILE'
IMPORTING
pathname = filename.
ASSIGN ('(SAPLSSQ0)G_Filename') TO <f>.
<f> = filename.
* Setzen Filter
CALL FUNCTION 'SQLT_SET_SELECTIONS'
EXPORTING
starting_x = 30
starting_y = 1
IMPORTING
filter_wa = filter_wa
file_name = filename
trace_filter = trace_filter
EXCEPTIONS
user_cancel = 1
OTHERS = 2.
IF sy-subrc = 0.
* Auswerten des SQL-Traces
CALL FUNCTION 'SQLT_GEN_TRACE_RECORDS'
EXPORTING
file_name = filename
filter_wa = filter_wa
trace_filter = trace_filter
* IMPORTING
TABLES
sql_trace_tab = sql_trace_tab
EXCEPTIONS
file_not_openable = 1
abort = 3
OTHERS = 4.
ENDIF.
LOOP AT sql_trace_tab INTO wa.
it_tab1-tabname = wa-tabname.
APPEND it_tab1.
ENDLOOP.
SORT it_tab1.
DELETE ADJACENT DUPLICATES FROM it_tab1.
LOOP AT it_tab1.
SELECT * FROM dd02l UP TO 1 ROWS WHERE tabname = it_tab1-tabname
AND tabclass = 'TRANSP'.
ENDSELECT.
IF sy-subrc <> 0.
DELETE it_tab1.
ENDIF.
ENDLOOP.
ENDFORM.