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.