Partager via


Consolider les transactions de stock

Au fil du temps, le tableau des transaction d’inventaire (InventTrans) continuera de croître et de consommer plus d’espace de base de données. Par conséquent, les requêtes effectuées sur la table deviendront progressivement plus lentes. Cet article décrit comment utiliser la fonctionnalité consolidation transactions d’inventaire pour consolider les données sur les transactions d’inventaire afin d’améliorer les performances du système.

Remarque

Seules les transactions de stock mises à jour financièrement peuvent être consolidées dans une période comptable fermée sélectionnée. Pour être consolidées, les mouvements de stock sortants mis à jour financièrement doivent avoir un statut de sortie de Vendu, et les transactions d’inventaire entrantes doivent avoir un statut de réception de Acheté.

Lorsque vous consolidez des transactions d’inventaire, toutes les transactions associées sont déplacées vers la table InventTransArchive. Les transactions de sortie de stock et les transactions de réception de stock sont consolidées séparément, en fonction de la combinaison de l’ID article (itemId) et l’ID de la dimension d’inventaire (inventDimId), et ils sont placés dans le numéro récapitulé et dans les transactions de réception récapitulées.

Si une combinaison de itemId et de inventDimId ne contient qu’une seule transaction de réception ou de sortie, la transaction ne sera pas consolidée.

Remarque

Après avoir consolidé vos transactions d’inventaire, vous pouvez optimiser davantage le stockage et les performances du système en utilisant la fonctionnalité Archive avec Dataverse conservation à long terme pour déplacer InventTransArchive enregistrements dans un Microsoft Azure lac de données. Pour plus d’informations, voir Archiver les données de transaction stock dans Dynamics 365 Supply Chain Management.

Activez la fonctionnalité dans votre système

Si votre système n’inclut pas déjà la fonctionnalité décrites dans cet article, accédez à Gestion des fonctionnalités et activez la fonctionnalité Consolidation de transaction de stock. Cette fonctionnalité ne peut pas être désactivée après son activation.

Éléments à prendre en compte avant de Consolidation les transactions d’inventaire

Avant de Consolidation les transactions d’inventaire, vous devez envisager les scénarios commerciaux suivants, car ils seront affectés par l’opération :

  • Lorsque vous auditez des transactions d’inventaire à partir de documents associés, tels que des lignes de commande fournisseur, elles sont affichées comme Consolidation. Pour consulter les transactions Consolidation, vous devez aller à Gestion des stocks > Tâches périodiques > Nettoyer > Consolidation de transaction de stock.
  • La clôture de l’inventaire ne peut pas être annulée pour les périodes Consolidation.
  • La conversion des coûts standard ne peut pas être effectuée pour les périodes Consolidation.
  • Les rapports d’inventaire issus des transactions d’inventaire seront affectés lorsque vous Consolidation les transactions d’inventaire. Ces rapports comprennent le rapport sur le vieillissement des stocks et les rapports sur la valeur des stocks.
  • Les prévisions d’inventaire peuvent être affectées si elles sont exécutées pendant l’horizon temporel des périodes Consolidation.

Conditions préalables

Les transactions de stock ne peuvent être Consolidation que pendant les périodes où les conditions suivantes sont remplies :

  • La période comptable doit être clôturée.
  • La clôture de l’inventaire doit être exécutée à la date de fin de période de la Consolidation ou après cette date.
  • La période doit être au moins un an avant la date de la période de début de la Consolidation.
  • Il ne doit y avoir aucun recalcul d’inventaire existant.

Consolider vos transactions de stock

Pour Consolidation les transactions de stock, procédez comme suit.

  1. Allez à Gestion des stocks>Tâches périodiques>Nettoyer>Consolidation de transaction de stock.

    La page Consolidation de transaction de stock apparaît et affiche une liste des enregistrements de processus Consolidation.

  2. Dans le volet Actions, sélectionnez Consolidation de transaction de stock pour créer une Consolidation de transaction de stock.

  3. Dans la boîte de dialogue Consolidation de transaction de stock, sur le raccourci Paramètres, définissez les champs suivants :

    • De la date dans la période comptable fermée – Sélectionnez la date de transaction la plus récente à inclure dans Consolidation.
    • À la date dans la période comptable fermée – Sélectionnez la date de transaction la plus récente à inclure dans la Consolidation.

    Remarque

    Seules les périodes qui respectent les conditions préalables sera disponible pour la sélection.

  4. Sur le raccourci Exécuter en arrière-plan, configurez les détails du traitement par lots selon vos besoins. Suivez les étapes habituelles pour les travaux par lots dans Microsoft Dynamics 365 Supply Chain Management.

  5. Cliquez sur OK.

  6. Vous recevez un message qui vous invite à confirmer que vous souhaitez continuer. Lisez attentivement le message, puis sélectionnez Oui pour continuer.

    Vous recevez un message indiquant que votre travail Consolidation de transaction de stock a été ajouté à la file d’attente par lots. Le travail commence maintenant à Consolidation de transaction de stock de la période sélectionnée.

Afficher Consolidation de transaction de stock

La page Consolidation de transaction de stock affiche votre historique de Consolidation complet. Chaque ligne de la grille affiche des informations telles que la date de création de Consolidation, l’utilisateur qui l’a créée et son statut.

Dans la liste déroulante en haut de la page, sélectionnez l’une des valeurs suivantes pour filtrer les Consolidations affichées dans la grille :

  • Actif – Afficher uniquement les Consolidation actives.
  • Tous – Afficher toutes les consolidations.

Pour chaque Consolidation de la grille, les informations suivantes sont fournies :

  • Actif – Une coche indique que Consolidation est active.
  • Date de début – La date de la transaction la plus ancienne pouvant être incluse dans Consolidation.
  • Date de fin – La date de la transaction la plus récente pouvant être incluse dans Consolidation.
  • Programmé par – Le compte utilisateur qui a créé Consolidation.
  • Exécuté – Date de création de Consolidation.
  • Arrêter la mise à jour actuelle – Une coche indique que Consolidation est en cours, mais qu’elle a été suspendue.
  • État – Le statut de traitement de Consolidation. Les valeurs possibles sont Attente, En cours, et Terminé.

La barre d’outils au-dessus de la grille fournit les boutons suivants que vous pouvez utiliser pour travailler avec une Consolidation sélectionnée :

  • Transactions Consolidation – Afficher les détails complets de Consolidation sélectionnée. La page Transactions Consolidation qui apparaît montre toutes les transactions dans Consolidation.

    Pour afficher plus d’informations sur une transaction spécifique sur la page Transactions Consolidation, sélectionnez-le dans la grille, puis, dans le volet Actions, sélectionnez Détails de la transaction Consolidation. La page Détails de la transaction Consolidation qui apparaît affiche des informations telles que l’écriture comptable, les références de comptabilité auxiliaire associées et les dimensions financières.

  • Suspendre – Suspend une Consolidation sélectionnée en cours de traitement. La pause prend effet uniquement après la génération de la tâche d’archivage. Par conséquent, il peut y avoir un court délai avant que la pause ne prenne effet. Si une Consolidation a été mise en pause, une coche apparaît dans son champ Arrêter la mise à jour actuelle.

  • Reprendre – Reprendre le traitement d’une Consolidation sélectionnée en cours de suspension.

Étendez votre code pour prendre en charge les champs personnalisés

Si la table InventTrans contient un ou plusieurs champs personnalisés, vous devrez peut-être étendre le code pour les prendre en charge, selon la façon dont ils sont nommés.

  • Si les champs personnalisés de la table InventTrans ont les mêmes noms de champ que dans la table InventtransArchive, cela signifie qu’ils sont mappés 1:1. Par conséquent, vous pouvez simplement mettre les champs personnalisés dans le groupe de champs InventoryArchiveFields de la table inventTrans.
  • Si les noms de champs personnalisés dans la table InventTrans ne correspondent pas aux noms de champ dans la table InventtransArchive, vous devez ajouter du code pour les mapper. Par exemple, si vous avez un champ système appelé InventTrans.CreatedDateTime, vous devez alors créer un champ dans la table InventTransArchive avec un nom différent (comme InventtransArchive.InventTransCreatedDateTime) et ajouter des extensions aux classes InventTransArchiveProcessTask et InventTransArchiveSqlStatementHelper, comme illustré dans l’exemple de code suivant.

L’exemple de code suivant affiche un exemple du mode d’ajout de l’extension requise à la 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);
    }
}

L’exemple de code suivant affiche un exemple du mode d’ajout de l’extension requise à la 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;
    }
}