Crear Report en Tiempo de Ejecución

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Er-ee-Re
    Member
    • may
    • 68

    #1

    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.!!
    __________________________________
    "... Si he nacido para luchar, lucharé ...!"
    Er-ee-Re ( ).
  • Floren
    Senior Member
    • abr
    • 209

    #2
    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
    Florentín Navarrete Moya
    SAP HCM Consultant
    Mail: administracion@blogdefloren.com
    Blog: www.blogdefloren.com

    Comentario

    • Er-ee-Re
      Member
      • may
      • 68

      #3
      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!!
      __________________________________
      "... Si he nacido para luchar, lucharé ...!"
      Er-ee-Re ( ).

      Comentario

      • Sergious
        Junior Member
        • nov
        • 22

        #4
        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?

        Comentario

        • Er-ee-Re
          Member
          • may
          • 68

          #5
          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.
          __________________________________
          "... Si he nacido para luchar, lucharé ...!"
          Er-ee-Re ( ).

          Comentario

          • Sergious
            Junior Member
            • nov
            • 22

            #6
            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?

            Comentario

            • Er-ee-Re
              Member
              • may
              • 68

              #7
              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!!
              __________________________________
              "... Si he nacido para luchar, lucharé ...!"
              Er-ee-Re ( ).

              Comentario

              • Floren
                Senior Member
                • abr
                • 209

                #8
                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 ...
                Florentín Navarrete Moya
                SAP HCM Consultant
                Mail: administracion@blogdefloren.com
                Blog: www.blogdefloren.com

                Comentario

                • Er-ee-Re
                  Member
                  • may
                  • 68

                  #9
                  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
                  __________________________________
                  "... Si he nacido para luchar, lucharé ...!"
                  Er-ee-Re ( ).

                  Comentario

                  Trabajando...