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

Buscar

Traducir

Amazon

ZGENPDF PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Ejemplos
Miércoles, 24 de Diciembre de 2003 02:34
Generar PDF a partir de un formulario
***------------------------------------------------------------------***
* Report zkpi0023 - Interfase de Envíos de facturas de Obra Nueva a    *
* las delegaciones. Busca las facturas que estén en el spool y las    *
* graba en un archivo para controlar su impresión. A continuación las  *
* muestra para que el usuario seleccione aquellas que quiere pasar a   *
* pdf.
* Crea un archivo txt llamado ENVIAR.TXT con las facturas creadas      *
***------------------------------------------------------------------***
*  MÓDULO AL QUE PERTENECE: SD                                         *
*  AUTOR: Gastón Frete Fontaine   EMPRESA: Alameda soft
*----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
*   AUTOR       FECHA    MOTIVO
*
*----------------------------------------------------------------------
REPORT ZKPI0023.
***
TABLES: ZENVIOFACTU,     "Control de envío de facturas en PDF a delega
         USR01.            "Maestro de usuarios
*
INCLUDE <LIST>.
*
DATA: DELEGACION_W LIKE ZENVIOFACTU-DELEGACION,
       W_NROFACTURA LIKE ZENVIOFACTU-NROFACTURA,
       CORRECTO(1) VALUE 'S', 
       W_DESTINO(128),
       TITULO(7) VALUE 'FAC_ON_', 
       HAY_FACTURAS(1),
       BOX,
       LINES TYPE I,
      FREE TYPE I,
       D_LINEAS LIKE SY-TABIX,
       I_PDF LIKE TLINE,
       PBYTE TYPE I,
       I_SPOOLREQ LIKE RSPORQ,
       SPOOL_ID LIKE TSP01-RQIDENT,
       RESPUESTA LIKE SY-TABIX,
       I_OTF,
       FECHA_W(16),
       W_NOMBRETXT(128),
       INDICE LIKE SY-TABIX,
       DATC LIKE RSPORQ-RQCRETIME.
* Tablas Internas
* archivo ENVIAR.TXT
DATA: BEGIN OF I_ENVIAR OCCURS 10,
       TEXTO(128).
DATA: END OF I_ENVIAR.
*
DATA:  T_PDF LIKE TLINE OCCURS 0,
        TSPOOLREQ LIKE RSPORQ OCCURS 0.
*
DATA: BEGIN OF I_ZENVIOFACTU OCCURS 20.
      INCLUDE structure ZENVIOFACTU.
DATA: END OF I_ZENVIOFACTU.
***-------------------------------------------------------------------**
** PANTALLA DE SELECCION
***-------------------------------------------------------------------**
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK DATOS WITH FRAME TITLE TEXT-000.
PARAMETERS::
         P_FICH LIKE RLGRAP-FILENAME OBLIGATORY
                  DEFAULT '\\Aries\Gestdel\Envios\FacturasON\', 
         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 CREAR_SUBDIRECTORIO.
   PERFORM BUSCAR_DATOS_SELECCION.
   PERFORM LEER_ZENVIOFACTU.
   IF HAY_FACTURAS = 'N'. 
       MESSAGE ID 'Z1'  TYPE 'E' NUMBER 000 WITH TEXT-001.
   ELSE.
      PERFORM IMPRIMIR_CABECERAS.
      PERFORM MOSTRAR_PANTALLA.
   ENDIF.
END-OF-SELECTION.
     SET PF-STATUS '0001'. 

AT USER-COMMAND.
   IF SY-UCOMM = 'LIST'. 
       SET PF-STATUS '0002'. 
   ENDIF.
   DO.
     CLEAR BOX.
     READ LINE SY-INDEX FIELD VALUE BOX.
     IF SY-SUBRC NE 0.
        EXIT.
     ENDIF.
      IF BOX <> SPACE.
         PERFORM ARMAR_NOMBRE.
         PERFORM CREAR_PDFS.
      ENDIF.
   ENDDO.
   PERFORM BAJAR_TXT.
    LEAVE.
 EXIT.
*---------------------------------------------------------------------*
* 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.
       PERFORM GUARDAR_SPOOL.

ENDFORM.                                        " BUSCAR_DATOS_SELECCION
*---------------------------------------------------------------------*
* Form  TRATAMIENTO_PDF
*---------------------------------------------------------------------*
FORM TRATAMIENTO_PDF.
 SPOOL_ID = I_ZENVIOFACTU-RQIDENT.
* 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.
     CALL FUNCTION 'WS_DOWNLOAD' 
          EXPORTING
                BIN_FILESIZE = PBYTE
                FILENAME = W_DESTINO
                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.
          CORRECTO = 'N'. 
          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  GUARDAR-SPOOL.
*  Primero controla si corresponde la fecha y busca las facturas dentro
* de los spooles.
*  Se guardan los spooles nuevos en una tabla para controlar los que
*  ya han sido enviados.
*---------------------------------------------------------------------*
FORM GUARDAR_SPOOL.
     LOOP AT TSPOOLREQ INTO I_SPOOLREQ.
         IF I_SPOOLREQ-RQCRETIME+0(8) = DATUM
            AND I_SPOOLREQ-RQTITLE+0(7) = 'Factura' 
            AND I_SPOOLREQ-RQTITLE+32(5) <> '10000'. 
            PERFORM GRABAR_TABLAS.
         ELSE.
            DELETE TSPOOLREQ.
         ENDIF.
     ENDLOOP.
ENDFORM.                                                  " ELEGIR-SPOOL
*---------------------------------------------------------------------*
* Form GRABAR_TABLAS
*      Se controla si ya ha sido creado y enviado.                     *
*      Se graba en la tabla  ZENVIOFACTU
*----------------------------------------------------------------------*
FORM GRABAR_TABLAS.
   CLEAR ZENVIOFACTU.
    MOVE I_SPOOLREQ-RQIDENT TO ZENVIOFACTU-RQIDENT.
    MOVE I_SPOOLREQ-RQTITLE TO ZENVIOFACTU-RQTITLE.
    MOVE I_SPOOLREQ-RQ0NAME TO ZENVIOFACTU-RQ0NAME.
    MOVE I_SPOOLREQ-RQCRETIME TO ZENVIOFACTU-RQCRETIME.
    MOVE I_SPOOLREQ-RQTITLE+21(4) TO ZENVIOFACTU-DELEGACION.
    MOVE I_SPOOLREQ-RQTITLE+32(10) TO ZENVIOFACTU-NROFACTURA.
    MOVE 'N'  TO ZENVIOFACTU-ENVIADO.
    MOVE SY-DATUM TO ZENVIOFACTU-FECHA_CREACION.
    INSERT ZENVIOFACTU.
ENDFORM.                                                 " GRABAR_TABLAS
*---------------------------------------------------------------------*
* Form  LEER_ZENVIOFACTU
*---------------------------------------------------------------------*
FORM LEER_ZENVIOFACTU.
   SELECT * FROM ZENVIOFACTU
          INTO TABLE I_ZENVIOFACTU
          WHERE ENVIADO = 'N'. 
   IF SY-DBCNT <> 0.
       HAY_FACTURAS = 'S'. 
   ELSE.
       HAY_FACTURAS = 'N'. 
   ENDIF.
ENDFORM.                                             " LEER_ZENVIOFACTU
*---------------------------------------------------------------------*
*   Form  CREAR_PDFS
*---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM CREAR_PDFS.
   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.
      IF CORRECTO = 'S'. 
         PERFORM MARCAR_ENVIADO.
         PERFORM GRABAR_TXT.
      ELSE.
          MOVE 'S'  TO CORRECTO.
      ENDIF.
   ENDIF.
ENDFORM.                                                    " CREAR_PDFS
*---------------------------------------------------------------------*
* Form  IMPRIMIR_CABECERAS
*---------------------------------------------------------------------*
FORM IMPRIMIR_CABECERAS.
    ULINE AT 7(98).
   WRITE: /7 SY-VLINE,
              'Del.' COLOR COL_HEADING NO-GAP,
           13 SY-VLINE,
              'Factura' COLOR COL_HEADING NO-GAP,
           23 SY-VLINE,
            'Datos de la Factura' COLOR COL_HEADING NO-GAP,
           94 SY-VLINE,
           95 'Nro.Spool' COLOR COL_HEADING NO-GAP,
          104 SY-VLINE,
          /10 SY-VLINE.
           ULINE AT 7(98).
ENDFORM.                                            " IMPRIMIR_CABECERAS
*---------------------------------------------------------------------*
*  Form  MOSTRAR_PANTALLA
*----------------------------------------------------------------------*
FORM MOSTRAR_PANTALLA.
   SORT I_ZENVIOFACTU BY DELEGACION NROFACTURA.
   LOOP AT I_ZENVIOFACTU.
         SPOOL_ID = I_ZENVIOFACTU-RQIDENT.
         ULINE AT 7(97).
        WRITE: /4 BOX AS CHECKBOX,
                 7 SY-VLINE.
        IF I_ZENVIOFACTU-DELEGACION <> DELEGACION_W.
            MOVE I_ZENVIOFACTU-DELEGACION TO DELEGACION_W.
           WRITE 9 I_ZENVIOFACTU-DELEGACION+2(2) COLOR COL_NORMAL.
        ENDIF.
        WRITE: 13 SY-VLINE,
                14 I_ZENVIOFACTU-NROFACTURA COLOR COL_NORMAL,
                23 SY-VLINE,
                   I_ZENVIOFACTU-RQTITLE,
                94 SY-VLINE,
                95 SPOOL_ID,
               104 SY-VLINE,
                /10 SY-VLINE.
          ULINE AT 7(98).
    HIDE:  I_ZENVIOFACTU-RQIDENT,
          I_ZENVIOFACTU-RQTITLE.
   ENDLOOP.

ENDFORM.                                              " MOSTRAR_PANTALLA
*----------------------------------------------------------------------*
* Form  MARCAR_ENVIADO
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM MARCAR_ENVIADO.
   UPDATE ZENVIOFACTU
           SET ENVIADO = 'S' 
          WHERE RQIDENT = I_ZENVIOFACTU-RQIDENT.
ENDFORM.                                                " MARCAR_ENVIADO
*----------------------------------------------------------------------*
* Form  ARMAR_NOMBRE
* Primero intenta crear el subdirectorio:
* Path: \\Aries\Gestdel\Envios\FacturaON\sy-datum
* "FAC_ON_1234567890_XXXXXXXXXXXXXXXX(DD).pdf"
*  Tamaño total: 42 ====> 1234567890 Número de factura (10 carac).     *
*                         xxxxxxxxxx Nombre del cliente(16 carac)      *
*                         (DD)       delegación
* p_fich = default '\\Aries\Gestdel\Envios\FacturaON\'
* titulo = value 'FAC_ON_',
*----------------------------------------------------------------------*
FORM ARMAR_NOMBRE.
   MOVE SY-LISEL+7(10) TO W_NROFACTURA.
  READ TABLE I_ZENVIOFACTU WITH KEY
              NROFACTURA = W_NROFACTURA.
  CONCATENATE P_FICH '\' TITULO I_ZENVIOFACTU-NROFACTURA
                '_' 
                I_ZENVIOFACTU-RQTITLE+52(16)
                '(' 
                I_ZENVIOFACTU-RQTITLE+23(2)               "Delegación
                ')' 
                '.pdf'  INTO W_DESTINO.
ENDFORM.                                                  " ARMAR_NOMBRE
*----------------------------------------------------------------------*
* Form  CREAR_SUBDIRECTORIO
*----------------------------------------------------------------------*
* Intenta crear el subdirectorio. Si existe, continua
*----------------------------------------------------------------------*
FORM CREAR_SUBDIRECTORIO.
DATA: SUBDIR LIKE RLGRAP-FILENAME.
  CONCATENATE P_FICH DATUM INTO P_FICH.
   SUBDIR = P_FICH.
  CALL FUNCTION 'TMP_GUI_CREATE_DIRECTORY' 
       EXPORTING
                 DIRNAME = SUBDIR
       EXCEPTIONS
                 FAILED = 1
                 OTHERS = 2.
ENDFORM.                                           " CREAR_SUBDIRECTORIO
*----------------------------------------------------------------------*
* Form  GRABAR_TXT                                                     *
*----------------------------------------------------------------------*
FORM GRABAR_TXT.
   CONCATENATE I_ZENVIOFACTU-RQTITLE+23(2)               "Delegación
                '-' 
                TITULO I_ZENVIOFACTU-NROFACTURA '_' 
                I_ZENVIOFACTU-RQTITLE+52(16)
                '(' 
                I_ZENVIOFACTU-RQTITLE+23(2)
                ')' 
                '.pdf' 
               INTO I_ENVIAR-TEXTO.
   APPEND I_ENVIAR.
ENDFORM.                                                    " GRABAR_TXT

*---------------------------------------------------------------------*
* Form  BAJAR_TXT
*---------------------------------------------------------------------*
FORM BAJAR_TXT.
   CONCATENATE P_FICH '\' 'enviar.txt'  INTO W_NOMBRETXT.
   CALL FUNCTION 'WS_DOWNLOAD' 
        EXPORTING
                 FILENAME = W_NOMBRETXT
                 FILETYPE = 'DAT' 
                 MODE = 'A'                                   "append
       TABLES
                DATA_TAB = I_ENVIAR.
ENDFORM.                                                     " BAJAR_TXT
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