Gracias chicos por sus experiencias y conocimientos.
Me quede un poquito corto o fui muy escueto en la explicacion.
Vengo de SQ, MySQL y limitado de Oracle y Mongo, conozco the best practice al respecto tanto asi que tuvimos presencia de expertos en la materia por Microsoft cuando nos trono el servidor SQL2000 y migramos a SQL2008. Hace unos años.
Pero con este nuevo sistema SAP la programación que nos “están explicando” esta muy código lineal, todo con for all entries, select a una sola tabla y de ahi almacenar en estructuas/workareas/tablas transparentes/vaciado en variables tipo DATA.
Lo que no se es que es la mejor practica en ABAP.
La información que se maneja aqui siempre es de gran volumen, son obtener relaciones entre bp y sus objetos contratos los cuales pueden ser de 1 a N, donde cada 1 tiene N pagos, obligaciones de pago, etc.
Mi sección es la de ingresos, donde tenemos que calcular por un concepto ligas de pagos y calculos, los cuales provienen de tablas extensas por los calculos y procesos necesarios para dar la informacion final.
Sumado a esto la mayoria del tiempo nos piden reportes a quema ropa los cuales no van a poder estar en BI, extracciones de informacion maciba, etc, etc… toda una chulada estar aqui
Regresando al tema_____
Les mostrare pedazos de codigo
*&---------------------------------------------------------------------*
*& Include ZURS07_PRG5_TOP
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Inclusion de Tablas BASE
*&---------------------------------------------------------------------*
tables:
dfkkko,
ZCCTT_CONCEPTOS2.
*&---------------------------------------------------------------------*
*& PARAMETROS DE ENTRADA
*&---------------------------------------------------------------------*
PARAMETERS:
p_Test As CHECKBOX DEFAULT 'x',
p_opbel type dfkkop-opbel.
SELECT-OPTIONS: psl_obel for dfkkko-opbel.
*&---------------------------------------------------------------------*
*& Variables Globales
*&---------------------------------------------------------------------*
data:
gv_subrc type sy-subrc.
*&---------------------------------------------------------------------*
*& Tipos
*&---------------------------------------------------------------------*
TYPES:
BEGIN OF ty_conceptos2,
HVORG type ZCCTT_CONCEPTOS2-HVORG,
TVORG type ZCCTT_CONCEPTOS2-TVORG,
CCOBRO type ZCCTT_CONCEPTOS2-CCOBRO,
XXXX type ZCCTT_CONCEPTOS2-XXXX,
DESCON type ZCCTT_CONCEPTOS2-DESCON,
DESLAR type ZCCTT_CONCEPTOS2-DESLAR,
END OF ty_conceptos2,
"ty_tl_conceptos2 type STANDARD TABLE OF ty_conceptos2,
BEGIN OF ty_dfkkop,
opbel type dfkkop-opbel,
opupk type dfkkop-opupk,
HVORG type dfkkop-HVORG,
TVORG type dfkkop-TVORG,
END OF ty_dfkkop,
BEGIN OF ty_salida,
opbel type dfkkop-opbel,
opupk type dfkkop-opupk,
HVORG type ZCCTT_CONCEPTOS2-HVORG,
TVORG type ZCCTT_CONCEPTOS2-TVORG,
CCOBRO type ZCCTT_CONCEPTOS2-CCOBRO,
XXXX type ZCCTT_CONCEPTOS2-XXXX,
DESCON type ZCCTT_CONCEPTOS2-DESCON,
DESLAR type ZCCTT_CONCEPTOS2-DESLAR,
END OF ty_Salida.
*&---------------------------------------------------------------------*
*& work areas o estructuras
*&---------------------------------------------------------------------*
data:
ls_salida type ty_salida,
ls_conceptos2 type ty_conceptos2.
*&---------------------------------------------------------------------*
*& Tablas
*&---------------------------------------------------------------------*
data:
lt_conceptos2 TYPE STANDARD TABLE OF ty_conceptos2 WITH UNIQUE SORTED KEY Operaciones COMPONENTS HVORG TVORG,
lt_dfkkop type STANDARD TABLE OF ty_dfkkop,
lt_salida type STANDARD TABLE OF ty_salida with NON-UNIQUE SORTED KEY vbarias COMPONENTS opbel opupk.
FORM f_zconceptos2
TABLES
p_lt_dfkkop like lt_dfkkop
p_lt_conceptos2 like lt_conceptos2
p_lt_salida like lt_salida
CHANGING p_gv_subrc.
** loop AT p_lt_dfkkop into ls_salida.**
**loop at p_lt_conceptos2 into ls_conceptos2 WHERE hvorg = ls_salida-hvorg AND tvorg = ls_salida-tvorg.**
"READ TABLE p_lt_conceptos2
"into ls_conceptos2
"WITH KEY hvorg = p_lt_conceptos2-hvorg tvorg = p_lt_conceptos2-tvorg.
if ls_conceptos2 is INITIAL.
ls_salida-XXXX = 'sin relacion de datos'.
else.
"MOVE-CORRESPONDING p_lt_dfkkop to ls_salida.
**MOVE-CORRESPONDING ls_conceptos2 to ls_salida.**
APPEND ls_salida to lt_salida.
endif.
endloop.
if ls_conceptos2 is INITIAL.
ls_salida-descon = 'sin relacion de datos'.
APPEND ls_salida to lt_salida.
ENDIF.
"p_gv_subrc = sy-subrc.
ENDLOOP.
ENDFORM.
No se si con eso me explico, este caso es pequeño, entiendo el uso de una consulta de un elemento a la perfección. se inserta en una variable de un dato, pero cuando necesitamos registros de todo un mes, año o de toda la relación de datos almacenados en donde se me hace injusto que quiera que usemos un loop y almacenar con move-CORRESPONDING, se me hace que es demasiado peso y proceso.
_____________________________Editado:
Agrego otro ejemplo balazo:
que las consultas son en varias tablas al mismo tiempo ocupamos 3 columnas de una tabla, de la otra ocupamos 20, de la otra 8 por ejemplo y con eso se saca una consulta final… tipo sql
me salto muchas practicas para ser rapido conste
select
a.dato1,a.dato2, b.dato1, b.bato…N, c.dato1, c.dato5
from a
join b on b.datox = a.datox
join c on c.datox = b.datox and c.datox2 = a.datox2
where not exists ( select xx.dato from xx where xx.datox = b.datoxx)
si hago lo mismo en ABAP pues lo hice todo bien claro y rapido (el comentario de saber usar las llaves es correcto si no uso una llabe que ya me lo tope la consulta se cuelga. Ademas que los ABAPER’s de aqui dicen que NUNCA DE LOS NUNCA debe usar una consulta asi…
_____________________________Fin Edición.
Saludos.