[54112] in SAPr3-news
=?ISO-8859-1?Q?ABAP_Toolprogramme_/_Anzeigen,_kopiere?=
daemon@ATHENA.MIT.EDU (volker Korrmann)
Tue Apr 12 03:03:20 2005
To: sapr3-news@mit.edu
Date: 12 Apr 2005 00:00:29 -0700
From: volker_korrmann@web.de (volker Korrmann)
Message-ID: <cdd58c09.0504112300.2aa42e14@posting.google.com>
Hallo Leute,
anbei mal wieder ein nettes kleines Tool für die SAP Script Entwicklung.
Viel Erfolg und alles Gute
Volker Korrmann
*&---------------------------------------------------------------------*
*& Report ZBRTOO_SCRIPT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*
*Hallo Leute,
*
*anbei ein kleiner Report um SAP Script Formulare zu kopieren,
*zu löschen und vor allen Dingen mal richtig anzuzeigen.
*
*Bitte dafür den Report zbrtoo_SCRIPT und den Report z_TAB
*auf dem Rechner anlegen. Beim Report z_tab muß zudem
*in den Eigenschaften die UNICODE Prüfung ausgeschaltet werden.
*(Report editieren, Menü Springen / Eigenschaften)
*
*Gruß Volker Korrmann
REPORT ZBRTOO_SCRIPT line-size 255.
field-symbols: <f>.
DATA: feld(200).
DATA:
FORM_LINES type standard table of TLINE with header line,
PAGES type standard table of ITCTG with header line,
PAGE_WINDOWS type standard table of ITCTH with header line,
PARAGRAPHS type standard table of ITCDP with header line,
STRINGS type standard table of ITCDS with header line,
TABS type standard table of ITCDQ with header line,
WINDOWS type standard table of ITCTW with header line.
DATA: FORM_HEADER LIKE ITCTA.
Parameters: FORM LIKE ITCTA-TDFORM,
LANGU LIKE SY-LANGU DEFAULT sy-langu.
Parameters: p_read as checkbox default 'X'.
parameters: p_copy as checkbox.
Parameters: ZU_FORM LIKE ITCTA-TDFORM,
ZU_LANGU LIKE SY-LANGU DEFAULT sy-langu.
Parameters: p_del as checkbox.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR form.
submit RSTXFCAT via selection-screen and return.
start-of-selection.
refresh:
FORM_LINES,
PAGES,
PAGE_WINDOWS,
PARAGRAPHS,
STRINGS,
TABS,
WINDOWS.
if p_copy = 'X' and ( langu <> zu_langu or form <> zu_form ).
CALL FUNCTION 'READ_FORM'
EXPORTING
CLIENT = SY-MANDT
FORM = form
LANGUAGE = LANGU
OLANGUAGE = ' '
OSTATUS = ' '
STATUS = ' '
THROUGHCLIENT = ' '
READ_ONLY_HEADER = ' '
THROUGHLANGUAGE = ' '
IMPORTING
FORM_HEADER = form_header
* FOUND =
* HEADER =
* OLANGUAGE =
TABLES
FORM_LINES = form_lines
PAGES = pages
PAGE_WINDOWS = page_windows
PARAGRAPHS = paragraphs
STRINGS = strings
TABS = tabs
WINDOWS = windows
.
form_header-TDFORM = zu_form.
form_header-TDspras = zu_langu.
CALL FUNCTION 'SAVE_FORM'
EXPORTING
FORM_HEADER = form_header
* IMPORTING
* SAVE_FORM_HEADER =
TABLES
FORM_LINES = form_lines
PAGES = pages
PAGE_WINDOWS = page_windows
PARAGRAPHS = paragraphs
STRINGS = strings
TABS = tabs
WINDOWS = windows
.
CALL FUNCTION 'ACTIVATE_FORM'
EXPORTING
FORM = zu_form
OLANGUAGE = zu_langu
* STATUS = ' '
* IMPORTING
* RESULT =
.
write: / 'Formular kopiert'.
endif.
if p_Read = 'X'.
CALL FUNCTION 'READ_FORM'
EXPORTING
CLIENT = SY-MANDT
FORM = form
LANGUAGE = LANGU
OLANGUAGE = ' '
OSTATUS = ' '
STATUS = ' '
THROUGHCLIENT = ' '
READ_ONLY_HEADER = ' '
THROUGHLANGUAGE = ' '
* IMPORTING
* FORM_HEADER =
* FOUND =
* HEADER =
* OLANGUAGE =
TABLES
FORM_LINES = form_lines
PAGES = pages
PAGE_WINDOWS = page_windows
PARAGRAPHS = paragraphs
STRINGS = strings
TABS = tabs
WINDOWS = windows
.
perform Ausgabe tables form_lines using 'TLINE'.
perform Ausgabe tables pages using 'itctg'.
perform Ausgabe tables page_windows using 'itcth'.
perform Ausgabe tables paragraphs using 'itcdp'.
perform Ausgabe tables strings using 'itcds'.
perform Ausgabe tables tabs using 'itcdq'.
perform Ausgabe tables windows using 'itctw'.
endif.
if p_del = 'X' and zu_form = '' and zu_langu = '' and p_read = '' and p_copy = ''.
CALL FUNCTION 'DELETE_FORM'
EXPORTING
* CLIENT = SY-MANDT
FORM = form
LANGUAGE = LANGU
* IMPORTING
* FOUND =
.
write: / 'Formular gelöscht:', form, langu.
endif.
*&--------------------------------------------------------------------*
*& Form Ausgabe
*&--------------------------------------------------------------------*
form Ausgabe tables tab
using name .
DATA: name2(60).
name2 = name.
translate name2 to upper case.
if not tab[] is initial.
write: / name.
skip.
PERFORM print_wide_table(z_tab) TABLES tab
USING 220
name2
' '
' ' " Hides
' ' " Referenzen
' ' " Checkboxen
' ' " SORT
' ' " SUM
' ' . " group
SKIP.
endif.
endform. "Ausgabe
--------------------------------------------------------------------
REPORT z_tab NO STANDARD PAGE HEADING LINE-SIZE 255.
* Öffentliche Prozeduren:
* INIT "INIT für die Nachfolgende Prozeduren
* INIT muß immer als erstes für jede neue Struktur
* aufgerufen werden!
* print_tab "Ausgabe einer ganzen Tabelle auf dem Bildschirm
* kopfausgabe "Ausgabe eines Tabellenkopfes
* PRINT_LINE "Ausgabe nur einer einzelnen Strukturzeile
* PRINT_LINE2 "Ausgabe der Struckurzeile in ein Textfeld
* PRINT_ULINE "Ausgabe eines Unterstrichs in Tabellenlänge
* XLS_start "Ausgabe der Tabelle als EXCEL Datei + Start von excel
* XLS_MAIL "Ausgabe der Tabelle per SAPMAIL (XLS Datei) (Batchfähig)
* Die Prozeduren können aus anderen Programmen genau wie in den
* nachfolgenden Beispielen aufgerufen werden.
* Beim Aufruf aus einem anderen Programm aber bitte immer
* den Reportnamen in Klammern hinten anfügen. Beispiel:
* Perform Init(Z_TAB) USING ....
TABLES: t001, trdir.
FIELD-SYMBOLS:
<fs_wa> TYPE ANY,
<fs_field> TYPE ANY,
<fs_field2> TYPE ANY.
DATA: BEGIN OF g_transl,
t(1) TYPE c VALUE '|',
x(1) TYPE x VALUE '09',
END OF g_transl.
DATA: l_tab_dfies TYPE STANDARD TABLE OF dfies.
DATA: text255(1950).
DATA: tabix LIKE sy-tabix.
FIELD-SYMBOLS: <l_wrk_dfies> TYPE dfies.
FIELD-SYMBOLS: <l_wrk_dfies2> TYPE dfies.
DATA:
subrc LIKE sy-subrc,
tab_len LIKE sy-fdpos,
tabname LIKE dntab-tabname,
tabfield(21),
include LIKE sy-repid,
program LIKE sy-repid.
DATA BEGIN OF nametab OCCURS 0.
INCLUDE STRUCTURE dntab.
DATA: rollname LIKE ddftx-rollname.
DATA END OF nametab.
DATA: BEGIN OF l_f OCCURS 0,
name(40) TYPE c,
END OF l_f.
DATA: BEGIN OF it_fields OCCURS 0,
name(40) TYPE c,
text(40) TYPE c,
laenge TYPE i,
case TYPE c,
reffield LIKE dfies-reffield,
datatype LIKE dfies-datatype,
position LIKE dfies-position,
position2 LIKE dfies-position,
offset TYPE i,
END OF it_fields.
DATA: BEGIN OF it_fields2 OCCURS 0,
name(40) TYPE c,
text(40) TYPE c,
laenge TYPE i,
case TYPE c,
reffield LIKE dfies-reffield,
datatype LIKE dfies-datatype,
position LIKE dfies-position,
position2 LIKE dfies-position,
offset TYPE i,
END OF it_fields2.
DATA: BEGIN OF it_names OCCURS 0,
name(40) TYPE c,
END OF it_names.
DATA: BEGIN OF it_hides OCCURS 0,
name(40) TYPE c,
END OF it_hides.
DATA: BEGIN OF it_check OCCURS 0,
name(40) TYPE c,
END OF it_check.
DATA: BEGIN OF it_ref OCCURS 0,
name(40) TYPE c,
END OF it_ref.
DATA: BEGIN OF it_sum OCCURS 0,
name(40) TYPE c,
position LIKE dfies-position,
position2 LIKE dfies-position,
typ(1),
END OF it_sum.
DATA: BEGIN OF it_group OCCURS 0,
gruppe TYPE i,
position LIKE dfies-position,
END OF it_group.
* TABELLEN INTERNE VERWENDUNG
DATA: BEGIN OF it_sum_einh OCCURS 0,
typ, " 1 = Normal, 2 = T100 Bezug
position2 LIKE dfies-position,
END OF it_sum_einh.
TYPES: BEGIN OF t_sum_erg,
gruppe TYPE i,
einheiten(250),
position LIKE dfies-position,
einheit(5) TYPE c,
wert TYPE p DECIMALS 4,
END OF t_sum_erg.
DATA: it_sum_erg TYPE SORTED TABLE OF t_sum_erg WITH HEADER LINE
WITH NON-UNIQUE KEY gruppe einheiten position.
DATA: BEGIN OF it_group_last OCCURS 0,
text(500) TYPE c,
l_dummy(1950) TYPE c,
END OF it_group_last.
* MAIL Verarbeitung -----------------------------------
DATA: docdata LIKE sodocchgi1 OCCURS 0 WITH HEADER LINE.
DATA: reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE.
DATA: it_text LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.
DATA: objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: sent LIKE sonv-flag OCCURS 0 WITH HEADER LINE.
DATA: new_object_id LIKE sofolenti1-object_id OCCURS 0 WITH HEADER LINE.
DATA: tab_lines LIKE sy-tabix.
* MAIL Verarbeitung -----------------------------------
DATA: text(1950).
DATA: zeile(1950).
DATA: laenge TYPE i.
DATA: g_initline(1950).
DATA: gsort(900).
DATA: gstr(90) TYPE c. " Name der Sturkutr im globalen Gedächtnis
DATA: g_max_groups TYPE i.
DATA: g_sum.
PARAMETERS: xlsstart AS CHECKBOX.
PARAMETERS: e_mail AS CHECKBOX.
START-OF-SELECTION.
* BEISPIEL 1
* --------------------------------------------------------------------
DATA: i TYPE i.
DATA: BEGIN OF it_dummy1 OCCURS 0.
INCLUDE STRUCTURE e070.
DATA: END OF it_dummy1.
it_dummy1-as4user = 'TEST'.
APPEND it_dummy1.
WRITE: / 'Beispiel 1'.
NEW-LINE.
PERFORM init
USING 'E070'
'trkorr trstatus as4user'
'- Status'
'trkorr' " Hides
' ' " Referenzen
' ' " Checkboxen
' ' " SORT
' ' " SUM
' ' . " group
PERFORM print_tab TABLES it_dummy1[].
SKIP 1.
* Beispiel 2
* --------------------------------------------------------------------
* Ausgabe der zweiten Beispieltabelle in Einzelzeilen
* DATA: BEGIN OF it_dummy2 OCCURS 0.
* INCLUDE STRUCTURE mara.
* DATA: END OF it_dummy2.
*
* it_dummy2-matnr = '000003999'.
* it_dummy2-entar = 'X'.
* it_dummy2-brgew = 1250.
* it_dummy2-ersda = '20010101'.
* it_dummy2-gewei = 'KG'.
* it_dummy2-wesch = 100.
* it_dummy2-meins = 'ST'.
*
* APPEND it_dummy2.
* APPEND it_dummy2.
* it_dummy2-entar = ''.
* it_dummy2-brgew = 12500.
* it_dummy2-wesch = 100.
* it_dummy2-meins = 'L'.
*
* APPEND it_dummy2.
*
* it_dummy2-brgew = 1250.
* it_dummy2-wesch = 300.
* it_dummy2-meins = 'L'.
*
* APPEND it_dummy2.
* APPEND it_dummy2.
*
* it_dummy2-ersda = '20010601'.
* APPEND it_dummy2.
* APPEND it_dummy2.
* APPEND it_dummy2.
* it_dummy2-matnr = '000004711'.
* APPEND it_dummy2.
* APPEND it_dummy2.
*
*
*
*
*
* WRITE: / 'Beispiel 2'.
* NEW-LINE.
* PERFORM init
* USING 'MARA'
* 'entar Matnr ersda aenam meins BRGEW(10) gewei'
* 'Mark - Datum - Einheit'
* 'Matnr brgew gewei' "HIDES
* 'test/test brgew/gewei xxx' "Referenzen
* 'entar' "Checkbox
* ' ' " SORT
* ' ' " SUM
* ' ' . " group
*
* PERFORM kopfausgabe USING 'X' ' ' CHANGING zeile.
* LOOP AT it_dummy2.
* PERFORM print_line USING it_dummy2.
* ENDLOOP.
* NEW-LINE.
* PERFORM print_uline.
*
*
*
** Beispiel 3
** --------------------------------------------------------------------
** Tabelle mit Endsumme und Summen für Gruppenstufen
** --------------------------------------------------------------------
*
*
* WRITE: / 'Beispiel 3'.
* NEW-LINE.
*
* PERFORM init
* USING 'MARA'
* 'entar Matnr ersda aenam BRGEW(10) gewei WESCH meins'
* 'M - Datum - Einh.'
* 'Matnr brgew gewei' "HIDES
* 'test/test brgew/gewei xxx' "Referenzen
* 'entar' "Checkbox
* 'matnr ersda ' " SORT
* 'brgew wesch ' " SUM
* 'matnr matnr/ersda ' " group
* .
*
* PERFORM print_tab TABLES it_dummy2[].
* SKIP 1.
*
*
*
*
** Beispiel 4
** --------------------------------------------------------------------
** Ausgabe der zweiten Beispieltabelle in Einzelzeilen
** Diese jedoch über ein Rückgabefeld
*
* SKIP 1.
* WRITE: / 'Beispiel 4'.
* NEW-LINE.
* PERFORM init
* USING 'MARA'
* 'entar Matnr ersda aenam meins BRGEW(10) gewei'
* 'Mark - Datum - Einheit'
* 'Matnr brgew gewei' "HIDES
* 'test/test brgew/gewei xxx' "Referenzen
* 'entar' "Checkbox
* ' ' " SORT
* ' ' " SUM
* ' ' . " group
*
* PERFORM kopfausgabe USING 'X' '' CHANGING zeile.
* LOOP AT it_dummy2.
* PERFORM print_line2 USING it_dummy2
* CHANGING zeile.
** condense zeile no-gaps.
** TRANSLATE zeile USING '|;'.
* WRITE: / zeile.
* ENDLOOP.
* NEW-LINE.
* PERFORM print_uline.
*
*
*
** Beispiel 5
** --------------------------------------------------------------------
** Download der zweiten Beispieltabelle als XLS Datei + XLS Start
*
* PERFORM init
* USING 'MARA'
* 'entar Matnr ersda aenam meins BRGEW(10) gewei'
* 'Mark - Datum - Einheit'
* 'Matnr brgew gewei' "HIDES
* 'test/test brgew/gewei xxx' "Referenzen
* 'entar' "Checkbox
* ' ' " SORT
* ' ' " SUM
* ' ' . " group
*
* IF xlsstart = 'X'.
* PERFORM xls_start TABLES it_dummy2
* USING 'c:\temp\t1.xls' 'X' 'X'.
*
* ENDIF.
*
*
** Beispiel 6
** --------------------------------------------------------------------
** Da im Batch kein PC Download möglich ist, soll eine solche Datei im
** XLS Format per SAP Mail an einen oder mehrere User versendet werden.
*
* PERFORM init
* USING 'MARA'
* 'entar Matnr ersda aenam meins BRGEW(10) gewei'
* 'Mark - Datum - Einheit'
* 'Matnr brgew gewei' "HIDES
* 'test/test brgew/gewei xxx' "Referenzen
* 'entar' "Checkbox
* ' ' " SORT
* ' ' " SUM
* ' ' . " group
*
* IF e_mail = 'X'.
* PERFORM xls_mail TABLES it_dummy2
* USING 'Testmail vom mini ALV' " titel
* sy-uname " empfaenger
* '' " mailtyp (SAPMAIL = Default)
* 'X' " Express
* 'X'. " header (Kopfzeile ausgeben)
.
*
*
* ENDIF.
*
* EXIT.
*
*---------------------------------------------------------------------*
* FORM Kopfausgabe
*---------------------------------------------------------------------*
* Print: = 'X' ---> Bildschirmausgabe.
* Sonst wird nur die Kopfzeile im Textfeld zurückgegeben.
FORM kopfausgabe USING print
full_size
CHANGING line.
DATA: l_dummy_string(1950).
DATA: l_tmp_string(1950).
DATA: i TYPE i.
DATA: l2 TYPE i.
l_dummy_string = '|'.
laenge = 1.
LOOP AT it_fields.
IF it_fields-text = '-'.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0.
WRITE <l_wrk_dfies>-fieldname TO l_tmp_string.
i = <l_wrk_dfies>-outputlen.
IF it_fields-laenge <> 0.
i = it_fields-laenge.
ENDIF.
IF i > 100. i = 100. ENDIF.
IF full_size = 'X'. i = STRLEN( l_tmp_string ). ENDIF.
TRANSLATE l_tmp_string USING ' #'.
CONCATENATE l_dummy_string l_tmp_string(i) '|'
INTO l_dummy_string.
laenge = laenge + i + 1.
ENDIF.
ELSE.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0.
WRITE it_fields-text TO l_tmp_string.
i = <l_wrk_dfies>-outputlen.
IF it_fields-laenge <> 0.
i = it_fields-laenge.
ENDIF.
IF full_size = 'X'. i = STRLEN( l_tmp_string ). ENDIF.
IF i > 100. i = 100. ENDIF.
TRANSLATE l_tmp_string USING ' #'.
CONCATENATE l_dummy_string l_tmp_string(i) '|'
INTO l_dummy_string.
laenge = laenge + i + 1.
ENDIF.
ENDIF.
ENDLOOP.
TRANSLATE l_dummy_string USING '# '.
line = l_dummy_string.
l2 = laenge.
IF print = 'X'.
ULINE AT 0(laenge).
PERFORM write_long USING line 1.
* IF laenge > 250.
* WRITE: / l_dummy_string(250) COLOR 1 NO-GAP.
* laenge = laenge - 250.
* l_dummy_string = l_dummy_string+250.
* IF laenge > 250.
* WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
* laenge = laenge - 250.
* l_dummy_string = l_dummy_string+250.
* ENDIF.
* IF laenge > 250.
* WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
* laenge = laenge - 250.
* l_dummy_string = l_dummy_string+250.
* ENDIF.
* IF laenge > 250.
* WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
* laenge = laenge - 250.
* l_dummy_string = l_dummy_string+250.
* ELSE.
* WRITE: l_dummy_string(laenge) COLOR 1 NO-GAP.
* ENDIF.
*
*
* ELSE.
* WRITE: / l_dummy_string(laenge) COLOR 1.
* ENDIF.
NEW-LINE.
ULINE AT 0(l2).
ENDIF.
ENDFORM. "Kopfausgabe
*---------------------------------------------------------------------*
* FORM print_line *
*---------------------------------------------------------------------*
* Es erfolgt eine Bildschirmausgabe.
FORM print_line USING u_str.
DATA: fields2(1950) TYPE c.
DATA: i TYPE i.
DATA: offset TYPE i.
DATA: i2 TYPE i.
DATA: rc TYPE i.
DATA: dref TYPE REF TO data.
CREATE DATA dref TYPE (gstr).
ASSIGN dref->* TO <fs_wa>.
ASSIGN u_str TO <fs_wa>.
offset = 2.
WRITE: / g_initline(laenge).
LOOP AT it_fields.
ASSIGN COMPONENT it_fields-position
OF STRUCTURE <fs_wa> TO <fs_field>.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
CASE it_fields-case.
WHEN '1'.
WRITE AT offset <fs_field>(1) AS CHECKBOX.
offset = offset + 2.
WHEN '2'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE: AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '3'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
WHEN '4'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> CURRENCY <fs_field2> TO text(it_fields-laenge)
.
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '5'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> CURRENCY <fs_field2>.
offset = offset + it_fields-laenge + 1.
WHEN '6'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '7'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> UNIT <fs_field2>.
offset = offset + it_fields-laenge + 1.
WHEN '8'.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '9'.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
WHEN OTHERS.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
* WRITE: / 'FEHLER !!!'.
ENDCASE.
ENDLOOP.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
ENDFORM. "print_line
*---------------------------------------------------------------------*
* FORM print_line2
*---------------------------------------------------------------------*
* Anstelle der Prozedur Print_line gibt diese keine Informationen auf
* dem Bildschirm aus, sondern diese in einem Textfeld zurück.
FORM print_line2 USING u_str
CHANGING line.
DATA: fields2(3200) TYPE c.
DATA: i TYPE i.
DATA: i2 TYPE i.
DATA: offset TYPE i.
DATA: ausgabe(3200) TYPE c.
DATA: rueck(3200) TYPE c.
DATA: rc TYPE i.
DATA: dref TYPE REF TO data.
DATA: dref3 TYPE REF TO data.
CREATE DATA dref3 TYPE (gstr).
ASSIGN dref3->* TO <fs_wa>.
DATA: dummystr(3200).
dummystr = u_str.
<fs_wa> = dummystr.
CLEAR t001.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
offset = 1.
rueck = g_initline.
LOOP AT it_fields.
ASSIGN COMPONENT it_fields-position
OF STRUCTURE <fs_wa> TO <fs_field>.
CASE it_fields-case.
WHEN '1'.
rueck+offset(1) = <fs_field>(1). offset = offset + 2.
WHEN '2'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: <fs_field> TO text(it_fields-laenge).
rueck+offset(it_fields-laenge) = text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '3'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: <fs_field> TO text.
rueck+offset(it_fields-laenge) = text.
offset = offset + it_fields-laenge + 1.
WHEN '4'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> CURRENCY <fs_field2> TO text(it_fields-laenge)
.
rueck+offset(it_fields-laenge) = text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '5'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> CURRENCY <fs_field2> TO text left-justified.
rueck+offset(it_fields-laenge) = text.
offset = offset + it_fields-laenge + 1.
WHEN '6'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields-laenge).
rueck+offset(it_fields-laenge) = text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '7'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> UNIT <fs_field2> TO text.
rueck+offset(it_fields-laenge) = text.
offset = offset + it_fields-laenge + 1.
WHEN '8'.
WRITE: <fs_field> TO text(it_fields-laenge).
rueck+offset(it_fields-laenge) = text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '9'.
WRITE: <fs_field> TO text.
rueck+offset(it_fields-laenge) = text.
offset = offset + it_fields-laenge + 1.
WHEN OTHERS.
WRITE: <fs_field> TO text.
rueck+offset(it_fields-laenge) = text.
offset = offset + it_fields-laenge + 1.
* WRITE: / 'FEHLER !!!'.
ENDCASE.
ENDLOOP.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
line = rueck.
ENDFORM. "print_line2
*---------------------------------------------------------------------*
* FORM print_uline *
*---------------------------------------------------------------------*
FORM print_uline.
ULINE AT 0(laenge).
ENDFORM. "print_uline
*---------------------------------------------------------------------*
* FORM init *
*---------------------------------------------------------------------*
* Initialisieren der Ausgabe, lesen der Strukturen,
* Vorverarbeiten der Parameter.
*
* SIEHE: PRINT_TAB
*
*
FORM init USING str "Name der Struktur
pfields "Anzuzeigende Felder
names "Benennung der Felder in der Kopfzeile
hides "Per Hide zu hinterlegende Felder
ref "UNIT oder
checkbox "Als Checkbox anzuzeigende Felder.
sort2 "Sortierreihenfolge
sum "Felder die zu summieren sind
group. "Gruppenstufen
DATA: fields(3000).
fields = pfields.
* STR: Name der übergebenen Struktur (muß im DDIC existieren)
* Fields: Auszugebenede Felder der Struktur. Die einzelnen Felder
* werden durch Leerzeichen getrennt.
* Ist am Ende des Feldes eine Längenbegrenzung angegeben
* z.B. BRGEW(10) so wird das Feld maximal 10 Stellig
* ausgegeben.
* Es wird in diesem Beispiel folgendes Write prozessiert:
* WRITE BRGEW into TEXT(10). Dieser Text wird dann
* ausgegeben. Bitte keine Konstrukte wie
* BRGEW+3(10) verwenden!
*
* Names: Namen der Felder für die Kopfzeile
* Soll der Feldname ausgegeben werden, einfach ein "-"
* Minuszeichen für dieses Feld eintragen. Die einzelnen
* Feldnamen bitte durch Leerzeichen getrennt eingeben.
* Für nicht näher benannte Felder wird der Feldname
* in der Kopfzeile ausgegeben.
* HIDES: Die hier durch Leerzeichen getrennt eigegebenen Felder
* werden per HIDE Befehl auf dem Bildschirm abgelegt.
* (Nur Print_tab)
* ref: Für Referenzen (CURR/QUAN), die nicht auf ein Feld
* innerhalb der eigenen Struktur verweisen, muß der Verweis
* umgesetzt werden. Dazu bitte per Leerzeichen getrennt
* immer Feld/neueReferenz eingeben.
* CHECKBOX: Die hier eingegebenen Felder werden als Checkbox
* ausgegeben. (Nur print_tab)
* SORT: Sortierungsausdruck Beispiel:
* "Feld1 Feld2 descending Feld3"
* Funktioniert nur in Verbindung mit der Tabellenausgabe
* (Print_TAB)
* SUM: Die nachfolgend durch Leerzeichen getrennten Felder
* sind zu summieren. Es werden nur QUAN, CURR, DEC, INT und
* P Felder betrachtet!
* Die Parameter von SUM und GROUP werdeb nur bei
* der Prozedur PRINT_TAB beachtet!!!
* GROUP: Bei Summierungen werden folgende Gruppenstufen
* (Gruppierungen) betrachtet.
* Die einzelnen Felder einer Gruppierung werden durch
* einen Slash / getrennt. Die einzelnen Gruppenstufen
* durch ein Leerzeichen
* Beispiel:
* BUKRS BUKRS/MATKL BUKRS/MATKL/MATNR
DATA: BEGIN OF it_tmp OCCURS 0,
name(40) TYPE c,
END OF it_tmp.
DATA: BEGIN OF it_tmp2 OCCURS 0,
name(40) TYPE c,
END OF it_tmp2.
* Wenn keine Felder übergeben, alle Felder nehmen!!!
IF fields = ''.
PERFORM load_table USING str.
CLEAR fields.
LOOP AT nametab. " Löschen der nicht in Frage kommenden Felder
CONCATENATE fields nametab-fieldname INTO fields SEPARATED BY ' '.
ENDLOOP.
SHIFT fields LEFT DELETING LEADING space.
ENDIF.
DATA: stname TYPE ddobjname.
DATA: fields2(1950) TYPE c.
DATA: t1(50), t2(50), t3(1950).
DATA: i TYPE i.
DATA: i2 TYPE i.
gstr = str.
stname = gstr.
gsort = sort2.
TRANSLATE gsort TO UPPER CASE.
REFRESH l_tab_dfies.
CLEAR l_tab_dfies.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
tabname = stname
all_types = 'X'
TABLES
dfies_tab = l_tab_dfies
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SORT l_tab_dfies BY fieldname.
* Parameter in Tabellen übertragen
REFRESH:
it_fields, it_names, it_hides, it_ref, it_check, it_sum, it_group.
CLEAR:
it_fields, it_names, it_hides, it_ref, it_check, it_sum, it_group.
fields2 = fields.
TRANSLATE fields2 TO UPPER CASE.
REFRESH l_f.
SPLIT fields2 AT ' ' INTO TABLE l_f.
LOOP AT l_f.
it_fields-name = l_f-name.
APPEND it_fields.
ENDLOOP.
REFRESH l_f.
SPLIT names AT ' ' INTO TABLE l_f.
LOOP AT l_f.
it_names-name = l_f-name.
APPEND it_names.
ENDLOOP.
fields2 = hides.
TRANSLATE fields2 TO UPPER CASE.
SPLIT fields2 AT ' ' INTO TABLE it_hides.
SORT it_hides.
fields2 = checkbox.
TRANSLATE fields2 TO UPPER CASE.
SPLIT fields2 AT ' ' INTO TABLE it_check.
SORT it_check.
fields2 = ref.
TRANSLATE fields2 TO UPPER CASE.
SPLIT fields2 AT ' ' INTO TABLE it_ref.
SORT it_ref.
fields2 = sum.
TRANSLATE fields2 TO UPPER CASE.
SPLIT fields2 AT ' ' INTO TABLE it_sum.
SORT it_sum.
CLEAR it_tmp. REFRESH it_tmp.
fields2 = group.
TRANSLATE fields2 TO UPPER CASE.
SPLIT fields2 AT ' ' INTO TABLE it_tmp.
LOOP AT it_tmp.
it_group-gruppe = sy-tabix.
g_max_groups = sy-tabix.
REFRESH it_tmp2. CLEAR it_tmp2.
SPLIT it_tmp-name AT '/' INTO TABLE it_tmp2.
LOOP AT it_tmp2.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies2>
WITH KEY fieldname = it_tmp2-name
BINARY SEARCH.
IF sy-subrc = 0.
it_fields-position2 = <l_wrk_dfies2>-position.
it_group-position = <l_wrk_dfies2>-position.
APPEND it_group.
ENDIF.
ENDLOOP.
ENDLOOP.
SORT it_group BY gruppe DESCENDING position.
* Gruppenwechsel LAST Tabelle vorinitialisieren.
i = g_max_groups.
REFRESH it_group_last.
CLEAR it_group_last.
WHILE i >= 0.
APPEND it_group_last.
i = i - 1.
ENDWHILE.
DESCRIBE TABLE it_fields LINES i.
DESCRIBE TABLE it_names LINES i2.
* Kopfnamen nachkontrollieren
WHILE i2 < i.
i2 = i2 + 1.
it_names = '-'. APPEND it_names.
ENDWHILE.
LOOP AT it_fields.
READ TABLE it_names INDEX sy-tabix.
it_fields-text = it_names-name.
SPLIT it_fields-name AT '(' INTO it_fields-name t1.
SPLIT t1 AT ')' INTO t1 t2.
it_fields-laenge = t1.
MODIFY it_fields.
ENDLOOP.
* Referenzen umsetzen.
LOOP AT it_ref.
SPLIT it_ref-name AT '/' INTO t1 t2 t3.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = t1
BINARY SEARCH.
IF sy-subrc = 0.
tabix = sy-tabix.
<l_wrk_dfies>-reffield = t2.
MODIFY l_tab_dfies FROM <l_wrk_dfies> INDEX tabix.
ENDIF.
ENDLOOP.
* Referenzen kontrollieren
LOOP AT it_fields.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0 AND <l_wrk_dfies>-reffield <> ''.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = <l_wrk_dfies>-reffield
BINARY SEARCH.
IF sy-subrc <> 0 .
CONCATENATE 'WARNUNG: Das Feld' it_fields-name
'Referenziert auf ein Feld, welches nicht in der Struktur:'
gstr 'vorhanden ist' INTO t3 SEPARATED BY ' '.
WRITE: / t3.
<l_wrk_dfies>-reftable = ''.
<l_wrk_dfies>-reffield = ''.
ENDIF.
ENDIF.
ENDLOOP.
* --------------------------------------------------------------------
* Leere Strukturzeile generieren und
* it_fields mit Fallunterscheidungen füllen
* --------------------------------------------------------------------
DATA: offset TYPE i.
DATA: offset_old TYPE i.
DATA: ausgabe(3200) TYPE c.
DATA: rueck(3200) TYPE c.
DATA: rc TYPE i.
offset = 1.
rueck = '|'.
LOOP AT it_fields.
it_fields-datatype = ''.
it_fields-case = ''.
it_fields-reffield = ''.
it_fields-position = 0.
it_fields-position2 = 0.
it_fields-offset = offset.
offset_old = offset.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies>
WITH KEY fieldname = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0.
it_fields-reffield = <l_wrk_dfies>-reffield.
it_fields-datatype = <l_wrk_dfies>-datatype.
READ TABLE it_check WITH KEY name = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0.
* Als Checkbox ausgeben (FALL = 1)
it_fields-case = '1'.
rueck+offset(2) = ' |'. offset = offset + 2.
it_fields-laenge = 1.
ELSE.
* Normale Feldausgabe
IF <l_wrk_dfies>-datatype = 'CURR' OR
<l_wrk_dfies>-datatype = 'QUAN'.
rc = 0.
* Betrachtung von CURR und QUAN Feldern
IF <l_wrk_dfies>-reftable = 'T001'.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies2>
WITH KEY fieldname = 'BUKRS'
BINARY SEARCH.
IF sy-subrc = 0.
it_fields-position2 = <l_wrk_dfies2>-position.
* ASSIGN COMPONENT <l_wrk_dfies2>-position
* OF STRUCTURE <fs_wa> TO <fs_field2>.
IF sy-subrc = 0.
rc = 1.
* Ausgabe wie ein normales Feld, da jetzt Referenzstruktur gefüllt
IF it_fields-laenge <> 0.
* FALL = 2 --> T001 bezug mit veränderter Länge
* --> Normale Ausgabe mit veränderter Länge
it_fields-case = '2'.
offset = offset + it_fields-laenge.
rueck+offset(1) = '|'. offset = offset + 1.
ELSE.
* FALL = 3 --> T001 bezug mit veränderter Länge
* --> Normale Ausgabe mit dfies Standardlänge
it_fields-case = '3'.
offset = offset + <l_wrk_dfies>-outputlen.
rueck+offset(1) = '|'. offset = offset + 1.
it_fields-laenge = <l_wrk_dfies>-outputlen.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF rc = 0.
* Keine Curr Felder in Bezug auf T001 !!
* Jetzt normalen CURR und QUAN Bezug abarbeiten.
READ TABLE l_tab_dfies ASSIGNING <l_wrk_dfies2>
WITH KEY fieldname = <l_wrk_dfies>-reffield
BINARY SEARCH.
IF sy-subrc = 0.
it_fields-position2 = <l_wrk_dfies2>-position.
* ASSIGN COMPONENT <l_wrk_dfies2>-position
* OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <l_wrk_dfies>-datatype = 'CURR'.
IF it_fields-laenge <> 0.
* FALL = 4 --> CURR Feld Ausgabe mit veränderter Länge
it_fields-case = '4'.
offset = offset + it_fields-laenge.
rueck+offset(1) = '|'. offset = offset + 1.
ELSE.
* FALL = 5 --> CURR Feld Ausgabe mit dfies Standardlänge
it_fields-case = '5'.
offset = offset + <l_wrk_dfies>-outputlen.
rueck+offset(1) = '|'. offset = offset + 1.
it_fields-laenge = <l_wrk_dfies>-outputlen.
ENDIF.
ELSE.
IF it_fields-laenge <> 0.
* FALL = 6 --> QUAN Feld Ausgabe mit veränderter Länge
it_fields-case = '6'.
offset = offset + it_fields-laenge.
rueck+offset(1) = '|'. offset = offset + 1.
ELSE.
* FALL = 7 --> QUAN Feld Ausgabe mit dfies Standardlänge
it_fields-case = '7'.
offset = offset + <l_wrk_dfies>-outputlen.
rueck+offset(1) = '|'. offset = offset + 1.
it_fields-laenge = <l_wrk_dfies>-outputlen.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
* Betrachtung von normalen Ausgabefeldern
IF it_fields-laenge <> 0.
* FALL = 8 --> Normale Ausgabe mit veränderter Länge
it_fields-case = '8'.
offset = offset + it_fields-laenge.
rueck+offset(1) = '|'. offset = offset + 1.
ELSE.
* FALL = 9 --> Normale Ausgabe mit dfies Standardlänge
it_fields-case = '9'.
offset = offset + <l_wrk_dfies>-outputlen.
rueck+offset(1) = '|'. offset = offset + 1.
it_fields-laenge = <l_wrk_dfies>-outputlen.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF offset_old = offset.
offset = offset + <l_wrk_dfies>-outputlen.
rueck+offset(1) = '|'. offset = offset + 1.
it_fields-laenge = <l_wrk_dfies>-outputlen.
ENDIF.
it_fields-position = <l_wrk_dfies>-position.
MODIFY it_fields.
ENDLOOP.
g_initline = rueck.
g_sum = ''.
LOOP AT it_sum.
g_sum = 'X'.
READ TABLE it_fields WITH KEY name = it_sum-name.
IF it_fields-case = 2 OR it_fields-case = 3.
it_sum_einh-typ = '2'.
it_sum-typ = '2'.
ELSE.
it_sum_einh-typ = '1'.
it_sum-typ = '1'.
ENDIF.
it_sum-position = it_fields-position.
it_sum-position2 = it_fields-position2.
MODIFY it_sum.
it_sum_einh-position2 = it_fields-position2.
APPEND it_sum_einh.
ENDLOOP.
SORT it_sum BY position.
SORT it_sum_einh.
DELETE ADJACENT DUPLICATES FROM it_sum_einh.
it_fields2[] = it_fields[].
SORT it_fields2 BY position.
ENDFORM. "INIT
*&--------------------------------------------------------------------*
*& Form print_wide_table
*&--------------------------------------------------------------------*
FORM print_wide_table TABLES it
USING breite "maximale Ausgabebreite
str "Name der Struktur
names "Benennung der Felder in der Kopfzeile
hides "Per Hide zu hinterlegende Felder
ref "UNIT oder
checkbox "Als Checkbox anzuzeigende Felder.
sort2 "Sortierreihenfolge
sum "Felder die zu summieren sind
group. "Gruppenstufen
DATA: fields(3000).
DATA: i TYPE i.
DATA: BEGIN OF it_fields OCCURS 0,
fields(3000),
END OF it_fields.
DESCRIBE TABLE it LINES i.
IF i = 0. EXIT. ENDIF.
* Wenn keine Felder übergeben, alle Felder nehmen!!!
PERFORM load_table USING str.
CLEAR fields.
LOOP AT nametab. " Löschen der nicht in Frage kommenden Felder
i = i + nametab-ddlen + 2.
IF i > breite.
IF fields <> ''.
SHIFT fields LEFT DELETING LEADING space.
it_fields-fields = fields. APPEND it_fields.
ENDIF.
CLEAR fields.
i = nametab-ddlen + 2.
ENDIF.
CONCATENATE fields nametab-fieldname INTO fields SEPARATED BY ' '.
IF i > breite.
IF fields <> ''.
SHIFT fields LEFT DELETING LEADING space.
it_fields-fields = fields. APPEND it_fields.
CLEAR fields.
ENDIF.
i = 0.
ENDIF.
ENDLOOP.
SHIFT fields LEFT DELETING LEADING space.
it_fields-fields = fields. APPEND it_fields.
CLEAR fields.
LOOP AT it_fields.
PERFORM init
USING str "Name der Struktur
it_fields-fields "Anzuzeigende Felder
names "Benennung der Felder in der Kopfzeile
hides "Per Hide zu hinterlegende Felder
ref "UNIT oder
checkbox "Als Checkbox anzuzeigende Felder.
sort2 "Sortierreihenfolge
sum "Felder die zu summieren sind
group. "Gruppenstufen
PERFORM print_tab TABLES it.
SKIP 2.
ENDLOOP.
ENDFORM. "print_wide_table
*---------------------------------------------------------------------*
* FORM print_tab *
*---------------------------------------------------------------------*
FORM print_tab TABLES it.
DATA: fields2(1950) TYPE c.
DATA: l_dummy(1950).
DATA: text(500).
DATA: tabix LIKE sy-tabix.
DATA: i TYPE i.
DATA: offset TYPE i.
DATA: i3 TYPE i.
DATA: i2 TYPE i.
DATA: rc TYPE i.
DATA: l_act_einh_wechsel(1950).
DATA: t1(50),
t2(50),
t3(50),
t4(50),
t5(50),
t6(50),
t7(50),
t8(50),
t9(50),
t10(50),
t11(50),
t12(50),
t13(50),
t14(50),
t15(50).
DATA: dref TYPE REF TO data.
CREATE DATA dref TYPE (gstr).
ASSIGN dref->* TO <fs_wa>.
DATA: wa(1950).
* NEW-PAGE LINE-SIZE 1250.
IF gsort <> ''.
SPLIT gsort AT ' ' INTO t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
t11 t12 t13 t14 t15.
SORT it BY (t1) (t2) (t3) (t4) (t5) (t6) (t7) (t8) (t9)
(t10) (t11) (t12) (t13) (t14) (t15).
ENDIF.
* Kopf ausgeben.
PERFORM kopfausgabe USING 'X' '' CHANGING zeile.
* Tabelle ausgeben
LOOP AT it INTO wa.
<fs_wa> = wa.
tabix = sy-tabix.
i = sy-tabix MOD 2.
IF i = 1.
FORMAT COLOR 2 INTENSIFIED ON.
ELSE.
FORMAT COLOR 2 INTENSIFIED OFF.
ENDIF.
* Erkennen eines Einheitengruppenwechsels
IF g_sum = 'X'.
l_act_einh_wechsel = ''.
LOOP AT it_sum_einh.
ASSIGN COMPONENT it_sum_einh-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF it_sum_einh-typ = '1'.
CONCATENATE l_act_einh_wechsel '|' <fs_field2> INTO
l_act_einh_wechsel.
ELSE.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
CONCATENATE l_act_einh_wechsel '|' t001-waers INTO
l_act_einh_wechsel.
ENDIF.
ENDLOOP.
ENDIF.
* Erkennen eines Gruppenwechsels
IF g_max_groups > 0.
CLEAR l_dummy.
LOOP AT it_group.
ASSIGN COMPONENT it_group-position
OF STRUCTURE <fs_wa> TO <fs_field>.
WRITE: <fs_field> TO text.
CONCATENATE l_dummy '|' text INTO l_dummy.
AT END OF gruppe.
READ TABLE it_group_last INDEX it_group-gruppe.
IF it_group_last-text <> l_dummy.
IF it_group_last-text = ''.
it_group_last-text = l_dummy.
MODIFY it_group_last INDEX it_group-gruppe.
ELSE.
it_group_last-text = l_dummy.
MODIFY it_group_last INDEX it_group-gruppe.
* Gruppenwechsel ausgeben!
NEW-LINE.
ULINE AT 0(laenge).
FORMAT RESET.
PERFORM summenausgabe USING it_group-gruppe.
ENDIF.
ENDIF.
CLEAR l_dummy.
ENDAT.
ENDLOOP.
LOOP AT it_group_last.
it_group_last-l_dummy = <fs_wa>.
MODIFY it_group_last.
ENDLOOP.
ENDIF. " Erkennen eines Gruppenwechsels
offset = 2.
PERFORM write_long USING g_initline 0.
* WRITE: / g_initline(laenge).
HIDE sy-tabix.
CLEAR text255.
LOOP AT it_fields.
ASSIGN COMPONENT it_fields-position
OF STRUCTURE <fs_wa> TO <fs_field>.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
READ TABLE it_hides WITH KEY name = it_fields-name
BINARY SEARCH.
IF sy-subrc = 0.
text = <fs_field>.
CONCATENATE text255 text '|' INTO text255.
* HIDE text255.
ENDIF.
CASE it_fields-case.
WHEN '1'.
WRITE AT offset <fs_field>(1) AS CHECKBOX.
offset = offset + 2.
WHEN '2'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE: AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '3'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
WHEN '4'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> CURRENCY <fs_field2> TO
text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '5'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> CURRENCY <fs_field2>.
offset = offset + it_fields-laenge + 1.
WHEN '6'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '7'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> UNIT <fs_field2>.
offset = offset + it_fields-laenge + 1.
WHEN '8'.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
offset = offset + it_fields-laenge + 1.
WHEN '9'.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
WHEN OTHERS.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: AT offset <fs_field>.
offset = offset + it_fields-laenge + 1.
* WRITE: / 'FEHLER !!!'.
ENDCASE.
* ----------------------------------------------------------------------
* Die Werte zu den Gesamtsummen hinzurechnen.
* Jede Gruppierung (0 = Gesamt) hat ihre eigenen Summen
IF g_sum = 'X'.
READ TABLE it_sum WITH KEY position = it_fields-position
BINARY SEARCH.
IF sy-subrc = 0.
i3 = 0.
* Für jede Gruppe die Addition durchführen.
WHILE i3 <= g_max_groups.
READ TABLE it_sum_erg WITH KEY gruppe = i3
einheiten = l_act_einh_wechsel
position = it_fields-position.
IF sy-subrc = 0.
tabix = sy-tabix.
it_sum_erg-wert = it_sum_erg-wert + <fs_field>.
IF it_sum-typ = '1'.
it_sum_erg-einheit = <fs_field2>.
ELSE.
it_sum_erg-einheit = t001-waers.
ENDIF.
MODIFY it_sum_erg INDEX sy-tabix.
ELSE.
CLEAR it_sum_erg.
it_sum_erg-gruppe = i3.
it_sum_erg-position = it_fields-position.
it_sum_erg-einheiten = l_act_einh_wechsel.
IF it_sum-typ = '1'.
it_sum_erg-einheit = <fs_field2>.
ELSE.
it_sum_erg-einheit = t001-waers.
ENDIF.
it_sum_erg-wert = <fs_field>.
INSERT it_sum_erg INTO TABLE it_sum_erg.
ENDIF.
i3 = i3 + 1.
ENDWHILE.
ENDIF.
ENDIF.
ENDLOOP.
IF text255 <> ''.
HIDE text255.
ENDIF.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
ENDLOOP.
NEW-LINE.
ULINE AT 0(laenge).
FORMAT RESET.
* Gesamtsumme ausgeben!!!
IF g_sum = 'X'.
i3 = g_max_groups.
WHILE i3 >= 0.
PERFORM summenausgabe USING i3.
i3 = i3 - 1.
NEW-LINE.
ULINE AT 0(laenge).
ENDWHILE.
ENDIF.
ENDFORM. "print_tab
*---------------------------------------------------------------------*
* FORM Summenausgabe *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> U_GRUPPE *
*---------------------------------------------------------------------*
FORM summenausgabe USING u_gruppe.
DATA: l_dummy(1950).
DATA: offset TYPE i.
DATA: i3 TYPE i.
DATA: i2 TYPE i.
DATA: rc TYPE i.
DATA: nl TYPE i.
DATA: ltext(1).
l_dummy = <fs_wa>.
rc = 0.
nl = 0.
FORMAT COLOR 3 INTENSIFIED ON.
CLEAR <fs_wa>.
LOOP AT it_sum_erg WHERE gruppe = u_gruppe.
AT NEW einheiten.
WRITE: / g_initline(laenge).
nl = 0.
CLEAR <fs_wa>.
IF u_gruppe = 0.
IF rc = 0.
WRITE: AT 2 'Gesamt:'.
rc = 1.
ELSE.
WRITE: AT 2 ' '.
ENDIF.
ELSE.
WRITE u_gruppe TO ltext.
WRITE: AT 2 ltext.
ENDIF.
ENDAT.
READ TABLE it_sum WITH KEY position = it_sum_erg-position
BINARY SEARCH.
READ TABLE it_fields2 WITH KEY position = it_sum_erg-position
BINARY SEARCH.
ASSIGN COMPONENT it_sum-position
OF STRUCTURE <fs_wa> TO <fs_field>.
ASSIGN COMPONENT it_sum-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF it_sum-typ = '2'.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
ELSE.
<fs_field2> = it_sum_erg-einheit.
ENDIF.
<fs_field> = it_sum_erg-wert.
offset = it_fields2-offset + 1.
CASE it_fields2-case.
WHEN '2'.
WRITE: <fs_field> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
WHEN '3'.
WRITE: <fs_field> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
WHEN '4'.
WRITE: <fs_field> CURRENCY <fs_field2> TO
text(it_fields2-laenge).
WRITE AT offset text(it_fields2-laenge).
WHEN '5'.
WRITE: <fs_field> CURRENCY <fs_field2> TO
text(it_fields2-laenge).
WRITE AT offset text(it_fields2-laenge).
WHEN '6'.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields2-laenge).
WRITE AT offset text(it_fields2-laenge).
WHEN '7'.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields2-laenge).
WRITE AT offset text(it_fields2-laenge).
WHEN '8'.
WRITE: <fs_field> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
WHEN '9'.
WRITE: <fs_field> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
WHEN OTHERS.
WRITE: <fs_field> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
* WRITE: / 'FEHLER !!!'.
ENDCASE.
IF it_sum-typ = '1'.
READ TABLE it_fields2 WITH KEY position = it_sum-position2
BINARY SEARCH.
offset = it_fields2-offset + 1.
WRITE: <fs_field2> TO text(it_fields2-laenge).
WRITE: AT offset text(it_fields2-laenge).
ENDIF.
IF nl = 0.
READ TABLE it_group_last INDEX it_group-gruppe.
<fs_wa> = it_group_last-l_dummy.
PERFORM gruppenstufenfelder USING u_gruppe.
nl = 1.
ENDIF.
ENDLOOP.
DELETE it_sum_erg WHERE gruppe = u_gruppe.
FORMAT RESET.
<fs_wa> = l_dummy.
ENDFORM. "summenausgabe
*---------------------------------------------------------------------*
* FORM gruppenstufenfelder *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> U_GRUPPE *
*---------------------------------------------------------------------*
FORM gruppenstufenfelder USING u_gruppe.
DATA: offset TYPE i.
DATA: i3 TYPE i.
DATA: i2 TYPE i.
DATA: rc TYPE i.
IF u_gruppe <> 0.
* Ausgabe der Gruppenstufenfelder
LOOP AT it_group WHERE gruppe = u_gruppe.
READ TABLE it_fields WITH KEY position = it_group-position.
ASSIGN COMPONENT it_fields-position
OF STRUCTURE <fs_wa> TO <fs_field>.
offset = it_fields-offset + 1.
* --------------------------------------------------------------------
* Zeile ausgeben.
* --------------------------------------------------------------------
CASE it_fields-case.
WHEN '1'.
WRITE AT offset <fs_field>(1) AS CHECKBOX.
WHEN '2'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE: AT offset text(it_fields-laenge).
WHEN '3'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
IF <fs_field2> <> t001-bukrs.
CLEAR t001.
SELECT SINGLE * FROM t001 WHERE bukrs = <fs_field2>.
ENDIF.
WRITE: AT offset <fs_field>.
WHEN '4'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> CURRENCY <fs_field2> TO
text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
WHEN '5'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> CURRENCY <fs_field2>.
WHEN '6'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: <fs_field> UNIT <fs_field2> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
WHEN '7'.
ASSIGN COMPONENT it_fields-position2
OF STRUCTURE <fs_wa> TO <fs_field2>.
WRITE: AT offset <fs_field> UNIT <fs_field2>.
WHEN '8'.
WRITE: <fs_field> TO text(it_fields-laenge).
WRITE AT offset text(it_fields-laenge).
WHEN '9'.
WRITE: AT offset <fs_field>.
WHEN OTHERS.
WRITE: AT offset <fs_field>.
* WRITE: / 'FEHLER !!!'.
ENDCASE.
ENDLOOP.
ENDIF.
ENDFORM. "gruppenstufenfelder
*&---------------------------------------------------------------------*
*& Form SEND_EMAIL_AS_ATTACHMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM send_email_as_attachment USING titel empfaenger mailtyp express.
DATA: l_t1(100).
* Filling in the text table
CLEAR reclist.
SPLIT empfaenger AT ' ' INTO TABLE reclist.
LOOP AT reclist.
l_t1 = reclist-receiver.
CLEAR reclist.
reclist-receiver = l_t1.
IF mailtyp = ' '.
reclist-rec_type = 'B'. "SAP Mail!!
ELSE.
reclist-rec_type = mailtyp.
ENDIF.
reclist-express = express.
MODIFY reclist.
ENDLOOP.
CLEAR it_text.
* Creation of the document to be sent
docdata-obj_descr = titel.
docdata-obj_name = 'SAP1'.
docdata-obj_langu = 'D'.
APPEND docdata.
DESCRIBE TABLE it_text LINES tab_lines.
* Creation of the packing list
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 1.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'XLS'.
objpack-obj_name = 'SAP1.XLS'.
objpack-doc_size = tab_lines * 255.
APPEND objpack.
* Creation of the Header
objhead-line = 'MAIL.txt'.
APPEND objhead.
* Completing the recipient list
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = docdata
put_in_outbox = 'X'
IMPORTING
sent_to_all = sent
new_object_id = new_object_id
TABLES
packing_list = objpack
object_header = objhead
contents_bin = it_text
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
CASE sy-subrc.
WHEN 0.
WRITE: / 'Result of the send process:'.
SKIP.
LOOP AT reclist.
WRITE: / 'The document was sent to:', reclist-receiver.
ENDLOOP.
WHEN 1.
WRITE: /
'No authorization for sending to the specified number of Recipients'.
WHEN 2.
WRITE: / 'Document could not be sent to any recipient'.
WHEN 4.
WRITE: / 'No send authorization'.
WHEN OTHERS.
WRITE: / 'Error occured while sending'.
ENDCASE.
ENDFORM. " SEND_EMAIL_AS_ATTACHMENT
*---------------------------------------------------------------------*
* FORM XLS_MAIL *
*---------------------------------------------------------------------*
* Die Tabelle wird mit den ausgewählten Feldern als XLS Datei
* aufbereitet und per E-Mail verschickt.
* Felder:
* titel: Beschreibungstext der E-Mail (Titel)
* Empfaenger: Empfängerliste durch Leerzeichen getrennt (SAP USERNAME).
* Mailtyp: B = SAP Mail
* Express: X = Expressmail!
* header: X = Kopfzeile mit ausgeben!
*---------------------------------------------------------------------*
FORM xls_mail TABLES it
USING titel
empfaenger
mailtyp
express
header.
FIELD-SYMBOLS:
<fs_wa2> TYPE ANY.
DATA: file LIKE rlgrap-filename.
DATA: BEGIN OF it_file OCCURS 0,
zeile(1950),
END OF it_file.
CLEAR: docdata, it_text, reclist, objpack, objhead.
REFRESH: docdata, it_text, reclist, objpack, objhead.
DATA: dref TYPE REF TO data.
CREATE DATA dref TYPE (gstr).
ASSIGN dref->* TO <fs_wa2>.
CLEAR it_file.
REFRESH it_file.
* Kopf ausgeben.
IF header = 'X'.
PERFORM kopfausgabe USING ' ' 'X' CHANGING it_file-zeile.
it_file-zeile = it_file-zeile+1.
CONDENSE it_file-zeile NO-GAPS.
TRANSLATE it_file-zeile USING g_transl.
APPEND it_file.
ENDIF.
* Tabelle ausgeben
LOOP AT it ASSIGNING <fs_wa2>.
PERFORM print_line2 USING <fs_wa2>
CHANGING it_file-zeile.
it_file-zeile = it_file-zeile+1.
CONDENSE it_file-zeile NO-GAPS.
TRANSLATE it_file-zeile USING g_transl.
APPEND it_file.
ENDLOOP.
* Datei in das Binary Format übertragen.
file = 'tmp_'.
file+4 = sy-uname.
CONCATENATE file sy-uzeit INTO file.
TRANSLATE file USING ':_'.
OPEN DATASET file FOR OUTPUT IN TEXT MODE.
IF sy-subrc EQ 0.
LOOP AT it_file.
TRANSFER it_file TO file.
ENDLOOP.
ENDIF.
CLOSE DATASET file.
OPEN DATASET file FOR INPUT IN BINARY MODE.
DO.
CLEAR it_text.
READ DATASET file INTO it_text.
APPEND it_text.
IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET file.
PERFORM send_email_as_attachment
USING titel
empfaenger
mailtyp
express.
DELETE DATASET file.
ENDFORM. "xls_mail
*---------------------------------------------------------------------*
* FORM LOAD_TABLE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> SHOW *
*---------------------------------------------------------------------*
FORM load_table USING show.
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.
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.
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.
EXIT.
ENDIF.
ENDFORM. "LOAD_TABLE
*&--------------------------------------------------------------------*
*& Form write_long
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->ZEILE text
* -->CO text
*---------------------------------------------------------------------*
FORM write_long USING zeile co TYPE i.
DATA: l_dummy_string(1950).
DATA: laenge TYPE i.
l_dummy_string = zeile.
laenge = STRLEN( zeile ).
IF co = 1.
IF laenge > 250.
WRITE: / l_dummy_string(250) COLOR 1 NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
IF laenge > 250.
WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) COLOR 1 NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ELSE.
WRITE: l_dummy_string(laenge) COLOR 1 NO-GAP.
ENDIF.
ELSE.
WRITE: / l_dummy_string(laenge) COLOR 1.
ENDIF.
ELSEIF co = 0.
IF laenge > 250.
WRITE: / l_dummy_string(250) NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
IF laenge > 250.
WRITE: l_dummy_string(250) NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ENDIF.
IF laenge > 250.
WRITE: l_dummy_string(250) NO-GAP.
laenge = laenge - 250.
l_dummy_string = l_dummy_string+250.
ELSE.
WRITE: l_dummy_string(laenge) NO-GAP.
ENDIF.
ELSE.
WRITE: / l_dummy_string(laenge) .
ENDIF.
ENDIF.
ENDFORM. "write_long
*---------------------------------------------------------------------*
* FORM XLS_start *
*---------------------------------------------------------------------*
* Wenn START = 'X' erfolgt nicht nur ein Download, sondern
* die Datei wird auch noch mit excel geöffnet.
* Wenn header = 'X', dann enthält die Downloaddatei auch die
* Kopfzeile
* Wenn append = 'X', dann werden die Daten an die Datei angehangen.
*---------------------------------------------------------------------*
FORM xls_start TABLES it
USING datei
start
header
append
strukturname.
FIELD-SYMBOLS:
<fs_wa2> TYPE ANY.
DATA: dref88 TYPE REF TO data.
CREATE DATA dref88 TYPE (gstr).
ASSIGN dref88->* TO <fs_wa2>.
DATA: file TYPE string.
DATA: BEGIN OF it_file OCCURS 0,
zeile(3200),
END OF it_file.
file = datei.
CLEAR it_file.
REFRESH it_file.
* Kopf ausgeben.
IF header = 'X'.
CLEAR it_file. APPEND it_file.
CLEAR it_file. APPEND it_file.
CLEAR it_file. APPEND it_file.
CLEAR it_file. APPEND it_file.
it_file = 'Strukturname: '.
CONCATENATE it_file strukturname INTO it_file SEPARATED BY ' '.
APPEND it_file.
CLEAR it_file. APPEND it_file.
PERFORM kopfausgabe USING ' ' 'X' CHANGING it_file-zeile.
it_file-zeile = it_file-zeile+1.
CONDENSE it_file-zeile NO-GAPS.
TRANSLATE it_file-zeile USING g_transl.
APPEND it_file.
IF NOT it_file-zeile IS INITIAL.
TRANSLATE it_file-zeile TO UPPER CASE.
TRANSLATE it_file-zeile USING
'A_B_C_D_E_F_G_H_I_J_K_L_M_N_O_P_Q_R_S_T_U_V_W_X_Y_Z_'.
TRANSLATE it_file-zeile USING
'1_2_3_4_5_6_7_8_9_0_'.
APPEND it_file.
ENDIF.
ENDIF.
* Tabelle ausgeben
LOOP AT it ASSIGNING <fs_wa2>.
PERFORM print_line2 USING <fs_wa2>
CHANGING it_file-zeile.
it_file-zeile = it_file-zeile+1.
CONDENSE it_file-zeile NO-GAPS.
TRANSLATE it_file-zeile USING g_transl.
APPEND it_file.
ENDLOOP.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = file
* FILETYPE = 'ASC'
append = append
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* IMPORTING
* FILELENGTH =
TABLES
data_tab = it_file
* FIELDNAMES =
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.
IF start = 'X'.
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
program = 'EXCEL.EXE'
commandline = datei
inform = ''
EXCEPTIONS
prog_not_found.
ENDIF.
ENDIF.
ENDFORM. "xls_start