Share via


Lagerbuchungen konsolidieren

Mit der Zeit wird die Bestandstransaktionstabelle (InventTrans) weiter wachsen und mehr Datenbankspeicherplatz verbrauchen. Daher werden die Abfragen, die gegen die Tabelle gemacht werden, allmählich langsamer werden. In diesem Artikel wird beschrieben, wie Sie mit der Funktion Konsolidierung von Lagertransaktionen Daten zu Lagertransaktionen konsolidieren und so die Systemleistung verbessern können.

Notiz

Nur finanziell aktualisierte Lagertransaktionen können in einer ausgewählten geschlossenen Hauptbuchperiode konsolidiert werden. Um konsolidiert zu werden, müssen finanziell aktualisierte ausgehende Lagertransaktionen den Ausgabestatus Verkauft und eingehende Lagertransaktionen den Empfangsstatus Gekauft aufweisen.

Wenn Sie Bestandstransaktionen konsolidieren, werden alle zugehörigen Transaktionen in die InventTransArchive Tabelle verschoben. Lagerabgangstransaktionen und Lagerzugangstransaktionen werden separat konsolidiert, basierend auf der Kombination aus Artikel-ID (itemId) und Lagerdimensions-ID (inventDimId), und in die zusammengefassten Abgangs- und Zugangstransaktionen eingefügt.

Wenn eine itemId und inventDimId Kombination nur eine Zugangs- oder Abgangstransaktion enthält, wird die Transaktion nicht konsolidiert.

Notiz

Nachdem Sie Ihre Bestandstransaktionen konsolidiert haben, können Sie die Speicher- und Systemleistung weiter optimieren, indem Sie die Funktion Archiv mit Dataverse Langzeitaufbewahrung verwenden, um InventTransArchive Datensätze in einen Microsoft Azure Datensee zu verschieben. Weitere Informationen finden Sie unter Archivieren von Bestandstransaktionsdaten in Dynamics 365 Supply Chain Management.

Funktion in Ihrem System aktivieren

Wenn Ihr System die in diesem Artikel beschriebene Funktion noch nicht enthält, gehen Sie zu Funktionsverwaltung und aktivieren Sie die Funktion Konsolidierung von Bestandstransaktionen . Diese Funktion kann nach der Aktivierung nicht mehr deaktiviert werden.

Was Sie vor der Konsolidierung von Lagertransaktionen beachten sollten

Bevor Sie Bestandstransaktionen konsolidieren, sollten Sie die folgenden Geschäftsszenarien berücksichtigen, da diese von dem Vorgang betroffen sind:

  • Wenn Sie Lagertransaktionen anhand zugehöriger Dokumente, z. B. Einkaufsbestellpositionen, prüfen, werden diese als konsolidiert angezeigt. Um die konsolidierten Transaktionen zu überprüfen, müssen Sie zu Lagerverwaltung > periodische Aufgaben > Bereinigen > Konsolidierung von Lagertransaktionen gehen.
  • Der Lagerabschluss kann für konsolidierte Zeiträume nicht storniert werden.
  • Für konsolidierte Zeiträume ist keine Standardkostenumrechnung möglich.
  • Wenn Sie Bestandstransaktionen konsolidieren, sind Bestandsberichte, die auf Bestandstransaktionen basieren, davon betroffen. Zu diesen Berichten gehören der Bestandsalterungsbericht und die Bestandswertberichte.
  • Bestandsprognosen können beeinträchtigt werden, wenn sie während des Zeithorizonts konsolidierter Perioden ausgeführt werden.

Erforderliche Komponenten

Bestandstransaktionen können nur in Zeiträumen konsolidiert werden, in denen die folgenden Bedingungen erfüllt sind:

  • Die Sachkontoperiode muss abgeschlossen sein.
  • Der Lagerabschluss muss am oder nach dem Bis-Periodendatum der Konsolidierung durchgeführt werden.
  • Die Periode muss mindestens ein Jahr vor dem Von-Perioden-Datum der Konsolidierung liegen.
  • Es dürfen keine Bestandsneuberechnungen vorhanden sein.

Konsolidieren Sie Ihre Lagertransaktionen

Um Lagertransaktionen zu konsolidieren, befolgen Sie diese Schritte.

  1. Gehen Sie zu Lagerverwaltung>periodische Aufgaben>Bereinigen>Konsolidierung von Lagertransaktionen.

    Die Seite Konsolidierung der Bestandstransaktionen wird angezeigt und zeigt eine Liste konsolidierter Prozessdatensätze.

  2. Wählen Sie im Aktionsbereich Bestandstransaktionskonsolidierung aus, um eine Bestandstransaktionskonsolidierung zu erstellen.

  3. Legen Sie im Dialogfeld Konsolidierung von Lagertransaktionen auf der Registerkarte Parameter die folgenden Felder fest:

    • Ab Datum im geschlossenen Hauptbuchzeitraum – Wählen Sie das früheste Transaktionsdatum aus, das in die Konsolidierung einbezogen werden soll.
    • Bisher im geschlossenen Hauptbuchzeitraum – Wählen Sie das neueste Transaktionsdatum aus, das in die Konsolidierung einbezogen werden soll.

    Notiz

    Nur Perioden, die die Voraussetzungen erfüllen, stehen zur Auswahl.

  4. Legen Sie auf dem Inforegister Im Hintergrund laufen lassen die Details der Batch-Verarbeitung wie gewünscht fest. Folgen Sie den üblichen Schritten für Batch-Jobs in Microsoft Dynamics 365 Supply Chain Management.

  5. Wählen Sie OK.

  6. Sie erhalten eine Meldung, in der Sie aufgefordert werden, zu bestätigen, dass Sie fortfahren möchten. Lesen Sie die Meldung aufmerksam durch und wählen Sie dann Ja, wenn Sie fortfahren möchten.

    Sie erhalten eine Nachricht, dass Ihr Auftrag zur Bestandstransaktionskonsolidierung zur Stapelwarteschlange hinzugefügt wurde. Der Job beginnt mit der Konsolidierung der Bestandstransaktionen aus dem ausgewählten Zeitraum.

Konsolidierte Bestandstransaktionen anzeigen

Auf der Seite Konsolidierung von Lagertransaktionen wird Ihr vollständiger Konsolidierungsverlauf angezeigt. Jede Zeile im Raster zeigt Informationen wie beispielsweise das Datum, an dem die Konsolidierung erstellt wurde, den Benutzer, der sie erstellt hat, und ihren Status.

Wählen Sie in der Dropdownliste oben auf der Seite einen der folgenden Werte aus, um die im Raster angezeigten Konsolidierungen zu filtern:

  • Aktiv – Nur aktive Konsolidierungen anzeigen.
  • Alle – Alle Konsolidierungen anzeigen.

Für jede Konsolidierung im Raster werden die folgenden Informationen bereitgestellt:

  • Aktiv – Ein Häkchen zeigt an, dass die Konsolidierung aktiv ist.
  • Von Datum – Das Datum der ältesten Transaktion, die in die Konsolidierung einbezogen werden kann.
  • Bis heute – Das Datum der neuesten Transaktion, die in die Konsolidierung einbezogen werden kann.
  • Geplant von – Das Benutzerkonto, das die Konsolidierung erstellt hat.
  • Ausgeführt – Das Datum, an dem die Konsolidierung erstellt wurde.
  • aktuelles Update stoppen – Ein Häkchen zeigt an, dass die Konsolidierung im Gange ist, aber angehalten wurde.
  • Status – Der Verarbeitungsstatus der Konsolidierung. Die möglichen Werte sind Wartend, In Bearbeitung und Fertig.

Die Symbolleiste über dem Raster enthält die folgenden Schaltflächen, die Sie zum Arbeiten mit einer ausgewählten Konsolidierung verwenden können:

  • Konsolidierte Transaktionen – Zeigen Sie alle Details der ausgewählten Konsolidierung an. Auf der angezeigten Seite Konsolidierte Transaktionen werden alle Transaktionen der Konsolidierung angezeigt.

    Um weitere Informationen zu einer bestimmten Transaktion auf der Seite Konsolidierte Transaktionen anzuzeigen, wählen Sie sie im Raster aus und wählen Sie dann im Aktionsbereich Details zur konsolidierten Transaktion aus. Auf der angezeigten Seite Konsolidierte Transaktionsdetails werden Informationen wie die Hauptbuchbuchung, zugehörige Nebenbuchverweise und Finanzdimensionen angezeigt.

  • Pause – Unterbricht eine ausgewählte Konsolidierung, die aktuell verarbeitet wird. Die Pause wird erst nach der Erstellung der Archivierungsaufgabe wirksam. Daher kann es eine kurze Verzögerung geben, bevor die Pause wirksam wird. Wenn eine Konsolidierung angehalten wird, wird in ihrem Feld aktuelles Update stoppen ein Häkchen angezeigt.

  • Fortsetzen – Setzen Sie die Verarbeitung für eine ausgewählte Konsolidierung fort, die derzeit angehalten ist.

Ihren Code erweitern, um benutzerdefinierte Felder zu unterstützen

Wenn die InventTrans Tabelle ein oder mehrere benutzerdefinierte Felder enthält, müssen Sie den Code möglicherweise erweitern, um sie zu unterstützen, je nachdem, wie sie benannt sind.

  • Wenn die benutzerdefinierten Felder aus der InventTrans Tabelle die gleichen Feldnamen haben wie in der InventtransArchive Tabelle, bedeutet dies, dass sie 1:1 zugeordnet sind. Daher können Sie die benutzerdefinierten Felder einfach in die InventoryArchiveFields-Feldergruppe der inventTrans-Tabelle einfügen.
  • Wenn die benutzerdefinierten Feldnamen in der InventTrans-Tabelle nicht mit den Feldnamen in der InventtransArchive-Tabelle übereinstimmen, dann müssen Sie Code hinzufügen, um sie zuzuordnen. Zum Beispiel, wenn Sie ein Systemfeld namens InventTrans.CreatedDateTime haben, dann müssen Sie ein Feld in der InventTransArchive-Tabelle erstellen mit einem anderen Namen (z. B. InventtransArchive.InventTransCreatedDateTime) und Erweiterungen zu den InventTransArchiveProcessTask- und InventTransArchiveSqlStatementHelper-Klassen hinzufügen, wie im folgenden Beispielcode gezeigt.

Im folgenden Beispielcode wird gezeigt, wie die erforderliche Erweiterung zur InventTransArchiveProcessTask-Klasse hinzugefügt wird.

[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);
    }
}

Im folgenden Beispielcode wird gezeigt, wie die erforderliche Erweiterung zur InventTransArchiveSqlStatementHelper-Klasse hinzugefügt wird.

[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;
    }
}