(OPGELOST) Dubbele veld checken !

postacipostaci Member Posts: 116
edited 2007-05-03 in NAV Dutch speaking only
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 ? :cry:

Akin

Comments

  • Marije_BrummelMarije_Brummel Member, Moderators Design Patterns Posts: 4,262
    Je kunt een korte functie schrijven die in de OnValidate de waardes controleerd.

    Voorbeeld:

    CheckValues
    Job.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. :mrgreen:
  • postacipostaci Member Posts: 116
    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 !

    Akin
  • Marije_BrummelMarije_Brummel Member, Moderators Design Patterns Posts: 4,262
    Heb je mijn oplossing al geprobeerd?
  • postacipostaci Member Posts: 116
    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.
  • postacipostaci Member Posts: 116
    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 Access :) NO duplicates ! dat zou wel sneller en makkelijker zijn.
  • DenSterDenSter Member Posts: 8,304
    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.
  • postacipostaci Member Posts: 116
    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 ??
  • Marije_BrummelMarije_Brummel Member, Moderators Design Patterns Posts: 4,262
    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 !');
    
  • postacipostaci Member Posts: 116
    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>
Sign In or Register to comment.