REQUETES DE MISE A JOUR DE LA BASE DE DONNEES
Modifier la rubrique des articles du secteur ‘prestations’
UPDATE ARTICLE SET IDCOD_RUBRIQUE = 2 WHERE PRINCIPALE LIKE ‘PRESTATIONS’
je voulais faire une modification dans les lignes des devis, commandes, BL et factures mais cela ne met pas à jour la table SYNTHESE_DOC, il faut y aller manuellement, ligne à ligne dans les documents. Par contre, ça marche lors du transfert d’un document.
UPDATE LIGNEDEV SET IDCOD_RUBRIQUE = 2 WHERE REFERENCE IN (SELECT REFERENCE FROM ARTICLE WHERE IDCOD_RUBRIQUE = 2)
UPDATE LIGNECOC SET IDCOD_RUBRIQUE = 2 WHERE REFERENCE IN (SELECT REFERENCE FROM ARTICLE WHERE IDCOD_RUBRIQUE = 2)
UPDATE LIGNEBL SET IDCOD_RUBRIQUE = 2 WHERE REFERENCE IN (SELECT REFERENCE FROM ARTICLE WHERE IDCOD_RUBRIQUE = 2)
LA MACRO DE MISE EN FORME
A rattacher à la fiche perso
BASECOM..CouleurFond = VertPastel
COMMISSIONVERSEE..CouleurFond = VertPastel
Si COM_REGLEE = Vrai alors
COMMISSIONVERSEE..Etat = Grisé
Sinon
COMMISSIONVERSEE..Etat = actif
Fin
LA MACRO DE CALCUL
Il faut créer un bouton pour la lancer, je l’ai fait sur l’entête de la liste des factures
// Macro créé par MAS INFORMATIQUE le 09/09/2018
// Description de la macro :
// Code principal de la macro :
//Mise en forme de la fiche perso
wlcalcul est un booleen
SQL est une chaîne
wltotalHTBrut, wltotalMOHTBrut, wltotalRemises, wltotalHTNet, wltotalMOHTnet, wlBaseCommissions, wlCoutReel, wlMarge, wlMargePour, MontantCom est numérique
wlniv1,wlniv2,wlniv3 est numerique
Taux1, Taux2, Taux3 est numerique
wlreq est une Source de Données
PartMO est numerique
wlniv1 = 36
wlniv2 = 38
wlniv3 = 42
Taux1 = 0.02
Taux2 = 0.04
Taux3 = 0.05
wlcalcul = Faux
//Titre de la fenêtre
TitreSuivant(« CALCUL DES COMMISSIONS »)
SI OuiNon(« Lancer le calcul des commissions ? ») ALORS wlcalcul= Vrai
Si wlcalcul = Vrai ALORS
SQL = « select SUM(SU.SOMDEB) as SOMDEB, SUM(Sy.MO_TOTAL_HT) as MO_TOTAL_HT, »
SQL += « SUM(DP.POURCENTAGE) as POURCENTAGE, SUM(SU.MARGE) as MARGE, »
SQL += « FA.NUMERO, SUM(SF.MONTANT) AS TOTALTTC, »
SQL += « SUM(FA.TOTAL) AS TOTALHTREMISE, »
SQL += « SUM(SY.TOTAL_HT) AS TOTALHT, TRBL.NUMDOC_CIBLE as facture, »
SQL += « TRBL.NUMDOC_SOURCE as commande «
SQL += « FROM SUIVICH AS SU »
SQL += « INNER JOIN FA4_DOC_AUDIT_TRANSF AS TRCDE ON TRCDE.NUMDOC_SOURCE = SU.NUMCOM »
SQL += « INNER JOIN FA4_DOC_AUDIT_TRANSF AS TRBL ON TRBL.NUMDOC_SOURCE = TRCDE.NUMDOC_CIBLE »
SQL += « INNER JOIN SUIFAC AS SF ON SF.NUMFAC = TRBL.NUMDOC_CIBLE »
SQL += « INNER JOIN FACTURE AS FA ON FA.NUMERO = TRBL.NUMDOC_CIBLE »
SQL += « INNER JOIN COD_SYNTHESE_DOC AS SY ON SY.ID_DOC = FA.FACLEUNIK »
SQL += « LEFT JOIN COD_PIED_DOC AS DP ON DP.NUM_DOC = FA.NUMERO «
SQL += « where «
SQL += « TRBL.NUMDOC_CIBLE in (select SF.NUMFAC from SUIFAC as SF INNER JOIN FACTURE AS FA on SF.NUMFAC = FA.NUMERO where SF.solde = 1 and FA.INT_ACOMPTE = 0) »
SQL += « AND TRBL.TYPEDOC_SOURCE = 2 »
SQL += « AND TRCDE.TYPEDOC_SOURCE = 7 »
SQL += « AND SY.TYPE_DOC = 4 »
SQL += « AND SY.TOPERAT = » »
SQL += « AND DP.TYPE_DOC = 4 «
SQL += « GROUP BY FA.NUMERO, TRBL.NUMDOC_CIBLE, TRBL.NUMDOC_SOURCE «
SQL += « union «
SQL += « select SUM(SU.SOMDEB) as SOMDEB, SUM(Sy.MO_TOTAL_HT) as MO_TOTAL_HT, »
SQL += « SUM(DP.POURCENTAGE) as POURCENTAGE, SUM(SU.MARGE) as MARGE, »
SQL += « FA.NUMERO, SUM(SF.MONTANT) AS TOTALTTC, »
SQL += « SUM(FA.TOTAL) AS TOTALHTREMISE, »
SQL += « SUM(SY.TOTAL_HT) AS TOTALHT, TR.NUMDOC_CIBLE as facture, »
SQL += « TR.NUMDOC_SOURCE as commande «
SQL += « FROM SUIVICH AS SU »
SQL += « INNER JOIN FA4_DOC_AUDIT_TRANSF AS TR ON TR.NUMDOC_SOURCE = SU.NUMCOM »
SQL += « INNER JOIN SUIFAC AS SF ON SF.NUMFAC = TR.NUMDOC_CIBLE »
SQL += « INNER JOIN FACTURE AS FA ON FA.NUMERO = TR.NUMDOC_CIBLE »
SQL += « INNER JOIN COD_SYNTHESE_DOC AS SY ON SY.ID_DOC = FA.FACLEUNIK »
SQL += « LEFT JOIN COD_PIED_DOC AS DP ON DP.NUM_DOC = FA.NUMERO «
SQL += « where »
SQL += « TR.NUMDOC_CIBLE in (select SF.NUMFAC from SUIFAC as SF INNER JOIN FACTURE AS FA on SF.NUMFAC = FA.NUMERO where SF.solde = 1 and FA.INT_ACOMPTE = 0) »
SQL += « AND TR.TYPEDOC_SOURCE = 7 »
SQL += « AND SY.TYPE_DOC = 4 »
SQL += « AND SY.TOPERAT = » »
SQL += « AND DP.TYPE_DOC = 4 «
SQL += « GROUP BY FA.NUMERO, TR.NUMDOC_CIBLE, TR.NUMDOC_SOURCE «
SI HExécuteRequêteSQL(wlreq,hRequêteDéfaut,SQL) ALORS
HLitPremier(wlreq,hSansRafraîchir)
TANTQUE HTrouve(wlreq)
HLitRecherche(« FACTURE », »NUMERO »,wlreq.facture)
TANTQUE HTrouve(FACTURE)
PartMO = 0
wltotalHTBrut = 0; wltotalMOHTBrut = 0; wltotalRemises = 0; wltotalHTNet = 0
wltotalMOHTnet = 0; wlMarge = 0; wlMargePour = 0; MontantCom = 0
wlBaseCommissions = 0; wlCoutReel = 0
HLitRecherche(« FP_COMMISSIONS », »FACLEUNIK », FACTURE.FACLEUNIK)
SI HTrouve(FP_COMMISSIONS) ALORS
Si FP_COMMISSIONS.COM_REGLEE = Faux alors
wltotalHTBrut = arrondi(wlreq.TOTALHT,2)
wltotalMOHTBrut = arrondi(wlreq.MO_TOTAL_HT,2)
wltotalRemises = arrondi(wlreq.POURCENTAGE,2)
wltotalHTNet = arrondi(wlreq.TOTALHTREMISE,2)
wltotalMOHTnet = arrondi(wltotalMOHTBrut + (wltotalMOHTBrut * (wltotalRemises /100)),2)
wlBaseCommissions = wltotalHTNet – wltotalMOHTnet
wlCoutReel = arrondi(wlreq.SOMDEB,2)
wlMarge = wlBaseCommissions – wlCoutReel
Si wltotalHTNet <> 0 alors
wlMargePour = (wlMarge / wlBaseCommissions)*100
sinon
wlMargePour = 0
Fin
//TOTAL HT NON REMISE
FP_COMMISSIONS.TOTALHT = wltotalHTBrut
//MONTANT HT PART DE LA MO NON REMISE
FP_COMMISSIONS.MONTANT_MO_HT = wltotalMOHTBrut
//SOMME DES REMISES EN %
FP_COMMISSIONS.SOMMEREMISE= wltotalRemises
//TOTAL HT REMISE
FP_COMMISSIONS.TOTALHTREMISE = wltotalHTNet
//MONTANT HT PART DE LA MO REMISE
FP_COMMISSIONS.MONTANT_MO_HT_REMISE = wltotalMOHTnet
//BASE COMMISSIONABLE
FP_COMMISSIONS.BASECOM = wlBaseCommissions
//COUT REEL
FP_COMMISSIONS.SOMDEB = wlCoutReel
//MONTANT DE LA MARGE
FP_COMMISSIONS.MARGEMT = wlMarge
//POURCENTAGE DE LA MARGE
FP_COMMISSIONS.MARGEPOURC = wlMargePour
SELON wlMargePour
CAS >= wlniv3 : MontantCom = wlBaseCommissions * Taux3
CAS wlniv2<= * < wlniv3 : MontantCom = wlBaseCommissions * Taux2
CAS wlniv1<= * < wlniv2 : MontantCom = wlBaseCommissions * Taux1
AUTRE CAS : MontantCom = 0
FIN
FP_COMMISSIONS.MONTANT_COM = arrondi(MontantCom,2)
Hecrit(FP_COMMISSIONS)
FIN
SINON
//Je cré un enregistrement dans la table
HRAZ(FP_COMMISSIONS)
FP_COMMISSIONS.FACLEUNIK=FACTURE.FACLEUNIK
wltotalHTBrut = arrondi(wlreq.TOTALHT,2)
wltotalMOHTBrut = arrondi(wlreq.MO_TOTAL_HT,2)
wltotalRemises = arrondi(wlreq.POURCENTAGE,2)
wltotalHTNet = arrondi(wlreq.TOTALHTREMISE,2)
wltotalMOHTnet = arrondi(wltotalMOHTBrut + (wltotalMOHTBrut * (wltotalRemises /100)),2)
wlBaseCommissions = wltotalHTNet – wltotalMOHTnet
wlCoutReel = arrondi(wlreq.SOMDEB,2)
wlMarge = wlBaseCommissions – wlCoutReel
Si wltotalHTNet <> 0 alors
wlMargePour = (wlMarge / wlBaseCommissions)*100
sinon
wlMargePour = 0
Fin
//TOTAL HT NON REMISE
FP_COMMISSIONS.TOTALHT = wltotalHTBrut
//MONTANT HT PART DE LA MO NON REMISE
FP_COMMISSIONS.MONTANT_MO_HT = wltotalMOHTBrut
//SOMME DES REMISES EN %
FP_COMMISSIONS.SOMMEREMISE= wltotalRemises
//TOTAL HT REMISE
FP_COMMISSIONS.TOTALHTREMISE = wltotalHTNet
//MONTANT HT PART DE LA MO REMISE
FP_COMMISSIONS.MONTANT_MO_HT_REMISE = wltotalMOHTnet
//BASE COMMISSIONABLE
FP_COMMISSIONS.BASECOM = wlBaseCommissions
//COUT REEL
FP_COMMISSIONS.SOMDEB = wlCoutReel
//MONTANT DE LA MARGE
FP_COMMISSIONS.MARGEMT = wlMarge
//POURCENTAGE DE LA MARGE
FP_COMMISSIONS.MARGEPOURC = wlMargePour
SELON wlMargePour
CAS >= wlniv3 : MontantCom = wlBaseCommissions * Taux3
CAS wlniv2<= * < wlniv3 : MontantCom = wlBaseCommissions * Taux2
CAS wlniv1<= * < wlniv2 : MontantCom = wlBaseCommissions * Taux1
AUTRE CAS : MontantCom = 0
FIN
FP_COMMISSIONS.MONTANT_COM = arrondi(MontantCom,2)
Hajoute(FP_COMMISSIONS)
FIN
HLitSuivant(FACTURE)
FIN
HLitSuivant(wlreq)
FIN
FIN
FIN
info(« Traitement effectué »)