PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → [WD28 ] RECHERCHE COMPLEXE DANS UN TABLEAU DE STRUCTURE
[WD28 ] RECHERCHE COMPLEXE DANS UN TABLEAU DE STRUCTURE
Started by Diamondsoftware, Feb., 22 2024 11:30 AM - 1 reply
Registered member
143 messages
Popularité : +6 (8 votes)
Posted on February, 22 2024 - 11:30 AM
Bonjour à tous.
Je seche sur un probleme de tableau.
Je fais une comparaison entre deux tables memoires contenant certaines informations communes.
Voila le code simplifie; j'ai enleve ce qui n'est pas necessaire a la comprehension.
J'ai un tableau dynamique de structure au format suivant:

AnalyticsRecordForCache est une Structure
DateEntry est une chaîne
Description est une chaîne
DocNumber est une chaîne
Value est un monétaire
Categorie1 est une chaîne
Categorie2 est une chaîne
FIN

Je rempli le tableau avec une boucle qui lit une table memoire, de ce coté la , pas de soucis, ce se rempli.
MyCacheOfAnalyticsRecords est un tableau AnalyticsRecordForCache dynamique
MyCacheOfAnalyticsOneRecord est un AnalyticsRecordForCache

ONeOperation est une Structure
IdREc est un entier sur 8 octets
Date est une chaîne
Description est une chaîne
IdRecAccountIn est un entier sur 8 octets
IdRecAccountOUT est un entier sur 8 octets
NameAccountIN est une chaîne
NameAccountOUT est une chaîne
CreditValueUSD est un monétaire
DebitValueUSD est un monétaire
DocNumber est une chaîne
FIN

OperationInuse est une ONeOperation

// remplissage du tableau a partir d'une table memoire
POUR i=1 À Localvar_nbLineTable
MyCacheOfAnalyticsOneRecord.Value=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_VALUE_USD[i]
MyCacheOfAnalyticsOneRecord.DateEntry=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_DATE[i]
MyCacheOfAnalyticsOneRecord.Description=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_DESCRIPTION[i]
MyCacheOfAnalyticsOneRecord.DocNumber=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_DOCNUMBER[i]
MyCacheOfAnalyticsOneRecord.Categorie1=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_CATEGORY1[i]
MyCacheOfAnalyticsOneRecord.Categorie2=MYIMPORTScreen_TABLE_ENTRIESFORANALYTIC.COL_CATEGORY2[i]
TableauAjoute(MyCacheOfAnalyticsRecords,MyCacheOfAnalyticsOneRecord)
FIN

// apres dans une autre boucle je fait une recherche dans le tableau a partir d'elements d'une autre table.
// A partir d'une autre table je fais une recherche de correspondance
Localvar_nbLineTable=TableOccurrence(MYIMPORTScreen_TABLE_ENTRIES)
POUR i=1 À Localvar_nbLineTable
OperationInuse.Date=MYIMPORTScreen_TABLE_ENTRIES.COL_DATE[i]
OperationInuse.Description=MYIMPORTScreen_TABLE_ENTRIES.COL_DESCRIPTION[i]
OperationInuse.IdREc=MYIMPORTScreen_TABLE_ENTRIES.COL_IDREC[i]
OperationInuse.IdRecAccountIn=MYIMPORTScreen_TABLE_ENTRIES.COL_IDREC_ACCOUNT_FROM[i]
OperationInuse.IdRecAccountOUT=MYIMPORTScreen_TABLE_ENTRIES.COL_IDREC_ACCOUNT_TO[i]
OperationInuse.NameAccountIN=MYIMPORTScreen_TABLE_ENTRIES.COL_ACCOUNT_FROM[i]
OperationInuse.NameAccountOUT=MYIMPORTScreen_TABLE_ENTRIES.COL_ACCOUNT_TO[i]
OperationInuse.CreditValueUSD=MYIMPORTScreen_TABLE_ENTRIES.COL_CREDIT_VALUE_USD[i]
OperationInuse.DebitValueUSD=MYIMPORTScreen_TABLE_ENTRIES.COL_DEBIT_VALUE_USD[i]
OperationInuse.DocNumber=MYIMPORTScreen_TABLE_ENTRIES.COL_DOCUMENTNR[i]
SI Abs(OperationInuse.CreditValueUSD)>0 ALORS
Localvar_ValeurUSD=Abs(OperationInuse.CreditValueUSD)
SINON
SI Abs(OperationInuse.DebitValueUSD)>0 ALORS
Localvar_ValeurUSD=Abs(OperationInuse.DebitValueUSD)
FIN
FIN
Localvar_LineNoINCache=TableauCherche(MyCacheOfAnalyticsRecords,tcLinéaire,"Value;DocNumber;Date;Description",Localva r_ValeurUSD,OperationInuse.DocNumber,OperationInuse.Date,OperationInuse.Description,1)
SI Localvar_LineNoINCache>0 ALORS
// Correspondance trouvee,
// TRAITEMENT...
stop
//
FIN
FIN


Mon probleme:
Le tableauCherche me donne toujours -1 , donc il ne trouve jamais, ce qui n'est pas possible au niveau des datas, puisque par une autre methode plus lente (usage de table memoire) ca marche , tres lent mais ca marche.

Merci d'avance pour vos reponses et aide.
Salutations
Stephane D.

--
Stephane Dujourdy
Softwares made on measure and computing advice since 1980
Softwares made on measure for Diamond and Luxe sector since 1999
info@diamondsoftware.net
http://www.diamondsoftware.net
Registered member
143 messages
Popularité : +6 (8 votes)
Posted on February, 22 2024 - 12:02 PM
Petite correction grace a =JBO=
DateEnry a la place de Date dans les parametres de recherche
J'ai corrige dans le code, mais helas ca ne marche toujours pas.
S.

--
Stephane Dujourdy
Softwares made on measure and computing advice since 1980
Softwares made on measure for Diamond and Luxe sector since 1999
info@diamondsoftware.net
http://www.diamondsoftware.net