Konsolidace transakcí zásob
V průběhu času se bude tabulka transakcí zásob (InventTrans
) nadále zvětšovat 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 za účelem zlepšení výkonu systému.
Poznámka
Ve vybraném období uzavřené hlavní knihy lze konsolidovat pouze finančně aktualizované transakce zásob. Aby mohly být finančně aktualizované odchozí skladové transakce konsolidovány, musí mít stav výdeje Prodáno a příchozí skladové transakce musí mít stav příjmu Koupeno.
Při konsolidaci transakcí zásob se všechny související transakce přesunou InventTransArchive
do tabulky. Transakce výdeje zásob a transakce příjmu zásob jsou konsolidovány odděleně na základě kombinace ID položky (itemId
) a ID dimenze zásob (inventDimId
) a jsou vloženy do souhrnných transakcí výdeje a souhrnného příjmu.
itemId
Pokud kombinace 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 k přesunu InventTransArchive
záznamů do datového jezera Microsoft Azure . Další informace naleznete v tématu 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 funkci Konsolidace transakcí zásob. Tuto funkci nelze po povolení zakázat.
Co je třeba zvážit před konsolidací transakcí zásob
Před konsolidací transakcí zásob byste měli 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 Řízení zásob > Periodické úkoly > Vyčištění > Konsolidace transakcí zásob.
- Uzávěrku zásob nelze zrušit pro konsolidovaná období.
- Převod standardních nákladů nelze provést pro konsolidovaná období.
- Sestavy zásob, které pocházejí ze skladových transakcí, 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 spuštěny v časovém horizontu konsolidovaných období.
Předpoklady
Transakce zásob lze konsolidovat pouze v obdobích, 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 do období nebo po něm.
- Období musí být nejméně jeden rok před datem konsolidace z období.
- Nesmí existovat žádné stávající přepočty skladu.
Konsolidace transakcí zásob
Chcete-li konsolidovat transakce zásob, postupujte takto.
Přejděte na Řízení zásob>Periodické úkoly>Vyčištění>Konsolidace transakcí zásob.
Zobrazí se stránka Konsolidace transakcí zásob se seznamem konsolidovaných záznamů procesu.
V podokně akcí vyberte možnost Konsolidace transakcí zásob a vytvořte konsolidaci transakcí zásob.
V dialogovém okně Konsolidace transakcí zásob na záložce s náhledem Parametry nastavte následující pole:
- Od data v období uzavřené hlavní knihy – Vyberte nejstarší datum transakce, které chcete zahrnout do konsolidace.
- Do data v období uzavřené hlavní 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. Microsoft Dynamics 365 Supply Chain Management
Vyberte tlačítko 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 s oznámením, že úloha konsolidace transakcí zásob je přidána do dávkové fronty. Úloha začne konsolidovat transakce zásob z vybraného období.
Zobrazení konsolidovaných skladových transakcí
Stránka Konsolidace transakcí zásob zobrazuje ú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í – Zobrazit pouze aktivní konsolidace.
- Vše – Zobrazit všechny konsolidace.
Pro každou konsolidaci v mřížce jsou k dispozici následující informace:
- Aktivní – Zaškrtnutí označuje, že konsolidace je aktivní.
- Od data – Datum nejstarší transakce, kterou lze zahrnout do konsolidace.
- Do data – 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 konsolidace probíhá, ale byla pozastavena.
- 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 pro práci s vybraným sloučením:
Konsolidované transakce – Zobrazení úplných podrobností o vybrané konsolidaci. Zobrazená stránka Konsolidované transakce 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 Podrobnosti konsolidované transakce. Stránka s podrobnostmi o konsolidované transakci, která se zobrazí, zobrazuje informace, jako je zaúčtování hlavní knihy, související odkazy na dílčí hlavní knihu a finanční dimenze.
Pozastavit– Pozastaví vybranou konsolidaci, která je právě zpracovávána. 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 konsolidace pozastavena, zobrazí se v poli Zastavit aktuální aktualizaci značka zaškrtnutí.
Pokračovat – Obnoví zpracování vybrané konsolidace, která je aktuálně pozastavena.
Rozšiřte svůj kód o podporu vlastních polí
InventTrans
Pokud tabulka obsahuje jedno nebo více vlastních polí, možná budete muset kód rozšířit tak, aby je podporoval, v závislosti na tom, jak jsou pojmenována.
- Pokud mají vlastní pole z
InventTrans
tabulky stejné názvy polí jako vInventtransArchive
tabulce, znamená to, že jsou namapová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;
}
}