(OPGELOST) Dubbele veld checken !

postaci
Member Posts: 116
Beste mensen,
ik wil graag een veld checken om te voorkomen dat het dubbel bestaat.
Bestaande situatie :
In projecten heb ik het veld :
- No.
- Sortnr
- Jaar
- Sortjaar
Via object & prospects wordt er een project aangemaakt. Bv OBD06-1000
Dan krijgt No. in projecten als waarde bv PRJ06-0001
PRJ06-0001 verander ik in 2.001.06 . Als ik dit wijzig dan wordt de inhoud van de volgende velden:
Sortnr = 001 (voor volgnr) dit doet ik door copystr !
Jaar = 06
Sortjaar = 00106 (volgnr+jaar)
Stel dat ik een nieuwe project aanmaak en het zelfde toepas dan mag Sortjaar niet hetzelfde zijn.
We hadden nu 2.001.06 met Sortjaar 00106
Stel ik maak een nieuwe project aan = 5.001.06 , dan zou ik ook als Sortjaar 00106 krijgen. maar dit bestaat al bij een andere project.
Namelijk 2.001.06 <---> 5.001.06
Dus *.001.06 gedeelte mag niet zelfde zijn, anders is het dubbel.
Ik heb het zo opgelost dat ik dat gedeelte in 1 veld zet. Namelijk
Sortjaar. Maar het moet bij het aanmaken ook wel controleren op andere record of die gelijk is aan die records.
Kan iemand mij hierbij helpen ?
Akin
ik wil graag een veld checken om te voorkomen dat het dubbel bestaat.
Bestaande situatie :
In projecten heb ik het veld :
- No.
- Sortnr
- Jaar
- Sortjaar
Via object & prospects wordt er een project aangemaakt. Bv OBD06-1000
Dan krijgt No. in projecten als waarde bv PRJ06-0001
PRJ06-0001 verander ik in 2.001.06 . Als ik dit wijzig dan wordt de inhoud van de volgende velden:
Sortnr = 001 (voor volgnr) dit doet ik door copystr !
Jaar = 06
Sortjaar = 00106 (volgnr+jaar)
Stel dat ik een nieuwe project aanmaak en het zelfde toepas dan mag Sortjaar niet hetzelfde zijn.
We hadden nu 2.001.06 met Sortjaar 00106
Stel ik maak een nieuwe project aan = 5.001.06 , dan zou ik ook als Sortjaar 00106 krijgen. maar dit bestaat al bij een andere project.
Namelijk 2.001.06 <---> 5.001.06
Dus *.001.06 gedeelte mag niet zelfde zijn, anders is het dubbel.
Ik heb het zo opgelost dat ik dat gedeelte in 1 veld zet. Namelijk
Sortjaar. Maar het moet bij het aanmaken ook wel controleren op andere record of die gelijk is aan die records.
Kan iemand mij hierbij helpen ?

Akin
0
Comments
-
Je kunt een korte functie schrijven die in de OnValidate de waardes controleerd.
Voorbeeld:
CheckValuesJob.SETRANGE(Value, Value); Job.SETFILTER("No.", '<>%1', "No."); IF NOT Job.ISEMPTY THEN ERROR(Value bestaat reeds);
Succes, en doe de groeten aan Arjan als die weer bij jullie komt.0 -
Dit zit onder Onvalidate bij Job tabel.
IF "No." <> xRec."No." THEN BEGIN
JobSetup.GET;
NoSeriesMgt.TestManual(JobSetup."Job Nos.");
"No. Series" := '';
END;
//dit stukje onder is van mij !
Sortnr := COPYSTR("No.",3,3);
Jaartal := COPYSTR("No.",7,2);
Produkt := COPYSTR("No.",1,1);
Sortjaar := Sortnr + Jaartal
//Akin sorteren !
Elke keer word de inhoud van Sortjaar ingevuld. Maar die mag dus niet dubbel voorkomen.
Hoe moet ik dat laten checken dan ?? Het is geen primary key. IS een losse veld (code) dat bestaat uit de inhoud van andere 2 velden.
Rara hoe kan dit opgelost worden ? Het moet natuurlijk zo nadat er gewijzigd wordt dat het direct aangeeft dat het al bestaat, netals bij een primary key. als die dubbel is dan geeft het direct aan !
Akin0 -
-
ik weet niet hoe ik het moet invoeren.
wat moet voor Value staan ??
je hebt mijn code gezien onder OnValidate...
daar zie je dat ik 3 velden splits.
Volgnr + sortnr mogen niet zelfde worden.0 -
Bestaat de mogelijkheid niet om een veld onder de opties of ergens aan te kunnen geven dat er geen dubbele waarden mogen voorkomen.
Netals bij AccessNO duplicates ! dat zou wel sneller en makkelijker zijn.
0 -
Nee dat is helaas niet een optie in NAV.
De enige manier om te controleren of een waarde al bestaat in een veldcombinatie die niet in de primaire sleutel zit, is om een filter te zetten op die waarde en te kijken of je records kan vinden. Als je goed naar Mark's voorbeeld kijkt, zul je zien dat dit precies is wat hij voorstelt.0 -
Ik heb het als volgt ingevoerd.
IF "No." <> xRec."No." THEN BEGIN
JobSetup.GET;
NoSeriesMgt.TestManual(JobSetup."Job Nos.");
"No. Series" := '';
END;
Sortnr := COPYSTR("No.",3,3);
Jaartal := COPYSTR("No.",7,2);
Produkt := COPYSTR("No.",1,1);
Sortjaar := Sortnr + Jaartal ;
//Akin sorteren !
Job.SETRANGE(Sortjaar);
Job.SETFILTER(Sortjaar, '<>%1', Sortjaar);
IF NOT Job.ISEMPTY THEN
ERROR('Volgnr + Jaartal bestaat reeds !');
Ik krijg altijd de melding te zien. Ik snap niet hoe ik het aan moet passen.
Kan het wel eigenlijk op een veld gefilterd worden die pas wordt ingevuld ? Want ik wil dat Sortjaar gechecked wordt, terwijl dit ook bij het aanpassen ingevuld wordt. namelijk door sortnr + jaartal.
Hoe verder ??0 -
Goed bezig, je bent er bijna.
Wat je nog moet toevoegen is een filter ongelijk aan dit record.Job.SETFILTER("No.", '<>%1', "No."); Job.SETRANGE(Sortjaar, Sortjaar); IF NOT Job.ISEMPTY THEN ERROR('Volgnr + Jaartal bestaat reeds !');
0 -
Ik denk dat het gelukt is
Dit is wat ik gebruikt heb en het werkt :
Dit geld alleen voor Delta Nederland, daarom dat er Companyname is gebruikt.
IF COMPANYNAME = 'Delta Nederland' THEN
Job.SETFILTER("No.", '<>%1', "No.");
Job.SETRANGE(Sortjaar,Sortjaar);
IF COMPANYNAME = 'Delta Nederland' THEN
IF NOT Job.ISEMPTY THEN
ERROR('Volgnr + Jaartal bestaat reeds !');
Thanks ! =D>0
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