Tip de la semana - Como pasar el resultado de un report a pdf en sap

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Jesus
    Moderator
    • jun
    • 610

    #31
    Hola LAVR:

    Entra en la tx. SP02 y ves tus ordenes de Spool. Mira el numero de la que necesitas y ya está.
    Salu2

    Comentario

    • Carlos J. Ortega González
      Junior Member
      • jun
      • 28

      #32
      Aqui mando unas rutinas, esto recupera el número de spool, convierte el spool a PDF, abre el Outlook, y agrega el archivo a un mail.

      Lo importante de esta rutina son las funciones utilizadas.


      Saludos
      CJOG




      *&---------------------------------------------------------------------*
      *& Form OKCODE_CPDF
      *&---------------------------------------------------------------------*
      * text
      *----------------------------------------------------------------------*
      FORM okcode_cpdf.
      REFRESH i_rsporq.
      CLEAR vc_user.
      CONCATENATE 'ZSDSAPMV7' sy-uname(3) INTO vc_user.
      CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'
      EXPORTING
      allclients = '410'
      rq2name = vc_user "'ZSDSAPMV7CIP'
      rqowner = sy-uname
      TABLES
      spoolrequests = i_rsporq.
      IF i_rsporq[] IS INITIAL.
      MESSAGE i998(sp01r)
      WITH 'Es necesario mandar a imprimir previamente'.
      ELSE.
      IF s_kunnr-high NE space.
      MESSAGE i532(ou) WITH text-m01.
      sy-lsind = sy-lsind - 1.
      IF NOT i_rsporq[] IS INITIAL.
      PERFORM borra_spool.
      ENDIF.
      EXIT.
      ENDIF.
      LOOP AT i_rsporq.
      MOVE i_rsporq-rqcretime(8) TO vd_fecha.
      IF vd_fecha LT sy-datum.
      DELETE i_rsporq INDEX sy-tabix.
      CONTINUE.
      ELSE.
      MOVE: i_rsporq-rqident TO vi_spool,
      i_rsporq-rqident TO st_spool-rqident.
      CONCATENATE 'C:\P' i_rsporq-rqident '.PDF'
      INTO vc_file.
      * SUBMIT rstxpdft4
      * WITH spoolno = vi_spool
      * WITH download = 'X'
      * WITH p_file = vc_file "skip selection-screen
      * AND RETURN.
      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
      EXPORTING
      src_spoolid = vi_spool
      no_dialog = ' '
      IMPORTING
      pdf_bytecount = v_lines
      pdf_spoolid = vc_spool
      btc_jobname = vc_jobnm
      btc_jobcount = vi_jobcn
      TABLES
      pdf = i_pdf
      EXCEPTIONS
      err_no_abap_spooljob = 1
      err_no_spooljob = 2
      err_no_permission = 3
      err_conv_not_possible = 4
      err_bad_destdevice = 5
      user_cancelled = 6
      err_spoolerror = 7
      err_temseerror = 8
      err_btcjob_open_failed = 9
      err_btcjob_submit_failed = 10
      err_btcjob_close_failed = 11
      OTHERS = 12.
      IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
      CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'
      EXPORTING
      spoolreq = st_spool.
      CONCATENATE 'C:\' i_rsporq-rqident '.PDF'
      INTO vc_file.
      CONDENSE vc_file.
      CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
      bin_filesize = v_lines
      filename = vc_file
      filetype = 'BIN'
      TABLES
      data_tab = i_pdf.
      IF sy-subrc EQ 0.
      READ TABLE s_kunnr INDEX 1.
      MOVE s_kunnr-low TO vc_kunnr.
      CLEAR: kna1, adr6.
      SELECT SINGLE adrnr name1 name2
      INTO (kna1-adrnr, kna1-name1, kna1-name2)
      FROM kna1
      WHERE kunnr EQ vc_kunnr.
      IF sy-subrc EQ 0.
      SELECT SINGLE smtp_addr INTO adr6-smtp_addr
      FROM adr6
      WHERE addrnumber EQ kna1-adrnr
      AND persnumber EQ space
      AND date_from GT '00010101'
      AND consnumber EQ '001'.
      ENDIF.
      CLEAR vc_fecha.
      CONCATENATE sy-datum+6(2) '/' sy-datum+4(2) '/'
      sy-datum(4) INTO vc_fecha.
      CONCATENATE 'al' vc_fecha INTO vc_fecha
      SEPARATED BY space.
      CONCATENATE text-r01 vc_fecha
      INTO vc_subject SEPARATED BY space.
      CONCATENATE kna1-name1 kna1-name2 ':'
      INTO i_body-line SEPARATED BY space.
      APPEND i_body.
      CLEAR i_body.
      APPEND i_body.
      MOVE text-r02 TO i_body-line.
      APPEND i_body.
      CLEAR i_body.
      MOVE text-r03 TO i_body-line.
      APPEND i_body.
      CLEAR i_body.
      MOVE text-r04 TO i_body-line.
      APPEND i_body.
      CLEAR i_body.
      MOVE adr6-smtp_addr TO i_address.
      APPEND i_address.
      CLEAR i_address.
      MOVE vc_file TO i_attachs.
      APPEND i_attachs.
      CLEAR i_attachs.
      CALL FUNCTION 'Z_OUTLOOK'
      EXPORTING
      subject = vc_subject
      TABLES
      email_body = i_body
      email_address = i_address
      email_attachments = i_attachs
      EXCEPTIONS
      invalid_pathname = 1
      download_failed = 2
      execution_failed = 3
      OTHERS = 4.
      CLEAR: v_lines, vc_file.
      REFRESH: i_pdf, i_body, i_address, i_attachs.
      ENDIF.
      CLEAR: vd_fecha, v_lines, i_pdf, vc_file.
      REFRESH i_pdf.
      ENDIF.
      EXIT.
      ENDIF.
      ENDLOOP.
      ENDIF.
      sy-lsind = sy-lsind - 1.
      ENDFORM. " OKCODE_CPDF


      ************************************************
      ************************************************

      FUNCTION z_outlook.
      *"----------------------------------------------------------------------
      *"*"Interfase local
      *" IMPORTING
      *" REFERENCE(SUBJECT) TYPE C OPTIONAL
      *" TABLES
      *" EMAIL_BODY STRUCTURE SOLI OPTIONAL
      *" EMAIL_ADDRESS STRUCTURE SOLI OPTIONAL
      *" EMAIL_ATTACHMENTS STRUCTURE SOLI OPTIONAL
      *" EXCEPTIONS
      *" INVALID_PATHNAME
      *" DOWNLOAD_FAILED
      *" EXECUTION_FAILED
      *"----------------------------------------------------------------------
      *- Documentación.-
      * Mediante esta función podemos enviar a través del Outlook un mail
      * indicando el Asunto, Destinatarios, Cuerpo del mensaje, Archivos adj.
      * Tan solo es necesario pasar los parámetros que queramos y automát.
      * nos dejará en la pantalla de envio de mensajes de Outlook con todos
      * los datos rellenos
      CONSTANTS: BEGIN OF con_hex,
      tab(1) TYPE x VALUE '09',
      END OF con_hex.
      DATA: g_file(120),
      g_translate(2),
      t_vbs LIKE STANDARD TABLE OF soli WITH HEADER LINE,
      g_last,
      g_vbs_filename LIKE rlgrap-filename,
      commandline(1000).
      *- Prepara un código para traducir una comilla en hexadecimal
      *- para que pueda ser traducido de nuevo en comillas dobles.
      CONCATENATE '"' con_hex-tab INTO g_translate.
      APPEND: 'Dim myolapp ' TO t_vbs,
      'Dim olNamespace ' TO t_vbs,
      'Dim myItem ' TO t_vbs,
      'Dim myRecipient ' TO t_vbs,
      'Dim myAttachments ' TO t_vbs,
      ' ' TO t_vbs,
      'Set myolapp = CreateObject("Outlook.Application") '
      TO t_vbs,
      'Set olNamespace = myolapp.GetNamespace("MAPI") '
      TO t_vbs,
      'Set myItem = myolapp.CreateItem(olMailItem) '
      TO t_vbs,
      ' ' TO t_vbs.
      *- Destinatarios del mensaje
      LOOP AT email_address.
      IF email_address = space.
      CONTINUE.
      ENDIF.
      CONCATENATE 'Set myRecipient = myItem.Recipients.Add("'
      email_address '")' INTO t_vbs.
      APPEND t_vbs.
      ENDLOOP.
      *- Asunto del mensaje
      CONCATENATE 'myItem.Subject = "' subject '"' INTO t_vbs.
      APPEND t_vbs.
      *- Archivos adjuntos
      APPEND 'Set myAttachments = myItem.Attachments' TO t_vbs.
      *- Chequeo de existencia de archivos adjuntos
      LOOP AT email_attachments.
      g_file = email_attachments-line.
      CALL FUNCTION 'WS_QUERY'
      EXPORTING
      filename = g_file
      query = 'FE'
      EXCEPTIONS
      inv_query = 1
      no_batch = 2
      frontend_error = 3
      OTHERS = 4.
      IF sy-subrc EQ 0.
      CONCATENATE 'myAttachments.Add("' email_attachments
      '")' INTO t_vbs.
      APPEND t_vbs.
      ELSE.
      MESSAGE i000(38) WITH 'No se ha podido adjuntar el archivo'
      email_attachments.
      ENDIF.
      ENDLOOP.
      *- Cuerpo del email
      CLEAR: g_last, t_vbs.
      APPEND t_vbs.
      LOOP AT email_body.
      AT FIRST.
      APPEND 'myitem.body = _' TO t_vbs.
      ENDAT.
      AT LAST.
      g_last = 'X'.
      ENDAT.
      *- Comillas dobles(") causan un error en VBScript
      *- Reemplzar con un hexadecimal y luego reemplaza con
      *- 2 comillas dobles ("")
      TRANSLATE email_body USING g_translate.
      WHILE sy-subrc EQ 0.
      REPLACE con_hex-tab WITH '""' INTO email_body.
      ENDWHILE.
      IF g_last = 'X'.
      CONCATENATE '"' email_body '" &vbCrLf '
      INTO t_vbs.
      ELSE.
      CONCATENATE '"' email_body '" &vbCrLf &_'
      INTO t_vbs.
      ENDIF.
      APPEND t_vbs.
      ENDLOOP.
      APPEND 'myItem.Display' TO t_vbs.
      * -- Posibilidad de mostrar un MsgBox al abrir el Outlook
      * APPEND 'Dim myVar' TO t_vbs.
      * DATA: aux(255).
      * aux = 'Aquí podemos poner el mensaje que queramos'.
      * CONCATENATE 'myVar = MsgBox ("' aux '", 0, "Advertencia")' INTO aux.
      * APPEND aux TO t_vbs.

      *- Prepara el nombre de archivo vbscript para descargarlo
      *- y ejecutarlo, llamando a la variable de entorno de Windows
      *- TEMP
      CLEAR g_vbs_filename.
      CALL FUNCTION 'WS_QUERY'
      EXPORTING
      environment = 'TEMP'
      query = 'EN'
      IMPORTING
      return = g_vbs_filename
      EXCEPTIONS
      inv_query = 1
      no_batch = 2
      frontend_error = 3
      OTHERS = 4.
      IF sy-subrc GT 0.
      RAISE invalid_pathname.
      ENDIF.
      CONCATENATE g_vbs_filename '\mail.vbs' INTO g_vbs_filename.
      commandline = g_vbs_filename.
      PERFORM sapgui_progress(rstxldmc) USING 10
      'Realizando download de fichero...'.
      *- Descarga el archivo vbscript
      CALL FUNCTION 'WS_DOWNLOAD'
      EXPORTING
      filename = g_vbs_filename
      filetype = 'DAT'
      mode = 'S'
      TABLES
      data_tab = t_vbs
      EXCEPTIONS
      file_open_error = 1
      file_write_error = 2
      invalid_filesize = 3
      invalid_table_width = 4
      invalid_type = 5
      no_batch = 6
      unknown_error = 7
      OTHERS = 8.
      IF sy-subrc GT 0.
      RAISE download_failed.
      ENDIF.
      * Abre el Outlook
      PERFORM sapgui_progress(rstxldmc) USING 50
      'Abriendo Outlook... Espere por favor'.
      CALL FUNCTION 'WS_EXECUTE'
      EXPORTING
      commandline = commandline
      program = 'WSCRIPT.EXE'
      EXCEPTIONS
      frontend_error = 1
      no_batch = 2
      prog_not_found = 3
      illegal_option = 4
      OTHERS = 5.
      IF sy-subrc GT 0.
      RAISE execution_failed.
      ENDIF.
      MESSAGE s000(38) WITH 'Abriendo Outlook... Espere por favor'.
      ENDFUNCTION.

      Comentario

      • jamostos
        Junior Member
        • feb
        • 6

        #33
        Varias Ordenes SPOOL

        Habeis conseguido alguno generar un PDF que contengan varias ordenes SPOOL???

        Comentario

        • bisonye
          Senior Member
          • ago
          • 635

          #34
          Si por cada orden de spool consigues una tabla interna con los datos lo único que tienes que hacer es copiar todas las tablas con las órdenes en una sola.
          Debería funcionar...
          http://sapymas.blogspot.com/

          Comentario

          • jamostos
            Junior Member
            • feb
            • 6

            #35
            Pues no ya lo intente pero solo me guarda la ultima orden, vamos que me machaca las anteriores

            Comentario

            • bisonye
              Senior Member
              • ago
              • 635

              #36
              No me has entendido. Lo que tienes que hacer es guardar en diferentes tablas las diferentes órdenes de spool y luego esas tablas las juntas en una sola,

              Saludos
              http://sapymas.blogspot.com/

              Comentario

              • jamostos
                Junior Member
                • feb
                • 6

                #37
                No no si ya he realizado eso, me he hecho un loop con un append y al final paso la tabla global al la funcion, el tamaño del fichero es el correcto ( la suma de todos) pero solo contiene la ultima orden spool de las anteriores nada de nada. No se si cada fichero contiene un EON y un EOF y al intentar meterlo en uno solo me machaca los anteriores o que....

                Comentario

                • bisonye
                  Senior Member
                  • ago
                  • 635

                  #38
                  Vaya, el que no te había entendido era yo.
                  Pues es muy posible que tengas un principio y fin de fichero. El problema va a ser reconocerlo...
                  ¿Con que función descargas el PDF?
                  Veo que en la GUI download hay un parámetro que es APPEND que por defecto tiene space. Prueba a marcarlo con X y haces tantos downloads como ordenes de spool tengas añadiendo al mismo archivo.
                  Creo que los datasets tambien tenían algún parámetro que indicaba si el archivo se sobreescribía o se anexaba.

                  A ver si así funciona.
                  http://sapymas.blogspot.com/

                  Comentario

                  • cramr
                    Member
                    • oct
                    • 68

                    #39
                    Vale, y pongamos que adjunto el archivo correctamente, pero como puede hacer para darle un nombre, en que parametro de que tabla pongo el nombre que aparecerá a posteriori en el email??

                    Y una duda, en la tabla "object_header" que se le pasa?

                    muchas gracias

                    Comentario

                    • ABPdelCerro
                      Junior Member
                      • ene
                      • 21

                      #40
                      ¿Y si lo quiero dejar en el servidor?

                      Hola.
                      Creo que en este tema siempre se está hablando de dejar el PDF en local. ¿Alguien sabe como se podría dejar en el servidor?

                      Gracias a todos.

                      Comentario

                      • Fernando_García_ARG
                        Senior Member
                        • ago
                        • 230

                        #41
                        Reportes grandes

                        Un mes de libro diario en nuestra empresa pueden ser 90000 páginas.
                        acá veo que si ejecuto este programa por proceso de fondo, genera un dUMP con un RAISE_EXCEPTION
                        con lo cual está lindo para primer plano pero no me es útil para background.
                        lo que terminamos haciendo es instalar una impresora pdf
                        si alguien sabe como hacer andar lo que digo, gracias!!
                        saludos.
                        Fernando A. García
                        Analista Funcional

                        Comentario

                        • lpuga
                          Junior Member
                          • dic
                          • 13

                          #42
                          Requisitos para envío de OdC vía mail

                          Hola a todos!

                          Soy bastante nuevo en esto de SAPear =) se me ha encargado el envío de OdC vía mail, lo he hecho a través de orden spool y despues el envío lo hago a través del menú Orden SPOOL -->Transmitir--> Enviar mediante SAPoffice

                          Esto ha sido una solución para mi gusto sencilla pero el usuario final no está acostumbrado a las ordenes SPOOL.

                          Me gustaría saber el total de los pasos y requisitos para configurar un mensaje y con ello facilitarle la vida al usuario final

                          Muchas gracias !! hasta pronto

                          Comentario

                          • jomice
                            Junior Member
                            • ene
                            • 3

                            #43
                            Tracer

                            Cual es la transacción que permite pasar a PDF una orden spool. Ingrese RSTXPDFT4 y sale que esta transacción no existe.

                            Gracias
                            José Céspedes Chumo
                            jcespede@cofide.com.pe

                            Comentario

                            • bisonye
                              Senior Member
                              • ago
                              • 635

                              #44
                              Originalmente publicado por jomice
                              Tracer

                              Cual es la transacción que permite pasar a PDF una orden spool. Ingrese RSTXPDFT4 y sale que esta transacción no existe.

                              Gracias
                              Hola Jomice,

                              Eso es un report tienes que ejecutarlo por la SE38, no tiene transacción asociada.
                              http://sapymas.blogspot.com/

                              Comentario

                              • MARIMANRIQUE
                                Junior Member
                                • may
                                • 2

                                #45
                                Hola

                                Podrias aclararme una duda: Puedo importar desde excel para crear una Cotizacion u Oferta a cliente en Bussines one

                                Comentario

                                Trabajando...