|
#1
|
|||
|
|||
Bienvenido al mágico mundo del ABAP
No estas loopeando a una work area, lo que en realidad esta pasando es que estas usando una instrucción obsoleta que ha tenido que quedar como un vestigio para seguir manteniendo compatibilidad y confundir a los programadores. A diferencia del "loop at itab" que hace un loop a una tabla interna, lo que tu estas haciendo es un "loop at dbtab" osea, un loop a una tabla de base de datos Esa instrucción se usaba asi, primeramente, la work area que declaraste en tables se le introducían los campos que requirieras de la llave primaria. Por ejemplo, en la BKPF, podias solo llenar la sociedad. El loop at dbtab entonces se iria por todos los registros que tuvieran esa llave, por ejemplo, en el caso anterior, todos los documentos financieros de una sociedad Otra razon para dejar de usar la instruccion TABLES y solamente programar en ABAP Objects. Dime que pasa si escribo esto en ABAP procedural? Ahora dime que pasa si escribo esto con clases? |
#2
|
|||
|
|||
Respuesta a la pregunta planteadas
Resultados:
TABLES: bseg. LOOP AT bseg. WRITE: / bseg-belnr. ENDLOOP. no entra en el loop, lo saltea. De esta manera: TABLES: bseg. bseg-mandt = '800'. bseg-bukrs = '0001'. bseg-belnr = '0100000000'. bseg-gjahr = 1995. bseg-buzei = 001. LOOP AT bseg. WRITE: / bseg-belnr. ENDLOOP. Asignandole valores a los campos claves, o a la llave primaria tampoco entra en el loop. Y por ultimo siguiendo el paradigma OO: CLASS pruebita DEFINITION. PUBLIC SECTION. METHODS: prueba. ENDCLASS. "pruebita DEFINITION *---------------------------------------------------------------------* * CLASS pruebita IMPLEMENTATION *---------------------------------------------------------------------* * *---------------------------------------------------------------------* CLASS pruebita IMPLEMENTATION. METHOD prueba. LOOP AT bseg. WRITE: / bseg-belnr. ENDLOOP. ENDMETHOD. "prueba ENDCLASS. "pruebita IMPLEMENTATION Al activar (análisis léxico, sintáctico y semántico) me da el siguiente mensaje de error. Programa Y_REPORTEPROBARLOOPWA "LOOP AT dbtab" is not supported in the OO context. Use "SELECT ... FROM dbtab INTO wa". La conclusión final es que como vos bien dijiste es una instrucción obsoleta. La cual no se ha sacado del lenguaje porque sino habría que modificar el interprete (gramática del lenguaje), pero no se ha insertado en el lenguaje modificado que permite la extensión OO del lenguaje ABAP ). Espero por tu conclusión y muchas gracias por ayudarme. saludos. Úlima edición por jorgeABAP29 fecha: 12/10/10 a las 14:21:16. |
#3
|
|||
|
|||
En la ayuda de SAP viene explicado que solo pueden ser tablas que inicien con "T" y con un maximo de cinco caracteres como la T001, si la tabla que indicas no inicia con T, la primera letra es reemplazada por T. Si la tabla no se encuentra, el loop lanza un sy-subrc = 12.
Prueba con una tabla como la T100 y veras que si entra el loop |
#4
|
|||
|
|||
listoo
Muchas gracias, lo probé y anda como me indicaste, loopea con la tabla t001.
Con la bseg no anda (exceptions 12), ya que debe reemplazar la b por t y no encuentra la tabla. Gracias. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|