|
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: Capacitate en SAP con especialistas en el área :: No dejes tu carrera en manos impovisadas, ESAP es tu mejor elección.

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
1. DECLARACION TABLAS..
========================================================
1.1
::> DECLARACION DE TABLAS INTERNAS:
-------------------------------------------
> Incluir estructura desde tbl diccionario a tabla local.
---------------------------------------------------------
*-> METODO CLASICO:
*Puede copiar TODA la estructura del diccionario con el comando INCLUDE
*o bien seleccionar campo a campo
DATA: BEGIN OF "tabla_interna" OCCURS 0.
INCLUDE STRUCTURE "tabla_diccionario".
DATA: END OF "tabla_interna".
*-> Metodo Abreviado
*Util para redefinir tablas dentro de las funciones
*Copia automaticamente TODA la estructura de la tabla diccionario.
DATA: tg_bdc_tab TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE.
*-> METODO CON SOPORTE OBJETOS
* 1º Designar una estructura.
* 2º Asignar esa estructura a una tabla interna
*Ejemplo1:
*Crea una estructura con campos puntuales de otra/s tabla/s
TYPES: BEGIN OF tye_fich,
bukrs TYPE vtbfha-bukrs, "Sociedad
rfha TYPE vtbfha-rfha, "Operación
zzgrupo TYPE vtbfha-zzgrupo, "Grupo
zzproyecto TYPE vtbfha-zzproyecto, "Proyecto
zzefecto TYPE vtbfha-zzefecto, "Efecto
zzconcepto TYPE vtbfha-zzconcepto, "CONCEPTO
zztexto TYPE vtbfha-zztexto, "Descripción
zzflujo TYPE vtbfha-zzflujo, "Flujo (S/N)
zzriesgo TYPE vtbfha-zzriesgo, "Riesgo
END OF tye_fich,
tyt_fich TYPE STANDARD TABLE OF tye_fich WITH DEFAULT KEY.
DATA: tg_fich TYPE tyt_fich WITH HEADER LINE.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.2
::> Declarar una estructura y asignarla
a una tabla
-------------------------------------------------------
*Ejemplo1:
*Crea una estructura con campos puntuales de otra/s tabla/s
TYPES: BEGIN OF tye_fich,
bukrs TYPE vtbfha-bukrs, "Sociedad
rfha TYPE vtbfha-rfha, "Operación
zzgrupo TYPE vtbfha-zzgrupo, "Grupo
zzproyecto TYPE vtbfha-zzproyecto, "Proyecto
zzefecto TYPE vtbfha-zzefecto, "Efecto
zzconcepto TYPE vtbfha-zzconcepto, "CONCEPTO
zztexto TYPE vtbfha-zztexto, "Descripción
zzflujo TYPE vtbfha-zzflujo, "Flujo (S/N)
zzriesgo TYPE vtbfha-zzriesgo, "Riesgo
END OF tye_fich,
tyt_fich TYPE STANDARD TABLE OF tye_fich WITH DEFAULT KEY.
DATA: tg_fich TYPE tyt_fich WITH HEADER LINE.
*Ejemplo2:
*Crea una estructura con todos los campos de una tabla
DATA: wa_atsyc TYPE atsyc.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.3
::> Declarar una Tabla con estructura
de diccionario y con el agregado de variables adicionales
----------------------------------------------------------------------------------------------------
DATA: BEGIN OF t_tabla OCCURS 0.
INCLUDE STRUCTURE p9015.
DATA: dia_c(2),
mes_c(15),
anyo_c(4),
*$*$----- INICIO MODIF.- XIN2038 - 28/12/2006 - S-2006-05810-1-D --*$*$
nombre(40),
* Información de reparto.
strds LIKE pa0006-strds, "Sigla de vía publica
stras LIKE pa0006-stras, "Calle y numero
hsnmr LIKE pa0006-hsnmr, "Nº de edificio
posta LIKE pa0006-posta, "ID de la vivienda
pstlz LIKE pa0006-pstlz, "Código postal
ort01 LIKE pa0006-ort01, "Poblacion
*$*$----- FIN MODIF.- XIN2038 - 28/12/2006 - S-2006-05810-1-D --*$*$
END OF t_tabla.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.4
::> Declarar una tabla interna con
solamente parte de la tabla dicc
---------------------------------------------------------------------
*Una tabla local con un solo campo de la tabla diccionario
DATA: BEGIN OF tl_region OCCURS 0,
zr_region like ZPR_REGION_ZONA-ZR_REGION.
DATA: END OF tl_region.
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
2. CONSULTAS.
========================================================
2.0
::> Limpieza de cabecera y tabla
antes de cargar registros
-------------------------------------------------------------
CLEAR tabla_interna. " Limpia la cabecera de la tabla
REFRESH tabla_interna. "Borra el contenido de la tabla
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.1
::> OBTENER LOS REGISTROS DE UNA
TABLA DICC Y VOLCARLO A UNA TABLA INTERNA
----------------------------------------------------------------------------------------
!!IMPORTANTE: Siempre aplicar Clear y refresh antes de la consulta.
REFRESH tg_tab.
CLEAR tg_tab.
-> Para tabla_dicc y tabla interna de identicas estructuras.
SELECT * FROM zhpgespa03 INTO table tg_zhpgespa03
WHERE tipo_tramite = est3-tipo.
-> Seleccion Del tipo loop para tablas de identicas estructuras.
SELECT * FROM zhpgespa03 INTO tg_zhpgespa03
WHERE tipo_tramite = est3-tipo.
*Tratamiento de cada registo
ENDSELECT.
-> Para tablas con estructuras diferentes
SELECT * FROM zdpolutms
INTO CORRESPONDING FIELDS OF TABLE tg_tab
WHERE zd_cod_ot_pol IN s_cod_ot
AND zd_tip_repara IN s_trep.
!!IMPORTANTE: Para verificar el estado de la consulta:
IF sy-subrc = 0. "Pregunta si se encontraron registros
vl_flag = 'Hay registros iupy'.
ELSE
vl_flag = 'No hay registros, que desepcion'.
ENDIF.
ó bien:
IF sy-subrc = 4. "Pregunta si NO encontraron registros
vl_flag = 'No hay registros, que desepcion'.
ENDIF.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.2
::> OBTENER EL PRIMER REGISTRO DE
LA TABLA:
-------------------------------------------------
->TABLA INTERNA
READ TABLE tg_tabla_interna WITH KEY tg_tabla_interna-campo = "expresion"
BINARY SEARCH.
>>Ejemplo:
----------
Mover el primer registro a la cabecera para utilizarlo.
READ TABLE tg_zsprocent INDEX 1.
-> TABLA DE DICCIONARIO
"Tomar el primer registro de la tabla.
SELECT * up to 1 rows
FROM tabla_interna
INTO "tabla_destino-campo"
WHERE campo = "expresion".
endselect.
"Toma 1 registo de la tabla
SELECT SINGLE "campo" INTO "tabla_destino-campo"
FROM "tabla_diccionario"
WHERE werks = "condicion".
o
"Toma 1 registo de la tabla
CLEAR MARC.
SELECT SINGLE * FROM marc
WHERE matnr = t_mara-matnr
AND werks = centro
AND ausme <> space.
IF marc-bwtty = 'B'.
zmi_usu_mat-valorado = 'B'.
ELSE.
zmi_usu_mat-valorado = space.
ENDIF.
* No soporta seleccion de campos pero genera una estructura utilizable.
* ATT SIEMPRE APLICARLE UN CLEAR A LA TABLA.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.3
::> OBTENER EL ULTIMO REGISTRO DE
UNA TABLA INTERNA:
---------------------------------------------------------------
LOOP AT tabla_interna.
ENDLOOP.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.4
::> OBTENER UN REGISTRO CON UN CAMPO
EN BLANCO COMO CONCEPTO DE BUSQUEDA.
------------------------------------------------------------------------------------------
Consulta preguntando que el campo no esté vacío.
SELECT SINGLE * FROM marc
WHERE mandt = sy-mandt
AND matnr = t_mara-matnr
AND werks = CENTRO
AND AUSME <> space.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.5
::> Mover contenido del campo de
una tabla a otra de identica estructura.
-----------------------------------------------------------------------------
MOVE-CORRESPONDING pte_fich TO pte_error.
APPEND pte_error.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.6
::> Buscar buscar dentro de tabla
interna el valor de un campo
------------------------------------------------------------------
READ TABLE tl_rango WITH KEY domvalue_l = pte_fich-zzefecto.
Busca el valor de domvalue_l, preguntar por su_subrc para saber si lo
encontró.
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
3. INSERTAR REGISTROS EN TABLA INTERNA.
========================================================
3.0
::> RECORDAR ORDENAR LA Tabla Interna
PARA AGILIZAR LAS CONSULTAS.
-----------------------------------------------------------------------------
Al ordenar la TI se indexa la misma, por lo cual posteriores busquedas,
inserciones, o actualizaciones sobre la misma se realizan de manera
mas
veloz.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.1
::> INSERTAR UN NUEVO REGISTRO en
tabla interna
----------------------------------------------------
> Cargamos el header de la tabla interna.
Luego cargamos la tabla interna con la sentencia APPEND.
Siempre es conveniente limpiar cabeceras antes y despues de su uso.
Importante: Si el registro a insertar ya existe dá un Runtime
Error.
DEVUELVE:
SY-SUBRC = 0: El registro ha sido insertado
SY-SUBRC = 4: ERR
Ej.:
CLEAR tg_correctos. "Limpia cabecera
tg_correctos-nro_emp = wa_9012-pernr.
tg_correctos-begda = sy-datum.
tg_correctos-endda = wa_9012-endda.
tg_correctos-cdesp = wa_9012-cdesp.
tg_correctos-despacho = wa_9012-despacho.
APPEND tg_correctos .
CLEAR tg_correctos. "Limpia cabecera
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.1.1
::> INSERTAR TODO EL CONTENIDO DE
UNA TABLA INTERNA EN UNA TABLA DICCIONARIO
-------------------------------------------------------------------------------------------
* Se insertan los registros dentro de la tabla
INSERT ztvcarta_notif FROM TABLE t_ztvcarta_notif.
COMMIT WORK.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.1.2
::> INSERTAR EL CONTENIDO DE UNA
TABLA INTERNA EN OTRA.
----------------------------------------------------------------
APPEND LINES OF ITAB1 TO ITAB2.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.1.3
::> INSERTAR EL CONTENIDO DE UNA
ESTRUCTURA EN UNA TABLA INTERNA
----------------------------------------------------------------------------
MOVE eg_zftzjtepclexp TO tl_zftzjtepclexp.
APPEND tl_zftzjtepclexp .
CLEAR tl_zftzjtepclexp .
*----------------------------------------------------------------------*
*//////////////////////////////////////////////////////////////////////*
*----------------------------------------------------------------------*
3.2
::> MODIFICAR UN REGISTRO EXISTENTE
en tabla interna
------------------------------------------------------------
Cambia el contenido del registro individual en una tabla.
>Proceso:
Cargamos el header de la tabla interna con los datos de los registros
a modificar.
Luego cargamos la tabla interna con la sentencia MODIFY.
Siempre es conveniente limpiar cabeceras antes y despues de su uso.
CLEAR tg_correctos. "Limpia cabecera
tg_correctos-nro_emp = wa_9012-pernr.
tg_correctos-begda = sy-datum.
tg_correctos-endda = wa_9012-endda.
tg_correctos-cdesp = wa_9012-cdesp.
tg_correctos-despacho = wa_9012-despacho.
MODIFY tg_correctos .
CLEAR tg_correctos. "Limpia cabecera
> DEVUELVE:
SY-SUBRC = 0: El registro ha sido modificado
SY-SUBRC = 4: ERR
*----------------------------------------------------------------------*
*//////////////////////////////////////////////////////////////////////*
*----------------------------------------------------------------------*
3.3
::> BORRADO DE REGISTROS en tabla
interna
-----------------------------------------------
3.3.1
::> Borra Un registro puntual a partir
de un índice.
----------------------------------------------------
DELETE tabla_interna INDEX sy_tabix
DEVUELVE:
SY-SUBRC = 0: El registro ha sido borrado
SY-SUBRC = 4: ERR
Ej.:
DATA: vl_tabix LIKE sy-tabix.
LOOP AT tg_iflo.
vl_tabix = sy-tabix.
* Borra el refistro donde esta posicionado.
DELETE tg_iflo INDEX vl_tabix.
ENDLOOP.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.3.2
::> Borrar registro a partir de una
condicion.
-----------------------------------------------
DELETE i_erdz WHERE tariftyp = 'NOCONTRATO'
OR tariftyp = 'PLAZA'
OR tariftyp = 'POZOAASA'
OR tariftyp = space.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
3.3.3
::> ELIMINACION DE DUPLICADOS ADYACENTES
------------------------------------------------
-OJO!!!!!Siempre ordenar la tabla antes de hacer un delete adjacent
SORT i_datos BY xblnr.
DELETE ADJACENT DUPLICATES FROM i_datos COMPARING xblnr.
*----------------------------------------------------------------------*
*//////////////////////////////////////////////////////////////////////*
*----------------------------------------------------------------------*
3.4
::> COPIADO DE UNA TABLA
------------------------
ITAB2[] = ITAB1[].
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
4. INSERTAR REGISTROS EN TABLA DICCIONARIO.
========================================================
4.1
::> INSERTAR UN REGISTRO en tabla
diccionario a partir de una estructura.
-----------------------------------------------------------------------------
INSERT INTO tabla_dicc VALUES tabla_local.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
4.2
::> INSERTAR CONTENIDO DE UNA TABLA
LOCAL EN UNA TABLA DICCIONARIO.
-------------------------------------------------------------------------------
INSERT tabla_dicc FROM table tabla_local .
Ej:
*Carga de la tabla zvpdctad.
DATA: TL_ZVPDCTAD TYPE STANDARD TABLE OF ZVPDCTAD WITH HEADER LINE.
*NUEVO REGISTRO
TL_ZVPDCTAD-ZISUCTA = 'C2'.
TL_ZVPDCTAD-ZCTADE = 'C234567890'.
TL_ZVPDCTAD-ZNCTADE = 'C234567890'.
append TL_ZVPDCTAD.
*NUEVO REGISTRO
TL_ZVPDCTAD-ZISUCTA = 'D2'.
TL_ZVPDCTAD-ZCTADE = 'D234567890'.
TL_ZVPDCTAD-ZNCTADE = 'D234567890'.
append TL_ZVPDCTAD.
INSERT ZVPDCTAD FROM table TL_ZVPDCTAD .
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Modulo Programador ABAP INICIAL

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
5. ESTRUCTURAS.
========================================================
5.1
::> DECLARACION DE ESTRUCTURAS.
-------------------------------------
DATA: wa_flujos LIKE LINE OF tg_flujos.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
5.2
::> DECLARACION DE ESTRUCTURAS DEL
TIPO TABLA.
-------------------------------------------------------
DATA: t_dfkkop TYPE dfkkop.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
5.3
::> MOVER EL CONTENIDO DE UNA ESTRUCTURA
A OTRA.
----------------------------------------------------------
MOVE-CORRESPONDING tg_equi TO equi.
*NOTA: Util para el traspaso de campos antes de la llamada a una dinpro
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
5.4
::> MOVER EL CONTENIDO DE UNA ESTRUCTURA
A UNA TABLA INTERNA
----------------------------------------------------------------------
MOVE eg_zftzjtepclexp TO tl_zftzjtepclexp.
APPEND tl_zftzjtepclexp .
CLEAR tl_zftzjtepclexp .
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
6. VISTAS DE ACTUALIZACION.
========================================================
6.1
::> CREAR UNA VISTA DE ACTUALIZACION:
--------------------------------------------
Con SE11 acceder a la tabla.
Menú -> Utilidades -> Generar Actualiz. Tabl.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
6.2
::> MODIFICAR EVENTOS DE UNA VISTA
DE ACTUALIZACION
---------------------------------------------------------------
Con el SM 30 acceder a la vista de actualizacion de una tabla existente.
Menu -> SISTEMA -> STATUS -> Doble click en (PRograma dimpro)
Acceder a la dinpro y modificar eventos PAI o PBO según el caso.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: Capacitate en SAP con especialistas en el área :: No dejes tu carrera en manos impovisadas, ESAP es tu mejor elección.

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
7. RANGOS.
========================================================
7.1
::> LOOPEAR UN RANGO en busqueda
de una condicion.
---------------------------------------------------------
Comparar solamente los valores individuales ingresados en un rango
LOOP AT p_s_bukrs WHERE opcion = 'EQ' AND sign = 'I'.
*procesao
endloop.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
7.2
::> CARGAR UN RANGO Con valores de
una tabla interna.
-------------------------------------------------------------
* Se carga el rango s_bukrs con los valores contenidos em la tabla
interna
* tg_soc_contables.
LOOP AT tg_soc_contables.
s_bukrs-sign = 'I'.
s_bukrs-option = 'EQ'.
s_bukrs-high = ''.
s_bukrs-low = tg_soc_contables-tr_acc_code.
APPEND s_bukrs .
CLEAR s_bukrs. "Limpia cabecera
ENDLOOP.
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
V. VARIOS.
========================================================
V.1
::> CONTAR LA CANTIDAD DE REGISTROS
(LINEAS) DE UNA TABLA:
--------------------------------------------------------------------
DATA: v_cant TYPE I.
DESCRIBE TABLE tg_tabla_interna LINES v_cant.
Donde V_CANT es la variable donde se devuelve la cantidad de lineas.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.2
::> INTRUCCIONES DE RUPTURA
---------------------------------
>AT FIRST " Si el el primer registro sale
LOOP AT COMPANIES INTO WA_COMPANIES.
AT FIRST.
SUM.
WRITE: 'Sum of all SALES:',
55 WA_COMPANIES-SALES.
ENDAT.
WRITE: / WA_COMPANIES-NAME, WA_COMPANIES-PRODUCT,
55 WA_COMPANIES-SALES.
ENDLOOP.
> AT LAST " Sale si el el ultimo ragistro.
> AT NEW " Cuando cambio el valor del campo y es el primer
valor.
AT NEW tg_local-campo.
SUM.
WRITE: 'Sum of all SALES:',
55 WA_COMPANIES-SALES.
ENDAT.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.3
::> ORDENAMIENTO
---------------------
El ordenamiento (SORT) hace que SAP cree un índice para la tabla,
por lo cual posteriores
tratamientos sobre la misma se efectuarán de manera mas velóz.
SORT tabla_int BY tabla_int-campo1 [ ASCENDING DESCENDING ].
Ejemplo:
SORT ITAB BY K.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.4
::> ELIMINACION DE DUPLICADOS ADYACENTES
----------------------------------------------------
-OJO!!!!!Siempre ordenar la tabla antes de hacer un delete adjacent
SORT i_datos BY xblnr.
DELETE ADJACENT DUPLICATES FROM i_datos comparing xblnr.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.5
::> LIMPIAR TABLA + CABECERA
-----------------------------------
CLEAR tabla_int.
REFRESH tabla_int.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
v.6
::> LOOPEAR UNA TABLA INTERNA CON
CONDICION
-----------------------------------------------------
LOOP AT ITAB INTO WA WHERE K = 'X'.
" ...
ENDLOOP.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
v.7
::> ORDENAMIENTO Y OBTENCION DEL
ÚLTIMO REGISTRO
-----------------------------------------------------------
Ordenar y tomar la ultima fecha
*Fecha Contabilizacion
* OPERACIONES
SORT tg_deal BY secbaco DESCENDING.
READ TABLE tg_deal INDEX 1.
w_contab_opera = tg_deal-secbaco(8).
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Módulo Programador ABAP AVANZADO

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
|