Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 22-06-2009 14:01:41

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

[RESOLU] Calcul d'une date d'échéance

Bonjour,

Je suis à la recherche d'un algorithme qui calcul une date d'échéance à partir d'une date et d'une condition de paiement (du type 15 février + 30 jours fin de mois = 31 mars )

Et la nouveauté, cet algorithme doit également fonctionner avec la condition de paiement 45 jours fin de mois 


Merci


Hors ligne

 

#2 22-06-2009 15:41:38

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Calcul d'une date d'échéance

Bonjour,

je n'y connais pas grand chose en condition de paiement mais un truc comme ça peut-il marcher?

Code: pb

datetime ldt_date, ldt_date_expiration, ldt_date_calculer

ldt_date = datetime("19/01/2009")
ldt_date_calculer = datetime(RelativeDate (date(ldt_date) , 30))

//mois à 31 jours
ldt_date_expiration = datetime("31"+string(ldt_date_calculer,"/mm/yy"))
If string(ldt_date_expiration,"yyyy-mm-dd") = '1900-01-01' or isnull(ldt_date_expiration) then
  //mois à 30 jours
  ldt_date_expiration = datetime("30"+string(ldt_date_calculer,"/mm/yy"))
  If string(ldt_date_expiration,"dd/mm/yyyy") = '01/01/1900'  or isnull(ldt_date_expiration) then
    //mois à 29 jours
    ldt_date_expiration = datetime("29"+string(ldt_date_calculer,"/mm/yy"))
    If string(ldt_date_expiration,"dd/mm/yyyy") = '01/01/1900'  or isnull(ldt_date_expiration) then
      //mois à 28 jours
      ldt_date_expiration = datetime("28"+string(ldt_date_calculer,"/mm/yy"))
    End if
  End if
End if

Hors ligne

 

#3 22-06-2009 15:48:42

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Calcul d'une date d'échéance

pour trouver le dernier jour d'un mois M, il suffit de prendre le 1er du mois M+1 et d'enlever un jour


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#4 22-06-2009 16:21:34

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Calcul d'une date d'échéance

Pô bête

Hors ligne

 

#5 23-06-2009 05:43:32

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

Aide de PowerBuilder a écrit:

RelativeDate PowerScript function

Description

Obtains the date that occurs a specified number of days after or before another date.

Syntax

RelativeDate ( date, n )

Argument    Description
date    A value of type date
n    An integer indicating a number of days
Return value

Date. Returns the date that occurs n days after date if n is greater than 0. Returns the date that occurs n days before date if n is less than 0. If any argument's value is null, RelativeDate returns null.

Je sais qu'elle existe à partir de l'édition 10.5 ... je ne connais pas les autres !

Dernière modification par BRWA (23-06-2009 05:44:26)


Wagener Bruno

Hors ligne

 

#6 23-06-2009 08:18:02

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

Function uf_date_d_echeance(al_echeance long, ab_month_end boolean)

Code: pb

Date ld_echeance
Integer li_bisextile = 28

ld_echance = RelativeDate(today(),al_echeance)

if ab_month_end then
     Choose Case MONTH(ld_echance)
          Case 1
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 3
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 4
               if DAY(ld_echeance) <> 30 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-30-" + String(Year(ld_echeance)))
               end if
          Case 5
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 6
               if DAY(ld_echeance) <> 30 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-30-" + String(Year(ld_echeance)))
               end if
          Case 7
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 8
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 9
               if DAY(ld_echeance) <> 30 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-30-" + String(Year(ld_echeance)))
               end if
          Case 10
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 11
               if DAY(ld_echeance) <> 30 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-30-" + String(Year(ld_echeance)))
               end if
          Case 12
               if DAY(ld_echeance) <> 31 then
                    ld_echeance = Date(String(Month(ld_echeance) + "-31-" + String(Year(ld_echeance)))
               end if
          Case 2
               if MOD(Year(ld_echeance),4) = 0 then li_bisextile = li_bisextile + 1
               if DAY(ld_echeance) <> li_bisextile then
                    ld_echeance = Date(String(Month(ld_echeance) + "-" + String(li_bisextile) + "-" + String(Year(ld_echeance)))
               end if
     End Choose

Wagener Bruno

Hors ligne

 

#7 23-06-2009 08:20:39

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

code qui posera problème en 2100 puisque 2100 ne sera pas bisextile ... mais bon, il y a de la marge ...


Wagener Bruno

Hors ligne

 

#8 23-06-2009 08:43:56

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Calcul d'une date d'échéance

Merci pour ces nombreuses réponses, mais pour l'instant cela ne répond pas à la question de savoir ce que va donner par exemple le 23/06/09 avec une condition de paiement de 45 jours fin de mois, en sachant que 45 et fin de mois sont stockés dans la base de données. (la réponse est le 31/08/09).


Merci d'avance,

Hors ligne

 

#9 23-06-2009 09:09:50

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

RelativeDate("06-23-09",45) = "08-07-09" = ld_echeance

Choose case MONTH(ld_echeance)
     Case 8
          Day(ld_echeance) = 07 then Day(ld_echeance) = 31
End Choose

ld_echeance = "08-31-09"


... Moi, il me semble que ça colle ... Je me trompe ?


Wagener Bruno

Hors ligne

 

#10 23-06-2009 09:54:49

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Calcul d'une date d'échéance

Bonjour,

Il me semble que la fonction ci-dessous devrait fonctionner sans problème, en ne s'occupant pas de savoir s'il s'agit d'une année bissextile et le nombre de jours que comporte le mois :

Code: pb

$PBExportHeader$f_dateech.srf
global type f_dateech from function_object
end type

forward prototypes
global function date f_dateech (date ad_dateref, integer ai_ech)
end prototypes

global function date f_dateech (date ad_dateref, integer ai_ech);// Function : calcul de la date d'échéance à n jours fin de mois

// Arguments :
// ad_dateref : date de référence
// ai_ech : nombre de jours pour l'échéance

integer li_month, li_year
date ld_dateech, ld_lastdayofmonth

ld_dateech = RelativeDate(ad_dateref, ai_ech)

li_month = Month(ld_dateech)
li_year = Year(ld_dateech)

li_month++
IF li_month > 12 THEN 
  li_month = 1
  li_year++
END IF

ld_lastdayofmonth = RelativeDate( date(string(li_year) +  "-"  + string(li_month) + "-01"), -1)

RETURN ld_lastdayofmonth

end function

Hors ligne

 

#11 23-06-2009 10:16:15

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

oui, de fait, elle est plus élégante que la mienne

Dernière modification par BRWA (23-06-2009 12:10:11)


Wagener Bruno

Hors ligne

 

#12 23-06-2009 15:55:53

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Calcul d'une date d'échéance

Effectivement, cela fonctionne très bien.

Merci à tous

Hors ligne

 

#13 24-06-2009 06:49:31

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

Je dois faire un truc similaire mais dans une DataWindow Expression, pour changer la couleur du champs en focntion de la date du jour, de la date de la commande et du nombre de jours entre la date de commande et la date d'échéance (et éventuellement du fait que celà soit fin du mois ou pas). J'arrive à faire la fonction en PowerScript (celà fonctionne bien, que ce soit celle de Buck ou la mienne), mais je n'arrive pas à la faire en DataWindow Expression. Quelqu'un pourrait-il m'aider ?

Merci.


Wagener Bruno

Hors ligne

 

#14 24-06-2009 07:21:59

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Calcul d'une date d'échéance

tu peux appeler une fonction globale dans une DW expression


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#15 24-06-2009 07:46:17

BRWA  
Membre Power Geek
Lieu: Beuzet (Belgique)
Date d'inscription: 18-12-2008
Messages: 151
Pépites: 24,612
Banque: 0

Re: [RESOLU] Calcul d'une date d'échéance

Merci ! J'apprends quelque chose !

Merci beaucoup !


Wagener Bruno

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22