Compartilhar via


Consolidar transações de estoque

Com o tempo, a tabela de transações de estoque (InventTrans) continuará a crescer e consumir mais espaço no banco de dados. Portanto, as consultas feitas na tabela ficarão mais lentas gradualmente. Este artigo descreve como você pode usar o recurso Consolidação de transação de estoque para consolidar dados sobre transações de estoque para ajudar a melhorar o desempenho do sistema.

Observação

Somente as transações de estoque atualizadas financeiramente podem ser consolidadas em um período contábil fechado selecionado. Para serem consolidadas, as transações de estoque de saída atualizadas financeiramente devem ter um status de saída de Vendido, e as transações de estoque de entrada devem ter um status de recebimento de Comprado.

Ao consolidar transações de estoque, todas as transações relacionadas são movidas para a tabela InventTransArchive. As transações de saída de estoque e as transações de recebimento de estoque são consolidadas separadamente, com base na combinação da ID do item (itemId) e da ID da dimensão de estoque (inventDimId), e são colocadas na saída resumida e nas transações de recebimento resumidas.

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

Observação

Depois de consolidar suas transações de inventário, você pode otimizar ainda mais o armazenamento e o desempenho do sistema usando o recurso Arquivar com retenção de longo prazo do Dataverse para mover registros InventTransArchive para um data lake do Microsoft Azure. Para obter mais informações, consulte Arquivar dados da transação de estoque no Dynamics 365 Supply Chain Management.

Ative o recurso no seu sistema

Se o sistema ainda não incluir o recurso descrito neste artigo, acesse Gerenciamento de recursos e ative o recurso Consolidação de transação de estoque. Esse recurso não poderá ser desabilitado depois de ser habilitado.

Itens a serem considerados antes de consolidar transações de estoque

Antes de consolidar transações de estoque, considere os cenários comerciais a seguir, porque eles serão afetados pela operação:

  • Quando você auditar transações de estoque de documentos relacionados, como linhas de ordem de compra, elas serão mostradas como consolidadas. Para revisar as transações consolidadas, você deve acessar Gerenciamento de estoque > Tarefas periódicas > Limpar > Consolidação de transação de estoque.
  • Não é possível cancelar o fechamento de estoque para períodos consolidados.
  • Não é possível fazer a conversão de custo padrão para períodos consolidados.
  • Os relatórios de estoque que são originados das transações de estoque são afetados quando você consolida as transações de estoque. Esses relatórios incluem o relatório de classificação por vencimento do estoque e os relatórios de valor de estoque.
  • As previsões de estoque podem ser afetadas se forem executadas durante o horizonte de tempo dos períodos consolidados.

Pré-requisitos

As transações de estoque poderão ser consolidadas somente durante os períodos em que as seguintes condições forem atendidas:

  • O período contábil deve estar fechado.
  • O fechamento de estoque deve ser executado na data final do período de consolidação ou em data posterior.
  • O período deve ser pelo menos um ano antes da data inicial do período da consolidação.
  • Não deve haver nenhum recálculos de estoque existente.

Consolidar suas transações de estoque

Para consolidar as transações de estoque, siga estas etapas:

  1. Acesse Gerenciamento de estoque>Tarefas periódicas>Limpar>Consolidação de transação de estoque.

    A página Consolidação de transação de estoque será exibida e mostrará uma lista de registros de processos consolidados.

  2. No Painel de Ações, selecione Consolidação de transação de estoque para criar uma consolidação de transação de estoque.

  3. Na caixa de diálogo Consolidação de transação de estoque, na Guia Rápida Parâmetros, defina os seguintes campos:

    • Data inicial no período contábil fechado — selecione a data da transação mais antiga a ser incluída na consolidação.
    • Data final do período contábil fechado — selecione a data da transação mais recente a ser incluída na consolidação.

    Observação

    Somente os períodos que atendem aos pré-requisitos estarão disponíveis para seleção.

  4. Na FastTab Executar em segundo plano, configure os detalhes do processamento em lotes conforme necessário. Siga as etapas usuais para trabalhos em lotes no Microsoft Dynamics 365 Supply Chain Management.

  5. Selecione OK.

  6. Você receberá uma mensagem solicitando que você confirme se deseja continuar. Leia a mensagem com atenção e selecione Sim se quiser continuar.

    Você receberá uma mensagem indicando que o trabalho de consolidação de transações de estoque foi adicionado à fila de lotes. O trabalho começará a consolidar as transações de estoque do período selecionado.

Exibir transações de estoque consolidadas

A página Consolidação de transação de estoque exibe o histórico completo da consolidação. Cada linha na grade mostra informações como a data em que a consolidação foi criada, o usuário que a criou e seu status.

Na lista suspensa na parte superior da página, selecione um dos seguintes valores para filtrar as consolidações exibidas na grade:

  • Ativas – mostra somente as consolidações ativas.
  • Todas – Mostra todas as consolidações.

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

  • Ativa – uma marca de seleção indica se a consolidação está ativa.
  • Data inicial – a data da transação mais antiga que pode ser incluída na consolidação.
  • Data final — a data da transação mais recente que pode ser incluída na consolidação.
  • Agendada por — a conta de usuário que criou a consolidação.
  • Executada — a data de criação da consolidação.
  • Parar atualização atual – uma marca de seleção indica que a consolidação está em andamento, mas que foi pausada.
  • Estado – o status de processamento da consolidação. Os valores possíveis são Aguardando, Em andamento e Concluído.

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

  • Transações consolidadas – exibe os detalhes completos da consolidação selecionada. A página Transações consolidadas exibida mostra todas as transações na consolidação.

    Para exibir mais informações sobre uma transação específica na página Transações consolidadas, selecione-a na grade e, no Painel de Ações, selecione Detalhes da transação consolidada. A página Detalhes da transação consolidada exibida mostra informações como o lançamento contábil, as referências do razão auxiliar relacionado e as dimensões financeiras.

  • Pausar – pausa uma consolidação selecionada que está sendo processada no momento. A pausa entrará em vigor somente após a geração da tarefa de arquivamento. Portanto, pode haver um breve atraso antes que a pausa entre em vigor. Se uma consolidação for pausada, aparecerá uma marca de seleção no campo Parar atualização atual.

  • Retomar – retoma o processamento de uma consolidação selecionada que está pausada no momento.

Estender seu código para dar suporte a campos personalizados

Se a tabela InventTrans contiver um ou mais campos personalizados, talvez você precise estender o código para dar suporte a eles, dependendo de como são nomeados.

  • Se os campos personalizados da tabela InventTrans tiverem os mesmos nomes de campo que a tabela InventtransArchive, isso significa que eles são mapeados de 1:1. Portanto, você pode apenas colocar os campos personalizados no grupo campos InventoryArchiveFields da tabela inventTrans.
  • Se os nomes dos campos personalizados na tabela InventTrans não coincidirem com os nomes dos campos da tabela InventtransArchive, você precisará adicionar código para mapeá-los. Por exemplo, se você tiver um campo de sistema chamado InventTrans.CreatedDateTime, deverá criar um campo na tabela InventTransArchive com um nome diferente (como InventtransArchive.InventTransCreatedDateTime) e adicionar extensões às classes InventTransArchiveProcessTask e InventTransArchiveSqlStatementHelper, conforme mostrado no código de exemplo a seguir.

O seguinte código 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 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;
    }
}