|
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.
|