Consolidare le operazioni di magazzino

Nel tempo, la tabella delle transazioni di magazzino (InventTrans) continuerà a crescere e a utilizzare più spazio nel database. Pertanto, le query eseguite sulla tabella diventeranno gradualmente più lente. In questo articolo viene descritto come utilizzare la funzionalità Consolidamento operazioni di magazzino per consolidare i dati relativi alle transazioni di magazzino e migliorare le prestazioni del sistema.

Nota

Solo le transazioni di magazzino aggiornate finanziariamente possono essere consolidate in un periodo contabile chiuso selezionato. Per essere consolidate, le transazioni di magazzino in uscita aggiornate finanziariamente devono avere lo stato Venduto e le transazioni di magazzino in entrata devono avere lo stato Acquistato.

Quando si consolidano transazioni di magazzino, tutte le transazioni correlate vengono spostate nella tabella InventTransArchive. Le transazioni di magazzino in uscita e quelle in entrata sono consolidate separatamente, in base alla combinazione di ID articolo (itemId) e ID dimensione inventario (inventDimId) e sono inserite nel riepilogo delle transazioni in uscita e in entrata.

Se una combinazione di itemId e inventDimId contiene solo una transazione in entrata o in uscita, la transazione non verrà consolidata.

Nota

Dopo aver consolidato le transazioni di inventario, puoi ottimizzare ulteriormente lo spazio di archiviazione e le prestazioni del sistema utilizzando la funzionalità Archivia con conservazione a lungo termine in Dataverse per spostare i record InventTransArchive su un data lake Microsoft Azure. Per altre informazioni, vedi Archiviare dati delle transazioni di inventario in Dynamics 365 Supply Chain Management.

Attiva la funzionalità nel tuo sistema

Se il sistema in uso non include già la funzionalità descritta in questo articolo, vedi Gestione funzionalità e attivare la funzionalità Consolidamento operazioni di magazzino. Questa funzionalità non può essere disabilitata dopo l'abilitazione.

Aspetti da considerare prima di consolidare le transazioni di magazzino

Prima di consolidare le transazioni di magazzino, è necessario considerare i seguenti scenari aziendali, poiché saranno interessati dall'operazione:

  • Quando si controllano le transazioni di magazzino di documenti correlati, come righe di ordine fornitore, queste verranno visualizzate come consolidate. Per esaminare le transazioni consolidate, vai a Gestione articoli > Attività periodiche > Pulisci > Consolidamento operazioni di magazzino.
  • La chiusura dell'inventario non può essere annullata per periodi consolidati.
  • La conversione in costo standard non può essere eseguita per periodi consolidati.
  • I report relativi alle scorte originati da transazioni di magazzino vengono modificati quando si consolidano le transazioni di magazzino. Questi report includono il report sull'aging delle scorte e i rapporti sui valori di inventario.
  • Le previsioni di magazzino potrebbero essere alterate se vengono eseguite durante l'orizzonte temporale dei periodi consolidati.

Prerequisiti

Le transazioni di magazzino possono essere consolidate solo durante i periodi in cui vengono soddisfatte le seguenti condizioni:

  • Il periodo contabile deve essere chiuso.
  • La chiusura dell'inventario deve essere eseguita alla data di fine periodo del consolidamento o successivamente.
  • Il periodo deve essere almeno un anno prima della data di inizio periodo del consolidamento.
  • Non devono esistere ricalcoli di inventario.

Consolidare le operazioni di magazzino

Per consolidare transazioni di magazzino, attenersi alla seguente procedura.

  1. Selezionare Gestione articoli>Attività periodiche>Pulisci>Consolidamento transazioni di inventario.

    Viene visualizzata la pagina Consolidamento transazioni di magazzino con un elenco dei record di processo consolidati.

  2. Nel riquadro Azioni seleziona Consolidamento transazioni di magazzino per creare un consolidamento delle transazioni di magazzino.

  3. Nella finestra di dialogo Consolidamento transazioni di magazzino, nella scheda dettaglio Parametri, imposta i seguenti campi:

    • Data di inizio del periodo contabile chiuso - Selezionare la data della prima transazione da includere nel consolidamento.
    • Data di fine del periodo contabile chiuso - Selezionare la data dell'ultima transazione da includere nel consolidamento.

    Nota

    Solo i periodi che soddisfano i prerequisiti saranno selezionabili.

  4. Nella Scheda dettaglio Esecuzione in background, impostare i dettagli dell'elaborazione batch come necessario. Seguire i passaggi usuali per i processi batch in Microsoft Dynamics 365 Supply Chain Management.

  5. Selezionare OK.

  6. Viene visualizzato un messaggio che richiede di confermare se si desidera continuare. Leggere attentamente il messaggio, quindi selezionare per continuare.

    Viene visualizzato un messaggio che informa che il processo di consolidamento delle transazioni di magazzino è stato aggiunto alla coda batch. Il processo inizia a consolidare le transazioni di magazzino del periodo selezionato.

Visualizzare transazioni di magazzino consolidate

La pagina Consolidamento transazioni di magazzino mostra la cronologia di consolidamento completa. Ogni riga della griglia mostra informazioni come la data in cui il consolidamento è stato creato, l'utente che lo ha creato e il relativo stato.

Nell'elenco a discesa nella parte superiore della pagina selezionare uno dei seguenti valori per filtrare i consolidamenti visualizzati nella griglia:

  • Attivo: mostra solo i consolidamenti attivi.
  • Tutti: mostra tutti i consolidamenti.

Per ogni consolidamento nella griglia vengono fornite le seguenti informazioni:

  • Attivo - Un segno di spunta indica che il consolidamento è attivo.
  • Data iniziale - La data della transazione più vecchia che può essere inclusa nel consolidamento.
  • Data finale - La data della transazione più recente che può essere inclusa nel consolidamento.
  • Programmato da - L'account utente che ha creato il consolidamento.
  • Elaborato - La data di creazione del consolidamento.
  • Interrompi aggiornamento corrente - Un segno di spunta indica che il consolidamento è in corso, ma che è stato sospeso.
  • Stato - Lo stato di elaborazione del consolidamento. I valori possibili sono In attesa, In corso e Finito.

La barra degli strumenti sopra la griglia include i seguenti pulsanti utilizzabili con un consolidamento selezionato:

  • Transazioni consolidate - Visualizza i dettagli completi del consolidamento selezionato. La pagina Transazioni consolidate visualizzata mostra tutte le transazioni presenti nel consolidamento.

    Per visualizzare ulteriori informazioni su una transazione specifica nella pagina Transazioni consolidate, selezionarla nella griglia, quindi, nel riquadro azioni, selezionare Dettagli transazione consolidata. La pagina Dettagli transazione consolidata visualizzata mostra informazioni quali la registrazione contabile, i riferimenti della contabilità secondaria correlati e le dimensioni finanziarie.

  • Sospendi archiviazione - Sospende un consolidamento selezionato che è attualmente in fase di elaborazione. La sospensione viene attivata solo dopo la generazione dell'attività di archiviazione. Pertanto, potrebbe esserci un breve ritardo prima della sospensione dell'archiviazione. Se un consolidamento è stato sospeso, viene visualizzato un segno di spunta nel campo Interrompi aggiornamento corrente.

  • Riprendi - Riprende l'elaborazione di un consolidamento selezionato attualmente sospeso.

Estendere il codice per supportare i campi personalizzati

Se la tabella InventTrans contiene uno o più campi personalizzati, potrebbe essere necessario estendere il codice per supportarli, a seconda di come sono denominati.

  • Se i campi personalizzati della tabella InventTrans hanno gli stessi nomi dei campi nella tabella InventtransArchive, ciò significa che sono mappati 1:1. Pertanto, è possibile inserire semplicemente i campi personalizzati nel gruppo di campi InventoryArchiveFields della tabella inventTrans.
  • Se i nomi dei campi personalizzati nella tabella InventTrans non corrispondono ai nomi dei campi nella tabella InventtransArchive, è necessario aggiungere il codice per mapparli. Ad esempio, se si dispone di un campo di sistema chiamato InventTrans.CreatedDateTime, è necessario creare un campo nella tabella InventTransArchive con un nome diverso (come InventtransArchive.InventTransCreatedDateTime) e aggiungere le estensioni alle classi InventTransArchiveProcessTask e InventTransArchiveSqlStatementHelper, come illustrato nel codice di esempio seguente.

Nel seguente codice di esempio viene illustrato un modo per aggiungere l'estensione richiesta alla classe 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);
    }
}

Nel seguente codice di esempio viene illustrato un modo per aggiungere l'estensione richiesta alla classe 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;
    }
}