De ALV a PDF

Para convertir el resultado de un ALV en un PDF hay que proceder de la siguiente forma.

En primer lugar se debe generar la orden de Spool a partir del ALV, eso se hace setenado el parámetro “IS_PRINT” en la llamada del ALV.

lv_print-print                  = ’X’.
lv_print-no_print_listinfos     = ’X’.   ” No muestra cabecera de informacion en el pdf
lv_print-no_change_print_params = ’X’. ” Deja por defecto los parametros de impresora.

sy-batch = ’X’. “Se ejecuta de fondo el ALV, de esta forma no aparece el Popup para setear los parameotrs de impresora.

CALL FUNCTION‘REUSE_ALV_LIST_DISPLAY’
EXPORTING
is_layout          = ls_layout
it_fieldcat        = gt_fieldcat[]
is_print           = lv_print
TABLES
t_outtab           = lt_bkpf
EXCEPTIONS
program_error                     = 1
OTHERS                            = 2.

Esto generara una orden de Spool, debemos capturar el numero de orden de la siguiente manera.

DATA: it_tsp01 LIKE tsp01 OCCURSWITH HEADER LINE,
ls_tsp01 TYPE tsp01.

SELECT rqident
INTO CORRESPONDING FIELDS OF TABLE it_tsp01
FROM tsp01
WHERE rqowner  EQ sy-uname
AND rqclient EQ sy-mandt.

*Ordeno en forma descendente para quedarme con el último formulario *generado
SORT it_tsp01 DESCENDING BY rqident.

READ TABLE it_tsp01 INTO ls_tsp01 INDEX 1.

f_rqident = ls_tsp01-rqident.

Para bajar la orden de Spool a formato PDF se usa la siguiente función.

DATA: gd_bytecount LIKE tst01-dsize.

DATA: x_rqid LIKE tsp01-rqident.

DATA: BEGIN OF gt_objaux OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF gt_objaux.

CALL FUNCTION‘CONVERT_ABAPSPOOLJOB_2_PDF’
EXPORTING
src_spoolid              = x_rqid
no_dialog                = space
IMPORTING
pdf_bytecount            = gd_bytecount
TABLES
pdf                      = gt_objaux.

Para poder bajarlo a un archivo PDF, habrá que hacer una conversión.

DATA: lines TYPE STANDARD TABLE OF hlpext WITH HEADER LINE.

LOOP AT gt_objaux.
lines-line+00(002) = gt_objaux-tdformat.
lines-line+02(132) = gt_objaux-tdline.
APPEND lines.
ENDLOOP.

CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename                = p_file
filetype                = ’BIN’
CHANGING
data_tab                = lines[]

….

Se adjunta un archivo con el ejemplo correspondiente.

z_reporte_pdf

| Etiquetado , , , , | Deja un comentario

Editar tabla de SAP

Si queremos modificar o eliminar un registro de una tabla de SAP debemos realizar los siguientes pasos.

  1. Ir a la transacción SE16N (también se logra con la transacción ‘N’).
  2. Escribir en el campo de comandos el siguiente código &SAP_EDIT aparecerá el siguiente mensaje “Se ha activado la función de edición SAP”.
  3. Se ingresa en el campo tabla el nombre de la tabla que se quiere modificar, se hace una consulta, los campos aparecerán de forma editable.
  4. Luego de realizadas la modificaciones correspondientes, se deben guardar los cambios.

 

 

 

| Etiquetado , , , | Deja un comentario

Excluyendo botones en ALV

Para eliminar botones de un ALV OO de forma personalizada debe cargarse una tabla de tipo UI_FUNCTIONS que va a enviarse como parametro en la llamada del ALV.

Ejemplo.

DATA: t_ui_function TYPE ui_functions.

APPEND cl_gui_alv_grid=>mc_fg_edit TO t_ui_function.

CALL METHOD alv->set_table_for_first_display
EXPORTING
it_toolbar_excluding = t_ui_function
i_structure_name     = ’TY_ITAB’
is_layout            = layout
CHANGING
it_fieldcatalog      = it_fieldcat[]
it_outtab            = t_alv[].

En el ejemplo se eliminan los botones de edición, hay mas opciones en la calse CL_GUI_ALV_GRID, buscar en la solapa de atributos aquellos cuyo tipo de referencia sea UI_FUNC.

| Etiquetado , , , , | Deja un comentario

Modificación parametro clase Importing en BADI

Cuando se implementa una BADI puede ser necesario cambiar los datos de alguna de las tablas, si la tabla corresponde a un parámetro de clase IMPORTING no será posible modificarlo con alguno de los metodos convencionales (ej. MODIFY).

Para poder realizar la modificación a la tabla interna hay que recurrir al uso de FIELD-SYMBOL, esta instrucción nos permite manejar punteros.

Como dije antes F-S es un puntero que tiene como contenido la dirección de un objeto, esto quiere decir, que apunta a un objeto, y esto justamente es lo que se debe hacer, apuntar al objeto (tabla) que carga la tabla (parametro) que queremos modificar.

Para demostrarlo con un ejemplo se ha implementado la BADI WORKER_UPDATE y se ha realizado codigo en el METODO BEFORE_UPDATE para modificar la tabla IT_OPERATION, logicamente es de la clase IMPORTING.

FIELD-SYMBOLS: <fs_tabla> TYPE cobai_t_operation .
FIELD-SYMBOLS: <fs_contrato>  TYPE LINE OF cobai_t_operation.

ASSIGN (‘(SAPLCOBT)AFVG_BT[]‘) TO <fs_tabla>.
Quizas esta sea una de las instrucciones que mas atencion debemos prestar, el parametro ‘(SAPLCOBT)AFVG_BT[]‘ es el objeto al que debe apuntarse el F-S. Si uno realiza un debug podra comprobar que al hacer el llamado a la BADI se estará asignando la tabla AFVG_BT al parametro IT_OPERATION.

Luego ya sera posible modificar la tabla correspondiente.
LOOP AT <fs_tabla> ASSIGNING <fs_contrato>.

<fs_contrato>-fordn = <fs_contrato>-ebeln.
<fs_contrato>-fordp = <fs_contrato>-ebelp.
<fs_contrato>-konnr = ”.
<fs_contrato>-ktpnr = ”.
<fs_contrato>-ebeln = ”.
<fs_contrato>-ebelp = ”.

ENDLOOP.

| Etiquetado , , , , , | Deja un comentario

Suma importe tipo Char en ALV.

Puede ocurrir que un campo tipo Char en un ALV sea un importe, de ser asi la opcion de hacer la suma no estara disponible, pero cargando el fieldcat de la siguiente manera, la función sumar estara activada.

it_fieldcat-fieldname = ‘WRBTR’.
it_fieldcat-tabname = ‘T_ALV’.
it_fieldcat-scrtext_m = ‘Importe’.
it_fieldcat-datatype = ‘CURR’.
it_fieldcat-cfieldname = ‘WAERS_O’.
APPEND it_fieldcat.
CLEAR it_fieldcat.

| Etiquetado , , , , , | Deja un comentario

Insertar/Quitar ceros

A veces es necesario quitar los ceros a la izquierda en un variable para poder mostrar el valor en pantalla, a contraposición puede ser necesario incluir ceros delante de un número para completar el rango de la variable.

La funcion que nos permite quitar ceros es la siguiente.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’

       EXPORTING

                input = c_input

       IMPORTING

               output = c_output.

Donde c_input y c_output son variables de tipo char del mismo rango que tiene la variable de tipo numerica.

Si tenemos que quirarle los ceros a una variables, por ejemplo: nro_doc TYPE bkpf-belnr

Antes de la llamada a la función debemos castear la funcion a tipo Char

MOVE nro_doc TO c_input.

Para agregar ceros a una variable se procede a utilizar la funcion

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’

de la misma manera que se explico en el paso anterior.

Publicado en Funciones ABAP | Etiquetado , , , , , | 1 comentario

Exportar/Importar un SAPscript

Es posible que en algún momento necesitemos guardar una copia de nuestro SAPscript, ya sea para mantener un backup del mismo o porque necesitamos importalo en otro sistema.

Para poder lograr esto existe un programa llamado RSTXSCRP  al ejecutarlo desde la SE38 vemos una pantalla como la que se muestra a continuación.

RSTXSCRP

Si lo que se deseea principalmente es conservar una copia del SAPscript, ingresamos en el campo Nombre de objeto, el nombre del sapscript a ser exportado y en el campo Modo(EXPORT, IMPORT) escribimos EXPORT.

RSTXSCRP_export

Luego presionamos F8. Nos aparecera una ventana de dialogo donde introduciremos la ruta donde se almacenará el archivo correspondiente al sapscript, luego precionamos Aceptar, si el SAPscript no contenia errores nos aparecerá una ventana como la siguiente.

RSTXSCRP_seleccionado

 Si en lugar de exportar se hubiera querido Importar el SAPscript en el sistema, en la pantalla que se presenta en el paso 2 tendriamos que  ingresar el valor IMPORT en el campo Modo(EXPORT, IMPORT).

Publicado en General | Etiquetado , , , , , | Deja un comentario

Generación de mensajes.

La intrucción utilizada en la siguiente.

MESSAGE S001(zmensajes) WITH ‘&’.

Haciendo dobleclick en ‘zmensajes’ nos despliega la pantalla donde podremos cargar los diferentes mensajes que queremos mostrar.

mensajes

El valor ’S’ antes del numero correponde al tipo de mensajes.

El número de 3 digitos corresponde al mensaje cargado por el usuario.

Son 5 los tipos de mensajes soportados.

  • Tipo A(Abend): Se muestra el mensaje en una ventana de dialogo, luego de responder se cierra el programa.
  • Tipo E(Error): Muestra un mensaje de error en la barra de estado.
  • Tipo I(Information): Se muestra en mensaje en un popup, luego de que el usuario responda continua el proceso del sistema.
  • Tipo S(Success): Muestra el mensaje en la barra de estatus.
  • Tipo W(warning): Similar al tipo E.
Publicado en General | Etiquetado , , , | 3 comentarios

Matchcodes (Browser explorer)

El siguiente codigo enseña a realizar un matchcode para cargar un archivo en la pantalla de seleccion.

Breve explicacion.

La ruta se almacena en una tabla interna del tipo FILETABLE la cual tiene un campo tipo char de 1024.
Para tener acceso a la ruta hay q extraer el registro de la tabla, para eso se hace un READ TABLE a una variable que contiene un registro del tipo FILETABLE.
Hay diferentes funciones que abren el explorador de directorios como la ws_filename_get o f4_filename, pero utilizo la siguiente porque es la mas reciente y aplica la metodologia de orientacion a objetos, el resto estan comenzando a ser obsoletas.

Ademas en el ejemplo, se permite cargar archivos de cualquier extension, si solo se quisiera cargar archivos de extension txt el parametro si cargaria de la siguiente forma.

file_filter = cl_gui_frontend_services=>filetype_text

******************************************************
* Parametro donde se guardara la ruta del archivo.
******************************************************

PARAMETERS: p_file(1024) TYPE c OBLIGATORY.

************************************************************************
* Evento sobre p_file que llama al procedimiento q cargara el archivo
************************************************************************

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM get_file USING p_file.

Sigue leyendo

Publicado en General | Etiquetado , , , , , , , , , | Deja un comentario