Si encontraste la información que buscabas, o si te pareció interesante. Considera hacer una donación

SAP: Crear consultas utilizando tabla de rangos

En nuestra anterior entrega hablamos tips para mejorar el rendimiento de nuestras consultas ABAP usando OPEN SQL. En esta entrega vamos a entrar un poco más a detalle sobre tablas de rangos.

ABAP nos permite trabajar con tablas de tipo rangos de valores, siendo declaradas como tablas de rangos de forma implícita, ayudándonos a crear consultas sencillas o complejas dependiendo de la implementación que se le dé.

Antes de implementar este tipo de estructura hay que tener en cuenta los campos con los cuentas que son los siguientes: 
  • SIGN (Tipo de Señal): Este campo de tipo C de longitud 1, este valor indica si es incluido o excluido el dato de la fila. Los posibles valores son: ’I’ (incluido) y ‘E’ (excluido).
  • OPTION (Opción): Campo de tipo C de longitud 2, contiene el operador que vamos a utilizar. No puede estar vacio y sus valores posibles son: ‘EQ’ (=), ‘NE’ (<>), ‘GT’ (>), ‘LT’ (<), ‘GE’ (>=), ‘LE’ (<=), ‘BT’ (Between) y ‘NB’ (Not Between). El ‘CP’ (like ‘*’ o ‘+’) y ‘NP’ (not like ‘*’ o ‘+’)  no están completamente funciones.
  • LOW (Bajo): Es el valor o el más bajo cuando es una selección por rango.
  • HIGH (Alto): El valor más bajo del rango.

Estas estructuras son muy fáciles de observar cuando estamos depurando un programa ABAP.
Se pueden declarar como tipos TYPE o implementadas con DATA, aquí vemos las sentencias:

TYPES|DATA <rangetab> TYPE RANGE OF <type>.
o
TYPES|DATA <rangetab> LIKE RANGE OF <obj>.

Vamos a poner un ejemplo sencillo, consultemos en el maestro de materiales el código anterior con la siguiente restricción: los que tienen código entre 1900 y 1999 pero descartando el 1910.

TYPES: BEGIN OF TIT_MATNR,
          CODIGO(18),
        END OF TIT_MATNR.

DATA: IT_MATNR TYPE STANDARD TABLE OF TIT_MATNR WITH HEADER LINE.


DATA: R_MATNR TYPE RANGE OF MARA-MATNR,
      W_MATNR LIKE LINE OF R_MATNR,
      C_MATNR TYPE MARA-MATNR.


REFRESH R_MATNR.

W_MATNR-SIGN = 'I'.
W_MATNR-OPTION = 'BT'.
W_MATNR-LOW = '000000000000001900'.
W_MATNR-HIGH = '000000000000001999'.
APPEND W_MATNR TO R_MATNR.

W_MATNR-SIGN = 'E'.
W_MATNR-OPTION = 'EQ'.
W_MATNR-LOW = '000000000000001910'.
APPEND W_MATNR TO R_MATNR.


SELECT BISMT INTO TABLE IT_MATNR
FROM
  MARA
WHERE
  MATNR IN R_MATNR.

LOOP AT IT_MATNR.
  WRITE:/, IT_MATNR-CODIGO.
ENDLOOP.

Ingresa tu comentario sobre cualquier interrogante del tema.

Actualmente calificado con 3.3 por 21 personas

  • Currently 3,285714/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,
Categories: SAP
Acciones: E-mail | Permalink | RSS ComentariosRSS comentarios

12 Comentarios

Comentarios

marzo 8. 2009 01:54

Iván, sabes que quiero hacer algo parecido. Quiero que dado un rango solo trabaje con algunos. No con todos, solo con unos específicos que tengo dentro de una tabla Z.
Pensé hacerlo así:

L匤ea SIGN OPTION LOW HIGH
1 I BT 100000 999999
2 E NE 100110
3 E NE 100120
4 E NE 100130
5 E NE 100140
6 E NE 100150
7 E NE 100160
8 E NE 100170
9 E NE 100180
10 E NE 100190

Pero no funciona, mientras estoy escribiendo esto, se me ocurre hacer que excluya los que no están en la tabla Z. voy a ver que pasa.

marzo 12. 2009 04:42

Ok me parece que ya lo resolviste, pero parece que en tu caso es mejor usar un rango para excluir valores no deseados.

Gloria Marin

septiembre 15. 2009 20:27

Ivan muy bueno tu ejemplo muchas gracias.

Una sugerencia, despues de cada Append se debe adicionar CLEAR W_MATNR.

Ya que para el caso donde quieres excluir el material '000000000000001910' en HIGH va quedar = '000000000000001999'

GEMA
COLOMBIA

Steven

noviembre 9. 2009 08:03

Hola Ivan, yo estoy haciendo un proyecto utilizando RFC manejando el codigo en VB .NET Express pero necesito hacer una consulta a dos famosas tablas, la BSEG y la BKPF, son muy grandes y necesito hace una consulta que me extraiga informacion como un Inner join.

Gracias de antemano

diciembre 15. 2009 16:59

Thanks for posting this article. I am definitely tired of struggling to find relevant and intelligent commentary on this subject. Everyone nowadays goes to the very far extremes to either drive home their viewpoint of that everybody else in the globe is wrong. Thanks for your consise and relevant insight.

Añadir comentario


 

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]