ABAP: FÁCIL PARA MI(HTTP://ABAP.FACILPARAMI.COM/) AHORA ABAP ES FÁCIL Navegación.... Ejemplos de sentencias para trabajar con tablas internas Ahora veremos por medio de ejemplos como trabajar con las tablas internas en ABAP, en esta lección aprenderemos a cargar valores desde una base de datos, cargar datos manualmente, eliminar valores duplicados, ordenar datos y copiar valores entre tablas. Cargar datos en una tabla interna Podemos cargar datos ya sea registro por registro o podemos hacer una carga desde la base de datos usando sentencias OPEN SQL, veamos algunos ejemplos: En este ejemplo se cargan datos en una tabla interna mediante una sentencia SELECT, usando INTO TABLE, en este caso el orden y cantidad de campos de la sentencia SELECT deben de coincidir con el orden y campos de la tabla interna, en este caso la carga de datos se realiza como de muestra en esta imagen: (http://i0.wp.com/abap.facilparami.com/files/2014/01/intotable.png) 1 2 3 4 5 6 7 8 9 10 11 "Declarar una tabla interna con Header line DATA: BEGIN OF it_bkpf OCCURS 0, bukrs TYPE bukrs, belnr TYPE belnr_d, gjahr TYPE gjahr, END OF it_bkpf. "Cargar tabla bkpf en una tabla interna SELECT bukrs belnr gjahr INTO TABLE it_bkpf FROM bkpf. 6 7 "Agrega una linea en blanco 8 APPEND INITIAL LINE TO it_bkpf.Si por alguna razón nuestra tabla interna no puede coincidir con los campos en la sentencia SELECT. Además de cargar datos desde una sentencia SQL también podemos cargar datos manualmente. por ejemplo si en la tabla interna hemos declarado algunas columnas que servirán para realizar otros cálculos.wp.png) 1 2 3 4 "Cargar tabla bkpf en una tabla interna SELECT gjahr bukrs INTO CORRESPONDING FIELDS OF TABLE it_bkpf FROM bkpf. 5 APPEND it_bkpf. Si ya tenemos datos en una tabla interna pero queremos agregar otro conjunto de datos de forma similar a como trabaja la sentencia UNION de SQL.com/abap. sin importar el orden de los campos. utilizando la tabla interna que ya definimos podemos usar estas sentencias para cargar datos.facilparami. 4 it_bkpf-gjahr = '2013'. para luego insertar los datos.com/files/2014/01/intocorrespondingfields. 1 2 3 4 5 6 7 8 9 10 11 "Si la tabla interna solo tiene estos 3 campos "y fueron declarados en este mismo orden SELECT bukrs belnr gjahr APPENDING TABLE it_bkpf FROM bkpf. podemos utilizar la sentencia INTO CORRESPONDING FIELDS OF TABLE. . dependiendo de si los campos de la sentencia SELECT y la tabla interna coincidan. Si queremos agregar filas de datos a tablas internas sin header line. esta sentencia carga los campos leídos en la sentencia SELECT en los campos de la tabla interna que coincidan con el mismo nombre. 3 it_bkpf-belnr = '000001'. 1 "Agrega una linea con datos 2 it_bkpf-bukrs = '1000'. aquí tenemos un ejemplo completo: 1 2 3 "Declarar un tipo de datos complejo TYPES: BEGIN OF t_bkpf. debemos primero declarar un tipo de datos con las columnas que deseemos. podemos utilizar las sentencias APPENDING TABLE o APPENDING CORRESPONDING FIELDS OF TABLE. "Si la tabla interna tiene otros campos adicionales "o estan en otro orden SELECT gjahr bukrs APPENDING CORRESPONDING FIELDS OF TABLE it_bkpf FROM bkpf. como se ve en esta imagen: (http://i0. bukrs TYPE bukrs. luego declarar una tabla interna de ese mismo tipo y una variable que nos sirva como work area. wa_t_bkpf-gjahr = '2013'. "Declarar un work area data wa_t_bkpf TYPE t_bkpf. END OF t_bkpf. Operaciones con datos de una tabla interna Ahora que tenemos datos en nuestra tabla interna podemos realizar una serie de operaciones. "Podemos borrar los registros que esten duplicados "comparando todos los campos DELETE ADJACENT DUPLICATES FROM it_tabla COMPARING ALL FIELDS. "Codigo ENDLOOP. gjahr TYPE gjahr. el orden predeterminado es ascendente. "Agregar una linea con datos wa_t_bkpf-bukrs = '1000'. esta ordena la tabla por uno o mas campos separados por un espacio en blanco.. "Recorre la tabla para los registros que cumplan con la condición . "Declarar una tabla interna sin header line data it_t_bkpf TYPE TABLE OF t_bkpf. APPEND wa_t_bkpf to it_t_bkpf.. está permite utilizar la clausula WHERE para recorrer solo registros que cumplan con alguna condición 1 2 3 4 5 6 "Recorre toda la tabla LOOP AT it_tabla. 1 2 3 4 5 6 7 8 9 10 "Primero ordenamos SORT it_tabla BY campo1 campo2. "Orden la tabla por el campo1 en forma ascedente "y por el campo2 en forma descendente SORT it_tabla BY campo1 campo2 DESCENDING. para hacer esto podemos recorrer los registros con la sentencia LOOP. ".4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 belnr TYPE belnr_d. Para eliminar valores duplicados utilizamos la sentencia DELETE ADJACENT DUPLICATES. 1 2 3 4 5 6 7 "Ordena la tabla por el campo1 y luego por "el campo2 en forma ascedente (predeterminado) SORT it_tabla BY campo1 campo2. podemos eliminar los registros duplicados comparando todos los campos o solo comparando por medio de uno o mas campos separados por un espacio en blanco. En algunas ocasiones necesitamos realizar operaciones sobre los datos. wa_t_bkpf-belnr = '000001'. APPEND INITIAL LINE TO it_t_bkpf. veremos ahora algunos ejemplos Si queremos ordenar los datos podemos hacerlo mediante la sentencia SORT. o podemos borrar comparando solo uno o mas "campos separados por un espacio en blanco DELETE ADJACENT DUPLICATES FROM it_tabla COMPARING campo1 campo2. "Utilizando una variable como work area LOOP AT it_tabla into wa_tabla. "Borra las filas de la tabla. Si lo que deseamos el leer el valor de una fila en especial podemos utilizar la sentencia READ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "Para leer algún registro que cumpla una condición READ TABLE it_tabla WITH KEY campo1 = 'valor'. de forma similar a como se hace con OPEN SQL 1 DELETE it_tabla WHERE campo1 = 'valor'. podemos utilizar la sentencia CLEAR para limpiar el header line y REFRESH para limpiar los datos 1 2 3 4 5 6 "Limpia el header line de la tabla. "Verificamos si se encontró algún registro IF sy-subrc = 0. pero "no borra las filas de la tabla CLEAR it_tabla. "Si las tablas no tienen la misma estructura "podemos utilizar este codigo LOOP AT it_tabla2. "Ahora podemos acceder al registros como it_tabla-campo1 ENDIF. Para reinicializar las tablas internas. podemos utilizar alguno de estos métodos. "Ahora podemos acceder al registros como it_tabla-campo1 ENDIF. pero no limpia el header line REFRESH it_tabla. Para copiar datos de una tabla interna a otra. "Verificamos si se encontró algún registro IF sy-subrc = 0. "Ahora podemos acceder al registros como wa_tabla1-campo1 ENDIF. recordando que todo loop puede utilizar también la clausula WHERE: 1 2 3 4 5 6 7 8 9 10 "Copia en la tabla1. podemos utilizar la sentencia DELETE. "Si la tabla no tiene Header line. "Para leer algún registro por numero de fila READ TABLE it_tabla index 1. usamos un work area READ TABLE it_tabla WITH KEY campo1 = 'valor' into wa_tabla1. "Verificamos si se encontró algún registro IF sy-subrc = 0. "Codigo ENDLOOP. Si deseamos eliminar uno o más registros de nuestra tabla interna. "Para acceder a los datos usamos el work area "wa_tabla-campo1 ENDLOOP. el contenido de la tabla2 "Ambas deben de tener la misma estructura it_tabla1[] = it_tabla2[]. "En este caso ambas tablas se deben declarar con header line "y se hace una copia del header line de una tabla a la otra "para los campos que tengan el mismo nombre en ambas tablas .7 8 9 10 11 12 13 14 15 LOOP AT it_tabla WHERE campo1 = 'valor' AND campo2 = 'valor'. facilparami.Com/Tag/Programas/) Entradas relacionadas (http://abap.Com/Tag/Curso/).facilparami.com/2014/02/manejo (http://abap.Facilparami.com/2014/02/como (http://abap.com/2014/02/manejo (http://abap.facilparami. Parte I dynpros. "Si no tenemos header line en ambas tablas LOOP AT it_tabla2 into wa_tabla2. Compártelo con tus amigos: Correo electrónico (http://abap. ENDLOOP.Facilparami.com/2014/02/manejo (http://abap.com/2014/01/ejemplosdesentenciasparatrabajarcontablasinternas/? share=email&nb=1) Compartir 2 Compartir 0 Creación De Programas Y Funciones (Http://Abap.facilparami.Facilparami.Com/2014/01/EjemplosDe SentenciasParaTrabajarConTablasInternas/#Respond) 64 0 Curso (Http://Abap.Com/Category/CursoAbap/CreacionDeProgramasY Funciones/) No Hay Comentarios (Http://Abap.facilparami.com/2 crearundynprobasico deeventosendynpros deeventosendynpros deeventosendynpros enabap/) partei/) parteii/) parteiii/) .com/2014/02/manejo (http://abap. APPEND wa_tabla1 to it_tabla1.Facilparami. Parte II dynpros parte III (http://abap. MOVE-CORRESPONDING wa_tabla2 to wa_tabla1. "Se agrega el registro APPEND it_tabla1.facilparami.com/2014/02/como (http://abap.facilparami.11 12 13 14 15 16 17 18 19 20 MOVE-CORRESPONDING it_tabla2 to it_tabla1.facilparami.com/2 crearundynprobasico deeventosendynpros deeventosendynpros deeventosendynpros enabap/) partei/) parteii/) parteiii/) Como crear un dynpro Manejo de eventos en Manejo de eventos en Manejo de eventos en básico en ABAP. ENDLOOP. dynpros.facilparami. Programas (Http://Abap.
Report "Ejemplos de Sentencias Para Trabajar Con Tablas Internas - ABAP"