Anuncio

Colapsar
No hay anuncio todavía.

Sentencia LOOP AT estructura_x[] INTO estructura_x.

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Sentencia LOOP AT estructura_x[] INTO estructura_x.

    Buenas noches a todos, estoy documentando el siguiente código:

    Código:
     LOOP AT it_zmm_t0015[] INTO it_zmm_t0015.
        SELECT * FROM vdarl
          INTO CORRESPONDING FIELDS OF TABLE it_vdarl
          WHERE bukrs IN s_bukrs
          AND   sarchiv EQ space
          AND   ranl  EQ it_zmm_t0015-opera
          AND   dbear IN s_dbear
          AND   sstati IN s_sstati.
    
        DESCRIBE TABLE it_vdarl LINES lines.
    
        IF lines > 0.
          READ TABLE it_vdarl INDEX 1.
          it_zmm_t0015-gsart = it_vdarl-gsart.
          APPEND it_zmm_t0015 TO it_zmm_t0015_final[].
        ENDIF.
    
    
      ENDLOOP.
    Soy muy nuevo en ABAP, y la pregunta concreta es la siguiente: qeu significa está línea??: LOOP AT it_zmm_t0015[] INTO it_zmm_t0015. Qeu significa la estructura: it_zmm_t0015[] con corchetes??

    Gracias por sus respuestas.

    Michel Zúñiga.

  • #2
    Hola!

    Bienvenido al mundo del ABAP, un lenguaje de programación potente.

    La sentencia:
    <code>LOOP AT <Tabla interna> [ INTO</code><code> < Estructura > ] ... END LOOP</code>

    lo que hace es recorrer una tabla interna y ejecutar lo que hay entre el LOOP AT y el END LOOP por cara registro que haya en ella. Cuando procesa un registro, lo coloca en la estructura indicada luego de INTO.

    Así que si quieres ejecutar una o varias operaciones por cada registro que tengas en una tabla interna, usa el LOOP AT.
    Tienes que poner una tabla interna luego del LOOP AT y luego de INTO una estructura que debe ser igual a la de la tabla interna, ya que se copia a esta estructura el contenido de la tabla por cada ciclo.

    Cuando declaras una tabla interna y le agregas la opción WITH HEADER LINE, con el mismo nombre de la tabla accedes a la tabla misma y a su workarea.
    Por ejemplo:
    DATA it_tab TYPE STANDARD TABLE OF t001w WITH HEADER LINE.

    Con la sentencia anterior estás declarando una tabla interna llamada IT_TAB que tiene la estructura de la tabla T001W (que está definida en el diccionario) y que tiene un workarea implícito.

    Puedes usar IT_TAB tanto como tabla como estructura. Cómo diferencias uno de otro?
    Bueno, si pones los corchetes IT_TAB[] haces referencia a la tabla y sin los corchetes IT_TAB haces referencia a la estructura o workarea.
    Hay en algunas sentencias que no es necesaria poner los corchetes como precisamente el LOOP AT, él ya sabe que se trata de una tabla así que no es necesario ponerle los corchetes, pero no pasa nada si se lo pones.
    También, cuando es declarada con WITH HEADER LINE, no es necesario el INTO en el LOOP AT ya que reconoce que tiene workarea implícito y no lo necesita, pero tampoco pasa nada si se lo pones.

    No dudes en consultar la ayuda en línea presionando F1 sobre la sentencia y ahí te detallará lo que hace junto con todas sus variantes y en muchos casos te pone ejemplos de código.

    Para esos momentos complicados y/o dudas en que la ayuda estándar no ayude , hay camaradas que estamos dispuestos a ayudarte por estos medios en lo que podamos con muchos gusto!

    Saludos!

    Comentario


    • #3
      Muchas grcias!

      Buenos días.

      Excelente respuesta, clara y explicíta.

      Muchas gracías.

      Saludos cordiales.

      Michel Zúñiga.

      Originalmente publicado por julgarso Ver Mensaje
      Hola!

      Bienvenido al mundo del ABAP, un lenguaje de programación potente.

      La sentencia:
      <code>LOOP AT <Tabla interna> [ INTO</code><code> < Estructura > ] ... END LOOP</code>

      lo que hace es recorrer una tabla interna y ejecutar lo que hay entre el LOOP AT y el END LOOP por cara registro que haya en ella. Cuando procesa un registro, lo coloca en la estructura indicada luego de INTO.

      Así que si quieres ejecutar una o varias operaciones por cada registro que tengas en una tabla interna, usa el LOOP AT.
      Tienes que poner una tabla interna luego del LOOP AT y luego de INTO una estructura que debe ser igual a la de la tabla interna, ya que se copia a esta estructura el contenido de la tabla por cada ciclo.

      Cuando declaras una tabla interna y le agregas la opción WITH HEADER LINE, con el mismo nombre de la tabla accedes a la tabla misma y a su workarea.
      Por ejemplo:
      DATA it_tab TYPE STANDARD TABLE OF t001w WITH HEADER LINE.

      Con la sentencia anterior estás declarando una tabla interna llamada IT_TAB que tiene la estructura de la tabla T001W (que está definida en el diccionario) y que tiene un workarea implícito.

      Puedes usar IT_TAB tanto como tabla como estructura. Cómo diferencias uno de otro?
      Bueno, si pones los corchetes IT_TAB[] haces referencia a la tabla y sin los corchetes IT_TAB haces referencia a la estructura o workarea.
      Hay en algunas sentencias que no es necesaria poner los corchetes como precisamente el LOOP AT, él ya sabe que se trata de una tabla así que no es necesario ponerle los corchetes, pero no pasa nada si se lo pones.
      También, cuando es declarada con WITH HEADER LINE, no es necesario el INTO en el LOOP AT ya que reconoce que tiene workarea implícito y no lo necesita, pero tampoco pasa nada si se lo pones.

      No dudes en consultar la ayuda en línea presionando F1 sobre la sentencia y ahí te detallará lo que hace junto con todas sus variantes y en muchos casos te pone ejemplos de código.

      Para esos momentos complicados y/o dudas en que la ayuda estándar no ayude , hay camaradas que estamos dispuestos a ayudarte por estos medios en lo que podamos con muchos gusto!

      Saludos!

      Comentario

      Trabajando...
      X