Tabstrip – Solapas en reportes

Una manera de organizar distintos grupos de parámetros de selección es escondiendo y mostrando los parámetros con un radio buton dinámico por ejemplo como se explica en la siguiente entrada.

Radio Buttons dinámicos – ocultar/mostrar grupos de parámetros de selección

Otra forma es dividir la pantalla de selección con TabStrip sin tener que usar Module Pool

image

En el ejemplo de abajo si corremos el reporte en la primer solapa mostrará 20 clientes, si se ejecuta en la segunda solapa mostrará 20 acreedores y si se ejecuta en la tercera mostrará un simple ‘Hola Mundo’.

REPORT  zreport_tab.

*———————————————————————*
*   Declaraciones                                                     *
*———————————————————————*
TABLES: kna1, lfa1.
DATA: ti_kna1 TYPE TABLE OF kna1 WITH HEADER LINE,
      ti_lfa1 TYPE TABLE OF lfa1 WITH HEADER LINE,
      g_tab(1) VALUE ‘1’.

*———————————————————————*
*   selection screen                                                  *
*———————————————————————*
* Primer Tab
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE textt00.
SELECTOPTIONS so_kunnr FOR kna1kunnr.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 101.

* Segundo Tab
SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE textt02.
SELECTOPTIONS so_lifnr FOR lfa1lifnr.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 102.

* Tercer Tab
SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE textt03.

SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF SCREEN 103.

* Pantalla de Tabs
SELECTION-SCREEN BEGIN OF TABBED BLOCK t1 FOR 20 LINES.
SELECTION-SCREEN TAB (10) name1 USER-COMMAND ucomm1 DEFAULT SCREEN 101.
SELECTION-SCREEN TAB (20) name2 USER-COMMAND ucomm2 DEFAULT SCREEN 102.
SELECTION-SCREEN TAB (30) name3 USER-COMMAND ucomm3 DEFAULT SCREEN 103.
SELECTION-SCREEN END OF BLOCK t1.

INITIALIZATION.
* Nombre de los Tabs
  name1 = ‘Primer Tab ‘.
  name2 = ‘Segundo Tab’.
  name3 = ‘Tercer Tab’.

AT SELECTION-SCREEN.
* Control de que tab fue elegido
  CHECK syucomm = ‘UCOMM1’
   OR syucomm = ‘UCOMM2’
   OR syucomm = ‘UCOMM3’.
  CASE syucomm.
    WHEN ‘UCOMM1’.
      g_tab = ‘1’.
    WHEN ‘UCOMM2’.
      g_tab = ‘2’.
    WHEN ‘UCOMM3’.
      g_tab = ‘3’.
  ENDCASE.

START-OF-SELECTION.
* Al ejecutar el reporte, dependiendo del tab seleccionado
* Correrá una lógica o la otra.
  CASE g_tab.
* Primer Tab
    WHEN ‘1’.
      SELECT * UP TO 20 ROWS FROM kna1 INTO TABLE ti_kna1.

      CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
        EXPORTING
          i_callback_program = syrepid
          i_structure_name   = ‘KNA1’
          i_grid_title       = ‘Datos de Clientes’
        TABLES
          t_outtab           = ti_kna1
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
      IF sysubrc <> 0.
        MESSAGE ID symsgid TYPE symsgty NUMBER symsgno
                WITH symsgv1 symsgv2 symsgv3 symsgv4.
      ENDIF.
* Segundo Tab
    WHEN ‘2’.
      SELECT * UP TO 20 ROWS FROM lfa1 INTO TABLE ti_lfa1.

      CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
        EXPORTING
          i_callback_program = syrepid
          i_structure_name   = ‘LFA1’
          i_grid_title       = ‘Datos de Acreedores’
        TABLES
          t_outtab           = ti_lfa1
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
      IF sysubrc <> 0.
        MESSAGE ID symsgid TYPE symsgty NUMBER symsgno
                WITH symsgv1 symsgv2 symsgv3 symsgv4.
      ENDIF.
* Tercer Tab
    WHEN ‘3’.
      WRITE ‘Hola Mundo’.
  ENDCASE.

Programas Z sin transacción asociada

La tabla que contiene todos los programas en SAP es la TRDIR y la tabla que posee todas las transacciones es la TSTC.

La tabla TSTC tiene la asociación del nombre de la transacción con su respectivo programa. Por lo cual sabiendo esto. Podemos obtener de la TRDIR todos los programas Z* e Y* (recordar que al hacer el SELECT deberíamos usar  wildcard %).

Programa Ejemplo que lista programas Z* e Y* sin transacción asociada.

Report Z_PROGRAMAS_SIN_TX.

DATA: ti_trdir  TYPE TABLE OF trdir,
      ti_tstc   TYPE TABLE OF tstc,
      wa_trdir  TYPE trdir.

* Tomamos todas las transacciones Z* e Y*
SELECT *
  FROM tstc
  INTO TABLE ti_tstc
  WHERE tcode LIKE 'Z%' OR tcode LIKE 'Y%'.

* Tomamos todas las programas Z* e Y*
SELECT *
  FROM trdir
  INTO TABLE ti_trdir
  WHERE ( name LIKE 'Z%' OR name LIKE 'Y%' )
      AND subc = '1'. "Reporte Ejecutable
  SORT ti_tstc BY pgmna.

LOOP AT ti_trdir INTO wa_trdir.
  READ TABLE ti_tstc TRANSPORTING NO FIELDS
                    WITH KEY pgmna = wa_trdir-name.

  IF sy-subrc ne 0.
    WRITE: / wa_trdir-name.
  ENDIF.
ENDLOOP.
 

RSNAST00 – Disparar Clases de Mensajes en la NAST

El programa RSNAST00 nos permite ejecutar una impresión por primera vez o reimprimir un registro ya existe en la tabla NAST

image

El tilde Volver a enviar es el que tenemos que usar si deseamos reeimprimir, esto es por si queremos en un programa Z tenemos un listado de facturas y el usuario desea visualizar dicha factura en el modo “preview” standard de SAP.

Corriendo este programa y dentro del programa impresor antes del OPEN_FORM le seteamos las valores para que previsualize y no imprima nada.

Si llego a encontrar, o alguno conoce, alguna otra forma más prolija de lograr previsualizar una factura desde un botón de un programa Z, actualizare la info.

Bajada de PDF de forma local

Si bien existen las funciones para bajar un OTF (SapScript o Smartforms) a PDF de esta manera es mucho más sencilla, este programa ya tiene el proceso de conversión a  PDF, simplemente le pasamos la orden de SPOOL y la ruta donde queremos el archivo y listo.

 

SUBMIT rstxpdft4
USING SELECTION-SCREEN ‘1000’
WITH spoolno EQ w_spool_num
WITH download EQ ‘X’
WITH p_file EQ ‘c:\download.pdf’
EXPORTING LIST TO MEMORY
AND RETURN.

Buscador de User Exit por TCODE

*&———————————————————————*
*& Report ZBUSCO_EXIT *
*& *
*&———————————————————————*
*& *
*& *
*&———————————————————————*

REPORT ZBUSCO_EXIT no standard page heading.
.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.

select single * from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
select single * from tadir where pgmid = ‘R3TR’
and object = ‘PROG’
and obj_name = tstc-pgmna.
move : tadir-devclass to v_devclass.
if sy-subrc ne 0.
select single * from trdir where name = tstc-pgmna.
if trdir-subc eq ‘F’.
select single * from tfdir where pname = tstc-pgmna.
select single * from enlfdir where funcname =
tfdir-funcname.
select single * from tadir where pgmid = ‘R3TR’
and object = ‘FUGR’
and obj_name eq enlfdir-area.

move : tadir-devclass to v_devclass.
endif.
endif.
select * from tadir into table jtab
where pgmid = ‘R3TR’
and object = ‘SMOD’
and devclass = v_devclass.
select single * from tstct where sprsl eq sy-langu and
tcode eq p_tcode.
format color col_positive intensified off.
write:/(19) ‘Transaction Code – ‘,
20(20) p_tcode,
45(50) tstct-ttext.
skip.
if not jtab[] is initial.
write:/(95) sy-uline.
format color col_heading intensified on.
write:/1 sy-vline,
2 ‘Exit Name’,
21 sy-vline ,
22 ‘Description’,
95 sy-vline.
write:/(95) sy-uline.
loop at jtab.
select single * from modsapt
where sprsl = sy-langu and
name = jtab-obj_name.
format color col_normal intensified off.
write:/1 sy-vline,
2 jtab-obj_name hotspot on,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
endloop.
write:/(95) sy-uline.
describe table jtab.
skip.
format color col_total intensified on.
write:/ ‘No of Exits:’ , sy-tfill.
else.
format color col_negative intensified on.
write:/(95) ‘No User Exit exists’.
endif.
else.
format color col_negative intensified on.
write:/(95) ‘Transaction Code Does Not Exist’.
endif.

at line-selection.
get cursor field field1.
check field1(4) eq ‘JTAB’.
set parameter id ‘MON’ field sy-lisel+1(10).
call transaction ‘SMOD’ and skip first screen.

*—End of Program

Download programa a un directorio

*———————————————————————-*
* Report: ZKBPROGS *
*———————————————————————-*
* Function : Up/Download ABAP reports complete with texts *
*———————————————————————-*
* Change Log : *
* July 5, 1999 *
* – Combined existing programs that did the upload and download into*
* – one program. *
* – Changed format that the reports are saved in to be compatible *
* with Wolfgang Morgenthaler’s upload/download program(YSTRASN00 *
* at http://www.antarcon.de). Major differences between this program and*
* Wolfgang’s are:
* – this program does not update TRDIR with the *
* TRDIR entries that are in the program uploaded. Instead, *
* current users stats are used. *
* – this program allows selection of reports from a list or *
* a single report can be tuped in and uploaded *
* – this program also updates TADIR so that a development class*
* is assigned to the program *
* – this program checks to see if the program already has a *
* TRDIR entry, and if it does, warns the user *
* – this program will save/restore the program documenation too*
* *
* *
* *
*———————————————————————-*
REPORT ZKBPROGS
NO STANDARD PAGE HEADING
LINE-SIZE 255.
*———————————————————————-*
* Declare Database Objects *
*———————————————————————-*
tables:
DOKIL,
TRDIR.
*———————————————————————-*
* Constants*
CONSTANTS:
MC_TRDIR_IDENTIFIER(72) TYPE C VALUE ‘%&%& RDIR’,
MC_REPORT_IDENTIFIER(72) TYPE C VALUE ‘%&%& REPO’,
MC_TEXT_IDENTIFIER(72) TYPE C VALUE ‘%&%& TEXP’,
MC_THEAD_IDENTIFIER(72) TYPE C VALUE ‘%&%& HEAD’,
MC_DOC_IDENTIFIER(72) TYPE C VALUE ‘%&%& DOKL’,
MC_TRDIR_SHORT(4) TYPE C VALUE ‘RDIR’,
MC_REPORT_SHORT(4) TYPE C VALUE ‘REPO’,
MC_TEXT_SHORT(4) TYPE C VALUE ‘TEXP’,
MC_THEAD_SHORT(4) TYPE C VALUE ‘HEAD’,
MC_DOC_SHORT(4) TYPE C VALUE ‘DOKP’.
*———————————————————————-*
*———————————————————————-*
* Declare Module level data structures *
*———————————————————————-*
DATA: BEGIN OF MTAB_PROGRAM_SOURCE OCCURS 0,
LINE(72) TYPE C,
END OF MTAB_PROGRAM_SOURCE.
DATA: MTAB_PROGRAM_TRDIR LIKE TRDIR OCCURS 0 WITH HEADER LINE.
DATA: MTAB_PROGRAM_TEXTS LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.
DATA: MSTR_THEAD LIKE THEAD.
DATA: BEGIN OF MTAB_PROGRAM_FILE OCCURS 0,
LINE(275) TYPE C,
END OF MTAB_PROGRAM_FILE.
DATA: BEGIN OF MTAB_DIRECTORY OCCURS 0,
NAME LIKE TRDIR-NAME,
DESC(72) TYPE C,
SAVENAME LIKE RLGRAP-FILENAME,
END OF MTAB_DIRECTORY.
DATA: BEGIN OF MTAB_PROGRAM_DOCUMENTATION OCCURS 0,
LINE(255) TYPE C,
END OF MTAB_PROGRAM_DOCUMENTATION.
*———————————————————————-*
* Selection Screen *
*———————————————————————-*
*– Options for upload/download of programs
SELECTION-SCREEN BEGIN OF BLOCK FRM_OPTIONS WITH FRAME TITLE TEXT-UDL.
PARAMETERS:
RB_DOWN RADIOBUTTON GROUP UDL DEFAULT ‘X’. ” Download reports
SELECTION-SCREEN BEGIN OF BLOCK FRM_TRDIR WITH FRAME TITLE TEXT-DIR.
SELECT-OPTIONS:
S_NAME FOR TRDIR-NAME, ” Program Name
S_SUBC FOR TRDIR-SUBC ” Program Type
DEFAULT ‘F’ OPTION EQ SIGN E,” Exclude Functions by default
S_CNAM FOR TRDIR-CNAM ” Created by
DEFAULT SY-UNAME,
S_UNAM FOR TRDIR-UNAM, ” Last Changed by
S_CDAT FOR TRDIR-CDAT, ” Creation date
S_UDAT FOR TRDIR-UDAT. ” Last update date
SELECTION-SCREEN END OF BLOCK FRM_TRDIR.
*– Options for uploading programs
PARAMETERS:
RB_UP RADIOBUTTON GROUP UDL. ” Upload reports
SELECTION-SCREEN BEGIN OF BLOCK FRM_UPLOAD WITH FRAME TITLE TEXT-UPL.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(29) TEXT-SNG.
PARAMETERS:
RB_FILE RADIOBUTTON GROUP HOW DEFAULT ‘X’.
SELECTION-SCREEN COMMENT 33(42) TEXT-FNA.
SELECTION-SCREEN END OF LINE.
PARAMETERS:
RB_LIST RADIOBUTTON GROUP HOW.
SELECTION-SCREEN END OF BLOCK FRM_UPLOAD.
SELECTION-SCREEN END OF BLOCK FRM_OPTIONS.
*– Options for up/downloading programs
SELECTION-SCREEN BEGIN OF BLOCK FRM_FILEN WITH FRAME TITLE TEXT-FIL.
PARAMETERS:
RB_DOS RADIOBUTTON GROUP FIL DEFAULT ‘X’, ” Save to local
RB_UNIX RADIOBUTTON GROUP FIL, ” Save to UNIX
P_PATH LIKE RLGRAP-FILENAME ” Path to save files to
DEFAULT ‘c:\temp\’.
SELECTION-SCREEN END OF BLOCK FRM_FILEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-LOW.
CALL FUNCTION ‘F4_PROGRAM’
EXPORTING
OBJECT = S_NAME-LOW
SUPPRESS_SELECTION = ‘X’
IMPORTING
RESULT = S_NAME-LOW
EXCEPTIONS
OTHERS = 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-HIGH.
CALL FUNCTION ‘F4_PROGRAM’
EXPORTING
OBJECT = S_NAME-HIGH
SUPPRESS_SELECTION = ‘X’
IMPORTING
RESULT = S_NAME-HIGH
EXCEPTIONS
OTHERS = 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-LOW.
PERFORM GET_NAME USING ‘S_UNAM-LOW’
CHANGING S_UNAM-LOW.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-HIGH.
PERFORM GET_NAME USING ‘S_UNAM-HIGH’
CHANGING S_UNAM-HIGH.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-LOW.
PERFORM GET_NAME USING ‘S_CNAM-LOW’
CHANGING S_CNAM-LOW.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-HIGH.
PERFORM GET_NAME USING ‘S_CNAM-HIGH’
CHANGING S_CNAM-HIGH.
TOP-OF-PAGE.
IF RB_LIST = ‘X’.
FORMAT COLOR COL_HEADING.
NEW-LINE.
WRITE: AT 3 TEXT-H01,
AT 15 TEXT-H03.
FORMAT COLOR OFF.
ENDIF.
AT LINE-SELECTION.
CHECK RB_LIST = ‘X’. ” only do in list mode
READ LINE SY-CUROW FIELD VALUE MTAB_DIRECTORY-SAVENAME.
*– Read file into an internal table
PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
USING MTAB_DIRECTORY-SAVENAME.
*– Split table into TADIR entry, report lines, and report text
PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
MTAB_PROGRAM_SOURCE
MTAB_PROGRAM_TEXTS
MTAB_PROGRAM_DOCUMENTATION
CHANGING TRDIR
MSTR_THEAD.
*– Save all of the data
PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
MTAB_PROGRAM_TEXTS
MTAB_PROGRAM_DOCUMENTATION
USING TRDIR
MSTR_THEAD.
*———————————————————————-*
* Start of processing *
*———————————————————————-*
START-OF-SELECTION.
FORMAT COLOR COL_NORMAL.
IF RB_DOWN = ‘X’.
PERFORM DOWNLOAD_REPORTS.
ELSEIF RB_UP = ‘X’.
PERFORM UPLOAD_REPORTS.
ENDIF.
END-OF-SELECTION.
IF RB_DOWN = ‘X’.
CONCATENATE P_PATH
‘directory.txt’
INTO P_PATH.
PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_DIRECTORY
USING P_PATH.
ENDIF.
*———————————————————————*
* FORM UPLOAD_REPORTS *
*———————————————————————*
FORM UPLOAD_REPORTS.
*– Can upload a reports entered in selection criteria or
*– select from a list. List can be from index.txt in same directory
*– (created by the download) or by reading the first line of each file
*– in the directory.
IF RB_FILE = ‘X’. ” Upload single program from a file
*– Read file into an internal table
PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE
USING P_PATH.
*– Split table into TADIR entry, report lines, and report text
PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE
MTAB_PROGRAM_SOURCE
MTAB_PROGRAM_TEXTS
MTAB_PROGRAM_DOCUMENTATION
CHANGING TRDIR
MSTR_THEAD.
*– Save all of the data
PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE
MTAB_PROGRAM_TEXTS
MTAB_PROGRAM_DOCUMENTATION
USING TRDIR
MSTR_THEAD.
ELSEIF RB_LIST = ‘X’. ” Show list for user to choose from
*– get list of report names/descriptions from directory text
CONCATENATE P_PATH
‘directory.txt’
INTO P_PATH.
PERFORM READ_REPORT_FROM_DISK TABLES MTAB_DIRECTORY
USING P_PATH.
SORT MTAB_DIRECTORY.
*– Write out list of report names/descriptions
LOOP AT MTAB_DIRECTORY.
WRITE:
/ MTAB_DIRECTORY-NAME UNDER TEXT-H01,
MTAB_DIRECTORY-DESC UNDER TEXT-H03,
MTAB_DIRECTORY-SAVENAME.
ENDLOOP.
*– Process user selections for reports to upload.
ENDIF.
ENDFORM. ” upload_reports
*———————————————————————*
* FORM DOWNLOAD_REPORTS *
*———————————————————————*
* From the user selections, get all programs that meet the *
* criteria, and save them in ftab_program_directory. *
* Also save the report to disk. *
*———————————————————————*
FORM DOWNLOAD_REPORTS.
DATA:
LC_FULL_FILENAME LIKE RLGRAP-FILENAME.
*– The table is put into an internal table because the program will
*– abend if multiple transfers to a dataset occur within a SELECT/
*– ENDSELCT (tested on 3.1H)
SELECT * FROM TRDIR
INTO TABLE MTAB_PROGRAM_TRDIR
WHERE NAME IN S_NAME
AND SUBC IN S_SUBC
AND CNAM IN S_CNAM
AND UNAM IN S_UNAM
AND CDAT IN S_CDAT
AND UDAT IN S_UDAT.
LOOP AT MTAB_PROGRAM_TRDIR.
*– Clear out text and source code tables
CLEAR:
MTAB_PROGRAM_FILE,
MTAB_PROGRAM_SOURCE,
MTAB_PROGRAM_TEXTS,
MTAB_PROGRAM_DOCUMENTATION.
REFRESH:
MTAB_PROGRAM_FILE,
MTAB_PROGRAM_SOURCE,
MTAB_PROGRAM_TEXTS,
MTAB_PROGRAM_DOCUMENTATION.
*– Get the report
READ REPORT MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_SOURCE.
*– Get the text for the report
READ TEXTPOOL MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_TEXTS.
*– Get the documentation for the report
CLEAR DOKIL.
SELECT * UP TO 1 ROWS FROM DOKIL
WHERE ID = ‘RE’
AND OBJECT = MTAB_PROGRAM_TRDIR-NAME
AND LANGU = SY-LANGU
AND TYP = ‘E’
ORDER BY VERSION DESCENDING.
ENDSELECT.
*– Documentation exists for this object
IF SY-SUBRC = 0.
CALL FUNCTION ‘DOCU_READ’
EXPORTING
ID = DOKIL-ID
LANGU = DOKIL-LANGU
OBJECT = DOKIL-OBJECT
TYP = DOKIL-TYP
VERSION = DOKIL-VERSION
IMPORTING
HEAD = MSTR_THEAD
TABLES
LINE = MTAB_PROGRAM_DOCUMENTATION
EXCEPTIONS
OTHERS = 1.
ENDIF.
*– Put the report code and texts into a single file
*– Put the identifier line in so that the start of the TRDIR line
*– is marked
CONCATENATE MC_TRDIR_IDENTIFIER
MTAB_PROGRAM_TRDIR-NAME
INTO MTAB_PROGRAM_FILE-LINE.
APPEND MTAB_PROGRAM_FILE.
*– Add the TRDIR line
MTAB_PROGRAM_FILE-LINE = MTAB_PROGRAM_TRDIR.
APPEND MTAB_PROGRAM_FILE.
*– Put the identifier line in so that the start of the report code
*– is marked
CONCATENATE MC_REPORT_IDENTIFIER
MTAB_PROGRAM_TRDIR-NAME
INTO MTAB_PROGRAM_FILE-LINE.
APPEND MTAB_PROGRAM_FILE.
*– Add the report code
LOOP AT MTAB_PROGRAM_SOURCE.
MTAB_PROGRAM_FILE = MTAB_PROGRAM_SOURCE.
APPEND MTAB_PROGRAM_FILE.
ENDLOOP.
*– Put the identifier line in so that the start of the report text
*– is marked
CONCATENATE MC_TEXT_IDENTIFIER
MTAB_PROGRAM_TRDIR-NAME
INTO MTAB_PROGRAM_FILE-LINE.
APPEND MTAB_PROGRAM_FILE.
*– Add the report texts
LOOP AT MTAB_PROGRAM_TEXTS.
MTAB_PROGRAM_FILE = MTAB_PROGRAM_TEXTS.
APPEND MTAB_PROGRAM_FILE.
ENDLOOP.
*– Put the identifier line in so that the start of the THEAD record
*– is marked
CONCATENATE MC_THEAD_IDENTIFIER
MTAB_PROGRAM_TRDIR-NAME
INTO MTAB_PROGRAM_FILE-LINE.
APPEND MTAB_PROGRAM_FILE.
MTAB_PROGRAM_FILE = MSTR_THEAD.
APPEND MTAB_PROGRAM_FILE.
*– Put the identifier line in so that the start of the report
*– documentation is marked
CONCATENATE MC_DOC_IDENTIFIER
MTAB_PROGRAM_TRDIR-NAME
INTO MTAB_PROGRAM_FILE-LINE.
APPEND MTAB_PROGRAM_FILE.
*– Add the report documentation
LOOP AT MTAB_PROGRAM_DOCUMENTATION.
MTAB_PROGRAM_FILE = MTAB_PROGRAM_DOCUMENTATION.
APPEND MTAB_PROGRAM_FILE.
ENDLOOP.
*– Make the fully pathed filename that report will be saved to
CONCATENATE P_PATH
MTAB_PROGRAM_TRDIR-NAME
‘.txt’
INTO LC_FULL_FILENAME.
PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_PROGRAM_FILE
USING LC_FULL_FILENAME.
*– Write out message with Program Name/Description
READ TABLE MTAB_PROGRAM_TEXTS WITH KEY ID = ‘R’.
IF SY-SUBRC = 0.
MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
MTAB_DIRECTORY-DESC = MTAB_PROGRAM_TEXTS-ENTRY.
MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
APPEND MTAB_DIRECTORY.
WRITE: / MTAB_PROGRAM_TRDIR-NAME,
MTAB_PROGRAM_TEXTS-ENTRY(65) COLOR COL_HEADING.
ELSE.
MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME.
MTAB_DIRECTORY-DESC = ‘No description available’.
MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME.
APPEND MTAB_DIRECTORY.
WRITE: / MTAB_PROGRAM_TRDIR-NAME.
ENDIF.
ENDLOOP.
ENDFORM. ” BUILD_PROGRAM_DIRECTORY
*———————————————————————*
* FORM SAVE_TABLE_TO_FILE *
*———————————————————————*
* …….. *
*———————————————————————*
* –> FTAB_TABLE *
* –> F_FILENAME *
*———————————————————————*
FORM SAVE_TABLE_TO_FILE TABLES FTAB_TABLE
USING F_FILENAME.
IF RB_DOS = ‘X’. ” Save file to presentation server
CALL FUNCTION ‘WS_DOWNLOAD’
EXPORTING
FILENAME = F_FILENAME
FILETYPE = ‘ASC’
TABLES
DATA_TAB = FTAB_TABLE
EXCEPTIONS
OTHERS = 4.
IF SY-SUBRC NE 0.
WRITE: / ‘Error opening dataset’ COLOR COL_NEGATIVE,
F_FILENAME COLOR COL_NEGATIVE.
ENDIF.
ELSE. ” Save file to application server
OPEN DATASET F_FILENAME FOR OUTPUT IN TEXT MODE.
IF SY-SUBRC = 0.
LOOP AT FTAB_TABLE.
TRANSFER FTAB_TABLE TO F_FILENAME.
IF SY-SUBRC NE 0.
WRITE: / ‘Error writing record to file;’ COLOR COL_NEGATIVE,
F_FILENAME COLOR COL_NEGATIVE.
ENDIF.
ENDLOOP.
ELSE.
WRITE: / ‘Error opening dataset’ COLOR COL_NEGATIVE,
F_FILENAME COLOR COL_NEGATIVE.
ENDIF.
ENDIF. ” End RB_DOS
ENDFORM. ” SAVE_PROGRAM
*———————————————————————*
* FORM READ_REPORT_FROM_DISK *
*———————————————————————*
* Read report into internal table. Can read from local or *
* remote computer *
*———————————————————————*
FORM READ_REPORT_FROM_DISK TABLES FTAB_TABLE
USING F_FILENAME.
DATA:
LC_MESSAGE(128) TYPE C.
CLEAR FTAB_TABLE.
REFRESH FTAB_TABLE.
IF RB_DOS = ‘X’.
TRANSLATE F_FILENAME USING ‘/\’. ” correct slash for Dos PC file
CALL FUNCTION ‘WS_UPLOAD’
EXPORTING
FILENAME = F_FILENAME
FILETYPE = ‘ASC’
TABLES
DATA_TAB = FTAB_TABLE
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
IF SY-SUBRC >< 0.
WRITE: / ‘Error reading file from local PC’ COLOR COL_NEGATIVE.
ENDIF.
ELSEIF RB_UNIX = ‘X’.
TRANSLATE F_FILENAME USING ‘\/’. ” correct slash for unix
OPEN DATASET F_FILENAME FOR INPUT MESSAGE LC_MESSAGE IN TEXT MODE.
IF SY-SUBRC = 0.
DO.
READ DATASET F_FILENAME INTO FTAB_TABLE.
IF SY-SUBRC = 0.
APPEND FTAB_TABLE.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET F_FILENAME.
ELSE.
WRITE: / ‘Error reading file from remote computer’
COLOR COL_NEGATIVE,
/ LC_MESSAGE,
/ F_FILENAME.
SY-SUBRC = 4.
ENDIF.
ENDIF.

ENDFORM. ” READ_REPORT_FROM_DISK
*———————————————————————*
* FORM SPLIT_INCOMING_FILE *
*———————————————————————*
* …….. *
*———————————————————————*
* –> FTAB_PROGRAM_FILE *
* –> FTAB_PROGRAM_SOURCE *
* –> ` *
* –> FTAB_PROGRAM_TEXTS *
*———————————————————————*
FORM SPLIT_INCOMING_FILE TABLES FTAB_PROGRAM_FILE
STRUCTURE MTAB_PROGRAM_FILE
FTAB_PROGRAM_SOURCE
STRUCTURE MTAB_PROGRAM_SOURCE
FTAB_PROGRAM_TEXTS
STRUCTURE MTAB_PROGRAM_TEXTS
FTAB_PROGRAM_DOCUMENTATION
STRUCTURE MTAB_PROGRAM_DOCUMENTATION
CHANGING FSTR_TRDIR
FSTR_THEAD.
DATA:
LC_DATATYPE(4) TYPE C, ” Type of data, REPO, TEXP, RDIR
LC_PROGRAM_FILE LIKE MTAB_PROGRAM_FILE.
LOOP AT FTAB_PROGRAM_FILE.
LC_PROGRAM_FILE = FTAB_PROGRAM_FILE.
CASE LC_PROGRAM_FILE(9).
WHEN MC_TRDIR_IDENTIFIER.
LC_DATATYPE = MC_TRDIR_SHORT.
WHEN MC_REPORT_IDENTIFIER.
LC_DATATYPE = MC_REPORT_SHORT.
WHEN MC_TEXT_IDENTIFIER.
LC_DATATYPE = MC_TEXT_SHORT.
WHEN MC_DOC_IDENTIFIER.
LC_DATATYPE = MC_DOC_SHORT.
WHEN MC_THEAD_IDENTIFIER.
LC_DATATYPE = MC_THEAD_SHORT.
WHEN OTHERS. ” Actual contents of report, trdir, or text
CASE LC_DATATYPE.
WHEN MC_TRDIR_SHORT.
FSTR_TRDIR = FTAB_PROGRAM_FILE.
WHEN MC_REPORT_SHORT.
FTAB_PROGRAM_SOURCE = FTAB_PROGRAM_FILE.
APPEND FTAB_PROGRAM_SOURCE.
WHEN MC_TEXT_SHORT.
FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE.
APPEND FTAB_PROGRAM_TEXTS.
WHEN MC_THEAD_SHORT.
FSTR_THEAD = FTAB_PROGRAM_FILE.
WHEN MC_DOC_SHORT.
FTAB_PROGRAM_DOCUMENTATION = FTAB_PROGRAM_FILE.
APPEND FTAB_PROGRAM_DOCUMENTATION.
ENDCASE.
ENDCASE.
ENDLOOP.
ENDFORM. ” SPLIT_INCOMING_FILE
*———————————————————————*
* FORM INSERT_NEW_REPORT*
*———————————————————————*
* …….. *
*———————————————————————*
* –> FTAB_PROGRAM_SOURCE *
* –> FTAB_PROGRAM_TEXTS *
* –> F_TRDIR *
*———————————————————————*
FORM INSERT_NEW_REPORT TABLES FTAB_PROGRAM_SOURCE
STRUCTURE MTAB_PROGRAM_SOURCE
FTAB_PROGRAM_TEXTS
STRUCTURE MTAB_PROGRAM_TEXTS
FTAB_PROGRAM_DOCUMENTATION
STRUCTURE MTAB_PROGRAM_DOCUMENTATION
USING FSTR_TRDIR LIKE TRDIR
FSTR_THEAD LIKE MSTR_THEAD.
DATA:
LC_OBJ_NAME LIKE E071-OBJ_NAME,
LC_LINE2(40) TYPE C,
LC_ANSWER(1) TYPE C.
*– read trdir to see if the report already exists, if it does, prompt
*– user to overwrite or abort.
SELECT SINGLE * FROM TRDIR WHERE NAME = FSTR_TRDIR-NAME.
IF SY-SUBRC = 0. ” Already exists
CONCATENATE ‘want to overwrite report’
FSTR_TRDIR-NAME
INTO LC_LINE2 SEPARATED BY SPACE.
CONCATENATE LC_LINE2
‘?’
INTO LC_LINE2.
CALL FUNCTION ‘POPUP_TO_CONFIRM_STEP’
EXPORTING
DEFAULTOPTION = ‘N’
TEXTLINE1 = ‘The selected report already exists, do you’
TEXTLINE2 = LC_LINE2
TITEL = ‘Report already exists’
CANCEL_DISPLAY = SPACE
IMPORTING
ANSWER = LC_ANSWER
EXCEPTIONS
OTHERS = 1.
ELSE.
LC_ANSWER = ‘J’.
ENDIF.
IF LC_ANSWER = ‘J’.
*– Create the TADIR entry. (TRDIR entry created by INSERT REPORT)
LC_OBJ_NAME = TRDIR-NAME.
CALL FUNCTION ‘TR_TADIR_POPUP_ENTRY_E071’
EXPORTING
WI_E071_PGMID = ‘R3TR’
WI_E071_OBJECT = ‘PROG’
WI_E071_OBJ_NAME = LC_OBJ_NAME
WI_TADIR_DEVCLASS = ‘$TMP’
EXCEPTIONS
EXIT = 3
OTHERS = 4.
IF SY-SUBRC = 0.
*– Create Report
INSERT REPORT FSTR_TRDIR-NAME FROM FTAB_PROGRAM_SOURCE.
*– Create Texts
INSERT TEXTPOOL FSTR_TRDIR-NAME FROM FTAB_PROGRAM_TEXTS
LANGUAGE SY-LANGU.
*– Save Documentation
CALL FUNCTION ‘DOCU_UPDATE’
EXPORTING
HEAD = FSTR_THEAD
STATE = ‘A’
TYP = ‘E’
VERSION = ‘1’
TABLES
LINE = FTAB_PROGRAM_DOCUMENTATION
EXCEPTIONS
OTHERS = 1.
ELSE.
WRITE: / ‘Error updating the TADIR entry’ COLOR COL_NEGATIVE,
‘Program’ COLOR COL_NEGATIVE INTENSIFIED OFF,
FSTR_TRDIR-NAME, ‘was not loaded into SAP.’
COLOR COL_NEGATIVE INTENSIFIED OFF.
ENDIF.
ELSE.
WRITE: / FSTR_TRDIR-NAME COLOR COL_NEGATIVE,
‘was not uploaded into SAP. Action cancelled by user’
COLOR COL_NEGATIVE INTENSIFIED OFF.
ENDIF.
ENDFORM. ” INSERT_NEW_REPORT
*———————————————————————*
* FORM GET_NAME *
*———————————————————————*
* …….. *
*———————————————————————*
* –> VALUE(F_FIELD) *
* –> F_NAME *
*———————————————————————*
FORM GET_NAME USING VALUE(F_FIELD)
CHANGING F_NAME.
DATA: LTAB_FIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
LC_PROG LIKE D020S-PROG,
LC_DNUM LIKE D020S-DNUM.
TRANSLATE F_FIELD TO UPPER CASE.
refresh ltab_fields.
LTAB_FIELDS-FIELDNAME = F_FIELD.
append ltab_fields.
LC_PROG = SY-REPID .
LC_DNUM = SY-DYNNR .
CALL FUNCTION ‘DYNP_VALUES_READ’
EXPORTING
DYNAME = LC_PROG
DYNUMB = LC_DNUM
TABLES
dynpfields = ltab_fields
EXCEPTIONS
OTHERS = 01.
read table ltab_fields index 1.
IF SY-SUBRC EQ 0.
F_NAME = LTAB_FIELDS-FIELDVALUE.
refresh ltab_fields.
ENDIF.
CALL FUNCTION ‘F4_USER’
EXPORTING
OBJECT = F_NAME
IMPORTING
RESULT = F_NAME.
ENDFORM. ” GET_NAME

Program Texts

DIR File Download Options (File Selection)
FIL File Options
FNA Enter filename below (under File Options)
H01 Prog Name
H03 Program Description
SNG Upload a single file
UDL Upload to SAP/Download from SAP
UPL File Upload Options
R Backup/Restore program source code with texts
P_PATH Path to save programs to
RB_DOS Files on local computer
RB_DOWN Download Programs
RB_FILE Upload a single file
RB_LIST Select program(s) from a list
RB_UNIX Files on remote computer
RB_UP Upload Programs to SAP
S_CDAT Date Created
S_CNAM Created by UserID
S_NAME Program Name
S_SUBC Program Type
S_UDAT Date Changed
S_UNAM Last Changed by UserID