Summary
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 IPMDocument | Avec process IPMDocument | Gain |
|---|---|---|
| 1 mn 38 s | 35 s | 280 % |
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 :
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 optimisation | Avec optimisation SetAutoRecalculTotaux(false) / RecalculTotaux(true) | Gain |
|---|---|---|
| 1 mn 38 s | 33 s | 297 % |