FUNCIONES DE SUMARIZADORES GLOBALES

 
 
FUNCIONES DE SUMARIZADORES GLOBALES:
 
1) SUM_Put (o su alias más corto, SPut)
 
2) SUM_Add (o su alias más corto, SAdd)
 
3) SUM_Get (o su alias más corto, SGet)
 
SINTAXIS:
 
1) SUM_Put(STRING Etiqueta, STRING Valor, STRING ValorADevolver),REAL
 
SUM_Put crea un nuevo "Sumarizador Global" al que le da el nombre de "Etiqueta" y el valor (número real) de "Valor" (si existiera un sumarizador con ese nombre, reemplaza el valor existente por el nuevo).
 
Si NO SE ESPECIFICA "ValorADevolver" retorna "Valor" transformado a número real. Si SE ESPECIFICA "ValorADevolver" retorna "ValorADevolver" transformado a número real.
 
2) SUM_Add(STRING Etiqueta, STRING Valor, STRING ValorADevolver),REAL
 
SUM_Add busca el "Sumarizador Global" de nombre "Etiqueta" y le suma el valor (número real) de "Valor" (si no existiera un sumarizador con ese nombre, lo crea).
 
Si NO SE ESPECIFICA "ValorADevolver" retorna "Valor" transformado a número real. Si SE ESPECIFICA "ValorADevolver" retorna "ValorADevolver" transformado a número real.
 
3) SUM_Get(STRING Etiqueta, STRING ValorPorDefecto),REAL
 
SUM_Get busca el "Sumarizador Global" de nombre "Etiqueta" y retorna el Valor almacenado (número real). Si no existiera un sumarizador con ese nombre, retorna "ValorPorDefecto" transformado a número real.
 
- Ejemplo de uso 1:
 
Supongamos que necesitamos una fórmula donde se requieren 3 cálculos, A, B y C, de esta forma:
 
Fórmula = A+B+C
 
Donde B depende del valor de A, y  C depende del valor de B.
 
A = FL_SumaHistorica(....)
 
B = ELEGIR(A > 100, A*1.5, A*2)
 
C = ELEGIR(B > 100, B*1.5, B*2)
 
Hasta ahora, en estos casos había que repetir el cálculo de A al calcular B, y repetir el cálculo de B (y por ende el de A) al calcular C.
Eso podía llevar a fórmulas muy largas e ineficientes (por ejemplo, repetir recorridos grandes de muchos registros en la base de datos)
 
Utilizando las nuevas FUNCIONES DE SUMARIZADORES GLOBALES la fórmula se puede expresar como sigue:
 
Formula = (SUM_Put('A',FL_SumaHistorica(...))) + (SUM_Put('B',SUM_Get('A',0)*ELEGIR(SUM_Get('A',0)>100,1.5,2))) + (SUM_Get('B',0)*ELEGIR(SUM_Get('B',0)>100,1.5,2)))
                  =============A================   ========================B==============================   ====================C=======================
 
Y en este caso, el recorrido de FL_SumaHistorica(...) se realiza SOLO UNA VEZ. Esto no solo es más eficiente, sino que es más fácil de mantener (los cálculos de A y de B NO ESTAN REPETIDOS)
 
- Ejemplo de uso 2:
 
Supongamos un Concepto B cuya Fórmula depende de un cálculo PARCIAL X que se hizo en un concepto anterior A, es decir, no es el importe de un concepto liquidado que se puede obtener usando FL_Concepto('A')
La fórmula del Concepto A sería algo así:
 
Fórmula A = X + FL_Algo ...
 
y la Fórmula del Concepto B sería algo así
 
Fórmula B = X + FL_AlgoMas ...
 
dónde X = FL_SumaHistorica(...)*ELEGIR(Categoria='xx',1.5,2.5) + ...
 
Claramente, hasta hoy la mejor forma de hacerlo era usar una función de cálculo. A partir de ahora, y para los casos que se evalúe que es mejor, utilizando las nuevas FUNCIONES DE SUMARIZADORES GLOBALES las fórmulas se pueden expresar como sigue:
 
Fórmula A = SPut('X',FL_SumaHistorica(...)*ELEGIR(Categoria='xx',1.5,2.5) + ...) + FL_Algo ...
 
Fórmula B = SGet('X',0) + FL_AlgoMas ...
 
Con la ventaja que el recorrido de registros para calcular X se realiza SOLO UNA VEZ.

The help manual was created with Dr.Explain