1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Aide au calcul du nombre de mois

Discussion dans 'Résolution problème & conseils' créé par vicent54, Fev 26, 2018.

Tags:
  1. vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Je dois calculer le nombre de mois entre deux dates. Ce qui sort de l'ordinaire, c'est que "l'année" commence le 1er décembre. Pour calculer les valeurs d'intérêts, j'ai besoin des mois qui différencient 2 dates. L'intérêt varie aussi chaque mois.

    Merci pour l'aide.
     
    Tags:
  2. Pascal

    Pascal Active Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    82
    J'aime reçus:
    126
    Bonsoir Vincent54,

    Tu peux utiliser la fonction "DateDifférence" pour calculer la différence de jours entre deux dates. Ensuite tu sais que le mois de décembre c'est 31 jours, janvier 31 jours, février 28 ou 29 jours, etc...

    Pour le mois de février :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Cordialement,
    Pascal
     
  3. vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Merci Pascal. Je suis très reconnaissant.
     
    Pascal apprécie ceci.
  4. ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    371
    J'aime reçus:
    372
    Bonne idee
     
    #4 ProDev, Fev 26, 2018
    Dernière édition: Fev 26, 2018
    Pascal apprécie ceci.
  5. Fatehb71

    Fatehb71 Member

    Inscrit:
    Jan 9, 2018
    Messages:
    64
    J'aime reçus:
    39
    Bonjour
    Essaye la fonction Age
    Qui donne l'âge entre deux date en année, mois et jours
     
  6. Pascal

    Pascal Active Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    82
    J'aime reçus:
    126

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour
    Essaye la fonction Age
    Qui donne l'âge entre deux date en année, mois et jours
    Cliquez pour agrandir...
    Bonne solution Fatehb71

    Cordialement,
    Pascal
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    l'année commence le 1er décembre et se termine le 30 novembre? c'est ça?
     
    #7 channibal, Fev 27, 2018
    Dernière édition: Fev 28, 2018
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    l'année commence le 1er décembre est se termine le 30 novembre? c'est ça?
    Cliquez pour agrandir...
    Oui, oui. Voilà la situation.
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Quelles sont donc tes variables fixes? Mensualité? Montant du prêt ? Taux ? Nbr mensualité?
    Ou tu veux juste savoir le nombre des mois (Nbr mensualité) entre 2 dates préalablement connues?
    si ton taux d’intérêt change chaque année alors c'est qu'il change tout les 12 mois, peu importe quand commence l'année ou quand se termine!
    sauf si l’intérêt change un jour bien précis, le 1er jour de l'année ou le dernier ... (dans ton cas le 1er décembre ou le 30 novembre) ??

    sinon, un exemple pratique illustratif?
     
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Ce n'est pas un prêt, c'est un paiement annuel divisé en 12 versements. Si vous ne payez pas au cours du mois en cours, un taux d'intérêt variable est appliqué à la dette accumulée plus le versement du mois en cours, qui peut être modifié pour chaque mois. 0,5%, 1%, 1,5%... mensuellement lorsque le 1er jour du mois suivant de l'échéance n'est pas annulé. Si cette dette n'est pas payée au cours des mois suivants, les intérêts sont ajoutés mensuellement en fonction de l'intérêt du mois courant.
    Le premier versement annuel est jusqu'au 31 décembre, soit le premier mois de versement.
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    si j'ai bien compris (ce qui n'est pas vraiment évident :) ) les paramètres fixes sont :

    • un Montant Annuel de départ (sans taux d’intérêt)
    • un montant versement mensuel = Montant Annuel de départ / 12
    • Taux de départ = 0
    • Nbr de mensualité : ici = 12
    • le jour de départ de tout ça : dans notre cas le 01 décembre de l'année N, Date début ??
    • le jour de fin de tout ça (espérant le :) ) date fin ??

    les variables:
    • le Taux par mois qui s'ajoute en cas de retard?
    • le Début de la période en cours? dans ton cas le 1er décembre N
    • la fin de la période en cours? dans ton cas le 30 novembre N

    Ce qui nous donne :
    1. une vérification se fait chaque 1er du mois pour savoir si un versement a été fait?
    2. le cas échéant: un taux d’intérêt est ajouter au montant total restant jusqu’à la fin de la période annuelle en cours? +0.5% a chaque fois?

    ce que tu veux c'est d'automatiser la calcule des mensualités en cas de retard (ou pas) ??

    j’espère que j'ai bien compris :(
     
    #11 channibal, Fev 27, 2018
    Dernière édition: Fev 27, 2018
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Le mode de paiement est le suivant:

    Il est payable à partir du 1er décembre. Il n' y a pas d'acompte fixe, c'est comme n'importe quel autre mois, le paiement peut être effectué jusqu' à la fin du mois sans intérêt. Le 1er janvier, l'intérêt devrait déjà être calculé si le paiement de décembre n'est pas effectué, et ce, sur une base mensuelle.
    Nombre de mensualités: 12. Vous pouvez tout payer en une seule fois, auquel cas aucun intérêt n'est versé et l'année entière est payée. Il n' y a plus de calcul pour cette personne dans l'année.
    Vous pourriez avoir un solde de l'année précédente. Dans ce cas, si vous payez des intérêts sur le paiement de décembre sur le solde impayé.

    Variables:

    Intérêts par mois en cas de retard
    le début de la période en cours? le cas échéant, le 1er décembre de l'année N
    A la fin de la période en cours? le cas échéant, le 30 novembre N

    Je dois y parvenir:

    Automatisez le calcul des paiements mensuels et des intérêts.
    Un rapport résumant ce qui a été perçu, les soldes, ce qui a été payé au cours du mois.
    Il y a un nouveau calcul avec intérêts pour le mois et le total du montant impayé. Quota pour le mois précédent + solde des mois (ou de l'année) précédents
    Je veux faire ces rapports, et envoyer par courriel le montant à payer chaque mois.

    Je me suis mêlé au calcul des intérêts mensuels variables, des soldes impayés et des calculs mensuels.

    J'espère avoir mieux expliqué ce que j'ai à faire et je vous remercie de votre temps et de votre disponibilité.

    Salutations
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    ok c'est beaucoup plus clair ;)

    Ce que je peux faire c'est de t'aider dans la partie de la vérification si des versements ont été fait à temps ou pas

    dans l'une de mes solutions, gestion de flotte auto, j'ai créé des procédures qui gèrent des paiements automatiques (des mensualité ou autres périodicités...) je penses, qu'avec qlqs modifications, ça devrait t'aider

    [​IMG]

    dés que j'aurai un peu de temps je les posterai

    bon courage ;)
     
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Merci Channibal
     
  • gelop4

    gelop4 Member
    MEMBRE WX

    Inscrit:
    Fev 7, 2018
    Messages:
    48
    J'aime reçus:
    90
    Pour les calcul sur date et conversion, il faut utlisé le type Date et ses propriétés !

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Code (Text):
    d1, d2 dDiff sont des Date

    dDiff = d2 - d1
    Trace(dDiff..Mois)
     
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Gelop4:

    d1, d2 dDiff sont des Date
    dDiff est une date ou durée variable?
    Dans les deux cas, il marque l'erreur.
    Étant la date, l'erreur indique qu'une durée champ ne peut pas être convertie en date.
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Est ce que ton projet avance?
     
  • vicent54

    vicent54 Member

    Inscrit:
    Jan 25, 2018
    Messages:
    41
    J'aime reçus:
    15
    Je calcule les mensualités. J'apprécie votre coopération.
     
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    voila ce que j'ai fais (vite fait sans trop vérifier)

    j'ai créé 3 fichiers :
    • Dossiers
    • Paiements
    • Retard
    J’ai écris une procédure qui parcourt le fichier des paiements par dossier et vérifie si il y a des retards ou pas, selon les paramètres enregistrés dans le fichier dossier

    en cas de retard une autre procédure calcule le nouveau montant a payer par période selon le taux a appliquer (j'ai pas encore terminé cette procédure donc a y travailler) et rempli le fichier des retard avec toutes les mensualités

    voici les procédures :

    Code (Text):
    PROCEDURE VerificationPaiementsDossiers(nIdDos est un entier sur 8 octets = 0)
    SI nIdDos = 0 ALORS
        POUR TOUT F_Dossier SUR IDF_Dossier
            gnIdDossier = F_Dossier.IDF_Dossier
            SI F_Dossier.Creation_paiement_Ach = 2 ALORS
                VerifiePaiements()
            FIN
        FIN
    SINON
        HLitRecherchePremier(F_Dossier,IDF_Dossier,nIdDos)
        SI HTrouve(F_Dossier) ALORS
            SI F_Dossier.Creation_paiement_Ach = 2 ALORS
                gnIdDossier = nIdDos
                VerifiePaiements()
            FIN
        FIN
    FIN
    Code (Text):
    PROCEDURE VerifiePaiements()
    dDatepaiement est une Date = DateDuJour()
    nPeriode est un entier = F_Dossier.ToutLes_paiement_Ach
    nPeriodique est un entier = F_Dossier.Periode_paiement_Ach
    dDateDebutPaiement est une Date = F_Dossier.DateDebut_paiement_Ach
    dDateFinPaiement est une Date = F_Dossier.DateFin_paiement_Ach
    moMontant est un monétaire = F_Dossier.montant_paiement_Ach
    nLejour est un entier = F_Dossier.Le_paiement_Ach
    nLeMois est un entier = F_Dossier.Num_mois_Ach
    nLeSemaine est un entier = F_Dossier.numSemaine_Ach
    nNbreJours est un entier = 0
    rTaux est un réel = F_Dossier.Taux
    nMoisEC est un entier


    // Pas de période
    SI nPeriode = 0 ALORS
        RETOUR
    FIN

    //Date début pas encore échue
    SI dDateDebutPaiement > DateDuJour() ALORS
        RETOUR
    FIN

    //Date fin est dépassée
    SI dDateFinPaiement < DateDuJour() ALORS
        RETOUR
    FIN

    nNbreJours = DateDifférence(dDateDebutPaiement,dDateFinPaiement)
    i est un entier = 1

    SELON nPeriodique
        CAS 1
            //jour(s)
         
        CAS 2
         
            //semaine(s)
         
        CAS 3
            //mois
            dDateCalcule est une Date = DateDuJour()
            nMoisEC = MoisEnCours()
            //Vérification si paiement déjà effectué le mois en cours
            HLitRecherchePremier(F_Paiements,id_DossierMois,[gnIdDossier,nMoisEC])
            SI HTrouve(F_Paiements) ALORS
                RETOUR
            SINON
                //Recherche de la dernière paiement effectuée
                HLitRechercheDernier(F_Paiements,id_DossierTransaction_auto,[gnIdDossier,Vrai])
                SI HTrouve(F_Paiements) ALORS
                    SI F_Paiements.DAte_paiement >= dDateFinPaiement ALORS
                        RETOUR
                    FIN
                    // juste au cas ou :)
                    SI F_Paiements.DAte_paiement..Mois = dDateCalcule..Mois ALORS
                        RETOUR
                    FIN
                    //Retard : Calcul nbr mois de retard
                    nNbreJours = DateDifférence(DernierJourDuMois(F_Paiements.DAte_paiement),PremierJourDuMois(dDateCalcule))
                    SI nNbreJours >= nPeriode * 30 ALORS
                        dDateCalcule = DernierJourDuMois(F_Paiements.DAte_paiement)
                        nPeriode2 est un entier = nPeriode * 30
                        POUR i = 0 A nNbreJours  PAS nPeriode2
                            dDateCalcule..Jour++
                            SI VerifieJourMois(dDateCalcule) ALORS
                                // calcule de la nouvelle mensualité et application de taux de retard par mois
    //                            CalculNouvelleMensualite()
                                AjoutRetard(moMontant,dDateCalcule,rTaux)
                            FIN
                        FIN
                    FIN
                SINON
             
                    //!! Ajoute retard par rapport a la date de début et date du jour
                    SI DateDuJour() > dDateFinPaiement ALORS
                        RETOUR
                    FIN
                    SI DateDuJour() < dDateDebutPaiement ALORS
                        RETOUR
                    FIN
                    dDateCalcule = PremierJourDuMois(dDateCalcule)
                    dDateCalcule..Jour--
                    nNbreJours = DateDifférence(PremierJourDuMois(dDateDebutPaiement),dDateCalcule)
                    SI nNbreJours >= nPeriode * 30 ALORS
                        dDateCalcule = PremierJourDuMois(dDateDebutPaiement)
    //                    nPeriode2 est un entier = nPeriode * 30
                        POUR i = 1 A nNbreJours
                            dDateCalcule..Jour++
                            Trace("ici",dDateCalcule)
                            SI VerifieJourMois(dDateCalcule) ALORS
                             
                                // calcule de la nouvelle mensualité et application de taux de retard par mois
                                // CalculNouvelleMensualite()
                                AjoutRetard(moMontant,dDateCalcule,rTaux)
                             
                                //MiseAJourMontants(moMontant)
                            FIN
                        FIN
                    FIN
                FIN
            FIN
         
        CAS 4
            //année(s)
    FIN
     

    Le projet (Attention c'est une version HFSQL C/S !!!!!!!)

    Dernière MAJ :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bon dev ;)
     
    #19 channibal, Mar 1, 2018
    Dernière édition: Mar 2, 2018
    obir et vicent54 aiment ça.
  • ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    371
    J'aime reçus:
    372
    Merci Channibal
     
  • Partager cette page

    Chargement...