Consulta READ TABLE assigning INDEX

Estimados

Una consulta, recién estoy aprendiendo a programar tablas internas, tengo una consulta:

  • Si tengo la tabla BKPF (Cabecera de documento para Contabilidad) en una tabla interna, con campos.

    BUKRS, BELNR, GJAHR, BLART, BLDAT, MONAT, XBLNR.

• Mostrar la 1 ,5,7 posición empleando READ TABLE t_auxilar assigning <f_aux> INDEX Posicion. (esto no se donde usarlo)

no se donde utilizar READ TABLE

REPORT  Z_EJERCICIO_2_2.
TYPES: BEGIN OF  ST_BKPF,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
BLART LIKE BKPF-BLART,
BLDAT LIKE BKPF-BLDAT,
MONAT LIKE BKPF-MONAT,
XBLNR LIKE BKPF-XBLNR,
END OF ST_BKPF.

DATA: TI_BKPF TYPE STANDARD TABLE OF ST_BKPF.
FIELD-SYMBOLS: <fs_bkpf> LIKE LINE OF TI_BKPF.
START-OF-SELECTION. "AVERIGUAR

SELECT BUKRS BELNR GJAHR BLART BLDAT MONAT XBLNR
 INTO TABLE TI_BKPF 
UP TO 10 ROWS
 FROM  BKPF.


LOOP AT TI_BKPF ASSIGNING <fs_bkpf>.
  WRITE: / <fs_bkpf>-BUKRS,  
           <fs_bkpf>-BELNR, 
           <fs_bkpf>-GJAHR, 
           <fs_bkpf>-BLART, 
           <fs_bkpf>-BLDAT, 
           <fs_bkpf>-MONAT, 
           <fs_bkpf>-XBLNR.
ENDLOOP.

Hola entiendo que quieres mostrar en pantalla determinadas lineas de tu consulta a la BKPF, yo lo que haría es una subrutina donde reciba como parámetro el indice que quieres imprimir. así solo procesas la linea que deseas sin leer cada uno de los registros.

FORM dame_line USING p_index.
READ TABLE it_aux ASSIGNING <fs_fields> INDEX p_index.

IF sy-subrc EQ 0.
    WRITE: / <fs_bkpf>-BUKRS,
                   <fs_bkpf>-BELNR,
                  <fs_bkpf>-GJAHR,
                  <fs_bkpf>-BLART,
                  <fs_bkpf>-BLDAT,
                  <fs_bkpf>-MONAT,
                   <fs_bkpf>-XBLNR.
  ENDIF.
ENDFORM

Espero te sirva y ayude !!!

:slight_smile:

2 Me gusta

gracias, pero, si fuese solo a esos números? 1 5 7, como se haría? indico en INDEX la posicion 1 , 5 o 7? (Sorry por mis preguntas u.u recien estoy viendo esto)

Si, cuando llamas al perform que indica el compañero, ahi le indicas el numero de posicion que quieres leer, algo asi como PERFORM dame_line USING ‘5’.

Saludos.

1 me gusta

Buen día,
Por lo que veo en el código no necesitarías el READ TABLE,
ya que el LOOP esta leyendo la tabla interna.

Puedes resolverlo de diferentes formas dependiendo el caso.

Si con el tiempo puede no ser las posiciones 1, 5, y 7, sino cambiar alguna. Lo mejor es tener en una tabla diccionario configurable, que posiciones desea tomar.
Y luego hay varias opciones.

  • Dentro del Loop usar un contador y mostrar por pantalla solo cuando sea 1, 5 o 7.
  • Eliminar las posiciones que no necesitas antes del LOOP, y dejar en la tabla interna solo las 3 que queres mostrar.

Lo mejor es no utilizar 3 read table en lugar del loop. Si necesitas mas de una línea, es mejor utilizar el LOOP.

1 me gusta

Buenos días @Jaki_Sar

Como comentaba @absa, lo ideal para tu caso es utilizar la instrucción READ TABLE para obtener registros de una tabla basados en un índice en específico, ya que el acceso es inmediato (no se recorren internamente los registros de la tabla).

1 me gusta

Muchas gracias a todos por su tiempo, si efectvamente hice lo que me indico @absa y salio :slight_smile: aunq use varios read table, :slight_smile: sorry por mis preguntas basicas, recien comienzo viendo abap.

2 Me gusta

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.