Del via


Konsolider lagertransaksjoner

Over tid vil lagertransaksjonstabellen (InventTrans) fortsette å vokse og forbruke mer databaseplass. Spørringer som opprettes mot tabellen, vil derfor gradvis gå saktere. Denne artikkelen beskriver hvordan du kan bruke funksjonen for lagertransaksjonskonsolidering til å konsolidere data om lagertransaksjoner for å forbedre systemytelsen.

Notat

Bare økonomisk oppdaterte lagertransaksjoner kan konsolideres i en valgt lukket finansperiode. Hvis du vil konsolidere, må økonomisk oppdaterte utgående lagertransaksjoner ha avgangsstatusen Solgt, og innkommende lagertransaksjoner må ha tilgangsstatusen Kjøpt.

Når du konsoliderer lagertransaksjoner, blir alle tilknyttede transaksjoner flyttet til InventTransArchive tabellen. Lageravgangstransaksjoner og lagermottakstransaksjoner konsolideres separat, basert på kombinasjonen av vare-IDen (itemId) og lagerdimensjons-ID (inventDimId), og de settes inn i den summerte avgangen og summerte mottakstransaksjoner.

Hvis en itemId kombinasjon inventDimId bare inneholder én mottaks- eller avgangstransaksjon, blir ikke transaksjonen konsolidert.

Notat

Når lagertransaksjonene er konsolidert, kan du ytterligere optimalisere lagrings- og systemytelsen Dataverse InventTransArchive min ved hjelp av arkivet med langsiktig oppbevaringsfunksjon for å flytte poster til en Microsoft Azure dataoppretting. Hvis du vil ha mer informasjon , kan du se Arkivere lagertransaksjonsdata i Dynamics 365 Supply Chain Management.

Aktivere funksjonen i systemet

Hvis systemet ikke allerede inneholder funksjonen som er beskrevet i denne artikkelen, kan du gå til Funksjonsstyring og aktivere funksjonen For lagertransaksjonskonsolidering . Denne funksjonen kan ikke deaktiveres etter at den er aktivert.

Ting du bør vurdere før du konsoliderer lagertransaksjoner

Før du konsoliderer lagertransaksjoner, bør du vurdere følgende forretningsscenarier, fordi de vil bli påvirket av operasjonen:

  • Når du overvåker lagertransaksjoner fra tilknyttede dokumenter, for eksempel bestillingslinjer, vises de som konsolidert. Hvis du vil gå gjennom de konsoliderte transaksjonene, må du gå til > Periodiske oppgaver for > lagerstyring, Rydde opp i > lagertransaksjonskonsolideringen.
  • Lagerlukking kan ikke avbrytes for konsoliderte perioder.
  • Standard kostnadskonvertering kan ikke utføres for konsoliderte perioder.
  • Lagerrapporter som kommer fra lagertransaksjoner, påvirkes når du konsoliderer lagertransaksjoner. Disse rapportene omfatter rapporten for aldersfordeling for lager og lagerverdirapporter.
  • Lagerprognoser kan bli påvirket hvis de kjøres i løpet av de konsoliderte periodenes tidshorisont.

Nødvendig programvare

Lagertransaksjoner kan bare konsolideres i perioder der følgende betingelser er oppfylt:

  • Finansperioden må være avsluttet.
  • Lagerlukking må kjøres på eller etter til-periodedatoen for konsolideringen.
  • Perioden må være minst ett år før konsolideringens fra-periodedato.
  • Det må ikke finnes eksisterende lagerberegninger.

Konsolidere lagertransaksjonene

Følg denne fremgangsmåten for å konsolidere lagertransaksjoner.

  1. Gå til periodiske oppgaver for lagerstyring, Rydde opp i lagertransaksjonskonsolidering>>.>

    Siden for konsolidering av lagertransaksjon vises og viser en liste over konsoliderte prosessposter.

  2. Velg Lagertransaksjonskonsolidering i handlingsruten for å opprette en lagertransaksjonskonsolidering.

  3. I dialogboksen Hurtigtab for lagertransaksjonskonsolidering angir du følgende felt:

    • Fra dato i lukket finansperiode – Velg den tidligste transaksjonsdatoen som skal tas med i konsolideringen.
    • Til dato i lukket finansperiode – Velg den nyeste transaksjonsdatoen som skal tas med i konsolideringen.

    Notat

    Bare perioder som oppfyller forutsetningene, vil være tilgjengelige for valg.

  4. Definer detaljer for satsvis behandling i hurtigfanen Kjør i bakgrunnen etter behov. Følg de vanlige trinnene for satsvise jobber i Microsoft Dynamics 365 Supply Chain Management.

  5. Velg OK.

  6. Du får en melding som ber deg om å bekrefte at du ønsker å fortsette. Les meldingen nøye, og velg deretter Ja hvis du vil fortsette.

    Du mottar en melding som angir at konsolideringsjobben for lagertransaksjonen er lagt til i den satsvise køen. Jobben begynner å konsolidere lagertransaksjoner fra den valgte perioden.

Vise konsoliderte lagertransaksjoner

Siden for konsolidering av lagertransaksjoner viser hele konsolideringshistorikken. Hver rad i rutenettet viser informasjon som datoen da konsolideringen ble opprettet, brukeren som opprettet den, og statusen den hadde.

I rullegardinlisten øverst på siden velger du én av følgende verdier for å filtrere konsolideringene som vises i rutenettet:

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

Følgende informasjon vises for hver konsolidering i rutenettet:

  • Aktiv – En hake angir at konsolideringen er aktiv.
  • Fra dato – Datoen for den eldste transaksjonen som kan inkluderes i konsolideringen.
  • Til dato – Datoen for den nyeste transaksjonen som kan inkluderes i konsolideringen.
  • Planlagt av – Brukerkontoen som opprettet konsolideringen.
  • Utført – Datoen da konsolideringen ble opprettet.
  • Stopp gjeldende oppdatering – En hake angir at konsolideringen pågår, men at den er stoppet midlertidig.
  • Stat – Behandlingsstatusen for konsolideringen. De mulige verdiene er Venter, Pågår og Avsluttet.

Verktøylinjen over rutenettet inneholder følgende knapper som du kan bruke til å arbeide med en valgt konsolidering:

  • Konsoliderte transaksjoner – Vis alle detaljer om den valgte konsolideringen. Siden Konsoliderte transaksjoner, som vises, viser alle transaksjonene i konsolideringen.

    Hvis du vil vise mer informasjon om en bestemt transaksjon på siden Konsoliderte transaksjoner, kan du velge den i rutenettet og deretter velge Detaljer for konsoliderte transaksjoner i handlingsruten. Detaljsiden for konsolidert transaksjon, som vises, viser informasjon som finanspostering, tilknyttede underregnskapsreferanser og finansdimensjoner.

  • Pause – Stans midlertidig en valgt konsolidering som pågår. Pausen aktiveres bare etter at arkiveringsoppgaven er generert. Det kan derfor ta litt tid før den midlertidige stansen trer i kraft. Hvis en konsolidering stanses midlertidig, vises det en hake i feltet Stopp gjeldende oppdatering.

  • Fortsett – Fortsett behandling for en valgt konsolidering som er stoppet midlertidig.

Utvide koden for å støtte egendefinerte felter

Hvis tabellen InventTrans inneholder ett eller flere egendefinerte felt, kan det hende at du må utvide koden for å støtte dem, avhengig av hvordan de har navnet.

  • Hvis de egendefinerte feltene fra InventTrans tabellen InventtransArchive har de samme feltnavnene som i tabellen, betyr det at de er tilordnet 1:1. Derfor kan du bare plassere de egendefinerte feltene i feltgruppen InventoryArchiveFields i tabellen inventTrans.
  • Hvis de egendefinerte feltnavnene i tabellen InventTrans ikke samsvarer med feltnavnene i tabellen InventtransArchive, må du legge til kode for å tilordne dem. Hvis du for eksempel har et systemfelt kalt InventTrans.CreatedDateTime, må du opprette et felt i tabellen InventTransArchive med et annet navn (for eksempel InventtransArchive.InventTransCreatedDateTime) og legge til utvidelser i klassene InventTransArchiveProcessTask og InventTransArchiveSqlStatementHelper, som vist i eksempelkoden nedenfor.

Følgende eksempelkode viser et eksempel på hvordan du legger til den nødvendige utvidelsen i 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);
    }
}

Følgende eksempelkode viser et eksempel på hvordan du legger til den nødvendige utvidelsen i 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;
    }
}