Článek: AN0002462Aktualizováno:: 01.06.2021
Podle požadavků navrhneme datový model.
Následně zpracujeme data soustavou dotazů.
V rámci optimalizace můžeme implementovat zvláštní tabulku, která bude obsahovat výsledky přepočtu nákladů. Tento přepočet bude ručně spouštěn Správce řešení tlačítkem Přepočítat na stránce Dashboard alokace nákladů. Toto tlačítko typu Skript spustí funkci RefreshData() z bloku skriptu recalculate.
//#block recalculate
RefreshData();
Tato funkce vloží do tabulky správné výsledky, které se pak použijí pro zobrazování reportů. Pokud ve vstupních datech nedošlo ke změnám, není třeba provádět přepočet, pokaždé když se zobrazuje report. Použitím tabulky s výsledky zrychlíme zobrazení reportu.
Blok skriptu:
function RefreshData()
{
var m = OG.Model.GetByCode('cost_allocation');
var clTotalGroup = m.ClassDefs['total_group_materialized'];
var qTotalGroup = m.Queries['qtotal_group'];
OG.Sql.RunSql('delete from ' + clTotalGroup.DBTableName);
var colAmount = clTotalGroup.Columns['amount'];
var colCountry = clTotalGroup.Columns['country'];
var colPeriod = clTotalGroup.Columns['period'];
var colTeam = clTotalGroup.Columns['team'];
var colAmount2 = qTotalGroup.Columns['amount'];
var colCountry2 = qTotalGroup.Columns['country___country'];
var colPeriod2 = qTotalGroup.Columns['period___period'];
var colTeam2 = qTotalGroup.Columns['team___team'];
var sql = OG.TextUtils.Format(
'insert into {0} ({2},{3},{4},{5}, CreatedDataSourceId) select Amount,country___country,period___period,team___team, 1 from ({1}) d',
clTotalGroup.DBTableName, qTotalGroup.QuerySqlDB,
colAmount.DBColumnName, colCountry.DBColumnName, colPeriod.DBColumnName, colTeam.DBColumnName,
colAmount2.DBColumnName, colCountry2.DBColumnName, colPeriod2.DBColumnName, colTeam2.DBColumnName
);
OG.Sql.RunSql(sql);
}