|
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: La mejor capacitación en SAP está a tu alcance. :: ESAP Posee el más avanzado y efectivo sistema de Capacitación SAP. Conocelo!

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
1 CONSULTAS DE SELECCION.
========================================================
1.1
::> Select del tipo LOOP (SELECT
ENDSELECT)
-------------------------------------------
SELECT *
INTO tabla_interna
FROM tabla_diccionario
WHERE kurst = 'M'
AND tcurr = 'USD'.
Write:/ tabla_diccionario-campo1,
tabla_diccionario-campo2,
tabla_diccionario-campo3.
ENDSELECT.
Info: - Permite ir ejecutando acciones en el looop
- Tratar de no usar este método porque consume + recursos
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.1
::> Clausula UP tO (limitacion de
registros devueltos)
------------------------------------------------------
SELECT * FROM ekpo
UP TO 100 ROWS
INTO TABLE gt_output.
Endselect.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.2
::> Obtener registros sin duplicidad
------------------------------------------------------
*Obtener todos los campos distintos de una tabla
** Obtengo las clases y sus descripciones
SELECT DISTINCT zr_tip_accion zr_desc_accion
INTO TABLE tl_accion_f4
FROM zpr_acciones.
Todos los distintos con clausula where
SELECT DISTINCT zr_zona
INTO TABLE tl_zona
FROM zpr_region_zona
WHERE zr_region = p_region .
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.3
::> Select SINGLE Obteniendo todos
los campos.
------------------------------------------------------
1º Declarar tabla
TABLES: zdpolutms.
2º Consulta
SELECT SINGLE * FROM zdpolutms
WHERE xxxx = xxx
[ AND xxx = xxxx ].
* La tabla debe ser declarada antes de usar el select.
* NO soporta INTo.
* Toma todos los registros del diccionarioy genera una estructura
* metodo BUENO y rápido pero a tablas de pocos campos
ó si pueden existir varias ocurrencias usar y se desea tomar
1:
SELECT * FROM zdpolutms
UP TO 1 ROWS
WHERE xxxx = xxx
[ AND xxx = xxxx ].
ENDSELECT.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.4
::> Select Single de UN solo campo
------------------------------------------------------
1º Declarar la variable para el INTO
vl_pernr LIKE usr21-persnumber, " Personal number
2º Consulta
SELECT SINGLE persnumber INTO vl_pernr
FROM usr21
WHERE bname = vl_cod_usr.
ó si pueden existir varias ocurrencias usar y se desea tomar
1:
SELECT persnumber INTO vl_pernr
FROM usr21
UP TO 1 ROWS
WHERE bname = vl_cod_usr.
ENDSELECT.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.5
::> Select Single de DOS campos solamente
------------------------------------------------------
1º Declarar las variables para el INTO
DATA: vl_ebeln LIKE eket-ebeln, " Número del documento
de compras
vl_ebelp LIKE eket-ebelp. " Núm de poscicion del doc de
compras
2º Consulta y obtencion de los campos requeridos
SELECT SINGLE ebeln ebelp
INTO (vl_ebeln, vl_ebelp)
FROM eket
WHERE bnfpo = zbnfpo.
ó si pueden existir varias ocurrencias usar y se desea tomar
1:
SELECT ebeln ebelp
INTO (vl_ebeln, vl_ebelp)
UP TO 1 ROWS
FROM eket
WHERE bnfpo = zbnfpo.
ENDSELECT.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: La mejor capacitación en SAP está a tu alcance. :: ESAP Posee el más avanzado y efectivo sistema de Capacitación SAP. Conocelo!

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
1.1.6
::> Verificación de existencia
de registro
------------------------------------------
SELECT * FROM SBOOK INTO SBOOK_WA
UP TO 1 ROWS
WHERE CARRID = 'LH'.
ENDSELECT.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.7
::> OPTIMIZACION DE CONSULTAS DE
SELECCIÓN
------------------------------------------
En vez de hacer un:
SELECT * INTO tbl_local_a FROM tbl_dicc_a
LOOP AT tbl_local_a.
SELECT * FROM tbl_dicc_b ....
Tomar acciones
ENDLOOP.
HACER:
------
SELECT campos_dicc INTO tbl_local_a FROM tbl_dicc_a
SELECT campos_dicc INTO tbl_local_b
FROM tbl_dicc FOR ALL ENTRIES IN tbl_dicc_a
WHERE condiciones.
LOOP AT tbl_local_b
Read table tbl_local_b [with key campo = XX].
ENDLOOP.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.1.8
::> SELECT "FOR ALL ENTRIES"
------------------------------------------
Util para seleccionar todos los registros (all entries) de otra tabla
o de un campo de seleccion multiple (select-options).
SELECT *
INTO TABLE tg_zjtdetetar
FROM zjtdetetar FOR ALL ENTRIES IN tg_ztar_desdob
WHERE zidetetar = tg_ztar_desdob-zzid_tarea
.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.2
::> Carga directa de tabla interna
desde diccionario
----------------------------------------------------
CLEAR tabla_interna.
REFRESH table_interna.
SELECT *
INTO TABLE tabla_interna
FROM tabla_diccionario
WHERE kurst = 'M'
AND tcurr = 'USD'.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.3
::> Carga de tabla interna con tabla
diccioario (con soporte para estructuras diferentes)
--------------------------------------------------------------------------------------------
CLEAR tabla_interna.
REFRESH table_interna.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE tabla_interna
FROM tabla_diccionario
WHERE szkart = p_szkart.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.4
::> Buscar una coincidencia dentro
de una tabla interna.
--------------------------------------------------------
*Busca el archivo
SELECT SINGLE *
FROM T001 WHERE BUKRS = P_Origen.
--- ó ---
*Busca el archivo y lo guarda en una variable o estructura
SELECT SINGLE zproyecto
FROM zot_proyecto
INTO vl_zproyecto
WHERE zproyecto = pte_fich-zzproyecto.
IF SY-SUBRC <> 0.
MESSAGE e165(f5) WITH P_ORIGEN.
ENDIF.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.5.1
::> INNER JOIN para 3 tablas
-------------------------------
*----------------------------------------------------------------------*
* TABLAS DICCIONARIO
*----------------------------------------------------------------------*
TABLES: zic_componentes,
zic_txt_comp,
zic_revis_comp.
*----------------------------------------------------------------------*
* TABLAS INTERNAS
*----------------------------------------------------------------------*
*Declaro una tabla interna para almacenar los datos proveniente de 3
tablas.
TYPES: BEGIN OF wa_componentes,
zid_componente TYPE zic_componentes-zid_componente, "ID comp.
zcod_mpl TYPE zic_componentes-zcod_mpl, "Código MPL
ztipo_comp TYPE zic_componentes-ztipo_comp, "Tipo comp
zcod_sistema TYPE zic_componentes-zcod_sistema, "Sistema
ztexto TYPE zic_txt_comp-ztexto, "texto comp.
END OF wa_componentes,
tyt_componentes TYPE STANDARD TABLE OF wa_componentes WITH DEFAULT
KEY.
DATA: tg_componentes TYPE tyt_componentes WITH HEADER LINE.
*----------------------------------------------------------------------*
* RUTINA CON EL JOIN
*----------------------------------------------------------------------*
FORM fabd_co_join_componentes TABLES p_tg_componentes
STRUCTURE tg_componentes.
SELECT a~zid_componente a~zcod_mpl a~ztipo_comp a~zcod_sistema
b~ztexto
INTO CORRESPONDING FIELDS OF TABLE p_tg_componentes
FROM zic_componentes AS a INNER JOIN zic_txt_comp AS b
ON a~zid_componente = b~zid_componente
INNER JOIN zic_revis_comp AS c
ON c~zid_componente = b~zid_componente
AND c~zcod_revision = b~zcod_revision
WHERE c~zpert_qlist = ''
AND b~zspras = sy-langu
.
ENDFORM. " FABD_CO_JOIN_COMPONENTES
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: La mejor capacitación en SAP está a tu alcance. :: ESAP Posee el más avanzado y efectivo sistema de Capacitación SAP. Conocelo!

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
1.5.2
::> INNER JOIN para 2 tablas
-------------------------------
REPORT y_xin2038_join .
TABLES: ekpo,
ekbe.
PARAMETERS: p_matnr LIKE ekpo-matnr DEFAULT '863928'.
DATA: BEGIN OF tg_table OCCURS 0,
ebeln LIKE ekpo-ebeln ,
wesbs LIKE ekbe-wesbs,
shkzg LIKE ekbe-shkzg,
meins LIKE ekpo-meins,
lmein LIKE ekpo-lmein,
END OF tg_table .
START-OF-SELECTION .
SELECT y~ebeln y~wesbs y~shkzg x~meins x~lmein
INTO CORRESPONDING FIELDS OF TABLE tg_table
FROM ekpo AS x JOIN ekbe AS y
ON x~ebeln = y~ebeln
AND x~ebelp = y~ebelp
WHERE x~matnr EQ p_matnr.
IF sy-subrc = 0.
ENDIF.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
1.5.3
::> INNER JOIN para 2 tablas con
ejemplo sencillo
----------------------------------------------------
JOIN EN DOS TABLAS:
SELECT b~iloan
INTO TABLE tl_iloa
FROM zdiflos AS a INNER JOIN iloa AS b
ON a~tplnr = b~tplnr
WHERE a~strno IN s_strno.
Usado en reporte: ZIPMX023
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* ::Te invitamos a conocer nuestras carreras :: Carrera Consultor ABAP - Modulo Programador ABAP INICIAL

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
2. CONSULTAS DE BORRADO, INSERCION Y ACTUALIZACION.
========================================================
2.0
::> CONSIDERACIONES GENERALES DE
MODIFICACIÓN DE TABLAS DICC.
--------------------------------------------------------------------------
2.0.1 Procesamiento en bloque.
------------------------------
> Siempre que se ejecuta una operación de actualización
de la base de datos
con sentencias UPDATE, INSERT, etc., se produce un submit interno a
un
programa que es el que se encarga de realizar las actualizaciones
en la base de datos
- Es por ello, que si es factible, antes de hacer muchas actualizaciones
puntuales
e individuales de registros, carguemos una TI con los registros y luego
actualicemos
la "Tabla Dicc" con los datos cargados en la "Tabla interna"
> En las tablas de Usuario, siempre que se realicen actualizaciones
en bloque de grandes cantidades de datos, es conveniente generar una
instrucción COMMIT cada 1.000 registros.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.1
::> BORRAR REGISTROS DE UNA TABLA
----------------------------------------
DELETE FROM SBOOK WHERE CARRID = 'LH' AND
CONNID = '0400' AND
FLDATE = '20010228'.
Devuelve:
SY-SUBRC = 0: El registro ha sido borrado.
SY-SUBRC = 4: NO se ha podido borrar el registro.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.2
::> INSERTAR UN REGISTRO en tabla
diccionario a partir de una estructura.
-----------------------------------------------------------------------------
INSERT INTO tabla_dicc VALUES wl.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.3
::> INSERTAR CONTENIDO DE UNA TABLA
LOCAL EN UNA TABLA DICCIONARIO.
--------------------------------------------------------------------------------
Es perferible realizar el insert del contenido de una tabla interna
precargada,
a ir haciendo sucesivos inserts por cada registro.
CODIGO:
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 .
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.4.1
::> ACTUALIZACION CON METODO WHERE
& SET
---------------------------------------------------
Este método de actualización de registros es el + recomendable.
UPDATE zdprog-planes
SET equnr = 20001003
equart = ds-bor
WHERE wapos = 0000000000160076.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.4.2
::> ACTUALIZAR (UPDATE)
-----------------------------
Este segundo método de actualización NO es tan recomendable,
pero es
bueno conocerlo.
select single * from bseg where belnr = bsik-belnr
and bukrs = bsik-bukrs
and gjahr = bsik-gjahr
and buzei = bsik-buzei.
bseg-linfv = bsik-linfv. " carga valor adicional
update bseg.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
2.5
::> MODIFICAR TABLA DICC A PARTIR
DE UNA ESTRUCTURA.
----------------------------------------------------
*Cargada la estructura tg_zoc_flujobanc se la muevo a la tabla diccionario
>> Ej1:
-------
*zoc_flujobanc
MODIFY zoc_flujobanc FROM tg_zoc_flujobanc.
>> Ej2:
-------
loop at tg_zjtrama.
* Actualizo el registro CDI en la tabla ZJTRAMA
MODIFY zjtrama from tg_zjtrama.
endloop.
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: Capacitate en SAP con especialistas en el área :: No dejes tu carrera en manos impovisadas, ESAP es tu mejor elección.

*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*
------------------------------------------------------------------------
V. VARIOS.
========================================================
V.0
::> COMMIT AND WAIT
------------------------
Commit and wait, hace que se ejecute la consulta de insercion, updateo
o borrado
y luego recién se prosigue con la ejecucion del programa.
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.1
::> INSERTAR DATOS EN TABLA DICCIONARIO
SIN POSEER PERMISOS.
------------------------------------------------------------------------
COMO INSERTAR DATOS EN TABLAS SIN TENER PERMISOS?
Cuando queremos insertar datos en una tabla y nos da un mensaje
diciendo que no tenemos autorización, hay una forma de inserta
datos.
CONSEJO SANO: USARLO SOLO EN LOS AMBIENTES DE DESARROLLO.
NUNCA EN PRODUCCION.
COMO HAY QUE HACER?
A continuación se muestran los pasos a seguir, junto con un ejemplo.
--Identificar la tabla donde se quiere insertar el registro.
En este caso es la USR05 (Maestro de usuarios ID de parámetros)
Esta tabla tiene 4 campos:
MANDT FORMA PARTE DE LA CLAVE
BNAME FORMA PARTE DE LA CLAVE
PARID FORMA PARTE DE LA CLAVE
PARVA
--logearse a SAP con un usuario que permite hacer debugging
--Acceder a la transacción SE16, la cual permite visualizar
contenidos de tablas.
--Acceder a la tabla deseada y visualizar los datos.
(En nuestro caso es la USR05)
--Hacer DOBLE CLICK en algun registro para ir a la vista que muestra
un solo registro en detalle.
ESTE PASO ES MUY IMPORTANTE.
--En el campo de comandos de SAP, tipear /H.
De esta forma se entra en el modo debugging.
(Con campo de comandos me refiero al textbox que aparece en la
parte superior izquierda de la pantalla)
Aparecerá un mensaje que dice = "Se ha activado en modo
debugging."
--Presionar ENTER (o el botón que el tilde de ejecutar)
De esta forma se comenzará a debuggear el codigo del programa
que permite visualizar los datos de una tabla.
--Dónde está el truco?
El truco consiste en lo siguiente:
Al estar en modo debugging, se pueden modificar datos del programa
a medida que el mismo se ejecuta.
El código fuente que se debería ver es el siguiente:
refresh exclude_tab.
>>>> if code = 'SHOW'.
set titlebar 'TAB' with name 'anzeigen'(100).
elseif code = 'EDIT'.
set titlebar 'TAB' with name 'ändern'(101).
elseif code = 'INSR'.
set titlebar 'TAB' with name 'einfügen'(102).
El puntero de ejecución se encuentra en la linea marcada con
>>>>.
El valor actual de la variable CODE es SHOW.
POR LO TANTO, LO QUE HAY QUE HACER ES CAMBIAR EL VALOR A
INSR SI SE QUIEREN INSERTAR DATOS
EDIT SI SE QUIEREN MODIFICAR DATOS
--Cambiar el valor del campo CODE a INSR y presionar el botón
Modificar Contenido Campo.
--Presionar F8 (o continuar)
--De esta forma aparecerá una vista para ingresar un nuevo registro.
--Insertar el registro que se desee
--Presionar grabar y LISTO!
[ Subir]
**--------------------------------------------------------------**
Centro
de capacitacion SAP
V.2
::> MOVER EL CONTENIDO DE UNA ESTRUCTURA
A OTRA
---------------------------------------------------------
MOVE-CORRESPONDING tg_equi TO equi.
* Util para mover los campos de una estructura a otra
*------------------------------------------------------------------------------* *------------------------------------------------------------------------------* :: La mejor capacitación en SAP está a tu alcance. :: ESAP Posee el más avanzado y efectivo sistema de Capacitación SAP. Conocelo!

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