• Lunes 18 de Noviembre de 2024, 09:43

Autor Tema:  Select's En Abap  (Leído 14128 veces)

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Select's En Abap
« en: Martes 22 de Marzo de 2005, 17:06 »
0
En ABAP, se pueden utilizar muchos tipos de selects.....o maneras de acceder a datos en tablas.....

Para esto, crearemos primero una simple tabla interna....

Código: Text
  1.  
  2. *---Occurs 0 --> Indica que nuestra tabla interna puede almacenar todos los datos.
  3. DATA: BEGIN OF TABLE T_TAB OCCURS 0,
  4.           BUKRS LIKE BKPF-BUKRS, "Sociedad
  5.           BELNR LIKE BKPF-BELNR,  "Número de un documento contable
  6.           GJAHR LIKE BKPF-GJAHR, "Ejercicio o Año Contable
  7.           END OF T_TAB.
  8.  
  9.  

Ahora, podemos hacer nuestros selects.....  :lol:

Select

Código: Text
  1.  
  2. SELECT *  "Seleccionamos todos los datos
  3. *Los almacenamos en los campos correspondientes de nuestra tabla interna
  4. INTO CORRESPONDING-FIELDS OF T_TAB
  5. *de la tabla BKPF
  6. FROM BKPF
  7. *donde el ejercicio es "2005"
  8. WHERE GJAHR EQ '2005'.
  9.  
  10.  

Otro tipo de Select

Código: Text
  1.  
  2. *Elegimos solamente los campos que queremos obtener
  3. SELECT BUKRS BELNR GJAHR
  4. *Se guardan en la tabla en el mismo orden
  5. INTO T_TAB
  6. *de la tabla BKPF
  7. FROM BKPF
  8. *donde el ejercicio es "2005"
  9. WHERE GJAHR EQ '2005'.
  10.  
  11.  

En algunos casos, necesitaremos solamente un registro...así que hacemos esto  :ph34r:

Select Single

Código: Text
  1.  
  2. *Elegimos solamente los campos que queremos obtener de la primera coindencia
  3. SELECT SINGLE BUKRS BELNR GJAHR
  4. *Se guardan en la tabla en el mismo orden
  5. INTO T_TAB
  6. *de la tabla BKPF
  7. FROM BKPF
  8. *donde el ejercicio es "2005"
  9. WHERE GJAHR EQ '2005'.
  10.  
  11.  

Otro Select Single

Código: Text
  1.  
  2. SELECT SINGLE *  "Seleccionamos todos los datos, de la primera coincidencia
  3. *Los almacenamos en los campos correspondientes de nuestra tabla interna
  4. INTO CORRESPONDING-FIELDS OF T_TAB
  5. *de la tabla BKPF
  6. FROM BKPF
  7. *donde el ejercicio es "2005"
  8. WHERE GJAHR EQ '2005'.
  9.  
  10.  

Ahora bien....supongamos que tenemos llena nuestra tabla interna....

Citar
BUKRS     BELNR           GJAHR
ENER       200000001      2005
TBLP        200000005      2005
TSIP        200000025      2005

Ahora bien....a una tabla interna no podemos hacerle un select...así que tenemos que recurrir a un READ TABLE

Código: Text
  1.  
  2. *Leemos un registro de la tabla interna, donde la sociedad sea "ENER".
  3. READ TABLE T_TAB WITH KEY BUKRS = 'ENER'.
  4.  
  5.  

También podemos leer por número de registro.....

Código: Text
  1.  
  2. *Leemos un registro de la tabla interna, que tenga el índice 2.
  3. READ TABLE T_TAB INDEX 2.
  4.  
  5.  

Con lo cual tendríamos.....

Citar
BUKRS     BELNR           GJAHR
TBLP        200000005      2005

Si necesitamos leer todos los registros.....podríamos utilizar un loop. Pero primero deberemos de crear una variable, que almacene el valor del índice

Código: Text
  1.  
  2. *Declaramos una variable que tiene como tipo, la variable del sistema SY-TABIX.
  3. *SY-TABIX, almacena el valor del índice a través de un LOOP.
  4. DATA: W_TABIX LIKE SY-TABIX.
  5.  
  6.  

Código: Text
  1.  
  2. *Leemos todos los registros de la tabla interna, uno por uno.
  3. LOOP AT T_TAB.
  4. *Almacenamos el valor de SY-TABIX en nuestra variable.
  5. WA_TABIX = SY-TABIX.
  6. *Leemos nuestra tabla interna por cada indice.
  7. READ TABLE T_TAB INDEX WA_TABIX.
  8. *XXX --> Hacemos algo con los valores leídos.....
  9. ENDLOOP.
  10.  
  11.  

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Select's En Abap
« Respuesta #1 en: Martes 22 de Marzo de 2005, 17:21 »
0
Pregunta?
Por que las variables y las tablas en ABAP tienen nombre tan raros, por ejemplo

Código: Text
  1. DATA: BEGIN OF T_DATOS OCCURS 0,
  2.      BUKRS LIKE BKPF-BUKRS,
  3.      BELNR LIKE BKPF-BELNR,
  4.      GJAHR LIKE BKPF-GJAHR,
  5.      BLART LIKE BKPF-BLART,
  6.      WAERS LIKE BKPF-WAERS,
  7.      DMBTR LIKE BSEG-DMBTR,
  8.      END OF T_DATOS.
  9.  
  10.  
  11.  
Esos campos ni idea que son, no podrian tener nombre como "ID, NOMBRE", o algo asi.
Por que nombres tan raros, jejeje es una pregunta tonta pero me gustaria saber
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Select's En Abap
« Respuesta #2 en: Martes 22 de Marzo de 2005, 17:40 »
0
Citar
DATA: BEGIN OF T_DATOS OCCURS 0,
    BUKRS LIKE BKPF-BUKRS,   --> Sociedad
    BELNR LIKE BKPF-BELNR,    --> Documento Contable
    GJAHR LIKE BKPF-GJAHR,   --> Ejercicio o Año Contable
    BLART LIKE BKPF-BLART,    --> Clase de Documento
    WAERS LIKE BKPF-WAERS,  --> Moneda
    DMBTR LIKE BSEG-DMBTR,  -->Importe o Monto
    END OF T_DATOS.

Tienen esos nombres extraños....Pues porque.....SAP es alemán....Y esos nombres de tablas y campos, son supuestamente nemónicos en alemán  :blink:

Cuando uno programa en ABAP, es....aunque no parezca...más sencillo llamar a sus variables o campos de tablas internas, igual como se llaman originalmente....Es por eso, que siempre las llamos así.....

Código: Text
  1.  
  2. BUKRS LIKE BKPF-BUKRS
  3. DMBTR LIKE BSEG-DMBTR
  4.  
  5.  

Con la práctica te acostumbras y llegas a aprederte de memoria el significado de muchos de los campos, ya que los utilizas todos los días  :ph34r:

Saludos,

Blag  :smartass:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Select's En Abap
« Respuesta #3 en: Martes 22 de Marzo de 2005, 17:42 »
0
mmm Gracias Blag, pero no lo debieron haber hecho en ingles que es un lenguaje universal?, o es que no pensaron que se les iba a crecer el negocio?  :P
Gracias por la explicacion
El pasado son solo recuerdos, el futuro son solo sueños

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Select's En Abap
« Respuesta #4 en: Martes 22 de Marzo de 2005, 17:47 »
0
Citar
mmm Gracias Blag, pero no lo debieron haber hecho en ingles que es un lenguaje universal?, o es que no pensaron que se les iba a crecer el negocio?  :P

Jajaja  :lol:  Lo mismo digo.....Y eso que no has visto los programas standard.......En muchos de ellos, los comentarios están en alemán  :(

Te imaginas lo que es tratar de entender un programa que tiene documentación en alemán???  :blink:   Pues es bastante feo....Sobre todo porque no se nada de alemán  :lol:

Aunque por supuesto.....cabe aclarar que el entorno, se puede configurar para que los menús y los textos de IDE aparezcan en Español, Alemán, Inglés,Portugues, etc....Así que por ese lado, no hay tanto problema  :scream:

Saludos,

Blag  :smartass:

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Select's En Abap
« Respuesta #5 en: Miércoles 23 de Marzo de 2005, 15:27 »
0
Tengo una duda, segun lo que entendi es que primero creas la tabla interna, pero esta tabla interna esta sin datos :think: entonces cuando hago el select que me muestra.
Citar
Ahora bien....a una tabla interna no podemos hacerle un select...así que tenemos que recurrir a un READ TABLE
Si para leer una tabla interna se usa el READ TABLE.

Tonces para que es el Select ¿Que hace?

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Select's En Abap
« Respuesta #6 en: Miércoles 23 de Marzo de 2005, 15:50 »
0
Citar
Tengo una duda, segun lo que entendi es que primero creas la tabla interna, pero esta tabla interna esta sin datos :think: entonces cuando hago el select que me muestra.

Claro....cuando creas una tabla interna, defines solamente la estructura....Entoces, está sin datos.  :ph34r:  Cuando haces el select, llenas esta estructura con datos  :hola:

Código: Text
  1.  
  2. SELECT *  &#34;Seleccionamos todos los datos
  3. *Los almacenamos en los campos correspondientes de nuestra tabla interna
  4. INTO CORRESPONDING-FIELDS OF T_TAB
  5. *de la tabla BKPF
  6. FROM BKPF
  7. *donde el ejercicio es &#34;2005&#34;
  8. WHERE GJAHR EQ '2005'.
  9.  
  10.  

Citar
Si para leer una tabla interna se usa el READ TABLE.
Tonces para que es el Select ¿Que hace?

Lo que pasa es que con el select, seleccionas los datos de una tabla standard que se van a almacenar en la tabla interna. Pero si quieres o necesitas leer los datos que están almacenados en esa tabla interna, debes de utilizar un read table.

Las tablas internas se utilizan para no recargar de trabajo a la base de datos.

Al comenzar el programa, haces todos los selects necesarios y llenas tu tablas internas....Luego cuando están llenas, puedes hacer lo que quieras con ellas, sin necesitar volver a acceder a la base de datos o hacer nuevamente un select.

Saludos,

Blag :smartass:

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Select's En Abap
« Respuesta #7 en: Miércoles 23 de Marzo de 2005, 15:57 »
0
Ahhhhhhhhh  :D  B) ya lo entendi, osea el Select lo haces a la tabla estandar y con el INTO recien lo ingresas a la tabla INTERNA.

Gracias por aclararme las dudas. Realmente ya me quedo muy claro todo.

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Select's En Abap
« Respuesta #8 en: Miércoles 23 de Marzo de 2005, 16:11 »
0
Citar
Ahhhhhhhhh  :D   B)  ya lo entendi, osea el Select lo haces a la tabla estandar y con el INTO recien lo ingresas a la tabla INTERNA.

Exactamente  :lol:

Citar
Gracias por aclararme las dudas. Realmente ya me quedo muy claro todo.

Cuando quieras  B)  Es un placer ayudar a la comunidad.  :comp:

Saludos,

Blag  :smartass: