0% encontró este documento útil (0 votos)
107 vistas18 páginas

Documentación SAP

Este documento proporciona documentación sobre ABAP y contiene información sobre varios módulos y funcionalidades como pedidos de ventas, report painting, registro de cambios en logs de modificaciones, y la clase CL_SALV_TABLE para crear listados ALV. Explica cómo crear ALVs a pantalla completa y dentro de una dynpro usando CL_SALV_TABLE.

Cargado por

Juan Rivas Ortiz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
107 vistas18 páginas

Documentación SAP

Este documento proporciona documentación sobre ABAP y contiene información sobre varios módulos y funcionalidades como pedidos de ventas, report painting, registro de cambios en logs de modificaciones, y la clase CL_SALV_TABLE para crear listados ALV. Explica cómo crear ALVs a pantalla completa y dentro de una dynpro usando CL_SALV_TABLE.

Cargado por

Juan Rivas Ortiz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

Documentación ABAP

Contenido
MODULO VENTAS........................................................................................................................2
Pedidos de Ventas:...................................................................................................................2
Transacción:.........................................................................................................................2
Tablas:..................................................................................................................................2
Estructuras:..........................................................................................................................2
Programas:...........................................................................................................................2
Ejemplo:...............................................................................................................................2
Report Painting............................................................................................................................2
Registrar cambios en el log de modificaciones (CDHDR y CDPOS)...............................................2
ALV...............................................................................................................................................4
Clase CL_SALV_TABLE:.............................................................................................................4
Introducción.........................................................................................................................4
CL_SALV_TABLE a pantalla completa:..................................................................................5
CL_SALV_TABLE dentro de una dynpro:...............................................................................6
Modificar atributos de las columnas..................................................................................14
MODULO VENTAS
Pedidos de Ventas:
Transacción:
 VA01 – Alta Pedido de Ventas
 VA02 – Modificación Pedido de Ventas
 VA03 – Visualización Pedido de Ventas

Tablas:
 VBKD (Documento de ventas: Datos comerciales)
 VBAK (Documento de ventas: Datos de cabecera)
 VBEP (Documento de ventas: Datos de reparto)

Estructuras:
 KUWEV (Vista destinatario de mercancía del maestro de clientes)

Programas:
 SAPMV45A - UserExit
 Rutinas Exit:
o USEREXIT_MOVE_FIELD…. (Mapeo de Datos en Alta y
Modificación)
 USEREXIT_MOVE_FIELD_TO_VBKD

Ejemplo:
FORM userexit_move_field_to_vbkd.
**/*** ORP PE-2013-027 BEGIN
IF xvbap-pstyv = 'ZVAP'.
vbkd-kurrf = vbkd-kursk.
ENDIF.
**/*** ORP PE-2013-027 END
* VBKD-zzfield = xxxx-zzfield2.

**** === (INS) AES-140621 ================== (BEGIN) ========


***** === (INS) OEL-231020 ================== (BEGIN) ========
**** "Se el Pedido se esta creando
**** IF svbkd-tabix EQ 0.
**** "Se traspasan los valores del destinario de mercancias para los campos INCO1 y INCO2
**** vbkd-inco1 = kuwev-inco1.
**** vbkd-inco2 = kuwev-inco2.
**** ENDIF.
***** === (INS) OEL-231020 ================== (END) ==========
**** === (INS) AES-140621 ================== (END) ========
ENDFORM. "USEREXIT_MOVE_FIELD_TO_VBKD

Report Painting

Transacciones:
Registrar cambios en el log de modificaciones (CDHDR y CDPOS)
Algunas veces se modifica el valor de una tabla estándar mediante una exit y esta modificación no queda
registrado en el log de modificaciones. Para estos casos lo que se debe hacer es lo siguiente:

En primer lugar abrimos el documento de cambios, para esto utilizamos la siguiente función, a la misma,
le pasamos la clase y el ID del objeto:

CALL FUNCTION 'CHANGEDOCUMENT_OPEN'

    EXPORTING

      objectclass             = 'BUPA_UKM'

      objectid                = lv_objectid (ID Objeto)

Luego, se llama a la función que identifica los campos modificados. Para esto se le tiene que pasar como
parámetros el indicador de cambio, la tabla modificada, los valores modificados y los valores antes de la
modificación:

CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'

      EXPORTING

        change_indicator = 'U'

        tablename        = 'UKMBP_CMS_SGM'

        workarea_new     = ls_workarea_new

        workarea_old     = ls_workarea_old.

Por ultimo, se llama a la función para cerra el objeto de cambio:

CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'

        EXPORTING

          date_of_change          = sy-datum

          objectclass             = 'BUPA_UKM'

          objectid                = lv_objectid (ID Objeto)

          tcode                   = sy-tcode

          time_of_change          = sy-uzeit

          username                = sy-uname

          object_change_indicator = 'U'

        IMPORTING

          changenumber            = lv_changenr.

 
Se adjuntan los registros de las tablas CDHDR y CDPOS actualizados con las funciones anteriormente
mencionadas:

ALV
Clase CL_SALV_TABLE:
Introducción
La clase CL_SALV_TABLE es una aproximación  basada  en el paradigma de la programación orienta objetos para el
desarrollo de listados ALV en aplicaciones SAP. La clase CL_SALV_TABLE forma parte del modelo basado en objetos para
ALV ( ALV Object Model ) que agrupa diferentes clases globales para la implementación de listados ALV y que esta  incluido a
partir de la versión 6.40 de SAP.

CL_SALV_TABLE se utiliza para crear listados ALV de dos dimensiones y con un estilo de hoja de calculo de forma fácil y
rápida en nuestras aplicaciones ABAP.

La única limitación de esta clase es que no existe ningún  método para crear ALV editables.

Para crear la instancia de la clase CL_SALV_TABLE invocamos a su método FACTORY.

Una vez creado, para mostrar por pantalla el ALV por primera vez invocamos el método DISPLAY

Para refrescar los datos del ALV en la pantalla, invocamos al método REFRESH

Podeis visualizar sus atributos y métodos desde la transacción SE24.


Clase global CL_SALV_TABLE

CL_SALV_TABLE a pantalla completa:


En el siguiente ejemplo, implementamos un ALV a pantalla completa utilizando la clase CL_SALV_TABLE.

*&--------------------------------------------------------------------
-*
*& Report: ZZCL_SALV_TABLE_FULL_SCREEN
*& Fecha : 29.07.2015
*& Autor : David Rueda Barrón
*&--------------------------------------------------------------------
-*
*& Creacion de ALV a pantalla completa con la clase CL_SALV_TABLE
*&--------------------------------------------------------------------
-*

REPORT ZZCL_SALV_TABLE_FULL_SCREEN.

TYPES: BEGIN OF type_matnr,


matnr type mara-matnr,
maktx type makt-maktx,
MTART type mara-MTART,
MATKL type mara-matkl,
MEINS type mara-MEINS,
END OF type_matnr.

DATA: ti_mara type STANDARD TABLE OF type_matnr.

DATA gr_table type ref to cl_salv_table. "instancia de la clase


DATA cx_salv TYPE REF TO cx_salv_msg.

DATA gr_msg TYPE string.


*&--------------------------------------------------------------------
-*
*& START-OF-SELECTION
*&--------------------------------------------------------------------
-*
START-OF-SELECTION.

SELECT m~matnr t~maktx m~mtart m~matkl m~meins


INTO CORRESPONDING FIELDS OF TABLE ti_mara
FROM mara as m
INNER JOIN makt as t
ON m~matnr EQ t~matnr
AND t~spras EQ sy-langu.

try.
cl_salv_table=>factory(
importing
r_salv_table = gr_table
changing
t_table = ti_mara ).
catch cx_salv_msg INTO cx_salv.
* gestionamos las excepciones que puedan suceder
gr_msg = cx_salv->get_text( ).
MESSAGE gr_msg TYPE 'E'.
endtry.

gr_table->display( ).

CL_SALV_TABLE a pantalla completa

CL_SALV_TABLE dentro de una dynpro:


En el siguiente ejemplo, implementamos un ALV dentro de un objeto contenedor para que pueda ser visualizado en una
dynpro de una aplicación ABAP de tipo modul pool.

Como hemos comentado, en este caso, el ALV va ha estar contenido en una dynpro.

El programa principal se encargara  de rellenar la tabla interna y llamar a la dynpro.

*&--------------------------------------------------------------------
-*
*& Report: ZZCL_SALV_TABLE_DYNPRO
*& Fecha : 29.07.2015
*& Autor : David Rueda Barrón
*&--------------------------------------------------------------------
-*
*& Creación de ALV dentro de Dynpro con la clase CL_SALV_TABLE

DATA ti_mara type STANDARD TABLE OF type_matnr.

*&--------------------------------------------------------------------
-*

REPORT ZZCL_SALV_TABLE_DYNPRO.

TYPES: BEGIN OF type_matnr,


matnr type mara-matnr,
maktx type makt-maktx,
MTART type mara-MTART,
MATKL type mara-matkl,
MEINS type mara-MEINS,
END OF type_matnr.

DATA ok_code type sy-ucomm.


DATA gr_table TYPE REF TO cl_salv_table. "instancia de la clase
DATA gr_container TYPE REF TO cl_gui_custom_container.

DATA cx_salv TYPE REF TO cx_salv_msg.

DATA gr_msg TYPE string.


*&--------------------------------------------------------------------
-*
*& START-OF-SELECTION
*&--------------------------------------------------------------------
-*
START-OF-SELECTION.

SELECT m~matnr t~maktx m~mtart m~matkl m~meins


INTO CORRESPONDING FIELDS OF TABLE ti_mara
FROM mara as m
INNER JOIN makt as t
ON m~matnr EQ t~matnr
AND t~spras EQ sy-langu.

CALL SCREEN 4001.

Para crear la dynpro, tenéis que hacer doble click sobre el número de dynpro 4001.
Doble click sobre el número de dynpro para crearla

Como cualquier dynpro, lo primero es introducir una descripción, el resto de campos los dejamos como están, no hace falta
modificarlos para esta prueba .

descripción de la dynpro

En la pestaña Lista Elementos, escribimos OK_CODE  en la única celda que hay editable.

Nota: OK_CODE es una variable global del programa principal de tipo SY-UCOMM.
OK_CODE para recoger el código de función de cada evento de la dynpro

Después hay que implementar los módulos STATUS y USER_COMMAND en la pestaña Lóg. proceso.

   1. Descomentamos la linea de MODULE STATUS_4001

   2. Doble click sobre nombre del modulo STATUS_4001 para crearlo.

   3. Guardamos el nuevo modulo en el include ZZCL_SALV_TABLE_DYNPRO_PBO

Crear el Modulo STATUS_4001

   4. Descomentamos la linea de código que empieza por SET_STATUS....

   5. Sustituimos las  XXXXXXX  por el nombre de nuestro status, por ejemplo: ZZSTATUS_4001
   6. Doble click sobre el nombre del status y creamos un nuevo Status diálogo.

   7. Desplegar la sección Teclas de función.

   8. En los siguientes iconos, escribimos los siguientes códigos de funciones:

Códigos de funciones para el status de la dynpro 4001

Lo siguiente es implementar el modulo USER_COMMAND_4001:

   1. Descomentamos la instrucción MODULE USER_COMMAND_4001.

   2. Doble click sobre nombre del modulo USER_COMMAND_4001 para crearlo.

   3. Guardamos el nuevo modulo en el include ZZCL_SALV_TABLE_DYNPRO_PAI


Crear el modulo USER_COMMAND_4001

   4. Dentro del modulo USER_COMMAND_4001 colocamos el siguiente código:

DATA wl_command TYPE sy-ucomm.

wl_command = ok_code.
clear ok_code.

CASE wl_command.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.

Activamos todos los includes , la dynpro 4001 y el status ZZSTATUS_4001.

Con esto ya tenemos creada una dynpro y las funcione para poder cerrarla.

Ahora toca incrustar en ella nuestro ALV de la clase CL_SALV_TABLE.

   1. Volvemos ala dynpro 4001 y pulsamos el boton LAYOUT en la barra de herramientas.

   2. Dibujamos un objeto contenedor en la dypro, le damos el nombre de ZCONTENEDOR_ALV.

   3. Activamos y cerramos el editor de Dynpros


Añadimos un contenedor a la dynpro 4001

   4.Creamos un nuevo modulo en la sección PROCESS BEFORE OUTPUT de la dynpro 4001.


      Guardamos el modulo en el include ZZCL_SALV_TABLE_DYNPRO_PBO
   

nuevo modulo PBO - SET_ALV

   5. Incluimos el siguiente código dentro del modulo:

if ( gr_container is not bound ).


* Si es la primera vez, instancia las clases y muestra los datos de
la tabla
create object gr_container
exporting
container_name = 'ZCONTENEDOR_ALV'
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.

if ( sy-subrc <> 0 ).
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

cl_salv_table=>factory(
exporting
r_container = gr_container
list_display = ' '
importing
r_salv_table = gr_table
changing
t_table = ti_mara ).

gr_table->display( ).
else.
* Si ya estan instanciadas las clases, pues refrescamso los datos de
la pantalla
gr_table->refresh( ).
endif.

Activamos todos los includes, dynpros y status.


Ejecutamos para ver el resultado

ALV con CL_SALV_TABLE dentro de una dynpro


En resumen, la clase CL_SALV_TABLE reduce el código que necesitamos para crear listados ALV por pantalla pero no
podemos crear ALV editables..

Modificar atributos de las columnas


En el anterior post mostramos como generar un ALV utilizando solo la clase CL_SALV_TABLE. A continuación vamos a
explicar como se modifican los atributos de las columnas del ALV cuando lo generamos utilizando la clase CL_SALV_TABLE.

A diferencia de los ALV generados con la bapi REUSE_ALV_GRID_DISPLAY o con la clase CL_GUI_ALV_GRID  la clase
CL_SALV_TABLE no utiliza un catalogo de campos o fieldcat para determinar las características de las columnas del listado
ALV.  Cada columna del ALV debe ser tratada como un objeto individual con métodos que nos permitirán modificar sus
atributos y  características como su descripción, longitud, ocultar la columna, etc...

Necesitamos instanciar dos clases:

 CL_SALV_COLUMNS_TABLE  : Gestionar las columnas que componen el ALV


 CL_SALV_COLUMN    : Gestionar los atributos de una columna del ALV
La primera clase CL_SALV_COLUMNS_TABLE nos permitirá gestionar atributos y características de las columnas del ALV.
Para mas información podéis acceder a los métodos y atributos de la clase CL_SALV_COLUMNS_TABLE desde la transacción
SE24 -> Pasar a -> Documentación -> Clase.

Transacción SE24 -> Clase CL_SALV_COLUMNS_TABLE

Para modificar las características y atributos propios de cada columna del ALV  instanciaremos un objeto
CL_SALV_COLUMN_TABLE utilizando el metodo GET_COLUMN de la clase CL_SALV_COLUMNS_TABLE. Este método
recibe como parámetro de entrada el nombre de una columna del ALV y retorna un objeto de la clase
CL_SALV_COLUMN_TABLE que nos permite con sus métodos cambiar las características y atributos de la columna.
Transacción SE24 -> Clase CL_SALV_COLUMN_TABLE

Desde la transacción SE24  -> Pasar a -> Documentación -> Clase  podéis ver todos los métodos de la clase
CL_SALV_COLUMN y que atributos nos permiten modificar.  Los métodos que mas se suelen utiliza son:

 SET_LONG_TEXT:  Descripción larga de la columna


 SET_MEDIUM_TEXT:Descripción media de la columna
 SET_SHORT_TEXT: Descripción corta de la columna
 SET_VISIBLE:   Oculta o muestra la columna ( 'X' muestra , '  '  oculta la columna )
 SET_OUTPUT_LENGTH:  Especifica el ancho de la columna 
 SET_OPTIMIZED:  Optimiza el ancho de la columna automáticamente
 SET_CELL_TYPE: formato de la celda ( ej: campo, checkbox, etc.. ) 

A continuación, ampliamos el código del anterior post para modificar las características de algunas columnas.

*&--------------------------------------------------------------------
-*
*& Report: ZZCL_SALV_TABLE_FULL_SCREEN
*& Fecha : 29.07.2015
*& Autor : David Rueda Barrón
*&--------------------------------------------------------------------
-*
*& Creacion de ALV a pantalla completa con la clase CL_SALV_TABLE
*& Modificacion de los atributos de la columnas con las clases:
*& - CL_SALV_COLUMNS_TABLE
*& - CL_SALV_COLUMN_TABLE
*&--------------------------------------------------------------------
-*

report zzcl_salv_table_full_screen.
types: begin of type_matnr,
matnr type mara-matnr,
maktx type makt-maktx,
mtart type mara-mtart,
matkl type mara-matkl,
meins type mara-meins,
box type c,
end of type_matnr.

data: ti_mara type standard table of type_matnr.

data gr_table type ref to cl_salv_table. "Instancia de la


clase
data gr_columns type ref to cl_salv_columns_table. "Para gestionar
las columnas
data gr_column type ref to cl_salv_column_table. "Para gestionar
atrb. de una columna
data cx_salv type ref to cx_salv_msg.
data cx_not_found TYPE ref to cx_salv_not_found.

data gr_msg type string.


*&--------------------------------------------------------------------
-*
*& START-OF-SELECTION
*&--------------------------------------------------------------------
-*
start-of-selection.

select m~matnr t~maktx m~mtart m~matkl m~meins


into corresponding fields of table ti_mara
from mara as m
inner join makt as t
on m~matnr eq t~matnr
and t~spras eq sy-langu.

try.
cl_salv_table=>factory(
importing
r_salv_table = gr_table
changing
t_table = ti_mara ).
catch cx_salv_msg into cx_salv.
* Gestionamos las excepciones que puedan suceder
gr_msg = cx_salv->get_text( ).
message gr_msg type 'E'.
endtry.

try.
gr_columns ?= gr_table->get_columns( ).
* gr_columns->set_optimize( 'X' ). "Optimizar automa. abcho de
TODAS las columnas

* Cambiamos la descripción de la columna MATNR - MATERIAL


gr_column ?= gr_columns->get_column( 'MATNR' ).
gr_column->set_short_text( 'Cod.Mat.' ).
gr_column->set_medium_text( 'Cod. Material' ).
gr_column->set_long_text( 'Código Material SAP' ).

* Ocultamos la columna MTART - Tipo de material


gr_column ?= gr_columns->get_column( 'MTART' ).
gr_column->set_visible( value = if_salv_c_bool_sap=>false ).
* Cambiamos la longitud de la columnas:
* MAKTX descripción del material
* MATKL Grupo de articulos
gr_column ?= gr_columns->get_column( 'MAKTX' ).
gr_column->set_output_length( 30 ).

gr_column ?= gr_columns->get_column( 'MATKL' ).


gr_column->set_output_length( 20 ).

* Cambiamos la descripcion y formato de la columna box


gr_column ?= gr_columns->get_column( 'BOX' ).
gr_column->set_short_text( 'box' ).
gr_column->set_medium_text( 'Checkbox' ).
gr_column->set_long_text( 'Checkbox' ).
gr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).

catch cx_salv_msg into cx_salv.


gr_msg = cx_salv->get_text( ).
message gr_msg type 'E'.
catch cx_salv_not_found into cx_not_found.
gr_msg = cx_not_found->get_text( ).
message gr_msg type 'E'.
endtry.

gr_table->display( ).

CL_SALV_TABLE  con los atributos de las comunas modificados

Ejemplo

*&---------------------------------------------------------------------*
*& Report ZAHM_ALV_TABLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zahm_alv_table.
DATA:
it_mara TYPE STANDARD TABLE OF mara.

START-OF-SELECTION.
SELECT * FROM mara INTO TABLE it_mara UP TO 100 ROWS.
PERFORM mostrar_alv USING it_mara 'Tabla MARA'.

*&---------------------------------------------------------------------*
*& Form MOSTRAR_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM mostrar_alv USING p_itab TYPE STANDARD TABLE p_titulo TYPE data.

DATA: alv TYPE REF TO cl_salv_table,


display_settings TYPE REF TO cl_salv_display_settings,
message TYPE REF TO cx_salv_msg,
functions TYPE REF TO cl_salv_functions_list.

TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = alv
CHANGING
t_table = p_itab ).
CATCH cx_salv_msg INTO message.
" error handling
ENDTRY.

"mostrar titulo al reporte


display_settings = alv->get_display_settings( ).
display_settings->set_striped_pattern( if_salv_c_bool_sap=>true ).
display_settings->set_list_header( p_titulo ).

"Agregar la barra de herramientas


functions = alv->get_functions( ).
functions->set_all( ).

"desplegar el reporte
alv->display( ).

ENDFORM. " MOSTRAR_ALV

También podría gustarte