Objets métiers - remise globale sur devis

Bonjour,

J'ai un soucis pour assigner une remise globale à un devis via les objets métiers.

Dans la Gescom utilisée pour l'application, les remises globales sont assignées via un article particulier de référence "ZREMISE". 

J'ai essayé de créer un article avec cette référence avec les objets métiers après avoir créé tous les autres articles du devis, mais cela ne fonctionne pas. Voici un exemple : 

Dim DocLigneCompose As IBODocumentVenteLigne3 = DocEntete.FactoryDocumentLigne.Create
With DocLigneCompose
    .IsRemiseExceptionnelle() = True
    .SetDefaultArticle(bCial.FactoryArticle.ReadReference("ZREMISE"), qtt_totale)
    .Remise.Remise(1).REM_Type = RemiseType.RemiseTypePourcent
    .Remise.Remise(1).REM_Valeur = oppo_remise
    .Write()
End With

Description du code : 

DocEntete correspond à l'objet du devis.

qtt_totale est la somme des quantités des articles (ce champ-là est affecté avec la somme des quantités car lorsqu'on insère "manuellement" une remise dans la gescom, la quantité de l'article ZREMISE correspond à la somme des quantités des autres articles)

oppo_remise est le montant de la remise en %

L'article "ZREMISE" est bien créé dans F_DOCLIGNE, mais il ne correspond pas à une "remise globale".

Pour information lorsqu'on crée une remise globale "à la main" dans la gescom, le champ du prix unitaire de cette remise équivaut à la somme de tous les prix unitaires des articles multipliés par la quantité. Existe-t-il une fonctionnalité déjà prête dans les objets métier pour créer cette remise globale ?

Parents
  • 0

    Bonjour M. DUEZ,

    Pour inserer une ligne de remise globale dans un document avec les Objets Métiers, vous devez implémenter ce type de méthode (exemple en C#):

    static void InsereRemiseGlobale(IBODocumentPart3 om_Document, string refArticleRemise, double tauxRemise)
    {
        double qteTotale = 0.0, 
                baseRemise = 0.0;
    
        IBICollection om_DocumentLignes = om_Document.FactoryDocumentLigne.List;
        foreach (IBODocumentLigne3 om_DocumentLigne in om_DocumentLignes)
        {
            if(om_DocumentLigne.Valorisee)
            {
                qteTotale += om_DocumentLigne.DL_Qte;
                baseRemise += om_DocumentLigne.DL_PrixUnitaire * om_DocumentLigne.DL_Qte;
            }
        }
    
        var om_LigneRemiseGlobale = (IBODocumentPartLigne3)om_Document.FactoryDocumentLigne.Create();
        om_LigneRemiseGlobale.IsRemisePied = true;
        om_LigneRemiseGlobale.SetDefaultArticleReference(refArticleRemise, qteTotale);
        om_LigneRemiseGlobale.DL_PrixUnitaire = baseRemise;
        om_LigneRemiseGlobale.Remise.Remise[1].REM_Type = RemiseType.RemiseTypePourcent;
        om_LigneRemiseGlobale.Remise.Remise[1].REM_Valeur = tauxRemise;
        om_LigneRemiseGlobale.SetDefault();
        om_LigneRemiseGlobale.WriteDefault();
    }

    Exemple d'utilisation :

    var om_DocVente = om_BaseCial.FactoryDocumentVente.ReadPiece(DocumentType.DocumentTypeVenteCommande, "BC00005");
    InsereRemiseGlobale(om_DocVente, "ZREMISE", 10.0);

    Si vous souhaitez bénéficier d'un accompagnement pour du développement autour de Sage 100, vous avez la possibilité de souscrire à un contrat Sage Services Pro auprès de votre Ingénieur Commercial Sage.

Reply
  • 0

    Bonjour M. DUEZ,

    Pour inserer une ligne de remise globale dans un document avec les Objets Métiers, vous devez implémenter ce type de méthode (exemple en C#):

    static void InsereRemiseGlobale(IBODocumentPart3 om_Document, string refArticleRemise, double tauxRemise)
    {
        double qteTotale = 0.0, 
                baseRemise = 0.0;
    
        IBICollection om_DocumentLignes = om_Document.FactoryDocumentLigne.List;
        foreach (IBODocumentLigne3 om_DocumentLigne in om_DocumentLignes)
        {
            if(om_DocumentLigne.Valorisee)
            {
                qteTotale += om_DocumentLigne.DL_Qte;
                baseRemise += om_DocumentLigne.DL_PrixUnitaire * om_DocumentLigne.DL_Qte;
            }
        }
    
        var om_LigneRemiseGlobale = (IBODocumentPartLigne3)om_Document.FactoryDocumentLigne.Create();
        om_LigneRemiseGlobale.IsRemisePied = true;
        om_LigneRemiseGlobale.SetDefaultArticleReference(refArticleRemise, qteTotale);
        om_LigneRemiseGlobale.DL_PrixUnitaire = baseRemise;
        om_LigneRemiseGlobale.Remise.Remise[1].REM_Type = RemiseType.RemiseTypePourcent;
        om_LigneRemiseGlobale.Remise.Remise[1].REM_Valeur = tauxRemise;
        om_LigneRemiseGlobale.SetDefault();
        om_LigneRemiseGlobale.WriteDefault();
    }

    Exemple d'utilisation :

    var om_DocVente = om_BaseCial.FactoryDocumentVente.ReadPiece(DocumentType.DocumentTypeVenteCommande, "BC00005");
    InsereRemiseGlobale(om_DocVente, "ZREMISE", 10.0);

    Si vous souhaitez bénéficier d'un accompagnement pour du développement autour de Sage 100, vous avez la possibilité de souscrire à un contrat Sage Services Pro auprès de votre Ingénieur Commercial Sage.

Children
No Data