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
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’.
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.
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).
Muchas gracias a todos por su tiempo, si efectvamente hice lo que me indico @absa y salio aunq use varios read table, sorry por mis preguntas basicas, recien comienzo viendo abap.