Partilhar via


Consolidar transações de inventário

Ao longo do tempo, a tabela de transacções de inventário (InventTrans) continuará a crescer e a consumir mais espaço na base de dados. Como tal, as consultas que são feitas em relação à tabela irão tornar-se gradualmente mais lentas. Isto artigo descreve como pode utilizar a funcionalidade Consolidação de transacções de inventário para consolidar dados sobre transacções de inventário para ajudar a melhorar o desempenho do sistema.

Nota

Apenas as transações de estoque atualizadas financeiramente podem ser consolidadas em um período de ledger fechado selecionado. Para serem consolidadas, as transacções de inventário de saída actualizadas financeiramente devem ter um estado de saída de Sold e as transacções de inventário de entrada devem ter um estado de entrada de Purchased.

Quando você consolida transações de estoque, todas as transações relacionadas são movidas para a tabela InventTransArchive . As transacções de saída de inventário e as transacções de entrada de inventário são consolidadas separadamente, com base na combinação do ID do item (itemId) e do ID da dimensão do inventário (inventDimId), e são colocadas nas transacções de saída e entrada resumidas.

Se uma combinação de itemId e inventDimId contiver apenas uma transação de entrada ou saída, a transação não será consolidada.

Nota

Depois de consolidar as suas transacções de inventário, pode otimizar ainda mais o armazenamento e o desempenho do sistema utilizando a funcionalidade Archive with Dataverse long term retention para mover os registos InventTransArchive para um lago de dados Microsoft Azure . Para mais informações, consulte Arquivar dados de transacções de inventário em Dynamics 365 Supply Chain Management.

Ativar a funcionalidade no seu sistema

Se o seu sistema ainda não inclui a funcionalidade descrita neste artigo, vá a Gestão de funcionalidades e active a funcionalidade Consolidação de transacções de inventário . Esta funcionalidade não pode ser desactivada depois de ter sido activada.

Aspectos a considerar antes de consolidar transacções de inventário

Antes de consolidar as transacções de inventário, deve considerar os seguintes cenários empresariais, uma vez que serão afectados pela operação:

  • Quando as transacções de inventário são auditadas a partir de documentos relacionados, tais como linhas de pedidos de compra, são mostradas como consolidadas. Para rever as transacções consolidadas, é necessário ir a Gestão de inventário > Tarefas periódicas > Limpeza > Consolidação de transacções de inventário.
  • O encerramento de inventário não pode ser cancelado para períodos consolidados.
  • A conversão de custos standard não pode ser efectuada para períodos consolidados.
  • Os relatórios de estoque que são originados de transações de estoque são afetados quando você consolida transações de estoque. Estes relatórios incluem o relatório de maturidade do inventário e os relatórios de valor do inventário.
  • As previsões de inventário podem ser afectadas se forem executadas durante o horizonte temporal dos períodos consolidados.

Pré-requisitos

As transacções de inventário podem ser consolidadas apenas durante os períodos em que as seguintes condições são satisfeitas:

  • O período do livro-razão tem de ser encerrado.
  • O encerramento do estoque deve ser executado na data do período to da consolidação ou após essa data.
  • O período deve ser de, pelo menos, um ano antes da data de início da consolidação.
  • Não podem haver quaisquer recálculos do inventário existente.

Consolidar as suas transacções de inventário

Para consolidar as transacções de inventário, siga estes passos.

  1. Aceder a Gestão de inventário>Tarefas periódicas>Limpar>Consolidação de transacções de inventário.

    A página Consolidação de transações de inventário aparece e mostra uma lista de registos de processos consolidados.

  2. No Painel de Ação, seleccione Consolidação de transacções de inventário para criar uma consolidação de transacções de inventário.

  3. Na caixa de diálogo Consolidação da transação de inventário , na ficha Parâmetros FastTab, defina os seguintes campos:

    • A partir da data no período do ledger fechado - Seleccione a data de transação mais antiga a incluir na consolidação.
    • Até à data no período do ledger fechado - Seleccione a data de movimento mais recente a incluir na consolidação.

    Nota

    Apenas os períodos que cumpram os pré-requisitos estarão disponíveis para seleção.

  4. No Separador Rápido Executar em segundo plano, configure os detalhes de processamento do lote conforme necessário. Siga os passos habituais para as tarefas de lote no Microsoft Dynamics 365 Supply Chain Management.

  5. Selecione OK.

  6. Recebe uma mensagem que lhe pede para confirmar se pretende continuar. Leia a mensagem atentamente e, em seguida, selecione Sim se pretender continuar.

    É recebida uma mensagem informando que o job de consolidação de transações de estoque foi adicionado à fila de lotes. O trabalho começa a consolidar as transacções de inventário do período selecionado.

Visualizar transacções de inventário consolidadas

A página Consolidação de transacções de inventário mostra o seu histórico completo de consolidação. Cada linha da grelha mostra informações como a data em que a consolidação foi criada, o utilizador que a criou e o seu estado.

Na lista pendente no topo da página, seleccione um dos seguintes valores para filtrar as consolidações que são mostradas na grelha:

  • Ativo - Mostrar apenas as consolidações activas.
  • Todos - Mostrar todas as consolidações.

Para cada consolidação na grelha, são fornecidas as seguintes informações:

  • Ativo - Uma marca de verificação indica que a consolidação está ativa.
  • Data de início - A data da transação mais antiga que pode ser incluída na consolidação.
  • Até à data - A data da transação mais recente que pode ser incluída na consolidação.
  • Programado por - A conta de utilizador que criou a consolidação.
  • Executado - A data em que a consolidação foi criada.
  • Parar a atualização atual - Uma marca de verificação indica que a consolidação está em curso, mas foi colocada em pausa.
  • Estado - O estado de processamento da consolidação. Os valores possíveis são Esperar, Em curso e Concluído.

A barra de ferramentas acima da grelha fornece os seguintes botões que podem ser utilizados para trabalhar com uma consolidação selecionada:

  • Transacções consolidadas - Ver todos os detalhes da consolidação selecionada. A página Transações consolidadas que aparece mostra todas as transações na consolidação.

    Para ver mais informações sobre uma transação específica na página Transacções consolidadas , seleccione-a na grelha e, em seguida, no Painel de Ação, seleccione Detalhes da transação consolidada. A página Detalhes da transação consolidada que aparece mostra informações como o lançamento no ledger, referências de subledger relacionadas e dimensões financeiras.

  • Pausa - Pausa uma consolidação selecionada que está a ser processada atualmente. A pausa só tem efeito depois que a tarefa de arquivamento é gerada. Como tal, pode existir um curto atraso antes da pausa produzir efeito. Se uma consolidação estiver em pausa, aparece uma marca de verificação no seu campo Stop current update .

  • Retomar - Retomar o processamento de uma consolidação selecionada que esteja atualmente em pausa.

Expandir o seu código para suportar campos personalizados

Se a tabela InventTrans contiver um ou mais campos personalizados, poderá ser necessário alargar o código para os suportar, dependendo da forma como são designados.

  • Se os campos personalizados da tabela InventTrans tiverem os mesmos nomes de campo que na tabela InventtransArchive , isso significa que estão mapeados 1:1. Por conseguinte, pode simplesmente colocar os campos personalizados no grupo de campos InventoryArchiveFields da tabela inventTrans.
  • Se os nomes de campo personalizados na tabela InventTrans não corresponderem aos nomes de campos na tabela InventtransArchive, precisa de adicionar código para os mapear. Por exemplo, se tiver um campo de sistema chamado InventTrans.CreatedDateTime, tem de criar um campo na tabela InventTransArchive com um nome diferente (como InventtransArchive.InventTransCreatedDateTime) e adicionar extensões às classes InventTransArchiveProcessTask e InventTransArchiveSqlStatementHelper, como mostrado no código de amostra que se segue.

O seguinte código de amostra mostra um exemplo de como adicionar a extensão necessária à 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);
    }
}

O seguinte código de amostra mostra um exemplo de como adicionar a extensão necessária à 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;
    }
}