Pasar SmartForm a PDF

11 05 2011

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con las siguientes pocas líneas vamos a poder hacerlo.


*Declaraciones
DATA: w_ctrlop    TYPE ssfctrlop,
          w_compop TYPE ssfcompop,
          w_return    TYPE ssfcrescl,
          otfdata       LIKE itcoo OCCURS 0 WITH HEADER LINE,
          lc_name     TYPE rs38l_fnam,
          intab         TYPE  soli_tab,
          objbin       TYPE  solix_tab, 
          wa_intab   TYPE LINE OF soli_tab,
          wa_objbin TYPE LINE OF solix_tab,
          objpack    LIKE sopcklsti1 WITH HEADER LINE.

*Función que devuelve el modulo de función del SmartForm
CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’
   EXPORTING
      formname           = ‘ZSMARTFORM’  “Nombre del formulario SmartForm
   IMPORTING
      fm_name            = lc_name
   EXCEPTIONS
      no_form                  = 1
      no_function_module = 2 
   OTHERS                     = 3.

*Llama al modulo de función del SF
    w_ctrlop-getotf          = ‘X’.
    w_ctrlop-no_dialog    = ‘X’.
    w_compop-tdnoprev  = ‘X’.

CALL FUNCTION lc_name
   EXPORTING
        output_options        = w_compop 
        control_parameters = w_ctrlop
   IMPORTING
        job_output_info       = w_return
   EXCEPTIONS
        formatting_error   = 1
        internal_error       = 2
        send_error           = 3
        user_canceled      = 4
   OTHERS                    = 5.
   IF sy-subrc <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   ELSE.
      otfdata[] = w_return-otfdata[].
   ENDIF.

*En la tabla otfdata nos queda guardado el formulario en formtao OTF
*Ahora sólo resta convertir el OTF en PDF
LOOP AT otfdata.
    wa_intab = otfdata.
    APPEND wa_intab TO intab.
    CLEAR wa_intab.
ENDLOOP.

*Convertir el OTF en PDF
CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
    EXPORTING
      format_src           = ‘OTF’
      format_dst          = ‘PDF’
*     ADDR_TYPE        =
      devtype               = ‘LP01′
*     FUNCPARA          =
    CHANGING
      transfer_bin         = objpack-transf_bin
      content_txt          = intab
      content_bin         = objbin
      objhead              = intab
      len                     = objpack-doc_size
   EXCEPTIONS
      err_conv_failed   = 1 
   OTHERS                = 2.

*LISTO!!! En la tabla objbin nos queda guardado el PDF para salvarlo *en la PC con la función ‘GUI_DOWNLOAD’ o bien enviarlo por mail con *la función ‘SO_NEW_DOCUMENT_ATT_SEND_API1’


Technorati tags:

Anuncios




Pasar Sapscript a PDF

4 05 2011

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con las siguientes pocas líneas vamos a poder hacerlo.


*Declaraciones
TABLES: itcpo.

DATA: otfdata LIKE itcoo OCCURS 0 WITH HEADER LINE,
          intab         TYPE  soli_tab,
          objbin       TYPE  solix_tab, 
          wa_intab   TYPE LINE OF soli_tab,
          wa_objbin TYPE LINE OF solix_tab,
          objpack    LIKE sopcklsti1 WITH HEADER LINE.

*Antes de la llamada a la función ‘OPEN_FORM’
itcpo-tdgetotf = ‘X’.
itcpo-tddest   = ‘LP01’.

CALL FUNCTION ‘OPEN_FORM’
   EXPORTING
      form       = ‘ZSAPSCRIPT’  “Nombre del formulario Sapscript 
      language = ‘S’
      options   = itcpo
      device    = ‘PRINTER’
      dialog     = ‘ ‘              “Vacío para que no muestre el pop-up de impresión
   EXCEPTIONS
   OTHERS   = 1.

 

*En el ‘CLOSE_FORM’
CALL FUNCTION ‘CLOSE_FORM’
   TABLES
      otfdata = otfdata
   EXCEPTIONS
   OTHERS  = 1.

*En la tabla otfdata nos queda guardado el formulario en formtao OTF
*Ahora sólo resta convertir el OTF en PDF

LOOP AT otfdata.
    wa_intab = otfdata.
    APPEND wa_intab TO intab.
    CLEAR wa_intab.
ENDLOOP.

*Convertir el OTF en PDF
CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
    EXPORTING
      format_src           = ‘OTF’
      format_dst          = ‘PDF’
*     ADDR_TYPE        =
      devtype               = ‘LP01’
*     FUNCPARA          =
    CHANGING
      transfer_bin         = objpack-transf_bin
      content_txt          = intab
      content_bin         = objbin
      objhead              = intab
      len                     = objpack-doc_size
   EXCEPTIONS
      err_conv_failed   = 1 
   OTHERS                = 2.

*LISTO!!! En la tabla objbin nos queda guardado el PDF para salvarlo *en la PC con la función ‘GUI_DOWNLOAD’ o bien enviarlo por mail con *la función ‘SO_NEW_DOCUMENT_ATT_SEND_API1’


Technorati tags:





Transacción NACU – Clases de Mensaje

7 05 2010

La transacción NACU es de mucha utilidad para conocer la configuración de cualquier clase de mensaje.

Al ingresar nos pedirá elegir el tipo de aplicación (facturación, ventas, expedición, etc.). Tras ejecutar abre una nueva pantalla con todo el listado de Clases de Mensaje para el tipo de aplicación elegida. Y a la izquierda podremos seleccionar para ver: títulos y textos, rutinas de proceso y funciones de interlocutor.

Es ideal para cuando un programador quiera conocer el formulario de impresión.

PD: Los créditos son para mi amigo Claudio Suriano.


Technorati tags:





C14Z_DYNP_READ_FIELD – Función para leer campos de una DYNPRO

29 04 2010

La función C14Z_DYNP_READ_FIELD sirve para leer campos de una Dynpro o Pantalla.
No necesariamente de la dynpro en que nos encontramos. Puede ser de una pantalla anterior.

Esto nos puede ser muy útil, como fue en mi caso, para el desarrollo de Field Exits.


A continuación el código:

* A I_PROGRAM hay que pasarle el nombre del programa.
* A I_DYNPRO se le pasa el número de pantalla o dynpro.
* Y I_FIELDNAME el campo del cual queremos conocer su contenido.
* La función nos devuelve en la variable W_EVAL el valor encontrado.

DATA: W_EVAL LIKE DYNPREAD-FIELDVALUE.

CALL FUNCTION ‘C14Z_DYNP_READ_FIELD’                                    
EXPORTING                                                              
   I_PROGRAM       = ‘SAPF110O’                                         
   I_DYNPRO        = ‘0102’                                             
   I_FIELDNAME     = ‘REGUH-LAUFD’                                      
   I_FLG_STEPLOOP  = ‘X’                                                
CHANGING                                                               
   E_VALUE         = W_EVAL.   


Technorati tags:





Guardar archivo en formato PDF

11 01 2010

Con el siguiente código podremos generar archivos PDF.

Ya que con la función GUI_DOWNLOAD únicamente no se puede hacer. Previamente hay que realizar una conversión para luego sí guardar el fichero .PDF.


 

*&—————————————————————–*
*& Report  Y_TEST
*&
*&—————————————————————–*
*&
*&
*&—————————————————————–*

REPORT y_test NO STANDARD PAGE HEADING.

**********************************************************************
*  Definición de variables                                                                   *
**********************************************************************

DATA: filesize  TYPE i,
header  LIKE thead,
options  LIKE itcpo,
result    LIKE itcpp,
otf        LIKE itcoo OCCURS 0 WITH HEADER LINE,
lines     LIKE tline OCCURS 0 WITH HEADER LINE,
lv_file   TYPE string.

**********************************************************************
*  Definición de la pantalla de selección                                              *
**********************************************************************

SELECTION-SCREEN BEGIN OF BLOCK blq1 WITH FRAME TITLE text-t01.
PARAMETERS:
p_impre TYPE pri_params-pdest OBLIGATORY,
p_file  TYPE rlgrap-filename OBLIGATORY DEFAULT ‘C:\PRUEBA.PDF’.
SELECTION-SCREEN END OF BLOCK blq1.

 

**********************************************************************
*  Proceso principal                                                                           *
**********************************************************************

*Se completa tabla lines con el contenido que queramos que tenga el archivo PDF
lines-tdline = ‘Este es el texto que aparecerá en el archivo PDF’.
lines-tdformat = ‘K’.
APPEND lines.

*Se obtienen y definen las opciones de formato del archivo
options-tddest = p_impre. “Nombre de impresora local
options-tdnewid = ‘X’.
options-tdgetotf = ‘X’.

CALL FUNCTION ‘PRINT_TEXT’
EXPORTING
device           = ‘PRINTER’
dialog           = ‘ ‘
application    = ‘TX’
header          = header
options         = options
IMPORTING
result         = result
TABLES
lines          = lines
otfdata      = otf
EXCEPTIONS
canceled     = 01
device        = 02
form          = 03
options      = 04
unclosed    = 05
unknown    = 06
format       = 07
textformat  = 08
communication = 09.

* Se convierte a PDF
CALL FUNCTION ‘CONVERT_OTF’
EXPORTING
format                = ‘PDF’
max_linewidth     = 132
IMPORTING
bin_filesize          = filesize
TABLES
otf                    = otf
lines                 = lines
EXCEPTIONS
err_conv_not_possible = 1.

* Bajamos el archivo
lv_file = p_file.

CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
bin_filesize = filesize
filename = lv_file
filetype = ‘BIN’
* APPEND = ‘ ‘
* CODEPAGE = ‘ ‘
* NO_BYTEORDER_MARK = ‘ ‘
* IMPORTING
* FILELENGTH = c
TABLES
data_tab = lines
* FORMAT_TAB =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6.


Technorati tags:





Reducir el tamaño de los Transaction Logs

10 07 2009

Cuando los transactions logs de la base de datos de SQL Server crecen demasiado pueden generarnos errores en SAP y varios dolores de cabeza.

En esos casos la solución es truncar dichos archivos, reducir su tamaño. Nunca eliminarlos!.


Atención: Lo que sigue es sólo para SQL Server, para otro tipo de base de datos, como ser Oracle, los comandos cambian.

¿Cómo truncamos o reducimos los archivos?

Primero tenemos que saber los nombres de los transactions logs y su ubicación. Para eso ingresamos en la transacción DB02.

Esta transacción tiene toda la información referida a la base de datos, y en el medio nos da un detalle completo de todos los archivos y de los transactions logs. 

Una vez que sabemos los nombres de los transactions logs (extensión .LDF); bajamos SAP y acto seguido ingresamos al servidor donde esta instalado SQL.

Ya estamos preparados para reducir los logs, pero antes se recomienda hacer un back up de los archivos que vamos a truncar.

Abrimos el SQL Management Studio y nos conectamos a nuestra base de datos. A continuación clickeamos en el botón “Nueva consulta” y escribimos el siguiente comando:
BACKUP LOG <sid> WITH NO_LOG

    • <sid> = nombre de la base de datos.
      Luego apretar el botón “Ejecutar”.

 

Cuando termina hacemos una nueva consulta pero con el comando:
DBCC SHRINKFILE (<name_logfile>, <size>)

    • <name_logfile> = nombre del transaction log
    • <size> = tamaño al que queremos truncar/reducir el archivo., Ej: 10 MB.

           Apretar el botón “Ejecutar”.
(Repetir este comando por cada transaction log).

 

Con esto ya tendremos reducidos nuestros archivos en cuestión. Espero que les sea útil. Para más información pueden ver la nota de SAP nro 625546.


Technorati tags:





Transacción SGEN – Compilación de Programas

1 07 2009

image

La transacción SGEN es una gran utilidad que nos permitirá compilar o recompilar todos los programas.

Pueden generarse programas, grupos de funciones, clases y aplicaciones Business Server Page (aplicaciones BSP).

Hay que tener en cuenta que la misma tarda bastante tiempo en ejecutarse.

Para saber con qué opción ejecutarla, acceder al botónInfo sobre el generador de carga SAP”. La información es muy completa y detallada.

O bien ver la nota de sap nro  379918.


Technorati tags: