Skip to content
logo Knowledgebase

Optimiser la création et la modification des documents avec les Objets Métiers

Created on  | Last modified on 

Summary

Cette fiche vous indique comment optimiser la création et la modification des documents avec les Objets Métiers

Description

Jusqu'à la version 5.0 des Objets Métiers pour Sage 100cloud, il existait 2 techniques pour créer des documents :

1. Utilisation de IBODocument3 et ajout de lignes de documents (IBODocumentLigne3 et objets dérivés) par l'intermédiaire de FactoryDocumentLigne

Exemple en C# (base d'essai BIJOU) :

var om_DocVente = om_BaseCial.FactoryDocumentVente.CreateType(DocumentType.DocumentTypeVenteFacture);
var om_Client = om_BaseCial.CptaApplication.FactoryClient.ReadNumero("CARAT");
om_DocVente.SetDefaultClient(om_Client);
om_DocVente.WriteDefault();

var om_Article = om_BaseCial.FactoryArticle.ReadReference("BAAR01");
for (int i = 0; i < 300; i++)
{
    var om_DocVenteLigne = (IBODocumentVenteLigne3)om_DocVente.FactoryDocumentLigne.Create();
    om_DocVenteLigne.SetDefaultArticle(om_Article, 1);
    om_DocVenteLigne.WriteDefault();
}


2. Utilisation du process IPMDocument pour créer le document en mémoire avant de le rendre persistant :

// Création du document en mémoire (non persistant) :
var om_ProcDocVente = om_BaseCial.CreateProcess_Document(DocumentType.DocumentTypeVenteFacture);
var om_DocVente = (IBODocumentVente3)om_ProcDocVente.Document;
var om_Client = om_BaseCial.CptaApplication.FactoryClient.ReadNumero("CARAT");
om_DocVente.SetDefaultClient(om_Client);

var om_Article = om_BaseCial.FactoryArticle.ReadReference("BAAR01");
for (int i = 0; i < 300; i++)
{
    var om_DocVenteLigne = (IBODocumentVenteLigne3)om_DocVente.FactoryDocumentLigne.Create();
    om_DocVenteLigne.SetDefaultArticle(om_Article, 1);
    om_DocVenteLigne.WriteDefault();
}

// Le document devient persistant et la valorisation de l'entête et des lignes est calculée :
om_ProcDocVente.Process();


L'intérêt de la seconde technique (utilisation du process IPMDocument) est que le calcul de la valorisation s'effectue à la fin du traitement, lors de l'appel de la méthode Process() alors que ce calcul s'effectue à chaque insertion de ligne lorsque le process n'est pas utilisé.

Le gain de temps peut être d'autant plus sensible que le nombre de lignes dans le document est important.

Exemple : Insertion de 300 lignes d'article BAAR01 dans une facture de vente sur la base BIJOU :

Sans process IPMDocumentAvec process IPMDocumentGain
1 mn 38 s35 s280 %


Cependant, le process IPMDocument n'est utilisable qu'en création de document (non persistant). Pour modifier un document existant (persistant), seule la méthode "classique" est utilisable.

Resolution

Depuis la version 6.0 des Objets Métiers pour Sage 100cloud, de nouvelles méthodes et propriétés ont été ajoutées à IBODocument3 et ses objets dérivés pour optimiser la création ou la modification de documents :

Image

Exemple en C# (base d'essai BIJOU) :

var om_DocVente =om_BaseCial.FactoryDocumentVente.CreateType(DocumentType.DocumentTypeVenteFacture);
var om_Client = om_BaseCial.CptaApplication.FactoryClient.ReadNumero("CARAT");
om_DocVente.SetDefaultClient(om_Client);
om_DocVente.SetAutoRecalculTotaux(false); // Désactivation du recalcul automatique de la valorisation
om_DocVente.WriteDefault();

var om_Article = om_BaseCial.FactoryArticle.ReadReference("BAAR01");
for (int i = 0; i < 300; i++)
{
    var om_DocVenteLigne = (IBODocumentVenteLigne3)om_DocVente.FactoryDocumentLigne.Create();
    om_DocVenteLigne.SetDefaultArticle(om_Article, 1);
    om_DocVenteLigne.WriteDefault();
}

om_DocVente.RecalculTotaux(true); // Recalcul de la valorisation et enregistrement du document


Sans optimisationAvec optimisation
SetAutoRecalculTotaux(false) / 
RecalculTotaux(true)
Gain
1 mn 38 s33 s297 %