Krzysztof Styś 0 Napisano 21 Lutego 2019 Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK Witam. W jednym z cenników w asortymencie chciałem zmienić kwotę netto/brutto. Próbowałem w następujący sposób: Cennik cennik = cenniki.Dane.Wszystkie().Where(c => c.Tytul == "Internetowa").FirstOrDefault(); ICennik cennikBO = cenniki.Znajdz(cennik); var pozycje = cennikBO.ZnajdzPozycjeCennika(o.Dane); var poz = pozycje.FirstOrDefault(); var oPoz = poz.RozpocznijEdycje(); Console.WriteLine(oPoz.Dane.CenaNetto); oPoz.Dane.CenaNetto = 22.22m; oPoz.Zapisz(); poz.ZakonczEdycje(); Console log pokazuje normalnie starą cenę, więc na pewno znalazłem dobry obiekt. Niestety cena po przypisaniu niżej nie ulega zmianie. Sprawdzając bool zapisuj i konczenia edycji też jest true, więc wydaje mi się, że powinno się zapisywać. Link to postu
Paweł Kubacki 206 Napisano 21 Lutego 2019 Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK Na pierwszy rzut oka wydaje mi się, że do pełni szczęścia brakuje jeszcze zapisu cennika (cennikBO). 1 Link to postu
Radomił Ząbik 308 Napisano 21 Lutego 2019 Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK Mój kod, dodający pozycje do cennika, trochę może bardziej rozbudowany, ale może też pomoże // pobranie danych podstawowych ICenniki menadzerCennikow = sfera.PodajObiektTypu<ICenniki>(); IWalutyDaneDomyslne walutyDD = sfera.PodajObiektTypu<IWaluty>().DaneDomyslne; IUzytkownicy uzytkownicy = sfera.PodajObiektTypu<IUzytkownicy>(); IAsortymenty asortyment = sfera.PodajObiektTypu<IAsortymenty>(); // pobranie aktualnego kursu walut ILinieKursowWalut linieKursow = sfera.PodajObiektTypu<ILinieKursowWalut>(); var linia = linieKursow.Dane.Wszystkie().Where(l => l.Nazwa == "NBP - kursy średnie").FirstOrDefault(); var waluta = walutyDD.PLN; if(results.currency=="PLN") waluta = walutyDD.PLN; if(results.currency=="EUR") waluta = walutyDD.EUR; if(results.currency=="USD") waluta = walutyDD.USD; int id; id = results.id; var cennikDoEdycji = menadzerCennikow.Dane.Wszystkie().Where(c => c.Id == id).First(); // wybieramy cennik po Id using (ICennik cennik = menadzerCennikow.Znajdz(cennikDoEdycji)) // edytujemy cennik { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodawanie pozycji do cennika: "+cennik.Dane.Tytul); // dodawanie pozycji foreach(var posadd in results.pos) { int aid; decimal aprice; decimal sprice; aid = posadd.id; aprice = posadd.price; sprice = posadd.sellprice; // obliczenie ceny względem waluty cennika i ceny dodawanej if(cennik.Dane.Waluta.Symbol!=waluta.Symbol) { var kurs = linieKursow.Dane.PobierzKursNaDzien(linia,waluta,cennik.Dane.Waluta,DateTime.Now); aprice = Math.Round(aprice * kurs.Kurs,4); sprice = Math.Round(sprice * kurs.Kurs,4); } else { aprice = Math.Round(aprice,4); sprice = Math.Round(sprice,4); } // dopisanie pozycji do cennika Asortyment a = asortyment.Dane.Wszystkie().Where(t => t.Id == aid).First(); // pobieram asortyment Console.WriteLine("Dopisanie pozycji: "+a.Nazwa); var pos = cennik.Pozycje.Dodaj(a); // dodaje asortyment pos.RozpocznijEdycje(); // zaczynam go edytować pos.CenaBazowa = aprice; // ustalam jego cenę pos.CenaNetto = sprice; // ustalenie ceny sprzedaży pos.ZakonczEdycje(); // kończę edycję } // zmiana paremtrów cennika string sign; sign = results.sign; var wprowadzil = uzytkownicy.Dane.Wszystkie().Where(p => p.Sygnatura == sign).FirstOrDefault(); cennik.UstawStatus(wprowadzil,StatusCennika.Zatwierdzony); // zapisanie cennika if(cennik.Zapisz()) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - zapisano cennik: "+cennik.Dane.Tytul); response = "{ \"title\":\""+cennik.Dane.Tytul+"\", \"id\":\""+cennik.Dane.Id+"\" }"; } else { Globals.errors = ""; cennik.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - błąd podczas aktualizowania cennika: "+Globals.errors); response = "{ \"error\":\""+Globals.errors+"\" }"; } } 1 Link to postu
Krzysztof Styś 0 Napisano 21 Lutego 2019 Autor Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK (edytowane) 1 godzinę temu, Paweł Kubacki napisał: Na pierwszy rzut oka wydaje mi się, że do pełni szczęścia brakuje jeszcze zapisu cennika (cennikBO). Faktycznie, brakowało zapisu. Dodałem zapis bezpośrednio pod tym, ale trwa baaardzo długo z powodu dużej ilości asortymentu w cenniku. Problem powiększa fakt, że chcę zmieniać ceny określonym produktom, więc ten zapis był w pętli. Postanowiłem więc wystawić zapis cennika poza pętle, ale efekt był zaskakujący: Edit: Nie ma możliwości zmiany ceny od strony asortymentu? Robiąc to fizycznie w subiekcie podczas edycji pojedynczego asortymentu zapisuje się to natychmiast, jednak wchodząc w cenniki i edytując w nim również jedną cenę tego asortymentu zapis trwa kilka minut. Edytowane 21 Lutego 2019 przez Krzysztof Styś Dodatkowe pytanie Link to postu
Paweł Kubacki 206 Napisano 21 Lutego 2019 Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK Zauważyłem w Pana kodzie zbędne wywołanie operacji oPoz.Zapisz(); Nie ma potrzeby wywoływania metody Zapisz na pozycji cennika, bo i tak pozycja ta zostanie zapisana dopiero przy zapisie cennika. Mówię to tak na marginesie, bo nie zauważyłem żadnych negatywnych skutków użycia tej metody w tym miejscu. Sprawdziłem Pana skrypt i bez względu na to czy metoda Zapisz na pozycji cennika jest wywoływana, czy nie skrypt i tak wykonuje się poprawnie. Nie zauważyłem też żadnych błędów przy zapisie cennika zarówno wewnątrz pętli jak i poza nią. Jednak odradzam wywoływanie zapisu wewnątrz pętli, nie ma powodu by tak robić. Skrypt ten zastosowany na cenniku z ponad 15 000 pozycji i aktualizacją 20 z nich wykonuje się u mnie 8 sekund. Jest to sumaryczny czas potrzebny na wczytanie takiego cennika, edycję 20 pozycji i zapis. Przypuszczam więc, że problem jest ukryty gdzieś indziej. Nie pokazał Pan całego kodu swojego rozwiązania, tylko jego wycinek. Może gdybym widział całość udałoby mi się znaleźć wadliwą konstrukcję w tym kodzie. Link to postu
Krzysztof Styś 0 Napisano 21 Lutego 2019 Autor Udostępnij Napisano 21 Lutego 2019 w Zmiana ceny w SDK W takim razie podsyłam całą funkcję:https://pastebin.com/NgY2Qugp W tym wykonaniu zapis cennika zrobiłem po prostu co 10 produktów, żeby tego błędu z SQL nie było. Link to postu
Krzysztof Styś 0 Napisano 22 Lutego 2019 Autor Udostępnij Napisano 22 Lutego 2019 w Zmiana ceny w SDK Okazało się, że jak sobie program przez noc "odpoczął" problem z wewnętrznym błędem SQL ustąpił. Przypuszczam jedynie, że może faktycznie mogło być to też powiązane z niepotrzebnym zapisem IPozycjaCennika, o której powiedział Pan wyżej. Zapis całego cennika po zmianie ponad 50 asortymentów to jakieś 30s. Tak czy siak, dziękuję za odpowiedzi w temacie. Nie chciałem otwierać drugiego wątku, więc postanowiłem w tym poruszyć jeszcze drugą kwestię. Chciałem skorzystać z programu eLinker. Podczas synchronizacji zamówień do subiekta wystąpił błąd z tego właśnie programu "Nie można zapisać danych. Numer nie został zapisany". Skontaktowałem się więc z twórcami oprogramowania i okazało się, że ten problem okazał się ich zaskoczyć. Postanowiłem jeszcze dla pewności przetestować go na bazie testowej Nexo i na niej zadziałał normalnie. Ostatecznie postanowiłem przetestować samemu zapis zamówienia przez własne rozwiązane. Podczas zapisu dostałem ten sam błąd, mimo, że zrobiłem to na przykładowym skrypcie podanym w opisie sfery. Śmiało więc można założyć, że problem leży bezpośrednio w tej konkretnej bazie. Pytanie więc, jak ten problem rozwiązać. Link to postu
Paweł Kubacki 206 Napisano 22 Lutego 2019 Udostępnij Napisano 22 Lutego 2019 w Zmiana ceny w SDK W takim przypadku może Pan wysłać bazę danych do analizy. Jak to należy zrobić opisane jest w artykule e-pomocy dostępnym tutaj. Cytat Nie chciałem otwierać drugiego wątku, więc postanowiłem w tym poruszyć jeszcze drugą kwestię. Mam ogromną prośbę, aby jednak w takich przypadkach zakładać nowy watek. Link to postu
Paweł Kubacki 206 Napisano 28 Lutego 2019 Udostępnij Napisano 28 Lutego 2019 w Zmiana ceny w SDK Panie Krzysztofie poproszę jeszcze o kod tego rozwiązania, które Pan testował. Przykład z SDK uruchomiony na danych, które do nas dotarły działa. Link to postu
Krzysztof Styś 0 Napisano 6 Marca 2019 Autor Udostępnij Napisano 6 Marca 2019 w Zmiana ceny w SDK W takim razie problem muszę wstrzymać. Testując chwilę temu ten przykład u mnie również on zadziałał mimo, że uruchomiłem go w ten sam sposób. Jak wspominałem, ten problem dotyczył synchronizacji zamówień przez eLinkera, gdzie pokazywał się ten błąd, potem w SDK. Z drugą kwestią jest już w porządku, natomiast z eLinkerem nadal nie, więc to z twórcami tego programu się skontaktuję. Link to postu
Polecane posty