Set de Datos

Set de Datos

Hoy vamos hablar de una funcionalidad muy útil cuando necesitamos crear un programa configurable, en sus parámetros, ya sea que necesitamos tomar en cuenta ciertas clases de documentos o cuentas, clases de pedidos, etc... y esto es algo que encontraras tarde o temprano en tú carrera como programador ABAP, por lo regular la manera más practica será... bueno pues creo los datos dentro del programa en "código duro" es decir los valores los dejamos como constantes, o creamos una tabla de mantenimiento que se actualice desde la SM30 o bien le creamos una transacción para que sea más directo el proceso.

En el primer caso, pues si se tiene que realizar algún cambio, siempre se va a depender de un consultor ABAP, para modificar el código, hacer las pruebas y después transportar la nueva solución.

En el caso de la tabla de mantenimiento, podemos crearla como tabla customizing, y queda obligado el transporte desde desarrollo de los datos, lo cual consume tiempo para hacer modificaciones a la solución, esto sin hablar el tiempo que se consume en crear dichas tablas. También podemos contemplar la posibilidad de hacer esta tabla de mantenimiento pueda ser editada en ambientes productivos, lo cual sin duda ayudara a acelerar el proceso.

Y finalmente tenemos la opción de la que les quiero platicar el día de hoy, los set de datos estos objetos, que son elementos funcionales, nos pueden ayudar a simplificar este proceso, ya que no es necesario crear objetos en el diccionario, no vamos atados a código duro y el usuario puede hacer las modificaciones a dichos parámetros directo en sistema productivo.

En la transacción GS01 podemos crear estos set de datos, será necesario asignar un nombre, y el campo de la tabla del cual deseamos crear este set de datos, una vez que indicamos esto, solo es agregar la lista de valores que necesitamos tomar en cuenta dentro de nuestro programa.

set de datos01.png

set de datos02.png

En las transacciones GS02 y GS03 podemos editar y visualizar .

Una vez que hemos creado nuestro set de datos, llega la hora de hacer la magia e incluirlo en nuestro programa, la lógica como ya platicamos puede ser muy muy variada y pueden ser diferentes situaciones por las que necesitas manejar estas opciones. Para traer la información almacenada en set de datos tenemos que usar la función : G_SET_FETCH nos pedirá el nombre del set de datos y una tabla donde traerá la información del set. Esta tabla tiene que ser una tabla del mismo tipo del campo con el que creamos el set de datos.

Por ultimo crearemos una tabla de rango, haciendo la definición con TYPE RANGE OF ya que manejar estas tablas nos facilita incluir el set de datos en una condición de un SELECT, un LOOP o un CHECK

DATA: gr_racct       TYPE RANGE OF racct,
           gs_racct       LIKE LINE OF gr_racct.

DATA: lit_set_lines_basic TYPE TABLE OF racct

* Obtengo el SET de datos con los grupos de cuentas a validar
CALL FUNCTION 'G_SET_FETCH'
EXPORTING
setnr           = '0000ZTEST'  " Se pone 0000 antes del nombre del SET
TABLES
set_lines_basic = lit_set_lines_basic
EXCEPTIONS
no_authority    = 1
set_is_broken   = 2
set_not_found   = 3
OTHERS          = 4.

IF sy-subrc <> 0.
   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.

LOOP AT lit_set_lines_basic  ASSIGNING FIELD-SYMBOL(<basic>).
   gs_racct-SIGN   = 'I'.
   gs_racct-OPTION = 'BT'.
   gs_racct-LOW    = <basic>-FROM.
   gs_racct-HIGH   = <basic>-TO.
   APPEND gs_racct TO gr_racct.
ENDLOOP.

ENDIF.