Problemas con sentencia AT FIRST

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • uo4396
    Member
    • ago
    • 90

    #1

    Problemas con sentencia AT FIRST

    Hola a todos

    A ver si alguien me puede ayudar. Tengo la siguientes lineas de código.

    loop at tabla_interna into work_area.

    at first.

    enddat.


    endloop.


    Dentro del AT FIRST necesito acceder a los valores de la workarea pero no se que pasa que en cuanto entra en el at first esos valores desaparecen, poniéndome a 0 todos los enteros y decimales y a ***** todos las cadenas de carácteres. Justo antes de entrar en el at first la work area tiene los valores adecuados y justo después de salir los vuelve a recuperar.

    Si alguien me pudiera ayudar estaría muy agradecido.

    Saludos a todos y gracias de antemano
  • melerogalan
    Senior Member
    • nov
    • 142

    #2
    Eso es porque dentro de los "at", los campos que quedan a la derecha de aquel que utilizas(Ejem: estructura Campo 1, Campo 2, Campo 3 , Campo 4.... si en el at utilizo el "campo 2", podre utilizar dentro el campo 1 y el 2, pero el 3 y el 4 saldrán asteriscados o con valores no válidos), no se pueden utilizar por motivos de seguridad "tonterias de sap" , incluso utilizando las Work Areas ocurre, "Otra más que se apunta". Una forma para evitar eso es asignar a una estructura los valores y operar con esa estructura. Ejem.

    <estructura local> tiene la misma estructura que <work_area>.

    Código:
    Loop at <tabla_interna> into <work_area>.
    
    MOVE <work_area> to <estructura_local>.
    
    at (lo que sea).
    
    Operar con <estructura local>
    
    endat.
    
    endloop.
    Editado por última vez por melerogalan; 05/08/2008, 08:08:14.
    Cada vez que un programador hace una hora extra, Dios mata a un gatito...tenlo en cuenta

    Comentario

    • uo4396
      Member
      • ago
      • 90

      #3
      Muchas gracias por la ayuda!!!!

      Comentario

      • Rodolfo Montiel Rivera
        Member
        • oct
        • 92

        #4
        Tambien podria ser asi

        Mira con el at como dices te pone ****

        puedes recuperarlo con un sy-index. ejemplo

        DATA: r_index LIKE sy-index. <--guarda la linea para poderla leer osea la ***

        entonces tenemos

        LOOP AT itab_xxx.

        r_index = sy-index.

        AT FIRST.

        READ TABLE itab_xxx INDEX r_index. <--vuala te regreso la cabecera que te dejo en ***

        * POsterios ya haces tus calculos.

        ENDAT.

        ENDLOOP.

        Suerte!!.
        01010000
        01001010
        10011000
        10100001

        De Byte a Beat.

        Comentario

        • DavidXD_XD
          Moderator
          • ago
          • 1255

          #5
          Puedes probar tambien con la sentencia
          Código:
          LOOP AT tab.
            ON CHANGE OF tab-<campo>.
              ...
            ENDON. 
          ENDLOOP.
          Esta sentencia no interesa que campos se encuentren a la derecha y ademas no se asteriscan, espero te sirva
          David Carballido Córdova

          Comentario

          • Merchipop
            Junior Member
            • nov
            • 2

            #6
            He estado probando el ejemplo que pusiste y creo que existen algunas correcciones que hay que hacerle para que funcione del todo.

            DATA: r_index ( o lo que quieras) LIKE sy-tabix. <--sy-tabix guarda la linea por la que pasa en la tabla, no index!!
            **
            Entonces tenemos
            LOOP AT itab_xxx.
            r_index = sy-tabix. <--Importante igualar a sy-tabix (que es la posicion de la linea por la que pasa en el loop)
            AT FIRST.
            READ TABLE itab_xxx INDEX r_index INTO workarea. <--Lo lees en el workarea asociado a la tabla
            * Posterios ya haces tus calculos.
            ENDAT.
            ENDLOOP.

            Ahora si que funciona, lo importante es que guardes el numero de linea (sy-tabix) y con eso entres en la tabla por la linea correspondiente. Luego lo lees en el workarea (por eso el INTO)
            espero que os salga!!
            Editado por última vez por Merchipop; 09/01/2012, 15:24:49.

            Comentario

            Trabajando...