Bonjour,
Ma contribution à la question, avec un certain retard, mais le sujet est
complexe.
D'une part le "plus un an" fonctionne correctement entre deux contrôles
Date d'un formulaire, sans nécessiter de correction:
Sub Plus1An
dim oDocument as object, oForm as object
dim vDate as date, vDateFin as date
oDocument = ThisComponent
oForm = oDocument.DrawPage.Forms.Standard
vDate= cdatefromiso(oForm.DateDebut.date)
vDateFin =dateserial (year (vdate)+1, month (vdate), day (vdate))
oForm.DateFin.date = cdatetoiso(vDateFin)
End Sub
La routine donne un résultat intelligent : 28/02/2004 + 1 an donne
01/03/2005. Noter qu'ici le type date des deux variables locales est un
type interne à Basic.
D'autre part, la mise à jour d'un champ Date dans une base dBase.
Quand on récupère ce champ avec un .getDate (ou .Date) on obtient un
objet com.sun.star.util.date. Aucun rapport avec le type date de Basic.
Cet objet est une structure composée des éléments:
.Day (exemple : 18)
.Month (exemple : 12)
.Year (exemple : 1975)
Il faut donc que tu remplisses une telle structure pour mettre à jour
ton champ dBase, en utilisant un updateDate. Quelque chose comme:
dim nouvDate as new com.sun.star.util.date
nouvDate.Day = day(vDateFin)
nouvDate.Month = month(vDateFin)
nouvDate.Year = year(vDateFin)
oForm.updateDate(oForm.findColumn ("DATEFIN"),nouvDate)
Alors, pourquoi cela marchait presque ? Parce que lorsqu'on lit ou met à
jour un champ de la base en employant un autre type que celui prévu (par
exemple .updateDouble) l'API effectue des conversions en espérant que ça
marche. Et ici ça marche mal.
Bernard