Udostępnij za pośrednictwem


Konsolidowanie transakcji magazynowych

Z czasem tabela transakcji magazynowej (InventTrans) będzie nadal wzrastać i zużywać więcej miejsca w bazie danych. Z tego względu kwerendy wykonane dla tej tabeli będą stopniowo coraz wolniejsze. W tym artykule opisano, jak można używać funkcji Archiwizuj transakcję magazynową do konsolidowania danych dotyczących transakcji magazynowych w celu zwiększenia wydajności systemu.

Uwaga

W wybranym zamkniętym okresie finansowym można skonsolidować tylko finansowo zaktualizowane transakcje magazynowe. Aby można było skonsolidować, finansowo zaktualizowane wychodzące transakcje magazynowe muszą mieć stan wydania Sprzedane, a przychodzące transakcje magazynowe muszą mieć stan przyjęcia Zakupione.

Podczas konsolidowania transakcji magazynowych wszystkie powiązane transakcje są przenoszone do tabeli InventTransArchive. Transakcje rozchodów magazynowych i transakcje przyjęcia materiałów są konsolidowane oddzielnie na podstawie kombinacji identyfikatora towaru (itemId) i identyfikatora wymiaru magazynowego (inventDimId) i są umieszczane w podsumowanych transakcjach rozchodów i zsumowanych przyjęć.

Jeśli kombinacja itemId i inventDimId zawiera tylko jedną transakcję przyjęcia lub wydania, transakcja nie zostanie skonsolidowana.

Uwaga

Po skonsolidowaniu transakcji magazynowych można jeszcze bardziej zoptymalizować wydajność przechowywania i systemu, używając funkcji Archiwizuj z przechowywaniem długoterminowym Dataverse, by przesunąć rekordy InventTransArchive do data lake Microsoft Azure. Aby uzyskać więcej informacji, zobacz Archiwizacja transakcji magazynowych w Dynamics 365 Supply Chain Management.

Włączanie funkcji w systemie

Jeśli Twój system nie zawiera jeszcze funkcji opisanych w tym artykule, przejdź do Zarządzanie funkcjami i włącz funkcję Konsolidacja transakcji magazynowych. Tej funkcji nie można wyłączyć po jej włączeniu.

Co należy wziąć pod uwagę przed skonsolidować transakcje magazynowe

Przed konsolidacją transakcji magazynowych należy uwzględnić następujące scenariusze biznesowe, ponieważ operacja będzie dotyczyć ich:

  • Podczas inspekcji transakcji magazynowych z powiązanych dokumentów, takich jak wiersze zamówień zakupu, są one pokazywane jako skonsolidowane. Aby przejrzeć skonsolidowane transakcje, musisz przejść do Zarządzanie zapasami > Zadania okresowe > Oczyszczanie > Konsolidacja transakcji magazynowych.
  • Nie można anulować zamknięcia magazynu dla skonsolidowanego okresu.
  • Nie można wykonać konwersji na koszt standardowy dla skonsolidowanego okresu.
  • Archiwizacja transakcji magazynowych ma wpływ na raporty zapasów, które pochodzą ze skonsolidowanych transakcji magazynowych. Raporty te zawierają raporty wiekowania zapasów i raporty wartości zapasów.
  • Może to mieć wpływ na prognozy zapasów, jeśli są uruchamiane w czasie horyzontu skonsolidowanego okresu.

Wymagania wstępne

Transakcje magazynowe można skonsolidować tylko w okresach, w których są spełnione następujące warunki:

  • Okres księgi musi być zamknięty.
  • Zamykanie magazynu musi być uruchomione do daty konsolidacji lub późniejszej.
  • Okres musi być co najmniej rok przed datą od okresu konsolidacji.
  • Nie mogą być żadne istniejące ponowne przeliczenia zapasów.

Konsolidowanie transakcji magazynowych

Aby skonsolidować transakcje magazynowe, wykonaj następujące kroki.

  1. Przejdź do Zarządzanie zapasami>Zadania okresowe>Oczyszczanie>Konsolidacja transakcji magazynowych.

    Zostanie wyświetlona strona Konsolidacja transakcji magazynowych z listą konsolidacja rekordu procesu.

  2. W okienku akcji wybierz opcję Konsolidacja transakcji magazynowych, aby utworzyć konsolidacji transakcji magazynowych.

  3. W oknie dialogowym Konsolidacja transakcji magazynowych na skróconej karcie Parametry ustaw następujące pola:

    • Data początkowa w okresie zamkniętej księgi — umożliwia wybór najwcześniejszej daty transakcji, która ma zostać uwzględniona w konsolidacji.
    • Do dnia w zamkniętym okresie księgi — umożliwia wybór najpóźniejszej daty transakcji, która ma zostać uwzględniona w konsolidacji.

    Uwaga

    Do wyboru będą dostępne tylko okresy spełniające wymagania wstępne.

  4. Na skróconej karcie Uruchom w tle skonfiguruj szczegóły przetwarzania wsadowego. Postępuj zgodnie ze zwykłymi krokami dla zadań wsadowych Microsoft Dynamics 365 Supply Chain Management.

  5. Wybierz OK.

  6. Zostanie wyświetlony komunikat z monitem o potwierdzenie, że chcesz kontynuować. Przeczytaj uważnie wiadomość, a następnie wybierz przycisk Tak, jeśli chcesz kontynuować.

    Zostanie wyświetlony komunikat informujący, że zadanie konsolidacji transakcji magazynowych zostało dodane do kolejki przetwarzania wsadowego. Zadanie rozpocznie teraz konsolidację transakcji magazynowych z wybranego okresu.

Wyświetl skonsolidowane transakcje magazynowe

Strona Konsolidacji transakcji magazynowych pokazuje pełną historię konsolidacji. Każdy wiersz w siatce zawiera informacje, takie jak data utworzenia konsolidacji, użytkownik, który je utworzył, oraz jego stan.

Z listy rozwijanej w górnej części strony wybierz jedną z następujących wartości, aby przefiltrować konsolidacje pokazywane w siatce:

  • Aktywne – Pokaż tylko aktywne konsolidacje.
  • Wszystkie – Pokaż wszystkie konsolidacje.

Dla każdego konsolidacje w siatce są dostarczane następujące informacje:

  • Aktywna – Znacznik wyboru wskazuje, że konsolidacja jest aktywna.
  • Data początkowa — data najstarszej transakcji, która może zostać uwzględniona w konsolidacji.
  • Do dnia — data najnowszej transakcji, która może zostać uwzględniona w konsolidacji.
  • Zaplanowane przez – konto użytkownika, które utworzyło konsolidację.
  • Wykonano — data utworzenia konsolidacji.
  • Zatrzymaj bieżącą aktualizację – Znacznik wyboru wskazuje, że konsolidacja jest w toku, ale została wstrzymana.
  • Stan – stan przetwarzania konsolidacji. Możliwe wartości to Oczekujące, W toku i Zakończone.

Pasek narzędzi nad siatką zawiera następujące przyciski, których można używać do pracy z wybranym konsolidacji:

  • Transakcje skonsolidowane— umożliwia wyświetlenie pełnych szczegółów wybranej konsolidacji. Na stronie Skonsolidowane transakcje wyświetlane są wszystkie transakcje z konsolidacji.

    Aby wyświetlić więcej informacji o określonej transakcji na stronie Skonsolidowane transakcje, zaznacz ją w siatce, a następnie w okienku akcji wybierz opcję Szczegóły skonsolidowanej transakcji. Na stronie Szczegółów skonsolidowanych transakcji są wyświetlane informacje, takie jak księgowanie w księdze, powiązane odwołania do księgi podrzędnej i wymiary finansowe.

  • Pauza — Wstrzymaj wybraną konsolidację, która jest aktualnie przetwarzana. Wstrzymanie następuje dopiero po wygenerowaniu zadania archiwizacji. Dlatego może wystąpić krótkie opóźnienie, zanim wstrzymanie zacznie obowiązywać. Jeśli konsolidacja została wstrzymana, w polu Zatrzymaj bieżącą aktualizację jest wyświetlany znacznik wyboru.

  • Wznów — wznawianie przetwarzania wybranej konsolidacji, która jest obecnie wstrzymana.

Rozszerzaj kod na pola niestandardowe

Jeśli tabela InventTrans zawiera jedno lub więcej pól niestandardowych, może być konieczne rozszerzenie kodu w celu ich obsługi, w zależności od nazwy.

  • Jeśli pola niestandardowe tabeli mają InventTrans takie same nazwy InventtransArchive jak w tabeli, oznacza to, że są mapowane w 1:1. W związku z tym można właśnie umieścić pola niestandardowe w grupie InventoryArchiveFields pól inventTrans tabeli.
  • Jeśli nazwy niestandardowych pól w tabeli InventTrans nie są zgodne z nazwami pól w tabeli InventtransArchive, musisz dodać kod, aby je zamapować. Na przykład, jeśli masz pole systemowe o nazwie InventTrans.CreatedDateTime, musisz utworzyć pole w tabeli InventTransArchive o innej nazwie (np. InventtransArchive.InventTransCreatedDateTime) i dodać rozszerzenia do InventTransArchiveProcessTask i InventTransArchiveSqlStatementHelper, jak pokazano w poniższym przykładowym kodzie.

Poniższy przykładowy kod przedstawia przykład dodawania wymaganego rozszerzenia do klasy 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);
    }
}

Poniższy przykładowy kod przedstawia przykład dodawania wymaganego rozszerzenia do klasy 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;
    }
}