[solved] get commando voor tabel purchase price

Adriaan2kAdriaan2k Posts: 159Member
edited 2007-09-17 in NAV Dutch speaking only
Hallo,
ik heb weer een vraag mbt een report. Ik wil in een report met data item "item" op de regel de inkoopprijs van de betreffende leverancier ophalen uit tabel 'purchase price' nr. 7012. Ik heb nu het commando

grecpurchprice.get(item."no.", item."vendor no.");

Dit is echter niet correct want ik krijg een foutmelding mbt de andere velden uit tabel 7012. Wie kan mij aan het juiste commando of een andere oplossing helpen ? alvast bedankt voor jullie hulp.
mvg Adriaan

Comments

  • krikikriki Posts: 8,853Member, Moderator
    De primary key van deze tabel bevat meerdere velden, dus moet je ook de waarde van die velden aangeven in je GET-statement.

    Of je zet filters (SETRANGE of SETFILTER) om een record te vinden en een fout te vermijden.
    Regards,Alain Krikilion
    Use the SEARCH,Luke! || No PM,please use the forum. || May the <SOLVED>-attribute be in your title!
    NAV TechDays 2019: 21 & 22 November 2019, Antwerp (Belgium)
  • Adriaan2kAdriaan2k Posts: 159Member
    kriki wrote:
    De primary key van deze tabel bevat meerdere velden, dus moet je ook de waarde van die velden aangeven in je GET-statement.

    Of je zet filters (SETRANGE of SETFILTER) om een record te vinden en een fout te vermijden.

    Bedankt Alain voor je snelle antwoord. Ik weet alleen niet hoe met de overige velden om te gaan omdat deze volgens mij niet aan een veld in de itemtabel zijn gelinked. Met het setrange of setfilter commando moet je toch eerst de tabel in je report hebben opgehaald via het .get commando ? of kan ik meteen een set...commando ingeven ?
    mvg Adriaan
  • krikikriki Posts: 8,853Member, Moderator
    Een GET kan je ENKEL gebruiken als je de primary key-waarden hebt. In dat geval zijn RESET, SETCURRENTKEY, SETRANGE, SETFILTER, FIND, FINDSET, FINDFIRST, FINDLAST overbodig. Er wordt helemaal geen rekening mee gehouden in de GET.

    In jouw geval:
    recPurchasePrice.RESET;
    recPurchasePrice.SETCURRENTKEY(...); // hier selecteer je de beste key
    recPurchasePrice.SETRANGE("Item No.",Item."No.");
    recPurchasePrice.SETRANGE("Vendor No.",Item."Vendor No.");
    IF recPurchasePrice.FINDSET THEN // of FIND('-')
      REPEAT
        ...
      UNTIL recPurchasePrice.NEXT = 0;
    
    Met een filter op Item No. en Vendor No. is het mogelijk dat je meerdere records hebt (verschillende prijzen op verschillende datums of ook staffelprijzen).
    Dus voor 1 enkel record te hebben, moet je ook een filter op "Start Date" zetten
    recPurchasePrice.SETRANGE("Start Date",0D,TODAY);
    
    En in geval van staffelprijzen
    recPurchasePrice.SETRANGE("Minimum Quantity",1,decQuantity);
    
    En in geval van verschillende Unit of Measure, ook een filter op deze.

    In geval van filters op Start Date of Minimum Quantity, moet je FINDLAST of FIND('+') gebruiken om het laatste record (laatst mogelijk datum die geldig is of hoogst mogelijk quantity die geldig is) te vinden.
    Regards,Alain Krikilion
    Use the SEARCH,Luke! || No PM,please use the forum. || May the <SOLVED>-attribute be in your title!
    NAV TechDays 2019: 21 & 22 November 2019, Antwerp (Belgium)
  • goldeneyegoldeneye Posts: 13Member
    Simpel... De primaire sleutel van Purchase Price is:
    Item No.,Vendor No.,Starting Date,Currency Code,Variant Code,Unit of Measure Code,Minimum Quantity

    Zolang je niet filtert met een specifieke waarde op ALLE velden in die sleutel zul je mogelijks meer dan 1 record tegenkomen.

    Als je voor alle velden zo een waarde hebt, doe dan een GET. Indien niet: filteren + een lus.
    aka Vincent Vancalbergh

    "I tried filtering life, but the universe returned an Internal Error"
  • Adriaan2kAdriaan2k Posts: 159Member
    goldeneye wrote:
    Simpel... De primaire sleutel van Purchase Price is:
    Item No.,Vendor No.,Starting Date,Currency Code,Variant Code,Unit of Measure Code,Minimum Quantity

    Zolang je niet filtert met een specifieke waarde op ALLE velden in die sleutel zul je mogelijks meer dan 1 record tegenkomen.

    Als je voor alle velden zo een waarde hebt, doe dan een GET. Indien niet: filteren + een lus.
    bedankt voor je aanvulling. De eerdere replies waren in ieder geval voldoende om verder te gaan.
    mvg Adriaan
  • goldeneyegoldeneye Posts: 13Member
    Nog een extra weetje: Als je een GET doet, en NIET alle velden specifieert, veronderstelt hij voor de andere waarden de default value van dat datatype.

    Daarom dat SalesSetup.GET lukt (ipv SalesSetup.GET('')): Het veld "Primary Key" is een Code-veld en van de enige record is dat veld altijd blanco.
    aka Vincent Vancalbergh

    "I tried filtering life, but the universe returned an Internal Error"
Sign In or Register to comment.