Dynamické tabulky ve výpočtech

Objekt dt je dotazovací rozhraní nad dynamickými tabulkami, dostupné v každém výpočtu úkolu (na záložce Výpočty i ve sdílených skriptech typu Výpočty). Na rozdíl od staršího lib.dynamicTableGetCell/dynamicTableUpdateCell (viz Reference API výpočtů: knihovna lib) pracuje stylem „query builder“: zavoláte dt.from(...), přidáte podmínky where... a teprve pak zavoláte get(), update() nebo remove(). Tento článek je referencí pro TAS 5.19.12.

// Najde řádek dodavatele podle IČO a přečte jeho e-mail
const rows = await dt.from('Suppliers', ['COL_2', 'COL_4']).whereCol('COL_1', vars['SupplierIco'].getValue()).get();
vars['SupplierEmail'].setValue(rows[0] ? rows[0].COL_4 : null);

Založení dotazu

MetodaVracíPopis
from(dt, columns?)Promise<this>Nastaví práci s tabulkou dt (název nebo ID) a zruší předchozí filtry. columns (pole, např. ['COL_1', 'COL_3']) omezí načítané sloupce – bez něj se načtou všechny, což je pomalejší.
select(columns)Promise<this>Alternativa k zadání sloupců v from() – musí se volat hned po from() a nelze kombinovat s columns v from().

Sloupce se zadávají jako COL_1, COL_2... (pořadové číslo sloupce), nebo přímo číslem – whereCol(1, ...) i whereCol('COL_1', ...) fungují stejně.

Filtrování (where)

MetodaPopis
whereCol(column, value, operator='=')Zafiltruje na hodnotu sloupce. operator: =, <, >, <=, >=, like, not like, <>.
orWhereCol(column, value, operator='=')Totéž, ale spojené s předchozí podmínkou přes OR.
whereIndex(index, operator='=') / orWhereIndex(index, operator='=')Zafiltruje na index řádku (DTV_INDEX).
whereNullCol(column) / whereNotNullCol(column)Řádky, kde je/není sloupec null (netýká se prázdného řetězce '').
orderBy(column, direction='asc', sortType='text')Seřadí výsledek. column musí být COL_{n}, DTV_INDEX nebo DTV_ORDER_INDEX; sortType text nebo number.

Víc volání whereCol/whereIndex se skládá dohromady (AND, pokud nepoužijete orWhereCol/orWhereIndex).

const rows = await dt.from('Suppliers')
    .whereCol('COL_3', 'CZ', 'like')
    .whereNotNullCol('COL_4')
    .orderBy('COL_1', 'asc')
    .get();

Čtení dat

MetodaVracíPopis
get()Promise<object[]>Vrátí řádky podle nastaveného filtru. Bez where podmínky načte (a zaloguje varování) celou tabulku.
getFirst()Promise<object | null>První řádek výsledku.
getLast()Promise<object | null>Poslední řádek výsledku.
count()Promise<number>Počet odpovídajících řádků.
getCell(dt, index, col)Promise<string | null>Zkratka: najde řádek podle indexu a vrátí hodnotu jednoho sloupce, bez nutnosti volat from/where zvlášť.
getCols()Promise<object>Mapování názvů a ID sloupců tabulky obousměrně ({1: 'COL_1', COL_1: 1, ...}).
getId()Promise<number | string>ID tabulky nastavené přes from().
getSourceFiles(returnOnlyLastRecord)Promise<object[]>Historie souborů, ze kterých se tabulka naplnila importem; true vrátí jen poslední záznam.
const unitPrice = await dt.getCell('Price list', vars['ItemCode'].getValue(), 'COL_3');

Zápis a mazání

MetodaVracíPopis
update(column, value)Promise<number>Upraví sloupec vybraných řádků (dle where). column může být i objekt {COL_1: '...', COL_2: '...'} pro víc sloupců najednou – pak se value ignoruje. Vrací počet upravených sloupců.
addRow(index, data)Promise<number>Založí nový řádek s daným indexem a daty {COL_1: '...', ...}.
addEmptyRow(index)Promise<number>Zastaralé, použijte addRow. Založí prázdný řádek.
remove(removeLimit=10)Promise<number>Smaže řádky odpovídající filtru a vrátí jejich počet. Bez filtru maže celou tabulku. Přesáhne-li počet mazaných řádků removeLimit, vyhodí výjimku místo smazání – pojistka proti omylu.
// Zdraží všechny položky dodavatele o 5 %
const rows = await dt.from('Price list').whereCol('COL_2', vars['SupplierId'].getValue()).get();
for (const row of rows) {
    await dt.from('Price list').whereIndex(row.DTV_INDEX).update('COL_3', Number(row.COL_3) * 1.05);
}

// Smaže položky ceníku starší než loňský rok (s pojistkou max. 50 řádků)
await dt.from('Price list').whereCol('COL_5', '2025-01-01', '<').remove(50);
remove() bez filtru smaže celou tabulku
dt.remove() bez předchozího whereCol/whereIndex smaže všechny řádky. Vždy nejdřív zúžte výběr filtrem a removeLimit nastavte o málo nad očekávaný počet mazaných řádků, abyste při chybě ve filtru dostali výjimku místo hromadného smazání.
Oprávnění k tabulce
dt.from() interně ověří, že dynamickou tabulku smí aktuální proces volat (nastavuje se u tabulky v administraci). Pokud ne, vyhodí výjimku Dynamic table '...' cannot be called from this Process.

Související: Dynamické tabulky (administrace), Reference API výpočtů: knihovna lib, Dynamické řádky: skript.

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)