[50612] in SAPr3-news

home help back first fref pref prev next nref lref last post

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.

home help back first fref pref prev next nref lref last post