Del via


Konsolidere lagertransaktioner

Med tiden vil lagertransaktionstabellen (InventTrans) fortsætte med at vokse og forbruge mere databaseplads. Derfor bliver de forespørgsler, der foretages mod tabellen, efterhånden langsommere. I denne artikel beskrives, hvordan du kan bruge funktionen Konsolidering af lagertransaktion til at konsolidere data om lagertransaktioner for at forbedre systemets ydeevne.

Bemærk!

Kun økonomisk opdaterede lagertransaktioner kan konsolideres i en valgt lukket finansperiode. For at blive konsolideret skal økonomisk opdaterede udgående lagertransaktioner have afgangsstatussen Solgt, og indgående lagertransaktioner skal have tilgangsstatussen Købt.

Når du konsoliderer lagerposteringer, flyttes alle relaterede transaktioner til tabellen InventTransArchive . Lagerafgangstransaktioner og lagertilgangstransaktioner konsolideres separat baseret på kombinationen af vare-id (itemId) og lagerdimensions-id (inventDimId), og de placeres i transaktionerne for opsummeret afgang og opsummeret tilgang.

Hvis en itemId og kombination inventDimId kun indeholder én tilgangs- eller afgangstransaktion, konsolideres transaktionen ikke.

Bemærk!

Når du har konsolideret dine lagertransaktioner, kan du yderligere optimere lageret og systemets ydeevne ved hjælp af funktionen Arkivér med Dataverse langsigtet opbevaring til at flytte InventTransArchive poster til en Microsoft Azure datasø. Du kan finde flere oplysninger i Arkivere lagertransaktionsdata i Dynamics 365 Supply Chain Management.

Aktivere funktionen i systemet

Hvis dit system ikke allerede indeholder den funktion, der er beskrevet i denne artikel, skal du gå til Funktionsstyring og aktivere funktionen Konsolidering af lagertransaktion. Denne funktion kan ikke deaktiveres, når den er aktiveret.

Ting, du skal overveje, før du konsoliderer lagertransaktioner

Før du konsoliderer lagerposteringer, bør du overveje følgende forretningsscenarier, da de påvirkes af operationen:

  • Når du overvåger lagertransaktioner fra relaterede dokumenter, f.eks. indkøbsordrelinjer, vises de som konsoliderede. Hvis du vil gennemse de konsoliderede transaktioner, skal du gå til Lagerstyring > Periodiske opgaver > Ryd op > i Konsolidering af lagertransaktioner.
  • Lagerlukning kan ikke annulleres i konsoliderede perioder.
  • Standardomkostningskonvertering kan ikke udføres for konsoliderede perioder.
  • Lagerrapporter, der stammer fra lagertransaktioner, påvirkes, når du konsoliderer lagertransaktioner. Disse rapporter omfatter rapport over aldersfordelt lager og rapport over lagerværdier.
  • Lagerprognoser kan blive påvirket, hvis de køres i tidshorisonten for konsoliderede perioder.

Forudsætninger

Lagertransaktioner kan kun konsolideres i perioder, hvor følgende betingelser er opfyldt:

  • Finansperioden skal være lukket.
  • Lagerlukning skal køres på eller efter konsolideringsdatoen for til-perioden.
  • Perioden skal ligge mindst et år før konsolideringsdatoen fra perioden.
  • Der må ikke være eksisterende genberegninger af lager.

Konsolidere dine lagertransaktioner

Benyt følgende fremgangsmåde for at konsolidere lagertransaktioner.

  1. Gå til Lagerstyring>Periodiske opgaver>Ryd op>Konsolidering af lagertransaktion.

    Siden Konsolidering af lagertransaktion vises med en liste over konsoliderede procesposter.

  2. Vælg Lagertransaktionskonsolidering i handlingsruden for at oprette en lagertransaktionskonsolidering.

  3. Angiv følgende felter i oversigtspanelet Parametre i dialogboksen Konsolidering af lagertransaktion :

    • Fra dato i lukket finansperiode – Vælg den tidligste posteringsdato, der skal medtages i konsolideringen.
    • Til dato i lukket finansperiode – Vælg den nyeste posteringsdato, der skal medtages i konsolideringen.

    Bemærk!

    Det er kun perioder, der opfylder forudsætningerne, som kan vælges.

  4. Konfigurer batchafviklingsdetaljer efter behov i oversigtspanelet Kør i baggrunden. Følg de sædvanlige trin for batchjob i Microsoft Dynamics 365 Supply Chain Management.

  5. Vælg OK.

  6. Du modtager en meddelelse, hvor du bliver bedt om at bekræfte, at du vil fortsætte. Læs meddelelsen omhyggeligt, og vælg derefter Ja, hvis du vil fortsætte.

    Du modtager en meddelelse om, at konsolideringsjobbet for lagertransaktionen er føjet til batchkøen. Jobbet starter med at konsolidere lagerposteringer fra den valgte periode.

Få vist konsoliderede lagertransaktioner

Siden Konsolidering af lagertransaktion viser hele konsolideringshistorikken. Hver række i gitteret viser oplysninger som f.eks. den dato, hvor konsolideringen blev oprettet, den bruger, der oprettede den, og dens status.

Vælg en af følgende værdier på rullelisten øverst på siden for at filtrere de konsolideringer, der vises i gitteret:

  • Aktiv – Vis kun aktive konsolideringer.
  • Alle – Vis alle konsolideringer.

For hver konsolidering i gitteret angives følgende oplysninger:

  • Aktiv – En markering angiver, at konsolideringen er aktiv.
  • Fra dato – Datoen for den ældste transaktion, der kan medtages i konsolideringen.
  • Til dato – Datoen for den nyeste transaktion, der kan medtages i konsolideringen.
  • Planlagt af – Den brugerkonto, der oprettede konsolideringen.
  • Udført – Den dato, hvor konsolideringen blev oprettet.
  • Stop aktuel opdatering – En markering angiver, at konsolideringen er i gang, men at den er sat på pause.
  • Stat – Behandlingsstatus for konsolideringen. De mulige værdier er Venter, I gang og Udført.

Værktøjslinjen over gitteret indeholder følgende knapper, som du kan bruge til at arbejde med en valgt konsolidering:

  • Konsoliderede transaktioner – Få vist alle oplysninger om den valgte konsolidering. Siden Konsoliderede transaktioner , der vises, viser alle posteringerne i konsolideringen.

    Hvis du vil have vist flere oplysninger om en bestemt transaktion på siden Konsoliderede transaktioner , skal du vælge den i gitteret og derefter vælge Oplysninger om konsolideret transaktion i handlingsruden. Siden Konsoliderede transaktionsdetaljer , der vises, viser oplysninger som finanskontering, relaterede reskontroreferencer og økonomiske dimensioner.

  • Pause – Afbryd en valgt konsolidering, der aktuelt behandles, midlertidigt. Pausen træder først i kraft, når arkiveringsopgaven er genereret. Derfor kan der være en kort forsinkelse, før pausen træder i kraft. Hvis en konsolidering afbrydes midlertidigt, vises der en markering i feltet Stop aktuel opdatering .

  • Genoptag – Genoptag behandlingen for en valgt konsolidering, der aktuelt er sat på pause.

Udvide koden, så den understøtter brugerdefinerede felter

InventTrans Hvis tabellen indeholder et eller flere brugerdefinerede felter, skal du muligvis udvide koden for at understøtte dem, afhængigt af hvordan de er navngivet.

  • Hvis de brugerdefinerede felter fra InventTrans tabellen har de samme feltnavne som i InventtransArchive tabellen, betyder det, at de er 1:1 tilknyttet. Derfor kan du blot placere de brugerdefinerede felter i InventoryArchiveFields-feltgrupper i inventTrans-tabellen.
  • Hvis de brugerdefinerede feltnavne i InventTrans-tabellen ikke svarer til feltnavnene i InventtransArchive-tabellen, skal du tilføje kode for at tilknytte dem. Hvis du f.eks. har et systemfelt kaldet InventTrans.CreatedDateTime, skal du oprette et felt i tabellen InventTransArchive med et andet navn (f.eks. InventtransArchive.InventTransCreatedDateTime) og føje udvidelser til klasserne InventTransArchiveProcessTask og InventTransArchiveSqlStatementHelper, som vist i følgende eksempelkode.

I følgende eksempelkode kan du se, hvordan du kan føje den påkrævede udvidelse til klassen 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);
    }
}

I følgende eksempelkode kan du se, hvordan du kan føje den påkrævede udvidelse til klassen 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;
    }
}