Radomił Ząbik 308 Napisano 14 Listopada 2022 Udostępnij Napisano 14 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki Może i będąc nonszalancki, ale też zakładając, że jak coś się dodaje do bazy danych, to sama zaokrągli, do tej pory, w sumie przez 6 lat, nie zaokrąglałem do precyzji jednostki asortymentu, podczas przekazania partii rozbicia, podczas tworzenia dokumentu PW. Okazuje się jednak, że od wersji 42, została na to nałożona weryfikacj: Cytat Ilość 24,4337 jest niezgodna z precyzją zdefiniowaną w jednostce miary. na polach: PozycjaDokumentu.Ilosc Podanej ilości (24,4337 kg) nie można przeliczyć dokładnie na ilość w jednostce bazowej (magazynowej) - precyzja jednostki bazowej jest zbyt mała. Po przeliczeniu: 24,434 kg na polach: PozycjaDokumentu.Ilosc Zapewne wynika to z tej zmiany: Cytat W oknie dodawania pozycji do dokumentu zakupu, w sekcji rozbicia na partie wprowadzono liczne poprawki, m.in. w zakresie przeliczania jednostki miary oraz respektowania sposobu rozbicia pozycji na partie. Post w sumie częściowo jako ostrzeżenie dla tworzących rozwiązanie własne, aby się potem nie nadziali po aktualizacji, bo wiem, że niektórzy mieli bardzo, bardzo dużo dokumentów. A w drugiej części, z pytaniem, czy jest to rozwiązanie wprowadzone dla wszystkich dokumentów, czy tylko dokumentów przyjęcia? Czy nie można Sfery aby zmusić, aby sama to zaokrąglała (to są często przypadki wynikające z obliczeń, bo matematyka to su...)? Czy jednak w grę wchodzi pobieranie za każdym razem precyzji jednostki asortymentu i zaokrąglanie, tak w razie czego? Post trochę na świeżo, bo przy prawie 3 tysiącach manipulacji Sferycznych na obiektach dziennie, w rozwiązaniu, którego to dotyczy, mam teraz co sprawdzać i analizować. Link to postu
Przemysław Czerwiński 8 Napisano 16 Listopada 2022 Udostępnij Napisano 16 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki (edytowane) Dzień dobry, w celu ustalenia źródła problemu prosiłbym o pokazanie kodu potrzebnego do powtórzenia tej sytuacji. Edytowane 16 Listopada 2022 przez Przemysław Czerwiński Link to postu
Radomił Ząbik 308 Napisano 16 Listopada 2022 Autor Udostępnij Napisano 16 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki Jest to wycinek z całego rozwiązania, gdzie dane są przekazywane z JSON, do results: WriteLine("Dodawanie PW"); IAsortymenty asortyment = sfera.PodajObiektTypu<IAsortymenty>(); IJednostkiMiar jednostkiMiary = sfera.PodajObiektTypu<IJednostkiMiar>(); IPodmioty podmioty = sfera.PodajObiektTypu<IPodmioty>(); IUzytkownicy uzytkownicy = sfera.PodajObiektTypu<IUzytkownicy>(); IStatusyDokumentowDaneDomyslne statusyDD = sfera.PodajObiektTypu<IStatusyDokumentow>().DaneDomyslne; Konfiguracja konfPw = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.PrzychodWewnetrzny; int stock; stock = results.stock; Magazyn mag = sfera.PodajObiektTypu<IMagazyny>().Dane.Wszystkie().Where(m => m.Id == stock).FirstOrDefault(); int spot; spot = results.spot; Oddzial odd = sfera.PodajObiektTypu<IOddzialy>().Dane.Wszystkie().Where(o => o.Id == spot).FirstOrDefault(); IPrzychodyWewnetrzne dokumentyPrzyjecia = sfera.PodajObiektTypu<IPrzychodyWewnetrzne>(); using (IPrzychodWewnetrzny pw = dokumentyPrzyjecia.Utworz(konfPw)) { if (spot != 100000) pw.Dane.MiejsceWprowadzenia = odd; pw.Dane.Magazyn = mag; pw.Dane.Uwagi = results.comment; if (results.subtitle != "" && results.subtitle != null) pw.Dane.Podtytul = results.subtitle; var status = pw.Dane.StatusDokumentu; WriteLineInfo("Magazyn: ", pw.Dane.Magazyn.Nazwa); // dodawanie podmiotu if (results.buyer != null) { int buyer; buyer = results.buyer; var klient = podmioty.Dane.Wszystkie().Where(p => p.Id == buyer).FirstOrDefault(); pw.Dane.Podmiot = klient; WriteLineInfo("Podmiot: ", pw.Dane.Podmiot.NazwaSkrocona); } // wypełnienie pozycji IDokumentZRozbiciem dok = (IDokumentZRozbiciem)pw; foreach (var posadd in results.pos) { int posid; decimal posp; string comment; posid = posadd.id; posp = posadd.price; comment = posadd.comment; pw.Dane.StatusDokumentu = statusyDD.Przychod_Odlozony; Asortyment a = asortyment.Dane.Wszystkie().Where(t => t.Id == posid).First(); WriteLineInfo("Asortyment: ", a.Nazwa); var poz = pw.Pozycje.Dodaj(a, 1, a.JednostkaSprzedazy); poz.Cena.NettoPrzedRabatem = posp; poz.Cena.RabatWartosc = 0m; poz.Ilosc = 0m; poz.Opis = comment; pw.Dane.StatusDokumentu = status; var r = dok.RozpocznijRozbicie(poz) as IRozbiciePozycjiPrzyjeciowe; // obsługa partii WriteLineInfo("Dodawanie partii:",""); int batches = 1; foreach (var posbatch in posadd.batches) { decimal batchquantity; string batchname; string batchhash; batchquantity = posbatch.quantity; batchname = posbatch.batch; batchhash = posbatch.hash; IPozycjaRozbiciaPrzyjeciowa pr = r.DodajPozycje(); pr.Ilosc = batchquantity; pr.KodDostawy = batchname; pr.OpisDostawy = batchhash; WriteLineInfo("Numer: ", pr.KodDostawy); WriteLineInfo("Ilość: ", ""+ pr.Ilosc); batches++; } r.ZakonczRozbicie(); pw.Przelicz(); } // osoba wystawiająca string sign = results.sign; pw.Dane.WystawilaOsoba = uzytkownicy.Dane.Wszystkie().Where(p => p.Sygnatura == sign).FirstOrDefault().Osoba; WriteLineInfo("Wystawił: ", pw.Dane.Wystawil); // ustawienie daty if (results.date != null) { string dateString = results.date + " 07:00:00,000"; DateTime pwDate = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture); pw.Dane.DataWydaniaWystawienia = pwDate; pw.Dane.DataWprowadzenia = pwDate; WriteLineInfo("Data wprowadzenia: ", ""+ pw.Dane.DataWprowadzenia); } // zapisywanie if (pw.Zapisz()) { WriteLine("Dodano PW: " + pw.Dane.NumerWewnetrzny.PelnaSygnatura, ConsoleColor.White, ConsoleColor.Blue); response = JsonConvert.SerializeObject(new { id = pw.Dane.Id, number = pw.Dane.NumerWewnetrzny.PelnaSygnatura }, Formatting.None); } else { Globals.errors = ""; pw.WypiszBledy(); WriteLine("Błąd podczas dodawania PW: " + Globals.errors, ConsoleColor.White, ConsoleColor.Red); response = JsonConvert.SerializeObject(new { error = Globals.errors }, Formatting.None); } } A poniżej przekazane dane JSON: { "function":"addPWprod", "spot":100000, "stock":100000, "comment":"ZLECENIE CI\u0118CIA - B42965\nRozch\u00f3d materia\u0142u: RW 22110265\/LCI", "date":"2022-11-14", "sign":"MPO", "pos":[ { "pos":"208124", "id":"166612", "price":337.712498, "batches":[ { "batch":"B42965, 2ACM", "good":"166612", "hash":"6371e34ed85bd", "field":"2575", "quantity":1, "desc":"", } ], "comment":"Pracownik - 14.11.2022 07:41:52" }, { "pos":"56686", "id":"216507", "price":6.65, "batches":[ { "batch":"B42965, 2ACM", "good":"216507", "hash":"6371e34f0d5d4", "field":"2575", "quantity":6, "desc":"", } ], "comment":"Pracownik - 14.11.2022 07:41:52" }, { "pos":999999, "id":"113083", "price":7.071899999999999, "batches":[ { "batch":"B42965", "good":"113083", "hash":"6371e34f69f1e", "field":"1224", "quantity":2.6572, "desc":"" } ], "comment":"Z\u0142om kawa\u0142kowy, Pracownik - 14.11.2022 07:42:23" } ] } Problem dotyczy ostatniej pozycji, w której przekazuje efekt obliczeń po mojej stronie, dlatego wiele miejsc po przecinku, co już zniwelowałem. No i komunikat błędu dla tego przypadku: Cytat Ilość 2,6572 jest niezgodna z precyzją zdefiniowaną w jednostce miary. na polach: PozycjaDokumentu.Ilosc Podanej ilości (2,6572 kg) nie można przeliczyć dokładnie na ilość w jednostce bazowej (magazynowej) - precyzja jednostki bazowej jest zbyt mała. Po przeliczeniu: 2,657 kg na polach: PozycjaDokumentu.Ilosc Ja nie mam zastrzeżeń do tego, że takową walidację wprowadziliście, aczkolwiek, szkoda, że nie ucina już Sferycznie, jak to robiło do tej pory. 2 Link to postu
Przemysław Czerwiński 8 Napisano 16 Listopada 2022 Udostępnij Napisano 16 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki (edytowane) Tak naprawdę zaokrąglanie cały czas się odbywa – problem polega na tym, że podpinany błąd precyzji patrzy na ilość jeszcze sprzed zaokrąglenia ilości w partii. Dotyczy to nie tylko PW, a wszystkich dokumentów implementujących interfejs IDokumentZeSpecyfikacjami. Zapisaliśmy to do poprawy – przewidywalnie do wersji 45. Na teraz obejściem problemu jest, po przeliczeniu dokumentu, ustawienie ilości pozycji na samą siebie, aby zabrać błąd z pola: poz.Ilosc = poz.Ilosc; Edytowane 16 Listopada 2022 przez Przemysław Czerwiński 1 Link to postu
Radomił Ząbik 308 Napisano 16 Listopada 2022 Autor Udostępnij Napisano 16 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki 12 minut temu, Przemysław Czerwiński napisał: Na teraz obejściem problemu jest, po przeliczeniu dokumentu, ustawienie ilości pozycji na samą siebie, aby zabrać błąd z pola No takiego rozwiązania się nie spodziewałem. Dziękuje za informacje! Link to postu
Przemysław Czerwiński 8 Napisano 16 Listopada 2022 Udostępnij Napisano 16 Listopada 2022 w [Sfera] Walidacja przy dodawaniu PW (może i innych dokumentów), od wersji 42, związana weryfikacji precyzji jednostki Cieszę się, że mogłem pomóc Link to postu
Polecane posty