Partilhar via


Consolidar transações de inventário

Com o tempo, a tabela de transações de inventário (InventTrans) continuará a crescer e a consumir mais espaço no banco 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 transações de inventário para consolidar dados sobre transações de inventário para ajudar a melhorar o desempenho do sistema.

Nota

Apenas as transações de inventário atualizadas financeiramente podem ser consolidadas num período de razão fechado selecionado. Para serem consolidadas, as transações de inventário de saída atualizadas financeiramente devem ter um estatuto de emissão de Vendido e as transações deinventário de entrada devem ter um estatuto de recebimento de Comprado.

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

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

Nota

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 Dataverse retenção de longo prazo para mover InventTransArchive registros para um Microsoft Azure data lake. Para obter mais informações, consulte Arquivar dados de transações de inventário em Dynamics 365 Supply Chain Management.

Ativar a funcionalidade no seu sistema

Se o seu sistema ainda não incluir a funcionalidade descrita neste artigo, aceda a Gestão de funcionalidades e ative a funcionalidade Consolidação de transações de inventário. Esta funcionalidade não pode ser desativada depois de ativada.

Aspetos a considerar antes de consolidar transações de inventário

Antes de consolidar as transações de inventário, você deve considerar os seguintes cenários de negócios, pois eles serão afetados pela operação:

  • Quando você audita transações de inventário de documentos relacionados, como linhas de ordem de compra, elas são mostradas como consolidadas. Para rever as transações consolidadas, tem de ir para Gestão de > inventário Tarefas > periódicas Limpar > consolidação de transações de inventário.
  • O fecho de inventário não pode ser cancelado para períodos consolidados.
  • A conversão de custos padrão não pode ser feita para períodos consolidados.
  • Os relatórios de inventário provenientes de transações de inventário são afetados quando você consolida transações de inventário. 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 afetadas se forem executadas durante o horizonte temporal dos períodos consolidados.

Pré-requisitos

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

  • O período do livro-razão tem de ser encerrado.
  • O fecho do inventário deve ser executado na data ou após a data do período da consolidação.
  • Esse período deve ser pelo menos um ano anterior à data de início da consolidação.
  • Não podem haver quaisquer recálculos do inventário existente.

Consolide as suas transações de inventário

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

  1. Aceda a Gestão de>inventário Tarefas>periódicas Limpeza>Consolidação de transações de inventário.

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

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

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

    • Data de início no período do livro-razão fechado– Selecione a data da transação mais antiga a incluir na consolidação.
    • Até à data no período do livro-razão fechado– Selecione a data da transação 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 tarefas Microsoft Dynamics 365 Supply Chain Management em lote.

  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.

    Você recebe uma mensagem informando que seu trabalho de consolidação de transações de inventário foi adicionado à fila de lotes. O trabalho começa a consolidar as transações de inventário do período selecionado.

Ver transações de inventário consolidadas

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

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

  • Ativo – Mostrar apenas consolidações ativas.
  • Todos – Mostrar todas as consolidações.

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

  • Ativo – Uma marca de seleçã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.
  • Agendado por – A conta de utente que criou a consolidação.
  • Executado – A data em que a consolidação foi criada.
  • Interromper atualização atual– Uma marca de seleção indica que a consolidação está em andamento, mas foi pausada.
  • Estado – O estatuto de processamento da consolidação. Os valores possíveis são Esperar, Em curso e Concluído.

A barra de ferramentas acima da grade fornece os seguintes botões que você pode usar para trabalhar com uma consolidação selecionada:

  • Transações consolidadas – Veja todos os detalhes da consolidação selecionada. A página Transações consolidadas apresentada apresenta todas as transações na consolidação.

    Para ver mais informações sobre uma transação específica na página Transações consolidadas , selecione-a na grelha e, em seguida, no Painel de Ações, selecione Detalhes da transação consolidada. A página Detalhes da transação consolidada apresentada mostra informações como o lançamento no livro-razão, referências de sub-razão relacionadas e dimensões financeiras.

  • Pausar – Pause uma consolidação selecionada que está a ser processada no momento. A pausa só entra em vigor depois que a tarefa de arquivamento é gerada. Como tal, pode existir um curto atraso antes da pausa produzir efeito. Se uma consolidação for pausada, uma marca de seleção será exibida no campo Interromper atualização atual.

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

Expandir o seu código para suportar campos personalizados

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

  • Se os campos personalizados da InventTrans tabela tiverem os mesmos nomes de campo que na InventtransArchive tabela, isso significa que eles 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;
    }
}