Sei sulla pagina 1di 5

ABAP: FCIL PARA MI

(HTTP://ABAP.FACILPARAMI.COM/)
AHORAABAPESFCIL

Navegacin....

Ejemplos de sentencias para trabajar con tablas internas

AhoraveremospormediodeejemploscomotrabajarconlastablasinternasenABAP,
enestaleccinaprenderemosacargarvaloresdesdeunabasededatos,cargardatos
manualmente,eliminarvaloresduplicados,ordenardatosycopiarvaloresentretablas.
Cargar datos en una tabla interna
Podemoscargardatosyasearegistroporregistroopodemoshacerunacargadesde
labasededatosusandosentenciasOPENSQL,veamosalgunosejemplos:Eneste
ejemplosecargandatosenunatablainternamedianteunasentenciaSELECT,
usandoINTOTABLE,enestecasoelordenycantidaddecamposdelasentencia
SELECTdebendecoincidirconelordenycamposdelatablainterna,enestecasola
cargadedatosserealizacomodemuestraenestaimagen:
(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.

Siporalgunaraznnuestratablainternanopuedecoincidirconloscamposenla
sentenciaSELECT,porejemplosienlatablainternahemosdeclaradoalgunas
columnasqueservirnpararealizarotrosclculos,podemosutilizarla
sentenciaINTOCORRESPONDINGFIELDSOFTABLE,estasentenciacargalos
camposledosenlasentenciaSELECTenloscamposdelatablainternaquecoincidan
conelmismonombre,sinimportarelordendeloscampos,comoseveenesta
imagen:
(http://i0.wp.com/abap.facilparami.com/files/2014/01/intocorrespondingfields.png)
1
2
3
4

"Cargar tabla bkpf en una tabla interna


SELECT gjahr bukrs
INTO CORRESPONDING FIELDS OF TABLE it_bkpf
FROM bkpf.

Siyatenemosdatosenunatablainternaperoqueremosagregarotroconjuntode
datosdeformasimilaracomotrabajalasentenciaUNIONdeSQL,podemosutilizar
lassentenciasAPPENDINGTABLE
oAPPENDINGCORRESPONDINGFIELDSOFTABLE,dependiendodesilos
camposdelasentenciaSELECTylatablainternacoincidan.
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.

"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.

AdemsdecargardatosdesdeunasentenciaSQLtambinpodemoscargardatos
manualmente,utilizandolatablainternaqueyadefinimospodemosusarestas
sentenciasparacargardatos.
1 "Agregaunalineacondatos
2 it_bkpf-bukrs='1000'.
3 it_bkpf-belnr='000001'.
4 it_bkpf-gjahr='2013'.
5 APPENDit_bkpf.
6
7 "Agregaunalineaenblanco
8 APPENDINITIALLINETOit_bkpf.

Siqueremosagregarfilasdedatosatablasinternassinheaderline,debemosprimero
declararuntipodedatosconlascolumnasquedeseemos,luegodeclararunatabla
internadeesemismotipoyunavariablequenossirvacomoworkarea,paraluego
insertarlosdatos,aqutenemosunejemplocompleto:
1
2
3

"Declarar un tipo de datos complejo


TYPES: BEGIN OF t_bkpf,
bukrs TYPE bukrs,

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

belnr TYPE belnr_d,


gjahr TYPE gjahr,
END OF t_bkpf.

"Declarar una tabla interna sin header line


data it_t_bkpf TYPE TABLE OF t_bkpf.
"Declarar un work area
data wa_t_bkpf TYPE t_bkpf.

"Agregar una linea con datos


wa_t_bkpf-bukrs = '1000'.
wa_t_bkpf-belnr = '000001'.
wa_t_bkpf-gjahr = '2013'.
APPEND wa_t_bkpf to it_t_bkpf.

APPEND INITIAL LINE TO it_t_bkpf.

Operaciones con datos de una tabla interna


Ahoraquetenemosdatosennuestratablainternapodemosrealizarunaseriede
operaciones,veremosahoraalgunosejemplosSiqueremosordenarlosdatos
podemoshacerlomediantelasentenciaSORT,estaordenalatablaporunoomas
camposseparadosporunespacioenblanco,elordenpredeterminadoesascendente.
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.

"Orden la tabla por el campo1 en forma ascedente


"y por el campo2 en forma descendente
SORT it_tabla BY campo1 campo2 DESCENDING.

Paraeliminarvaloresduplicadosutilizamosla
sentenciaDELETEADJACENTDUPLICATES,podemoseliminarlosregistros
duplicadoscomparandotodosloscampososolocomparandopormediodeunoomas
camposseparadosporunespacioenblanco.
1
2
3
4
5
6
7
8
9
10

"Primero ordenamos
SORT it_tabla BY campo1 campo2.

"Podemos borrar los registros que esten duplicados


"comparando todos los campos
DELETE ADJACENT DUPLICATES FROM it_tabla COMPARING ALL FIELDS.

"... o podemos borrar comparando solo uno o mas


"campos separados por un espacio en blanco
DELETE ADJACENT DUPLICATES FROM it_tabla COMPARING campo1 campo2.

Enalgunasocasionesnecesitamosrealizaroperacionessobrelosdatos,parahacer
estopodemosrecorrerlosregistrosconlasentenciaLOOP,estpermiteutilizar
laclausulaWHEREpararecorrersoloregistrosquecumplanconalgunacondicin
1
2
3
4
5
6

"Recorre toda la tabla


LOOP AT it_tabla.
"Codigo
ENDLOOP.

"Recorre la tabla para los registros que cumplan con la condicin

7
8
9
10
11
12
13
14
15

LOOP AT it_tabla WHERE campo1 = 'valor' AND campo2 = 'valor'.


"Codigo
ENDLOOP.

"Utilizando una variable como work area


LOOP AT it_tabla into wa_tabla.
"Para acceder a los datos usamos el work area
"wa_tabla-campo1
ENDLOOP.

Siloquedeseamoselleerelvalordeunafilaenespecialpodemosutilizarla
sentenciaREAD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

"Para leer algn registro que cumpla una condicin


READ TABLE it_tabla WITH KEY campo1 = 'valor'.
"Verificamos si se encontr algn registro
IF sy-subrc = 0.
"Ahora podemos acceder al registros como it_tabla-campo1
ENDIF.

"Si la tabla no tiene Header line, usamos un work area


READ TABLE it_tabla WITH KEY campo1 = 'valor' into wa_tabla1.
"Verificamos si se encontr algn registro
IF sy-subrc = 0.
"Ahora podemos acceder al registros como wa_tabla1-campo1
ENDIF.

"Para leer algn registro por numero de fila


READ TABLE it_tabla index 1.
"Verificamos si se encontr algn registro
IF sy-subrc = 0.
"Ahora podemos acceder al registros como it_tabla-campo1
ENDIF.

Sideseamoseliminarunoomsregistrosdenuestratablainterna,podemos
utilizarlasentenciaDELETE,deformasimilaracomosehaceconOPENSQL
1 DELETE it_tabla WHERE campo1 = 'valor'.

Parareinicializarlastablasinternas,podemosutilizarlasentenciaCLEARpara
limpiarelheaderlineyREFRESHparalimpiarlosdatos
1
2
3
4
5
6

"Limpia el header line de la tabla, pero


"no borra las filas de la tabla
CLEAR it_tabla.

"Borra las filas de la tabla, pero no limpia el header line


REFRESH it_tabla.

Paracopiardatosdeunatablainternaaotra,podemosutilizaralgunodeestos
mtodos,recordandoquetodolooppuedeutilizartambinlaclausulaWHERE:
1
2
3
4
5
6
7
8
9
10

"Copia en la tabla1, el contenido de la tabla2


"Ambas deben de tener la misma estructura
it_tabla1[] = it_tabla2[].

"Si las tablas no tienen la misma estructura


"podemos utilizar este codigo
LOOP AT 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

11
12
13
14
15
16
17
18
19
20

MOVE-CORRESPONDING it_tabla2 to it_tabla1.


"Se agrega el registro
APPEND it_tabla1.
ENDLOOP.

"Si no tenemos header line en ambas tablas


LOOP AT it_tabla2 into wa_tabla2.
MOVE-CORRESPONDING wa_tabla2 to wa_tabla1.
APPEND wa_tabla1 to it_tabla1.
ENDLOOP.

Comprtelo con tus amigos:

Correoelectrnico(http://abap.facilparami.com/2014/01/ejemplosdesentenciasparatrabajarcontablasinternas/?
share=email&nb=1)

Compartir

Compartir

CreacinDeProgramasYFunciones

(Http://Abap.Facilparami.Com/Category/CursoAbap/CreacionDeProgramasY
Funciones/)
NoHayComentarios(Http://Abap.Facilparami.Com/2014/01/EjemplosDe
SentenciasParaTrabajarConTablasInternas/#Respond)
64
0
Curso(Http://Abap.Facilparami.Com/Tag/Curso/),Programas
(Http://Abap.Facilparami.Com/Tag/Programas/)

Entradas relacionadas

(http://abap.facilparami.com/2014/02/como
(http://abap.facilparami.com/2014/02/manejo
(http://abap.facilparami.com/2014/02/manejo
(http://abap.facilparami.com/2
crearundynprobasico
deeventosendynpros
deeventosendynpros
deeventosendynpros
enabap/)
partei/)
parteii/)
parteiii/)

Comocrearundynpro
Manejodeeventosen
Manejodeeventosen
Manejodeeventosen
bsicoenABAP.
dynpros,ParteI
dynpros,ParteII
dynprosparteIII
(http://abap.facilparami.com/2014/02/como
(http://abap.facilparami.com/2014/02/manejo
(http://abap.facilparami.com/2014/02/manejo
(http://abap.facilparami.com/2
crearundynprobasico
deeventosendynpros
deeventosendynpros
deeventosendynpros
enabap/)
partei/)
parteii/)
parteiii/)

Potrebbero piacerti anche