MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Crear Report en Tiempo de Ejecución (foro/showthread.php?t=12705)

Er-ee-Re 17/04/08 11:01:46

Crear Report en Tiempo de Ejecución
 
Hola a todas/os,

¿Alquién me podría indicar como se puede crear un report en tiempo de ejecución (y no hacien un BI a la SE38)?,

Se acepta cualquier ayuda,

Muchas Gracias.!!

Floren 17/04/08 11:19:16

Hola,

¿Te refieres a llamar a un report? En tal caso puedes hacer un call transaction a la TX que tenga asociada el report o a la se38.

Si te he entendido mal, díme.

Un saludo

Er-ee-Re 17/04/08 11:37:33

Crear report en tiempo de ejecución
 
Hola,

Gracias por la respuesta, pero no me refiero a llamar a un report, sino a crearlo, es decir, por ejemplo, tener en una tabla interna todas las líneas de código de un report, y con alguna función, o metodo, u otra cosa,...,generar ese report (y ejecutar) en el sistema,

Gracias!!

Sergious 17/04/08 13:32:57

Buenas, a continuacion te pego elñ código de un report que pide como parametro de entrada el codigo de un programa en TXT (el que podes obtener desde utilidades>mas utilidades>download), y este lo que hace es compilar el codigo del txt y ejecutarlo... espero que te sirva: ...si este programa esta subido en PR0 o RK0 se pueden ejecutar otros programas que no han sido transportados a estos ambientes ;)

REPORT ZTOOL_XX_0002 LINE-SIZE 132 LINE-COUNT 80
NO STANDARD PAGE HEADING.

*REPORT SAPMZ2002 LINE-SIZE 132 LINE-COUNT 80
* NO STANDARD PAGE HEADING.

INCLUDE <ICON>.
INCLUDE <SYMBOL>.

Tables: Dd03l, DD04t.

Data: Begin of I_Tabla Occurs 0,
Selec(1) Type C,
TabName Like Dd03l-TabName,
Position Like Dd03l-Position,
FieldName Like Dd03l-FieldName,
KeyFlag Like Dd03l-KeyFlag,
DataType Like Dd03l-DataType,
Leng Like Dd03l-Leng,
Decimals Like Dd03l-Decimals,
RollName Like Dd03l-RollName,
Descript Like Dd04t-Ddtext,
End of I_Tabla.

Data: Begin of I_Limpia Occurs 0.
Include Structure I_Tabla.
Data: End of I_Limpia.

Data: Begin of I_Prog Occurs 0,
Linea(72) Type C,
End of I_Prog.


Data: Largo(6) Type P,
Decimal(6) Type P.
Data: W_Linea(72) Type C,
W_Lineas Like Sy-Tabix.

Data: W_JobName Like TBTCO-JOBNAME,
LINE(1) Type C,
BATCH(1) Type C.

selection-screen begin of block 0001 with frame title text-001.
parameters: fichero like RLGRAP-FILENAME.
selection-screen end of block 0001.
selection-screen begin of block 0002 with frame title text-t02.
parameters: p_direc radiobutton group 0001 default 'X',
p_fondo radiobutton group 0001.
parameters: p_nombre like TBTCO-JOBNAME lower case.
selection-screen end of block 0002.

data: begin of t_prog occurs 0,
campo(72).
data: end of t_prog.

data: begin of t_prog2 occurs 0,
campo(72).
data: end of t_prog2.


At selection-screen on value-request for fichero.
Perform buscar_programa.

At Selection-Screen on P_Nombre.
Perform Quieto_Parao.

Initialization.
Perform EstaLibre?.

Start-of-Selection.

Perform EstaLibre?.

Perform Cargar_Hojas.
Perform CargarTextos.
Perform Comprobar_Errores.



*&---------------------------------------------------------------------*
*& Form CARGARPROGRAMA
*&---------------------------------------------------------------------*
FORM CARGARPROGRAMA.
DATA : NOMBRE_JOB LIKE BTCH1170-JOBNAME.
DATA : CONTADOR_JOB LIKE TBTCJOB-JOBCOUNT.

Insert Report 'SAPMZBUTT' From I_Prog.
Check Sy-Subrc = 0.
Generate Report 'SAPMZBUTT'.
Check Sy-Subrc = 0.
If Sy-Ucomm = 'EJEC'.
Submit SAPMZBUTT And Return.
Else.
Concatenate 'SAPMZBUTT_' Sy-Datum '_' Sy-Uzeit Into Nombre_Job.
PERFORM Abrir_job USING nombre_job contador_job.
SUBMIT SAPMZBUTT
VIA JOB nombre_job NUMBER contador_job
AND RETURN.
PERFORM cerrar_job USING contador_job nombre_job.
Commit Work.
Perform PopUpJob Using Nombre_Job.
Set Screen 0.

EndIf.


ENDFORM. " CARGARPROGRAMA
*&---------------------------------------------------------------------*
*& Form CARGARTEXTOS
*&---------------------------------------------------------------------*
Form CargarTextos.


Data: Programa like Sy-Repid,
Campo1(10),
Campo2(50),
Tab Like TextPool Occurs 50 With Header Line.

Read TextPool Sy-Repid Into Tab Language Sy-Langu.
Delete TextPool 'SAPMZBUTT' Language Sy-Langu.
Insert TextPool 'SAPMZBUTT' From Tab Language Sy-Langu.

Endform. " CARGARTEXTOS

*&---------------------------------------------------------------------*
*& Form INSERTARESPACIOS
*&---------------------------------------------------------------------*
FORM INSERTARESPACIOS.

I_Prog-Linea = Space. Append I_Prog.
I_Prog-Linea = Space. Append I_Prog.

ENDFORM. " INSERTARESPACIOS


*&---------------------------------------------------------------------*
*& Form LLENARTABLAINTERNA
*&---------------------------------------------------------------------*
FORM LLENARTABLAINTERNA.

Loop At I_Tabla Where Selec = 'X'.
Concatenate 'I_Limpia-Selec =' '''' I_Tabla-Selec '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-TabName =' '''' I_Tabla-TabName '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-Position =' '''' I_Tabla-Position '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-FieldName =' '''' I_Tabla-FieldName '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-KeyFlag =' '''' I_Tabla-KeyFlag '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-DataType =' '''' I_Tabla-DataType '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-Leng =' '''' I_Tabla-Leng '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-Decimals =' '''' I_Tabla-Decimals '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
Concatenate 'I_Limpia-RollName =' '''' I_Tabla-RollName '''.'
Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
I_Prog-Linea = 'I_Limpia-Descript ='. Append I_Prog. Clear I_Prog.
Translate I_Tabla-Descript Using '''"'.
Concatenate '''' I_Tabla-Descript '''.' Into I_Prog-Linea.
Append I_Prog. Clear I_Prog.
I_Prog-Linea = 'Append I_Limpia. Clear I_Limpia.'.
Append I_Prog. Clear I_Prog.

EndLoop.

ENDFORM. " LLENARTABLAINTERNA
*&---------------------------------------------------------------------*
*& Form ABRIR_JOB
*&---------------------------------------------------------------------*
FORM abrir_job USING p_nombre_job
p_contador_job.


CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = p_nombre_job
IMPORTING
jobcount = p_contador_job
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.




ENDFORM.

*&---------------------------------------------------------------------*
*& Form CERRAR_JOB
*&---------------------------------------------------------------------*
FORM cerrar_job USING p_contador_job
p_nombre_job.

CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = p_contador_job
jobname = p_nombre_job
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.



ENDFORM. " CERRAR_JOB
*&---------------------------------------------------------------------*
*& Form POPUPJOB
*&---------------------------------------------------------------------*
FORM POPUPJOB Using P_Nombre.

CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
titel = text-tit
textline1 = text-job
textline2 = P_Nombre
start_column = 25
start_row = 6.

ENDFORM. " POPUPJOB
*&---------------------------------------------------------------------*
*& Form Quieto_Parao
*&---------------------------------------------------------------------*
FORM Quieto_Parao.
If P_Fondo = 'X' And P_Nombre is Initial.
MESSAGE E068(Z0) WITH Text-002.
Endif.
ENDFORM. " Quieto_Parao
*&---------------------------------------------------------------------*
*& Form BUSCAR_PROGRAMA
*&---------------------------------------------------------------------*
FORM BUSCAR_PROGRAMA.

Call Function 'KD_GET_FILENAME_ON_F4'
Changing
File_Name = fichero.



ENDFORM. " BUSCAR_PROGRAMA
*&---------------------------------------------------------------------*
*& Form CARGAR_hojas
*&---------------------------------------------------------------------*
form cargar_hojas.

CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = fichero
FILETYPE = 'ASC'
TABLES
DATA_TAB = t_prog
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.


endform. " CARGAR_hojas

*&---------------------------------------------------------------------*
*& Form comprobar_errores
*&---------------------------------------------------------------------*
form comprobar_errores.

DATA : NOMBRE_JOB LIKE BTCH1170-JOBNAME.
DATA : CONTADOR_JOB LIKE TBTCJOB-JOBCOUNT.

READ REPORT 'SAPMZBUTT' INTO t_prog2.

insert report 'SAPMZBUTT' from t_prog.
generate report 'SAPMZBUTT'.
if sy-subrc <> 0.
exit.
endif.

If P_Direc = 'X'.
Submit SAPMZBUTT VIA SELECTION-SCREEN and return.
ElseIf P_Fondo = 'X'.
MOVE p_nombre TO nombre_job.
PERFORM Abrir_job USING nombre_job contador_job.
SUBMIT SAPMZBUTT
VIA JOB nombre_job NUMBER contador_job
AND RETURN.
PERFORM cerrar_job USING contador_job nombre_job.
Perform PopUpJob Using Nombre_Job.
EndIf.

insert report 'SAPMZBUTT' from t_prog2.
generate report 'SAPMZBUTT'.
if sy-subrc <> 0.
exit.
endif.

EndForm.
*&---------------------------------------------------------------------*
*& Form ESTALIBRE?
*&---------------------------------------------------------------------*
FORM ESTALIBRE?.
Data: Begin of L_Info Occurs 0.
Include Structure MSXXLIST.
Data: End of L_Info.

Data: Begin of L_Servers Occurs 0.
Include Structure WPINFO.
Data: End of L_Servers.

Data: Begin of T_Servers Occurs 0.
Include Structure WPINFO.
Data: End of T_Servers.



Data: L_Cpu Like Tskh_Dummy-With_Cpu,
L_Cpu_Server Like Rfcdes-Rfcdest,
L_Mensaje Like Sm04dic-PopupMsg.


CALL FUNCTION 'TH_SERVER_LIST'
TABLES
LIST = L_Info
EXCEPTIONS
NO_SERVER_LIST = 1
OTHERS = 2 .

Check Sy-Subrc = 0.

Loop At L_Info.

Clear L_Servers. Refresh L_Servers.
CALL FUNCTION 'TH_WPINFO'
EXPORTING
SRVNAME = L_Info-Name
WITH_CPU = L_Cpu
TABLES
WPLIST = L_Servers
EXCEPTIONS
SEND_ERROR = 1
OTHERS = 2 .

Loop At L_Servers.
Move-Corresponding L_Servers to T_Servers.
Append T_Servers. Clear T_Servers.
EndLoop.

EndLoop.


Loop At T_Servers.
If T_Servers-Wp_Report(8) = 'SAPMZBUTT'.
* Concatenate T_Servers-Wp_BName Text-004 T_Servers-Wp_Typ
* Into L_Mensaje Separated By Space.
L_Mensaje = 'Quieto parao que ya lo estan ejecutando'.
CALL FUNCTION 'TH_POPUP'
EXPORTING
CLIENT = Sy-Mandt
USER = Sy-Uname
MESSAGE = L_Mensaje
EXCEPTIONS
USER_NOT_FOUND = 1
OTHERS = 2 .
EndIf.
EndLoop.

ENDFORM. " ESTALIBRE?

Er-ee-Re 17/04/08 14:32:27

Creación a traves de una tabla interna?
 
Hola,

Gracias por tu respuesta, pero no es lo que busco exactamente, lo que neceistaria es poder crear el report a traves de una tabla interna sin tener que utilizar ficheros de texto, ¿conoces alguna forma?,

Gracias por tu ayuda.

Sergious 17/04/08 14:47:23

Si en la tabla interna ya tenes las lineas del programa que queres crear, tenes que obiar la subida del archivo porque ya lo tenes en la tabla interna y luego seguir el proceso como en el codigo del programa que te pase...

¿igual no te sirve?

Er-ee-Re 17/04/08 15:08:02

No directorios y ficheros termporales
 
Hola,

Lo que me propones sería una forma de hacerlo, lo que ocurre es que no quiero tener que utilizar directorios y ficheros temporales para crearme el fichero de texto,

¿Alguna idea más?,

Muchas Gracias!!

Floren 17/04/08 15:47:24

Una duda es de donde quieres que se almacenen las líneas de texto del report que quieres crear on-line, es decir, quieres que se lean de una tabla del diccionario, que se introduzcan por pantalla ...

Er-ee-Re 18/04/08 07:54:28

Parcialmente Solucionado!!
 
Hola,

Ante todo gracias a Floren y Sergious por sus respuesta;

Con respecto a la generación del report en tiempo de ejecución voy a implementarlo a partir de las siguientes sentencias

[...]
v_prog = 'NOMBRE_REPORT'.
SYNTAX-CHECK FOR itab MESSAGE f LINE g WORD h.
IF sy-subrc IS INITIAL.
INSERT REPORT v_prog FROM itab.
SUBMIT (v_prog).
ENDIF.
[...]

Por si pueden servir de ayudar a cualquier otro


Husos Horarios son GMT. La hora en este momento es 20:24:32.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web