Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZSPOOL2PDF PDF Imprimir E-mail
Usar puntuación: / 1
MaloBueno 
Código fuente - Utilidades con ficheros
Domingo, 11 de Abril de 2004 03:22
Convierte SPOOL a PDF
***------------------------------------------------------------------***
* Report zkpi0020 - Proceso de Interfase de Envíos SAP-Delegaciones    *
* Permite seleccionar un spool y convertirlo a PDF.                    *
** Se crea para enviar a las delegaciones informes puntuales           *
***------------------------------------------------------------------***
*  MÓDULO AL QUE PERTENECE: Costes                                     *
*  AUTOR: Gastón Frete Fontaine  
*----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
*   AUTOR   FECHA    MOTIVO
* GFRETE    21.01.04 Mostrar la pantalla de spooles ordenadas por código
*           de spool
*----------------------------------------------------------------------
REPORT ZKPI0020.
***
TABLES: USR01.                                      "Maestro de usuarios
*
DATA: D_LINEAS LIKE SY-TABIX,
      I_PDF LIKE TLINE,
      FICH_P_BORRAR LIKE TSP01-RQTITLE,
      PBYTE TYPE I,
      I_SPOOLREQ LIKE RSPORQ,
      SPOOL_ID LIKE TSP01-RQIDENT,
      RESPUESTA  LIKE SY-TABIX,
      I_OTF,
      FECHA_W(16),
      INDICE LIKE SY-TABIX,
      DATC LIKE RSPORQ-RQCRETIME,
       L_COMANDO LIKE SXPGCOLIST-NAME.
* Tablas Internas
DATA:  T_PDF LIKE TLINE OCCURS 0,
       TSPOOLREQ LIKE RSPORQ OCCURS 0,
       LISTA_SEL LIKE SPOPLI OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF I_OUTPUT OCCURS 10.
       INCLUDE STRUCTURE BTCXPM.
DATA: END OF I_OUTPUT.
DATA: D_STATUS LIKE EXTCMDEXEX-STATUS,
      D_EXIT   LIKE EXTCMDEXEX-EXITCODE.

DATA : P_TO(60),
P_SUBJ(30),
P_BODY(50).

* Include Objetos OLE para envio de mensajes
INCLUDE OLE2INCL.

***-------------------------------------------------------------------**
** PANTALLA DE SELECCION

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK DATOS WITH FRAME TITLE TEXT-000.
PARAMETERS:
        P_ARCH   LIKE TSP01-RQTITLE,
        P_FICH   LIKE RLGRAP-FILENAME OBLIGATORY
                  DEFAULT 'C:\Envios\',
        USERNAM  LIKE SY-UNAME DEFAULT SY-UNAME,
        DISP     LIKE RSPOTYPE-DEVICE OBLIGATORY,
        DATUM    LIKE SY-DATUM DEFAULT SY-DATUM OBLIGATORY.
SELECTION-SCREEN END OF BLOCK DATOS.
*
INITIALIZATION.
  PERFORM RECUPERAR_IMPRESORA.
***------------------------------------------------------------------***
START-OF-SELECTION.
   PERFORM BUSCAR_DATOS_SELECCION.
*
  IF RESPUESTA NE 0.
     PERFORM TRATAMIENTO_PDF.
     DESCRIBE TABLE T_PDF LINES D_LINEAS.
     IF D_LINEAS NE 0.             "solo hago el download si tengo datos
        PERFORM BAJAR_ARCHIVO.
        PERFORM ENVIA-MAIL.
        OPEN DATASET P_FICH FOR INPUT IN TEXT MODE.
        DELETE DATASET P_FICH.
     ENDIF.
  ENDIF.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* Form  BUSCAR_DATOS_SELECCION
*---------------------------------------------------------------------*
FORM BUSCAR_DATOS_SELECCION.
  CONCATENATE SY-DATUM '00000000' INTO FECHA_W.
  CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'         " Leemos los spools
         EXPORTING
              ALLCLIENTS          = ' '
              AUTHORITY           = 'X'
              DATATYPE            = '*'
              HAS_OUTPUT_REQUESTS = '*'
              RQ0NAME             = '*'
              RQ1NAME             = '*'
              RQ2NAME             = '*'
              RQDEST              = DISP
              RQIDENT             = 0
              RQOWNER             = USERNAM
              RQCRETIME           = FECHA_W
         TABLES
              SPOOLREQUESTS       = TSPOOLREQ
         EXCEPTIONS
              NO_PERMISSION       = 1
              OTHERS              = 2.
    IF SY-SUBRC <> 0.
       MESSAGE ID 'Z1' TYPE 'E' NUMBER 000 WITH TEXT-001.
       RESPUESTA = 4.
    ELSE.
       PERFORM ELEGIR-SPOOL.
    ENDIF.

ENDFORM.                                        " BUSCAR_DATOS_SELECCION
*---------------------------------------------------------------------*
* Form  TRATAMIENTO_PDF
*---------------------------------------------------------------------*
FORM TRATAMIENTO_PDF.
* Miramos qué tipo de spool tenemos
    CALL FUNCTION 'RSPO_GET_TYPE_SPOOLJOB'
         EXPORTING
              RQIDENT        = SPOOL_ID
         IMPORTING
              IS_OTF         = I_OTF
         EXCEPTIONS
              CAN_NOT_ACCESS = 1
              OTHERS         = 2.
    IF SY-SUBRC <> 0.
       MESSAGE ID 'Z1' TYPE 'E' NUMBER 000
              WITH TEXT-002.
    ELSEIF I_OTF EQ 'X'.
*  Generar PDF de OTF
       CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
           EXPORTING
                SRC_SPOOLID              = SPOOL_ID
           IMPORTING
                PDF_BYTECOUNT            = PBYTE
           TABLES
                PDF                      = T_PDF
           EXCEPTIONS
                ERR_NO_OTF_SPOOLJOB      = 1
                ERR_NO_SPOOLJOB          = 2
                ERR_NO_PERMISSION        = 3
                ERR_CONV_NOT_POSSIBLE    = 4
                ERR_BAD_DSTDEVICE        = 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.
    ELSE.                                          " Generar PDF de Abap
      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
           EXPORTING
                SRC_SPOOLID              = SPOOL_ID
           IMPORTING
                PDF_BYTECOUNT            = PBYTE
           TABLES
                PDF                      = T_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 EQ 0.
* Iniciamos la traducción por error en la funcion de conversion ABAP-PDF
         LOOP AT T_PDF INTO I_PDF.
              TRANSLATE I_PDF USING ',.'.
              MODIFY T_PDF FROM I_PDF.
         ENDLOOP.
      ENDIF.
    ENDIF.                                               "De if sy-subrc

ENDFORM.                    " TRATAMIENTO_PDF

*---------------------------------------------------------------------*
*      Form  BAJAR_ARCHIVO
*---------------------------------------------------------------------*
FORM BAJAR_ARCHIVO.
      CONCATENATE P_FICH P_ARCH '.pdf' INTO P_FICH.
      CALL FUNCTION 'WS_DOWNLOAD'
           EXPORTING
                BIN_FILESIZE            = PBYTE
                FILENAME                = P_FICH
                FILETYPE                = 'BIN'
           TABLES
                DATA_TAB                = T_PDF
           EXCEPTIONS
                INVALID_FILESIZE        = 1
                INVALID_TABLE_WIDTH     = 2
                INVALID_TYPE            = 3
                NO_BATCH                = 4
                UNKNOWN_ERROR           = 5
                GUI_REFUSE_FILETRANSFER = 6.

      IF SY-SUBRC <> 0.
        MESSAGE ID 'Z1' TYPE 'E' NUMBER '000' WITH TEXT-003.
      ENDIF.
ENDFORM.                                                 " BAJAR_ARCHIVO
*---------------------------------------------------------------------*
*      Form  RECUPERAR_IMPRESORA
*---------------------------------------------------------------------*
FORM RECUPERAR_IMPRESORA.
  SELECT SINGLE SPLD FROM USR01
         INTO CORRESPONDING FIELDS OF USR01
         WHERE BNAME = SY-UNAME.
  IF SY-SUBRC = 0.
     DISP = USR01-SPLD.
  ENDIF.
ENDFORM.                                          " RECUPERAR_IMPRESORA
*---------------------------------------------------------------------*
*  Form  ELEGIR-SPOOL
*---------------------------------------------------------------------*
FORM ELEGIR-SPOOL.
*    Definimos la lista para elegir la orden spool
     SORT TSPOOLREQ.
     LOOP AT TSPOOLREQ INTO I_SPOOLREQ.
         IF I_SPOOLREQ-RQCRETIME+0(8) = DATUM.
            IF I_SPOOLREQ-RQTITLE IS INITIAL.
               CONCATENATE I_SPOOLREQ-RQIDENT I_SPOOLREQ-RQ0NAME
                              I_SPOOLREQ-RQ1NAME I_SPOOLREQ-RQ2NAME INTO
                                 LISTA_SEL-VAROPTION SEPARATED BY SPACE.
            ELSE.
               CONCATENATE I_SPOOLREQ-RQIDENT I_SPOOLREQ-RQTITLE
                            INTO LISTA_SEL-VAROPTION SEPARATED BY SPACE.
            ENDIF.
            APPEND LISTA_SEL.
         ELSE.
            DELETE TSPOOLREQ.
         ENDIF.
     ENDLOOP.

* Y Pedimos que se seleccione la orden spool
      SORT LISTA_SEL BY VAROPTION+0(10) AS TEXT.
      IF SY-SUBRC = 0.
         RESPUESTA = 0.
         CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
             EXPORTING
                  ENDPOS_COL   = 60
                  ENDPOS_ROW   = 10
                  STARTPOS_COL = 1
                  STARTPOS_ROW = 1
                  TITLETEXT    = TEXT-010
             IMPORTING
                  CHOISE       = RESPUESTA
             TABLES
                  VALUETAB     = LISTA_SEL
             EXCEPTIONS
                  BREAK_OFF    = 1
                  OTHERS       = 2.
        IF ( SY-SUBRC = 1 ) OR ( SY-SUBRC = 2 ).
           LEAVE TO SCREEN 0.
        ELSE.
          IF RESPUESTA NE 0.
             MOVE RESPUESTA TO INDICE.
          ENDIF.
          READ TABLE LISTA_SEL INTO I_SPOOLREQ INDEX INDICE.
          SHIFT I_SPOOLREQ LEFT DELETING LEADING SPACE.
          SPOOL_ID = I_SPOOLREQ-RQIDENT.
        ENDIF.
     ENDIF.

ENDFORM.                                                  " ELEGIR-SPOOL

FORM ENVIA-MAIL.
DATA: APPOUTLOOK  TYPE OLE2_OBJECT.
DATA: APPOUT2     TYPE OLE2_OBJECT.
DATA: APPITEM     TYPE OLE2_OBJECT.
DATA: NAMESPACE   TYPE OLE2_OBJECT.
DATA: ATTACHMENTS TYPE OLE2_OBJECT.
* Crear objeto OLE : outlook.application
CREATE OBJECT APPOUTLOOK 'outlook.application' .
* Mensajes vía MAPI
CALL METHOD OF APPOUTLOOK 'GetNameSpace' = NAMESPACE
EXPORTING #1 = 'MAPI'.
* Crea objeto nuevo ITEM ( nuevo mensaje )
CALL METHOD OF APPOUTLOOK 'CreateItem' = APPITEM
EXPORTING #1 = '0'.
* Propiedades TO , SUBJECT y BODY
SET PROPERTY OF APPITEM 'To' = P_TO.
SET PROPERTY OF APPITEM 'Subject' = P_SUBJ.
SET PROPERTY OF APPITEM 'Body' = P_BODY.

****************************************
*Se adjunta el fichero
IF NOT P_FICH IS INITIAL.
   CALL METHOD OF APPITEM 'Attachments' = ATTACHMENTS.
   CALL METHOD OF ATTACHMENTS 'Add'
   EXPORTING #1 = P_FICH.
ENDIF.
****************************************
* Envíar directamente
*call method of appitem 'Send'.
*Se muestra la pantalla del outlook
 CALL METHOD OF APPITEM 'Display'.
* Libera Espacio del objeto
FREE OBJECT ATTACHMENTS.
FREE OBJECT APPITEM.
FREE OBJECT NAMESPACE.
* Cierra Outlook ( solo si se quiere que quede cerrado )
*** CALL METHOD OF APPOUTLOOK 'Quit'.
FREE OBJECT APPOUTLOOK.
ENDFORM.



Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search