Konsolidace transakcí zásob
Postupem času bude tabulka transakcí inventáře (InventTrans
) nadále růst a spotřebovávat více místa v databázi. Proto se dotazy spouštěné proti této tabulce postupně zpomalí. Tento článek popisuje, jak můžete použít funkci Konsolidace transakcí zásob ke konsolidaci dat o transakcích zásob a zlepšit výkon systému.
Poznámka
Ve vybraném období uzavřené účetní knihy lze konsolidovat pouze finančně aktualizované transakce zásob. Aby bylo možné konsolidovat, musí mít finančně aktualizované odchozí transakce zásob stav vydání Prodáno a příchozí transakce zásob musí mít stav příjmu Zakoupeno.
Když konsolidujete transakce zásob, všechny související transakce se přesunou do tabulky InventTransArchive
. Transakce výdeje zásob a transakce příjmu zásob jsou konsolidovány samostatně na základě kombinace ID položky (itemId
) a ID dimenze zásob (inventDimId
) a jsou vloženy do souhrnu výdej a souhrnné příjmové transakce.
Pokud kombinace itemId
a inventDimId
obsahuje pouze jednu transakci příjmu nebo výdeje, transakce nebude konsolidována.
Poznámka
Po konsolidaci transakcí zásob můžete dále optimalizovat výkon úložiště a systému pomocí funkce Archiv s Dataverse dlouhodobým uchováváním funkce přesunout InventTransArchive
záznamy do Microsoft Azure datového jezera. Další informace naleznete v části Archivace dat transakcí zásob v Dynamics 365 Supply Chain Management.
Zapnutí funkce ve vašem systému
Pokud váš systém ještě neobsahuje funkci popsanou v tomto článku, přejděte na Správa funkcí a zapněte Konsolidaci transakcí zásob funkce. Tuto funkci nelze po aktivaci deaktivovat.
Věci, které je třeba zvážit před konsolidací transakcí zásob
Než budete konsolidovat transakce zásob, měli byste zvážit následující obchodní scénáře, protože budou ovlivněny operací:
- Když auditujete transakce zásob ze souvisejících dokumentů, jako jsou řádky nákupní objednávky, zobrazí se jako konsolidované. Chcete-li zkontrolovat konsolidované transakce, musíte přejít na Správa zásob > Pravidelné úkoly > Vyčištění > Konsolidace transakcí zásob.
- Uzavření zásob nelze zrušit pro konsolidovaná období.
- Standardní konverzi nákladů nelze provést pro konsolidovaná období.
- Sestavy zásob, které pocházejí z transakcí zásob, jsou ovlivněny při konsolidaci transakcí zásob. Mezi tyto sestavy patří sestava prodlení zásob a sestavy hodnoty skladu.
- Prognózy zásob mohou být ovlivněny, pokud jsou spouštěny v časovém horizontu konsolidovaných období.
Předpoklady
Transakce se zásobami lze konsolidovat pouze během období, kdy jsou splněny následující podmínky:
- Období hlavní knihy musí být uzavřeno.
- Uzávěrka zásob musí být spuštěna k datu konsolidace k účetnímu období nebo po něm.
- Období musí být alespoň jeden rok před datem období od konsolidace.
- Nesmí existovat žádné stávající přepočty skladu.
Konsolidujte své transakce se zásobami
Chcete-li konsolidovat transakce zásob, postupujte takto.
Přejděte na Správa zásob>Pravidelné úkoly>Vyčištění>Konsolidace transakcí zásob.
Zobrazí se stránka Konsolidace transakcí zásob a zobrazí se seznam konsolidovaných záznamů procesů.
V podokně akcí vyberte Konsolidace transakcí zásob a vytvořte konsolidaci transakcí zásob.
V dialogovém okně Konsolidace transakcí zásob na rychlé záložce Parametry nastavte následující pole:
- Od data v období uzavřené účetní knihy – Vyberte nejstarší datum transakce, které chcete zahrnout do konsolidace.
- K datu v období uzavřené účetní knihy – Vyberte nejnovější datum transakce, které chcete zahrnout do konsolidace.
Poznámka
Vybrat bude možné pouze období, která splňují předpoklady.
Na záložce Spustit na pozadí nastavte detaily dávkového zpracování podle potřeby. Postupujte podle obvyklých kroků pro dávkové úlohy v Microsoftu Dynamics 365 Supply Chain Management.
Vyberte OK.
Zobrazí se zpráva s výzvou k potvrzení, že chcete pokračovat. Přečtěte si pozorně zprávu a poté vyberte Ano, pokud chcete pokračovat.
Zobrazí se zpráva oznamující, že vaše úloha konsolidace transakcí zásob byla přidána do dávkové fronty. Úloha začne konsolidovat transakce zásob z vybraného období.
Zobrazit konsolidované transakce zásob
Stránka Konsolidace transakcí zásob zobrazuje vaši úplnou historii konsolidace. Každý řádek v mřížce zobrazuje informace, jako je datum vytvoření konsolidace, uživatel, který ji vytvořil, a její stav.
V rozevíracím seznamu v horní části stránky vyberte jednu z následujících hodnot pro filtrování konsolidací zobrazených v mřížce:
- Aktivní – Zobrazí pouze aktivní konsolidace.
- Vše – Zobrazit všechny konsolidace.
Pro každou konsolidaci v mřížce jsou uvedeny následující informace:
- Aktivní – Zaškrtnutí označuje, že sloučení je aktivní.
- Od data – Datum nejstarší transakce, kterou lze zahrnout do konsolidace.
- Dodnes – Datum nejnovější transakce, kterou lze zahrnout do konsolidace.
- Naplánováno – uživatelský účet, který vytvořil konsolidaci.
- Provedeno – Datum, kdy byla konsolidace vytvořena.
- Zastavit aktuální aktualizaci – Zaškrtnutí označuje, že slučování probíhá, ale bylo pozastaveno.
- Stav – Stav zpracování konsolidace. Možné hodnoty jsou Čekání, Probíhá, a Dokončeno.
Panel nástrojů nad mřížkou obsahuje následující tlačítka, která můžete použít k práci s vybranou konsolidací:
Konsolidované transakce – zobrazí úplné podrobnosti o vybrané konsolidaci. Zobrazí se stránka Konsolidované transakce , která zobrazuje všechny transakce v konsolidaci.
Chcete-li zobrazit další informace o konkrétní transakci na stránce Konsolidované transakce , vyberte ji v mřížce a poté v podokně akcí vyberte možnost Konsolidované podrobnosti transakce. Zobrazí se stránka Konsolidované podrobnosti transakce , která zobrazuje informace, jako je zaúčtování hlavní knihy, související odkazy na dílčí knihy a finanční dimenze.
Pozastavit – Pozastaví vybranou konsolidaci, která se právě zpracovává. Pozastavení se projeví až po vygenerování úlohy archivace. Proto může dojít k krátkému zpoždění, než se pozastavení projeví. Pokud je sloučení pozastaveno, zobrazí se v poli Zastavit aktuální aktualizaci zaškrtnutí.
Obnovit – Obnovit zpracování vybrané konsolidace, která je aktuálně pozastavena.
Rozšiřte svůj kód o podporu vlastních polí
Pokud tabulka InventTrans
obsahuje jedno nebo více vlastních polí, možná budete muset rozšířit kód, aby je podporoval, v závislosti na tom, jak jsou pojmenována.
- Pokud vlastní pole z tabulky
InventTrans
mají stejné názvy polí jako v tabulceInventtransArchive
, znamená to, že jsou mapována 1:1. Proto stačí vložit vlastní pole do tabulkyInventoryArchiveFields
pole skupinyinventTrans
. - Pokud názvy vlastních polí v tabulce
InventTrans
neodpovídají názvům polí v tabulceInventtransArchive
, pak je třeba přidat kód k jejich mapování. Pokud máte například systémové pole s názvemInventTrans.CreatedDateTime
, pak musíte vytvořit pole v tabulceInventTransArchive
s jiným názvem (např.InventtransArchive.InventTransCreatedDateTime
) a přidat rozšíření do třídyInventTransArchiveProcessTask
aInventTransArchiveSqlStatementHelper
, jak je znázorněno v následujícím ukázkovém kódu.
Následující ukázka kódu ukazuje příklad, jak přidat požadované rozšíření do třídy InventTransArchiveProcessTask
.
[ExtensionOf(classStr(InventTransArchiveProcessTask))]
Final class InventTransArchiveProcessTask_Extension
{
protected void addInventTransFields(SysDaSelection _selectionObject)
{
_selectionObject.add(fieldStr(InventTrans, ModifiedBy))
.add(fieldStr(InventTrans, CreatedBy)).add(fieldStr(InventTrans, CreatedDateTime));
next addInventTransFields(_selectionObject);
}
protected void addInventTransArchiveFields(SysDaSelection _selectionObject)
{
_selectionObject.add(fieldStr(InventTransArchive, InventTransModifiedBy))
.add(fieldStr(InventTransArchive, InventTransCreatedBy)).add(fieldStr(InventTransArchive, InventTransCreatedDateTime));
next addInventTransArchiveFields(_selectionObject);
}
}
Následující ukázka kódu ukazuje příklad, jak přidat požadované rozšíření do třídy InventTransArchiveSqlStatementHelper
.
[ExtensionOf(classStr(InventTransArchiveSqlStatementHelper))]
final class InventTransArchiveSqlStatementHelper_Extension
{
private str inventTransModifiedBy;
private str inventTransCreatedBy;
private str inventTransCreatedDateTime;
protected void initialize()
{
next initialize();
inventTransModifiedBy = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, ModifiedBy)).name(DbBackend::Sql);
inventTransCreatedDateTime = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, CreatedDateTime)).name(DbBackend::Sql);
inventTransCreatedBy = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, CreatedBy)).name(DbBackend::Sql);
}
protected str buildInventTransArchiveSelectionFieldsStatement()
{
str ret;
ret = next buildInventTransArchiveSelectionFieldsStatement();
if (inventTransModifiedBy)
{
ret += ',';
ret += strFmt('%1', new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransModifiedBy)).name(DbBackend::Sql));
}
if (inventTransCreatedBy)
{
ret += ',';
ret += strFmt('%1', new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransCreatedBy)).name(DbBackend::Sql));
}
if (inventTransCreatedDateTime)
{
ret += ',';
ret += strFmt('%1', new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransCreatedDateTime)).name(DbBackend::Sql));
}
return ret;
}
protected str buildInventTransTargetFieldsStatement()
{
str ret;
ret = next buildInventTransTargetFieldsStatement();
if (inventTransModifiedBy)
{
ret += ',';
ret += strFmt('%1', inventTransModifiedBy);
}
if (inventTransCreatedBy)
{
ret += ',';
ret += strFmt('%1', inventTransCreatedBy);
}
if (inventTransCreatedDateTime)
{
ret += ',';
ret += strFmt('%1', inventTransCreatedDateTime);
}
return ret;
}
}