Bonjour.
Pour ce faire, à condition que votre indicateur soit aussi une clé (avec doublon), il et possible d'ajouter une condition au filtre sur les dates :
cNumFacture est une chaine
cCleLignes est une chaine
cClé est une chaine = hFiltre(COMMANDE,CD_DATE,DateDebut,DateFin,"CD_FACTURE=''")
SI cCle="" ALORS RETOUR
HLitPremier(COMMANDE,cClé)
TANTQUE PAS HEnDehors(COMMANDE)
// Filtre les lignes pour la commande en cours
// on peut créer l'entête de la facture
cNumFacture est une chaine = CréeEntêteFacture()
// ou le faire après l'envoie des lignes
cCleLignes = hFiltre(COMMANDES_LIGNES,CL_NUM,COMMANDE.CD_NUM,COMMANDE.CD_NUM)
HLitPremier(COMMANDE_LIGNE,cCléLigne)
TANTQUE PAS HEnDehors(COMMANDE_LIGNE)
// ...Traitement
LigneDeCOmmande_Vers_Factures()
// ...Fin Traitement
HLitSuivant(COMMANDE_LIGNE,cCléLigne)
FIN
hDesActiveFiltre(COMMANDE_LIGNE)
// Récupère l'information comme quoi la commande est facturée
ListeAjoute(LFacturees,COMMANDE.CD_NUM+TAB+cNumFacture)
// Commande suivante
HLitSuivant(COMMANDE,cClé)
FIN
HDésactiveFiltre(COMMANDE)
// Traite la liste des commandes facturées
i est un entier
POUR i = 1 A ListeOccurrence(LFacturees)
SI HLitRecherchePremier(COMMANDE,CD_NUM,Extraitchaine(LFacturees[i],1),BlocageEcriture) ALORS
COMMANDE.CD_FACTUREE=Extraitchaine(LFacturees[i],2)
HModifie(COMMANDE)
FIN
// Etat de la facture (borné sur le numéro de facture)
IImprimeEtat(EtatFacture,Extraitchaine(LFacturees[i],2),Extraitchaine(LFacturees[i],2))
FIN
Noter l'utilisation d'une liste remplie par programmation pour conserver les n° de commandes et factures. En effet, Si la modification des commandes est possible dans la boucle du filtre, c'est à éviter pour ne pas interférer avec ce contexte de parcours (qui tient compte du contenu de CD_FACTUREE).
Code saisi à titre indicatif et non testé.Evidement il y a toujours la solution SQL. Mais dans le parcours de votre requete, soit vous devez l'exécuter en la rendant modifiable soit vous devrez alors vous positionner dans le fichier pour modfier les enregistrements de COMMANDE. En effet, le résultat de la requête de parcours est un contexte HyperFile branché sur la base et non un point d'accès au fichiers :
HExécuteRequête(NomRequete,hModifieFichier...)Avec cet appel, la clause
HModifie est alors dsponible sur le résultat de la requête.
Enfin la requete de sélection des commandes pourrait ressembler à :
"SELECT * FROM Commande
WHERE COMMANDE.CD_DATE BETWEEN {Param1} AND {Param2}
AND CD_FACTUREE=''"
La Forge est avec vous