Temp table en FINDSET/FINDFIRST

lyot
Member Posts: 202
Hallo,
Ik heb een temp table die ik opvul a.d.h.v. een REPEAT UNTIL.
Tot zover geen vuiltje aan de lucht.
Als ik nu die temp table teurg wil overlopen dan heb ik iets 'raar' voor...
Ik wil die table als volgt overlopen:
Bovenstaande code werkt niet, dit omdat hij los over die FINDSET/FINDFIRST gaat en
dus nooit in zijn REPEAT UNTIL komt.
Als ik nu echter het volgende doe:
Dan werkt dit wel naar behoren... op het eerste zicht althans.
Maar is dit wel erg correct? Omdat ik mij nu niet echt expliciet positioneer
op het eerste record in mijn temp table. ](*,)
Ik heb een temp table die ik opvul a.d.h.v. een REPEAT UNTIL.
Tot zover geen vuiltje aan de lucht.
Als ik nu die temp table teurg wil overlopen dan heb ik iets 'raar' voor...
Ik wil die table als volgt overlopen:
IF tempTable.FINDSET(FALSE,FALSE) THEN REPEAT //bewerkingen UNTIL tempTable.NEXT = 0;of
IF tempTable.FINDFIRST THEN REPEAT //bewerkingen UNTIL tempTable.NEXT = 0;
Bovenstaande code werkt niet, dit omdat hij los over die FINDSET/FINDFIRST gaat en
dus nooit in zijn REPEAT UNTIL komt.
Als ik nu echter het volgende doe:
REPEAT //bewerkingen UNTIL tempTable.NEXT = 0;
Dan werkt dit wel naar behoren... op het eerste zicht althans.
Maar is dit wel erg correct? Omdat ik mij nu niet echt expliciet positioneer
op het eerste record in mijn temp table. ](*,)
0
Answers
-
Voor het vullen zie ik geen code maar doe je hierna wel eerst een RESET;0
-
ajhvdb wrote:Voor het vullen zie ik geen code maar doe je hierna wel eerst een RESET;
Jazeker, ik heb zelfs al eens geprobeerd met er een filter op te plaatsen
maar andermaal helaas...0 -
wat gebeurt er bij:
IF tempTable.FIND('-') THEN
IF tempTable.FINDSET THEN
of laat alle code even zien0 -
Beiden zonder resultaat jammergenoeg...
De temptable wordt opgevuld in form, als er daar op een button wordt gedrukt. Deze wordt vandaar dan doorgegeven aan een code unit waar alle records van deze temptable worden overlopen.
Wel merk ik in debug dat de temptable reeds een waarde bevat vooraleer men aan de FINDSET komt... Niet zo heel uitzonderlijk want meestal gaat men een findset gebruiken in combinatie met filters, om na filteren zich te positioneren op het eerste record na filtering. Filters zijn echter niet van toepassing op deze temptable.
Ik heb reeds geprobeerd om domweg er een filter op te plaatsen, maar dit lukt ook niet.0 -
Ik ben bang dat we hier niet veel zinnigs over kunnen vertellen, indien we niet de volledige C/AL code te zien krijgen.No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)0
-
FORM
lrecTransportLine.RESET; lrecTransportLine.SETRANGE("Transport No.","Transport No"); IF lrecTransportLine.FINDSET(FALSE,FALSE) THEN REPEAT //... IF (lrecSalesLine."Quantity (Base)" > ldecBaseTotal) AND (ldecBaseTotal <> 0) THEN BEGIN lrecTmpTransportLine.COPY(lrecTransportLine); lrecTmpTransportLine.VALIDATE(Quantity,lrecSalesLine."Quantity (Base)"-ldecBaseTotal); lrecTmpTransportLine.VALIDATE("Unit Of Measure",lrecSalesLine."Unit of Measure Code"); lrecTmpTransportLine.INSERT(TRUE); END //..... UNTIL lrecTransportLine.NEXT = 0; //... lcuShipFunct.fctCreateTransactionsAUTLine2(lrecTmpTransportHeader,lrecTmpTransportLine,USERID,'FORM');
Codeunit
fctCreateTransactionsAUTLine2WITH precTmpTransportHeader DO BEGIN lintToPickLeft := 0; ldecPalletsBase := 0; ldecToPickBase := 0; lrecInventorySetup.GET; //met of zonder filters hier te plaatsen werkt dit niet IF precTmpTransportLine.FINDSET THEN REPEAT //... UNTIL precTmpTransportLine.NEXT=0;
Als ik echter dit plaats dan werkt het wel...
maar dan ik natuurlijk wel niet filteren.WITH precTmpTransportHeader DO BEGIN lintToPickLeft := 0; ldecPalletsBase := 0; ldecToPickBase := 0; lrecInventorySetup.GET; REPEAT //... UNTIL precTmpTransportLine.NEXT=0;
[/b]0 -
How are the variables defined? local, global
Are the "prec" defined as a VAR? in fctCreateTransactionsAUTLine2. And I don't think it needs to be a temp too.0 -
-
Maar heb je de boolean "var" aangeklikt voor variable "precTmpTransportLine"? Als je dat NIET doet, dan zend je ENKEL het huidige record naar de functie. Als je dat wel doet, dan zend je de hele temptable door.Regards,Alain Krikilion
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!0 -
kriki wrote:Maar heb je de boolean "var" aangeklikt voor variable "precTmpTransportLine"? Als je dat NIET doet, dan zend je ENKEL het huidige record naar de functie. Als je dat wel doet, dan zend je de hele temptable door.
Ah... ik dacht dat dit enkel diende als men die variabele/parameter - pass-by refference of pass-by value, ik haal ze telkens door elkaar - wou bewerken in de functie.0 -
lyot wrote:kriki wrote:Maar heb je de boolean "var" aangeklikt voor variable "precTmpTransportLine"? Als je dat NIET doet, dan zend je ENKEL het huidige record naar de functie. Als je dat wel doet, dan zend je de hele temptable door.
Ah... ik dacht dat dit enkel diende als men die variabele/parameter - pass-by refference of pass-by value, ik haal ze telkens door elkaar - wou bewerken in de functie.
Als je weet wat er achter de schermen gebeurt, dan is het wel logisch dat het zo werkt met temptables: VAR wil zeggen dat er een POINTER naar de waarde wordt doorgegeven en NIET de waarde zelf => een POINTER naar de temptable en NIET de huidige waarde van het record in de temptable.Regards,Alain Krikilion
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!0 -
Ah ok, ik dacht dat C/Side per definitie "pass-by value" deed, maw een copie doorgeven van het ganse object (in geval van een table, de ganse table) zonder een pointer bj te houden.
En dat de parameter VAR dan vervolgens een "pass-by reference" deed, de table doorgeven met een pointer die verwijst naar de oorspronkelijke tabel, zodanig dat alle bewerkingen in de functie dan ook meteen gedaan worden op de brontabel.
Aangezien ik slechts de tabel wou doorgeven (de waarden) zonder de brontabel te wijzigen dacht ik dat dit kon zonder de parameter VAR te activeren.
Natuurlijk als ik mijn eigen logica volg moest ik dit toch eens geprobeerd hebben met de parameter VAR :oops:
Ik heb dit blijkbaar over het hoofd gezien.
Alvast bedankt voor uw verhelderende uitleg! =D>0 -
Graag gedaan.Regards,Alain Krikilion
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!0 -
lyot wrote:Ah ok, ik dacht dat C/Side per definitie "pass-by value" deed, maw een copie doorgeven van het ganse object (in geval van een table, de ganse table) zonder een pointer bj te houden.
En dat de parameter VAR dan vervolgens een "pass-by reference" deed, de table doorgeven met een pointer die verwijst naar de oorspronkelijke tabel, zodanig dat alle bewerkingen in de functie dan ook meteen gedaan worden op de brontabel.
Aangezien ik slechts de tabel wou doorgeven (de waarden) zonder de brontabel te wijzigen dacht ik dat dit kon zonder de parameter VAR te activeren.
Natuurlijk als ik mijn eigen logica volg moest ik dit toch eens geprobeerd hebben met de parameter VAR :oops:
Ik heb dit blijkbaar over het hoofd gezien.
Alvast bedankt voor uw verhelderende uitleg! =D>
Dus je hebt gelijk, NAV gebruikt als norm By Value, alleen betekent dat precies het andere dan wat je dacht0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions