Dernier du mois

<code 4D>
$finMois:=Vrai
Au cas ou
: (Jour de(Date du jour()+1)=1) // le dernier jour du mois
: (Jour de(Date du jour(
)+2)=1) & (Numéro du jour(Date du jour())=7) // samedi
: (Jour de(Date du jour(
)+2)=2) & (Numéro du jour(Date du jour())=7) // samedi
: (Jour de(Date du jour(
)+1)=1) & (Numéro du jour(Date du jour())=6) // vendredi
: (Jour de(Date du jour(
)+2)=1) & (Numéro du jour(Date du jour())=6) // vendredi
: (Jour de(Date du jour(
)+3)=1) & (Numéro du jour(Date du jour())=6) // vendredi
: (Jour de(Date du jour(
)+3)=2) & (Numéro du jour(Date du jour())=6) // vendredi
: (Jour de(Date du jour(
)+3)=3) & (Numéro du jour(Date du jour(*))=6) // vendredi
Sinon
$finMois:=Faux
Fin de cas
</code 4D>

C’est-y pas magnifique ?

Bonjour,

Jusqu’à 15 appels au serveur pour faire cela !!! Du grand art :slight_smile:

Cordialement,

: Arnaud DE MONTARD

C’est-y pas magnifique ?
Et banal dans beaucoup de bases

: Olivier DESCHANELS

Jusqu’à 15 appels au serveur pour faire cela !!! Du grand art :slight_smile:
C’est là qu’on sent les années d’expertise : là où je me tords de désespoir, tu te fends la poire.

: Bertrand SOUBEYRAND

Et banal dans beaucoup de bases
On devrait demander la création d’un forum “zone de partage des perles”, ce serait de loin le plus éducatif.

: Arnaud DE MONTARD
: Bertrand SOUBEYRAND

Et banal dans beaucoup de bases
On devrait demander la création d’un forum “zone de partage des
perles”, ce serait de loin le plus éducatif.

Ça ressemblerait un peu trop à un diner de con, non? :mrgreen:

il suffira d’anonymiser les cons.

: Arnaud DE MONTARD

il suffira d’anonymiser les cons.

Il y’aura toujours le risque que le con se reconnaisse :roll:, et aussi surtout qu’on soit tous un jour un con. Même si en vrai on a tous été con un jour, le mieux c’est de l’accepter et de savoir apprendre de nos erreurs et d’avancer.

Je rajouterais qu’il y a la forme, mais aussi le fond. Qu’est censé faire ce bout de code :?:
J’ai l’impression que n’y l’un, ni l’autre, n’est parfait sur ce coup :roll:

Pour les non initiés, il serait Intéressant de donner la(une) bonne façon de faire, voire de donner les explications du pourquoi du comment.

Ton exemple est relativement évident, mais j’ai personnellement tenté de demander des explications sur le bon usage du Storage sans avoir de vraies réponses concernant la meilleure forme de code à adopter…:roll:

Si on ne sait pas comment fonctionne 4D en interne, on n’a peu de chance de trouver par hasard la bonne façon de l’utiliser…

A l’époque de Planète 4D, Thibaud A. était l’arbitre du concours de code 4D.

: Manuel PIQUET

Ton exemple est relativement évident, mais j’ai personnellement tenté
de demander des explications sur le bon usage du Storage sans avoir
de vraies réponses concernant la meilleure forme de code à
adopter…:roll:
Tu as eu https://forums.4d.com/Post/FR/31492208/1/31492209#31492209des réponses>, en quoi ne les trouves-tu pas “vraies” ???

: Manuel PIQUET

Si on ne sait pas comment fonctionne 4D en interne, on n’a peu de
chance de trouver par hasard la bonne façon de l’utiliser…
J’ignore un océan de choses sur le fonctionnement interne de 4d, tout comme j’ignore comment fonctionne une voiture, pourtant je code et je conduis (je n’ai pas dit bien). Ce que je veux dire c’est qu’une simple observation de comportement peut suffire, voire te renseigner bien plus rapidement que l’ouverture des entrailles de la bête.

Hello la foule,

en effet je ne vois pas bien à quoi sert ce code ?

Si l’idée est de savoir si on est en fin de mois, il y a bien plus simple en utilisant le calendrier perpétuel de 4D. Je décompose pour plus de facilité de lecture

<code 4D>
$Aujourdhui:=date du jour(*) // admettant qu’il soit encore utile de demander au serveur à notre époque

// on calcule le 1er du mois… qui est souvent le jour 1
// 27/09/19 - 27 + 1 = 01/09/19
$DebutMois:=$Aujourdhui-jour de($Aujourdhui)+1

// on demande le 1er du mois suivant -1 jour = la veille du 1er jour du mois suivant
// et c’est assez régulièrement le dernier jour du mois précédent … CQFD :wink:
// 01/09/19 + 1 mois = 01/10/19
// 01/10/19 - 1 jour = 30/09/19
$DernierJourMois:=ajouter a date($DebutMois;0;1;0)-1

// C’est sur la ligne ci-dessus que le calendrier perpétuel entre en ligne de compte

// il n’y a plus qu’à comparer aujourd’hui avec la fin du mois et hop le tour est joué
$FinMois:=($Aujourdhui=$DernierJourMois)

</code 4D>

En plus Olivier va être content car on n’utilise qu’un seul appel à date du jour ! :smiley:

En espérant que ça puisse vous servir.

Denis

: Denis JAGER

en effet je ne vois pas bien à quoi sert ce code ?

Ce code retorne Vrai si le dernier jour du mois est un week-end

Heu… Arnaud en relisant ton code, j’ai l’impression que tu cherches à savoir si on est le dernier jour ouvrable du mois (“ouvrable” et non “ouvré”)… c’est ça ? car je ne vois pas bien le lien avec le numéro de jour et le fait de savoir si on est un vendredi ou un samedi (la fin de mois pouvant être n’importe quel jour de la semaine comme ce mois 09/2019) d’autant plus que ça ne semble pas coller avec la 1ère ligne qui ne tient pas compte du jour et qui tend à confirmer le code que j’ai envoyé ?

Si tu ne sais pas que chaque appel à Date du jour(*) provoque un appel au serveur, ou si par exemple (ce n’est pas le cas mais cela pourrait) 4D avait mis en place une optimisation (un cache ou un envoi de requêtes en lot, etc.), on ne pourrait pas déduire que le code pose problème.

Si tu ne sais pas à quel moment le code provoque un appel au moteur de la base, ou comment il agit, c’est compliqué d’en déduire des choses.

Si OD peut répondre sur le pourquoi du comment, c’est en partie car il sait, lui, ces choses que le commun des mortels ignore, à moins de suivre des formations.

On connaît ces choses par expérience et grâce à notre ancienneté ;-), un novice peut ne pas les connaître.

Presque ! :smiley:

Car dans ce cas la 1ère ligne est incomplète et retourne vrai quel que soit le jour tant qu’on est en fin de mois : cette ligne renverra VRAI lundi prochain (30/09/2019).

Si l’objectif du code est ce que tu dis, il suffit de l’écrire comme ceci en modifiant ma dernière ligne

<code 4D>
$Jour:=numero de jour($Aujourdhui) // on récupère le numéro de jour

// on teste ensuite si on est bien en fin de mois et
// si le numéro de jour est samedi(7) ou dimanche (1)

$FinMois:=(($Aujourdhui=$DernierJourMois)&(($Jour=7)|($Jour=1))

</code 4D>

: Arnaud DE MONTARD
: Manuel PIQUET

Ton exemple est relativement évident, mais j’ai personnellement tenté
de demander des explications sur le bon usage du Storage sans avoir
de vraies réponses concernant la meilleure forme de code à
adopter…:roll:
Tu as eu
https://forums.4d.com/Post/FR/31492208/1/31492209#31492209des
réponses>, en quoi ne les trouves-tu pas “vraies” ???
J’ai eu TES réponses :wink: mais je reste sur ma fin concernant les bonnes pratiques à adopter pour pondre du code en utilisant le Storage.

Tu as fait des tests, mais cela ne me donne pas les mécaniques internes de 4D.

vaut-il mieux:

Storage.a
Storage.b
Storage.c

ou
$o:=Storage

$o.a
$o.b
$o.c

Etc.

: Manuel PIQUET

Si tu ne sais pas que chaque appel à Date du jour(*) provoque un
appel au serveur,

Heu… là quand même il faut lire un peu la doc et savoir que l’étoile dans <code 4D>
date du jour()
</code 4D> indique qu’on demande la date au serveur… kif kif pour heure courante(
)

Certes il y a plein de sujets d’optimisation qui ne figurent pas dans la doc (même si on peut finir par les deviner à l’usage (déduction, supposition, doigt mouillé, … :-D) mais là c’est explicite dans la doc :smiley:

Ah bon, il faut lire la doc :?: :-o
:lol:

Quel jour somme nous… à oui vendredi

: Denis JAGER

en effet je ne vois pas bien à quoi sert ce code ?
Facile, il sert à se demander à quoi il sert, un vendredi.
Plus sérieusement, je pense que ça retourne Vrai quand le jour courant est le dernier jour ouvrable du mois. Faut faire passer aux tests unitaires pour être sûr…