Mina produkter

Logga in för att följa kategorier och för att få genvägar i denna meny
avbryt
Visar resultat för 
Visa  endast  | Sök istället efter 
Menade du: 

Fd medlem
Inte tillämpbar

Leta upp pris(er)

Jag är ganska ny till api:n, och försöker förstå hur AdkFind fungerar. Jag har skrivit en funktion för att leta upp arkikelpriser (som ska sedan skickas till en MySQL databas på vår webbshop). Funktionen slår inte upp några fel, men ger bara 0 som resultat. Vad gör jag för fel?

private double GetBasePrice(string ArtNr, string PriceList)
{
Double Price = new Double();
try
{
pData2 = Api.AdkCreateData(Api.ADK_DB_PRICE);
//filters
error = Api.AdkSetDouble(pData2, Api.ADK_PRICE_BASE, -1);
error = Api.AdkSetStr(pData2, Api.ADK_PRICE_ARTICLE_NUMBER, ref ArtNr);
error = Api.AdkSetStr(pData2, Api.ADK_PRICE_PRICE_LIST, ref PriceList);
//find
error = Api.AdkFind(pData2);
//lookup prices
Api.AdkGetDouble(pData, Api.ADK_PRICE_PRICE, ref Price);
}
catch
{
String errortext = new String(' ', 200);
int errtype = (int)Api.ADK_ERROR_TEXT_TYPE.elRc;
Api.AdkGetErrorText(ref error, errtype, ref errortext, 200);
MessageBox.Show(errortext);
}
return Price;
}

7 SVAR 7
Fd medlem
Inte tillämpbar

Hej Mark!
Jag ska försöka hjälpa dig utifrån bästa förmåga.

Till att börja med angående AdkFind så är den något förlegad. Vi rekommenderar att man inte använder den alls. Istället kan du testa med AdkFind2 som ger lite säkrare resultat.

Vad jag kan se så använder du genomgående pData2 - men vid din AdkGetDouble så kör du mot pData. Det är inte så att pData2 ska användas här istället?

När det gäller felhanteringen så kika gärna på sida 86 i referensmanualen, så har du exempel där på hur man hämtar priser från olika prislistor, samt hanterar felen.

Återkom gärna med resultatet!
Fd medlem
Inte tillämpbar

Just det, hoppsan - märkte inte att jag hade missat pData i kopieringen. Tack för hjälpen!
Fd medlem
Inte tillämpbar

Hej igen

Jag försöker skriva en funktion för att leta upp alla stafflade priser på en artikel. Med AdkFind/2 hittar jag lätt grundpriset - men jag får inte den att hitta några stafflade priser (ADK_PRICE_BASE = 0)
Hittar också inte något bra sätt med AdkFind2 att loopa igenom tabellen och hitta alla flera stafflade priser till samma produkt/prislista? Kan jag be om lite tips..

Har provat så här:

error = Api.AdkSetDouble(pDataPrice2, Api.ADK_PRICE_BASE, 0);
error = Api.AdkSetStr(pDataPrice2, Api.ADK_PRICE_ARTICLE_NUMBER, ref ArtNr);
error = Api.AdkSetStr(pDataPrice2, Api.ADK_PRICE_PRICE_LIST, ref strPriceList);

error = Api.AdkFind2(pDataPrice2, 0);
error = Api.AdkGetDouble(pDataPrice2, Api.ADK_PRICE_QUANTITY, ref QtyBreak);
error = Api.AdkGetDouble(pDataPrice2, Api.ADK_PRICE_PRICE, ref Price);
list[0].Add(Price);
list[1].Add(QtyBreak);

Tack
Fd medlem
Inte tillämpbar

Hej!

error = Api.AdkSetDouble(pDataPrice2, Api.ADK_PRICE_BASE, 0);

Detta fält är endast läsbart och går inte att skriva till. Jag tror inte du behöver ha med den raden alls faktiskt för detta ändamål.

Hursomhelst:

Börja med att sätta sorteringsordning per prislista med hjälp av funktionen AdkSetSortOrder (ADK_PRICE_PRICE_LIST). Mer om det kan du läsa på sida 19 i manualen.

Därefter kör du en AdkFind2 mot din prislista och artikelnummer, precis som du gjort ovan.

Din första träff är naturligtvis grundpriset, men det kan verifieras med just ADK_PRICE_BASE om man vill.

Om du nu följer upp med funktionen AdkNext så borde du få ut det stafflade antalet, och det pris som gäller från och med det antalet. Kör AdkNext tills du kommer till nästa artikelnummer.

Jag hoppas detta hjälper dig. Återkom gärna med resultatet igen!
Fd medlem
Inte tillämpbar

Hej Johan

Fortfarande får inte den att hitta stafflade priserna. Den bläddrar bara igenom baspriserna på alla olika prislistor. Jag har experimenterat med en hel del olika sätt att göra det men lyckades inte, men måste be om lite mer hjälp!

Här får du senaste versionen:

error = Api.AdkSetSortOrder(pDataPrice2, Api.ADK_SORT_ORDER.ePriceList);
error = Api.AdkSetStr(pDataPrice2, Api.ADK_PRICE_PRICE_LIST, ref strPriceList);
error = Api.AdkSetStr(pDataPrice2, Api.ADK_PRICE_ARTICLE_NUMBER, ref ArtNr);
error = Api.AdkFind2(pDataPrice2, 0);

while (strArtNr == ArtNr)
{
error = Api.AdkGetBool(pDataPrice2, Api.ADK_PRICE_BASE, ref Base);
error = Api.AdkGetDouble(pDataPrice2, Api.ADK_PRICE_QUANTITY, ref QtyBreak);
error = Api.AdkGetDouble(pDataPrice2, Api.ADK_PRICE_PRICE, ref Price);
if (Base == 0 && strPL == strPriceList)
{
list[0].Add(Price);
list[1].Add(QtyBreak);
}
error = Api.AdkNext(pDataPrice2);
error = Api.AdkGetStr(pDataPrice2, Api.ADK_PRICE_ARTICLE_NUMBER, ref strArtNr, 16);
error = Api.AdkGetStr(pDataPrice2, Api.ADK_PRICE_PRICE_LIST, ref strPL, 8);
}

Ang. manualen - jag använder den som referens, men den är inte ett lätt sätt att lära man API:n. Jag håller med denna diskussion:
http://www.webforum.nu/showthread.php...
Om det var inte för exempelkoden i -DemoApiCSharp- projekten, jag tror inte jag skulle klarat alls att jobba med API:n. Men tyvärr hittar jag ingen exempel i DemoApiCSharp för hur man hittar flera resultat (helst med filter/sök på två olika fält!)

Vill gärna ha en API kommando där man kan kör en SQL select sträng och bläddra igenom resultat!!
Fd medlem
Inte tillämpbar

Jag tyckte din kod borde fungerat bra. Jag testade här med liknande och fick samma problem som du.
Det visade sig att det är något märkligt som sker med sorteringsordningen. Om jag flyttade den till precis innan min AdkNext så fungerade det.

Varför däremot är en bra fråga, och vi får forska vidare kring det. Men för att lösa problemet i alla fall, så testa helt enkelt att sätta din sorteringsordning innan AdkNext.

Vi blir alltid glada för önskemål kring våra produkter. Våra utvecklare följer upp det som skrivs i forumet för att se hur vi kan förbättra våra produkter i fråga.
Fd medlem
Inte tillämpbar

Tack för hjälpen Johan, att sätta sorteringsordningen igen innan AdkNext fick den att fungera.