Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: mlotek w Maj 28, 2019, 13:54:52
-
Witam,
mam problem z pojawiam się losowo błędem 0x8004132b,
jak udało mi się ustalić jest to błąd logowania do subiekta.
Tylko że ten błąd pojawia się zupełnie losowo, kilka razy się połączy się bez problemu po czym nagle się wywala.
Macie jakieś pomysły czym może to być powodowane ?
Tak wygląda przykładowy kod który wykonuje - oczywiście część nieistotnego kodu takiego jak host, podmiot zostały usunięte
InsERT.GT gt = new InsERT.GT();
InsERT.Subiekt sgt;
gt.Produkt = (InsERT.ProduktEnum.gtaProduktSubiekt);
gt.Serwer ="";
gt.Baza = "";
gt.Autentykacja = (InsERT.AutentykacjaEnum.gtaAutentykacjaMieszana);
gt.Uzytkownik = "sa";
gt.UzytkownikHaslo = "";
gt.Operator = "Szef";
gt.OperatorHaslo = "";
sgt = (InsERT.Subiekt)gt.Uruchom((Int32)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (Int32)InsERT.UruchomEnum.gtaUruchomWTle);
sgt.MagazynId = 1;
InsERT.SuDokument dok = sgt.Dokumenty.Wczytaj("nr paragonu");
dok.Drukuj(true);
-
0x8004132B = Wybrany użytkownik nie znajduje się w bazie danych podmiotu.
Może literówka? Niechciana spacja przed lub po? Upewnij się, czy pole Operator nie ma mieć czasem dwóch fraz oddzielonych spacją (imię + nazwisko)
-
W uproszczeniu, login i hasło są zapisane w ustawieniach programu
użytkownik podaje tylko numer dokumentu do wydrukowania.
Czyli wygląda to mniej więcej tak
wpisuje PA 1/2019, klikam drukuj i działa
wpisuję PA 2/2019, klikam drukuj i działa
wpisuję PA 3/2019, klikam drukuj, błąd 0x8004132B
dane do logowania są za każdym razem te same, więc jakby była literówka to wywalałoby się już na pierwszym.
Dodałem
try
{
sgt.Zakoncz();
}
catch (Exception)
{
}
ale cały czas jest sam efekt
-
No to mogę tylko napisać SOA#1
Mam programy sferyczne od wielu lat i nie napotkałem nigdy na taki problem.
VB/VC# od 2005 do 2017
-
ok, czyli czysto teoretycznie ten kod powinien działać ?
Czy to sgt.Zakoncz(); jest wymagane ?
Czy może błąd może być wywoływany przez coś innego, np zalogowanie się tego samego użytkownika do subiekta na innym komputerze, za mało licencji w sferze lub cokolwiek innego ?
-
ok, czyli czysto teoretycznie ten kod powinien działać ?
Czy to sgt.Zakoncz(); jest wymagane ?
No raczej. Wywołujesz SGT w tle, więc jak go nie zamkniesz to będziesz miał wiszący proces.
Powinieneś też zadbać o to żeby w razie wystąpienia błędu SGT był zamykany zanim zamknie się Twoja aplikacja.
Czy może błąd może być wywoływany przez coś innego, np zalogowanie się tego samego użytkownika do subiekta na innym komputerze, za mało licencji w sferze lub cokolwiek innego ?
Logowanie na innym stanowisku nie, za mało licencji też nie (byłby inny numer błędu), cokolwiek innego - jak najbardziej ;)
-
Nie wiem czy to efekt zamierzony czy szkolny błąd, ale rozwiązanie podłącza się do uruchomionego programu, nie uruchamia nowego procesu, może to powodować nieoczekiwane zachowania...
ok, czyli czysto teoretycznie ten kod powinien działać ?
Czy to sgt.Zakoncz(); jest wymagane ?
Rozwiązania do potrzeb - bez poznania zamierzonej logiki programu nie da się odpowiedzieć... Na pewno program powinien być kończony jeśli jest uruchmiany nowy proces bez okna głównego.
Czy może błąd może być wywoływany przez coś innego, np zalogowanie się tego samego użytkownika do subiekta na innym komputerze, za mało licencji w sferze lub cokolwiek innego ?
No nie, takie sytuacje są obsługiwane innymi błędami.
-
"Logika programu" jest następując,
w inpucie wpisuję numer ZK i wciskam enter. Pojawia się okienko w którym wciskam "przekształć na paragon" lub "przekształć na fakturę", a następnie mogę kliknąć "drukuj" i z drukarki wyskakuje mi paragon lub faktura.
Zamykam okno dialogowe, podje kolejne ZK i tak w kółko.
-
W takim przypadku polecam spróbować za każdym razem uruchamiać nowy proces Subiekta i go zamykać.
-
niestety cały czas wywala mi ten błąd :(
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Czy ewentualnie problemem może być to że sfera jest w wersji próbnej ?
-
niestety cały czas wywala mi ten błąd :(
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Czy ewentualnie problemem może być to że sfera jest w wersji próbnej ?
Nie jest czasem tak, że wykonujesz logowanie do subiekta za każdym razem w pętli?
-
ok to jeszcze raz po kolei, wygląd to tak
- w pierwszym oknie wpisuję numer zk i wciskam enter
- otwiera się drugie okno
- tu klikam przekształć na paragon
- tworzę nowy obiekt gt
InsERT.GT gt = new InsERT.GT();
- tworzę nowe połączenie
sgt = (InsERT.Subiekt)gt.Uruchom((Int32)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (Int32)InsERT.UruchomEnum.gtaUruchomWTle);
- wystawiam paragon na podstawie zk
InsERT.SuDokument pa = sgt.SuDokumentyManager.DodajPA();
pa.NaPodstawie(TU NR ZK);
pa.Zapisz();
- zamykam połączenie stg
sgt.Zakoncz();
- klikam przycisk drukuj
- ponownie tworzę nowy obiekt gt
InsERT.GT gt = new InsERT.GT();
- tworzę nowe połączenie sgt = (InsERT.Subiekt)gt.Uruchom((Int32)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (Int32)InsERT.UruchomEnum.gtaUruchomWTle);
- Wczytuje i drukuję paragon
InsERT.SuDokument dok = sgt.Dokumenty.Wczytaj(TU NUMER PARAGONU);
dok.Drukuj(true);
- zamykam połączenie stg
sgt.Zakoncz();
- Zamykam "drugie okno"
- podaje kolejny numer zk
PS.
znalazłem mały błąd na forum,
wewnątrz znacznika li nie da się użyć znacznika code ponieważ całe bbcode się wywala
-
Spróbuj wyrzucić tworzenie obiektu GT i połączenia przed pierwsze okienko w którym podajesz numer ZK i na koniec podczas zamykania aplikacji rozłącz połączenie i zamknij obiekt GT. Chodzi o to aby tworzyć jeden raz obiekt GT i połączenie do bazy.
-
niestety cały czas wywala mi ten błąd :(
Z tego co widzę to nie zastosowałeś się do mojej sugestii.
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Można podejrzeć zapytania do bazy danych i sprawdzić jaki na prawdę użytkownik jest poszukiwany.
Czy ewentualnie problemem może być to że sfera jest w wersji próbnej ?
Nie.
-
W takim przypadku polecam spróbować za każdym razem uruchamiać nowy proces Subiekta i go zamykać.
Z tego co widzę to nie zastosowałeś się do mojej sugestii.
Mówisz o tej sugestii ? Przecież tak robię, przy każdym kliknięciu otwieram i zamykam proces. Chyba że coś źle zrozumiałem.
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Można podejrzeć zapytania do bazy danych i sprawdzić jaki na prawdę użytkownik jest poszukiwany.
no niby tak, tylko przy snifowaniu produkcyjnej bazy produkcyjnej na kilku stanowiskach będę dostawał dostawał tyle zapytań że pewnie i tak nic nie znajdę, a tak jak pisałem na mojej bazie testowej ten problem nie występuje.
Spróbuję jeszcze przerobić to tak jak napisał @maniootek.
-
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Można podejrzeć zapytania do bazy danych i sprawdzić jaki na prawdę użytkownik jest poszukiwany.
no niby tak, tylko przy snifowaniu produkcyjnej bazy produkcyjnej na kilku stanowiskach będę dostawał dostawał tyle zapytań że pewnie i tak nic nie znajdę, a tak jak pisałem na mojej bazie testowej ten problem nie występuje.
Włącz odpowiedni filtr i szukaj tylko ze swojego loginu.
-
W takim przypadku polecam spróbować za każdym razem uruchamiać nowy proces Subiekta i go zamykać.
Z tego co widzę to nie zastosowałeś się do mojej sugestii.
Mówisz o tej sugestii ? Przecież tak robię, przy każdym kliknięciu otwieram i zamykam proces. Chyba że coś źle zrozumiałem.
No najwyraźniej nie zrozumiałeś, zapoznaj się z metodą "Uruchom".
Da się to jakoś to "debugować" żeby dokładniej ustalić gdzie jest problem ?
Można podejrzeć zapytania do bazy danych i sprawdzić jaki na prawdę użytkownik jest poszukiwany.
no niby tak, tylko przy snifowaniu produkcyjnej bazy produkcyjnej na kilku stanowiskach będę dostawał dostawał tyle zapytań że pewnie i tak nic nie znajdę, a tak jak pisałem na mojej bazie testowej ten problem nie występuje.
maniootek.
Dlaczego od razu chcesz utrudniać sobie życie, nie przechwytuj wszystkiego, tylko to co Cię interesuje, czyli zapytania z Twojego rozwiązania (filtrowanie po stanowisku, użytkowniku SQL, itp)
-
Ok po milionie testów coś zaczęło działać
przerobiłem tworzenie obiektuw gt i subiekt tak żeby były tworzone podczas otwierania okna i zamykane przy zamknięciu okna
przerobiłem również metodę uruchom
sgt = (InsERT.Subiekt)gt.Uruchom((Int32)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj | (Int32)InsERT.UruchomDopasujEnum.gtaUruchomDopasujOperatora, (Int32)InsERT.UruchomEnum.gtaUruchomWTle | (Int32)InsERT.UruchomEnum.gtaUruchomNowy );
I teraz to działa ale tylko na kontach z pełnymi uprawnieniami, na kontach o ograniczonych uprawnieniach(pracowniczych) dalej jest 0x8004132b :(
Które z uprawnień może być za to odpowiedzialne ?
-
Pokaż okno i zobacz co się dzieje, może to Cię na coś naprowadzi.
-
pod kolejnych długich poszukiwaniach udało się ustalić że chodziło o prawa do zmiany magazynu i operatora,
co dziwne w subiekcie te uprawnienia nie były wymagane żeby uzyskać ten sam efekt.
-
Co do magazynu to sprawdź raz jeszcze, jeśli użytkownik nie ma uprawnień to nie zmienisz magazynu w interfejsie użytkownika i Sferze, gdzie w Sferze będzie objawiało się to wyjątkiem. Co do operatora to w jaki sposób go zmieniasz i o jakie uprawnienie chodziło ? Wszytko wskazuje na to, że nie pokazywałeś istotnych fragmentów kodu, które mogły naprowadzić na przyczynę problemów...
-
Nie wiem jak dokładnie to uprawnienie się nazywało ponieważ nie ja je zmieniałem
magazyn wybieram tak - chcę mieć pewność że jestem na prawidłowym magazynie
sgt.MagazynId = 1;
pole wystawił zmieniam tak
InsERT.SuDokument dok = sgt.Dokumenty.Wczytaj("TY NUMER ZK");
dok.Wystawil = "tu login zalogowanego operatora";
InsERT.SuDokument pa = sgt.SuDokumentyManager.DodajPA();
pa.NaPodstawie(dok.Identyfikator);
pa.Wystawil = "tu login zalogowanego operatora";
pa.Zapisz();
zk w jakichś 99% przypadków jest robione przez innego operatora niż paragon
-
Nie wiem jak dokładnie to uprawnienie się nazywało ponieważ nie ja je zmieniałem
magazyn wybieram tak - chcę mieć pewność że jestem na prawidłowym magazynie
sgt.MagazynId = 1;
Jest jak napisałem - zmiana magazynu bez uprawnień kończy się wyjątkiem.
pole wystawił zmieniam tak
InsERT.SuDokument dok = sgt.Dokumenty.Wczytaj("TY NUMER ZK");
dok.Wystawil = "tu login zalogowanego operatora";
InsERT.SuDokument pa = sgt.SuDokumentyManager.DodajPA();
pa.NaPodstawie(dok.Identyfikator);
pa.Wystawil = "tu login zalogowanego operatora";
pa.Zapisz();
zk w jakichś 99% przypadków jest robione przez innego operatora niż paragon
Pisałeś o "zmianie operatora", a teraz o "zmianie osoby wystawiającej dokument" - nie zrozumiałem o co chodzi, opisuj precyzyjniej co robisz...