Sdílet prostřednictvím


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.

  1. 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.

  2. V podokně akcí vyberte možnost Konsolidace transakcí zásob a vytvořte konsolidaci transakcí zásob.

  3. 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.

  4. 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

  5. Vyberte tlačítko OK.

  6. 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 v InventtransArchive tabulce, znamená to, že jsou namapována 1:1. Proto stačí vložit vlastní pole do tabulky InventoryArchiveFields pole skupiny inventTrans.
  • Pokud názvy vlastních polí v tabulce InventTrans neodpovídají názvům polí v tabulce InventtransArchive, pak je třeba přidat kód k jejich mapování. Pokud máte například systémové pole s názvem InventTrans.CreatedDateTime, pak musíte vytvořit pole v tabulce InventTransArchive s jiným názvem (např. InventtransArchive.InventTransCreatedDateTime) a přidat rozšíření do třídy InventTransArchiveProcessTask 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;
    }
}