Radomił Ząbik 308 Napisano 18 Stycznia 2022 Udostępnij Napisano 18 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Mam kod, który pozwala zaktualizować ilość w dokumencie RW, korzystającym z rozbicia. Kod działa i wygląda tak: Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Aktualizacja ilości pozycji RW."); // przygotowanie danych IAsortymenty asortyment = sfera.PodajObiektTypu<IAsortymenty>(); IStatusyDokumentowDaneDomyslne statusyDD = sfera.PodajObiektTypu<IStatusyDokumentow>().DaneDomyslne; IRozchodyWewnetrzne dokumentyRozchodu = sfera.PodajObiektTypu<IRozchodyWewnetrzne>(); // pobranie PW int id = results.id; var rwDoEdycji = dokumentyRozchodu.Dane.Wszystkie().Where(dok => dok.Id == id).FirstOrDefault(); using (IRozchodWewnetrzny rw= dokumentyRozchodu.Znajdz(rwDoEdycji)) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - aktualizowanie RW: "+rw.Dane.NumerWewnetrzny.PelnaSygnatura); var status = rw.Dane.StatusDokumentu; // pobranie i zaktualizowanie ilości pozycji int pos = results.pos; var poz = rw.Dane.Pozycje.Where(p => p.Id == pos).Single(); Console.WriteLine("Modyfikacja: "+poz.AsortymentAktualny.Nazwa); // uproszczone, bez partii if(results.quantity!=null) { decimal posq = results.quantity; Console.WriteLine("Uproszczona aktualizajca: "+posq); poz.Ilosc = posq; } // aktualizacja z uwzględnieniem partii else { IDokumentZRozbiciem dok = (IDokumentZRozbiciem)rw; // włączamy rozbicie dokumentu poz.Ilosc = 0; IAplikatorSkutkowMagazynowych aplikatorSM = (IAplikatorSkutkowMagazynowych)rw; aplikatorSM.AplikujSkutkiMagazynowe(poz); // poprawka od Insertu na poprawne działanie skutku magazynu var r = dok.RozpocznijRozbicie(poz) as IRozbiciePozycjiRozchodowe; foreach(var posbatch in results.batches) { decimal batchquantity; int batchid; batchquantity = posbatch.quantity; batchid = posbatch.batch; Console.WriteLine("Partia: "+batchid); Console.WriteLine("Aktualizajca: "+batchquantity); var pr = r.Pozycje.Where(p => p.PartiaZrodlowa.Id == batchid).Single(); pr.Ilosc = batchquantity; foreach(var pozr in r.Pozycje.Where(p => p.PartiaZrodlowa.Id != batchid && p.Ilosc > 0m)) pozr.Ilosc = 0m; foreach(var pozr in r.Pozycje.Where(p => p.PartiaZrodlowa.Id != 0 )) Console.WriteLine("Wybrane partie: "+pozr.PartiaZrodlowa.Id+" = "+pozr.Ilosc); } Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Zakańczanie rozbicia."); r.ZakonczRozbicie(); aplikatorSM.AplikujSkutkiMagazynowe(poz); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Pozycja zaktualizowana."); } rw.Przelicz(); // zapisanie PW po zmianach if(rw.Zapisz()) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - zapisano RW: "+rw.Dane.NumerWewnetrzny.PelnaSygnatura); response = "{ \"number\":\""+rw.Dane.NumerWewnetrzny.PelnaSygnatura+"\", \"id\":\""+rw.Dane.Id+"\" }"; } else { Globals.errors = ""; rw.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - błąd przy dodawaniu PW: "+Globals.errors); response = "{ \"error\":\""+Globals.errors+"\" }"; } } Niestety, przy próbie ponownego użycia na tym samym dokumencie, zatrzymuje się on na r.ZakonczRozbicie();. Czy można jakoś wyciągnąć błędy z tej metody? Cały proces wypada ok, ładnie znajduje partie, zeruje, poprawia ilość, ale jednak się zatrzymuje, nie zwracają błędu. Poniżej cały cykl, od utworzenia RW, potem zwiększenia na nim ilości powyższym kodem o 1, a przy kolejnej próbie, zatrzymuje się: Link to postu
Wojciech Szopiński 226 Napisano 18 Stycznia 2022 Udostępnij Napisano 18 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Czy podany kod w Pana rozwiązaniu jest ujęty w blok try-catch? Link to postu
Radomił Ząbik 308 Napisano 18 Stycznia 2022 Autor Udostępnij Napisano 18 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW EDIT: Dobra, chyba nie było tematu. Odpalałem aplikację z debugger, SharpDevelop (tak nie korzystam z VS, kwestie licencyjne, ale chyba trzeba będzie się przesiąść, tylko nie ma kiedy). Po odpaleniu aplikacji normalnie z poziomu Windows, problem nie występu, tak że lekko zgłupiałem, i przepraszam za zawracanie gitary. W dniu 18.01.2022 o 13:58, Wojciech Szopiński napisał: Czy podany kod w Pana rozwiązaniu jest ujęty w blok try-catch? Nie był, ale dodałem. Próbowałem zarówno na cały kod jak i na samo rozbicie i nic mi nie zwraca. Aczkolwiek, może nie umiem używać catch exception w C#. Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Zakańczanie rozbicia."); try { r.ZakonczRozbicie(); } catch (InvalidCastException e) { Console.WriteLine("{0} Exception caught.", e); } aplikatorSM.AplikujSkutkiMagazynowe(poz); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Pozycja zaktualizowana."); Dodatkowo mogę dodać, że jest to odpalane z Debuggera kompilatora i w momencie zatrzymania, pokazuje informacje w Local variables - nie używam VS'a. Link to postu
Wojciech Szopiński 226 Napisano 18 Stycznia 2022 Udostępnij Napisano 18 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW W takim wypadku wyłapany będzie TYLKO wyjątek typu InvalidCastException. W tym przypadku najlepiej złapać ogólny typ czyli Exception. Z czystej ciekawości myślę, że warto byłoby sprawdzić co się tam dzieje. Link to postu
Radomił Ząbik 308 Napisano 18 Stycznia 2022 Autor Udostępnij Napisano 18 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW W dniu 18.01.2022 o 15:12, Wojciech Szopiński napisał: W tym przypadku najlepiej złapać ogólny typ czyli Exception. Też racja, przeoczyłem, aczkolwiek, dalej nic nie zwraca. Swoją drogą, to drugie wykonanie aktualizacji, na debuggerze, psuje dokument, bo zostaje zablokowany - to efekt odpalenia na tej skompilowanej aplikacji, ponownie na tym dokumencie, co się kod zatrzymał: Link to postu
Wojciech Szopiński 226 Napisano 19 Stycznia 2022 Udostępnij Napisano 19 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Z wyjątku AppLockNotAcquiredException można odczytać pole ResourceId, które zawiera informacje, który obiekt nie zwolnił blokady. Może wyjątek leci nie w linii kończącej rozbicie, a tej niżej: aplikatorSM.AplikujSkutkiMagazynowe(poz) ? Nie korzystałem z SharpDevelop, ale czy jest tam możliwość debugowania z wychwytywaniem wyjątków? Jeśli tak to proszę spróbować to włączyć i wtedy uruchomić debugowanie. Link to postu
Radomił Ząbik 308 Napisano 19 Stycznia 2022 Autor Udostępnij Napisano 19 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW W dniu 19.01.2022 o 06:25, Wojciech Szopiński napisał: Z wyjątku AppLockNotAcquiredException można odczytać pole ResourceId, które zawiera informacje, który obiekt nie zwolnił blokady. Może wyjątek leci nie w linii kończącej rozbicie, a tej niżej: aplikatorSM.AplikujSkutkiMagazynowe(poz) Raczej nie, bo zanim do was napisałem, to także wywaliłem tą linię na próbę, aby zobaczyć, czy to ona. Wcześniej miałem nawet wyświetlenie informacji pomiędzy, aby to sprawdzić. W dniu 19.01.2022 o 06:25, Wojciech Szopiński napisał: Nie korzystałem z SharpDevelop, ale czy jest tam możliwość debugowania z wychwytywaniem wyjątków? Jeśli tak to proszę spróbować to włączyć i wtedy uruchomić debugowanie. Mogę włączyć coś takiego: Link to postu
Radomił Ząbik 308 Napisano 19 Stycznia 2022 Autor Udostępnij Napisano 19 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Spróbowałem to odpali i po przebrnięciu miliarda wyjątków od Newtonsoft, nie zwróciło nic w momencie rozbijania, poza pojawieniem się zmiennej w debuggerze, jak wspominałem wcześniej. Link to postu
Wojciech Szopiński 226 Napisano 21 Stycznia 2022 Udostępnij Napisano 21 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Czy sprawdzał Pan profilerem SQLowym co się dzieje w trakcie debugowania? Może jakieś zapytanie trwa zbyt długo. Link to postu
Radomił Ząbik 308 Napisano 21 Stycznia 2022 Autor Udostępnij Napisano 21 Stycznia 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Sprawdziłem, chociaż nie wiem, jak od was idą INSERT/UPDATE, bo mi same SELECT wychodzą, jak wezmę wszystkie zdarzenia TSQL. Zatrzymuje się jak niżej. Dodam, że na bezpośrednio odpalonym programie nie wywaliło się ani razu, więc naprawdę chyba jest wina po stronie programu kompilującego - może kwestia ponownego odpalenia takiej samej funkcji, bo pierwszy raz przechodzi, drugi nie, może coś w pamięci zostaje. Nic trzeba wyłożyć te 2k na licencję VS'a - rozumiem, że taki będzie ok? https://www.microsoft.com/pl-pl/d/visual-studio-professional-2022/dg7gmgf0d3sj Link to postu
Radomił Ząbik 308 Napisano 10 Lutego 2022 Autor Udostępnij Napisano 10 Lutego 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Dobra, to możemy wrócić do tematu, bo mam VS Profesional 2022. Udało się osiągnąć taki sam efekt: Dodatkowe info - RW jest zablokowane, nie mogę go poprawić w NEXO. Po odpuszczeniu blokady odpaliłem aplikację normalnie, z 10 razy zaktualizowałem to RW, bez żadnego problemu, po tym znowu odpalam z VS z debugera i od razu pierwszy zatrzymuje się jak na screenie. Generalnie całe funkcje są u mnie w CatchException. Edit: Lepsze jaja, przepraszam, uczę się jeszcze VS'a, obok linii jak widać na screnie r.ZakonczRozbicie, najechałem i był przycisk Play, kliknąłem i poleciało dalej. Link to postu
Wojciech Szopiński 226 Napisano 11 Lutego 2022 Udostępnij Napisano 11 Lutego 2022 w [Sfera] Zwracanie błędów, podczas zakańczania rozbicia partii, podczas modyfikacji RW Na górze jest również guzik "Kontynuuj". Miał Pan postawionego break-point'a w tym miejscu więc debugger zatrzymał się w danej linii i oczekiwał na reakcję użytkownika. Proszę jeszcze przed uruchomieniem programu z debug'a włączyć wychwytywanie wszystkich wyjątków w oknie Debug -> Windows -> Exception settings. Link to postu
Polecane posty