-
Liczba zawartości
66 -
Rejestracja
-
Ostatnia wizyta
Ostatnie wizyty
Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.
Anna Sałacińska's Achievements
1
Reputacja
-
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Około 500-700 tysięcy, nie pamiętam dokładnie -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Baza subiekta została postawiona na nowo z wyczyszczoną bazą kontrahentów. Od tej pory działa prawidłowo. A z tego wnioskuję że sfera przestaje działać przy zbyt dużej ilości kontrahentów. -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Wstawiam większy fragment kodu może będzie łatwiej. Tu faktycznie może trochę w błąd wprowadzać to że moje klasy i klasy sfery mają te same nazwy. Te bez przestrzeni nazw InsERT są moje. Klasa kontrahentów: class Kontrahent { public int dodaj(Klient klient) { InsERT.Kontrahent kon = null; try { using (SqlCommand qis = new SqlCommand(@"SELECT isnull( CONVERT(int, (SELECT TOP 1[kh_Id] FROM[dbo].[kh__Kontrahent] JOIN[dbo].[adr__Ewid] on[adr_IdObiektu] =[kh_Id] and[adr_TypAdresu] = 1 WHERE adr_NIP = @nip AND adr_NIP != '' AND kh_Zablokowany = 0)) , isnull( CONVERT(int, (SELECT TOP 1 kh_Id FROM[dbo].kh__Kontrahent WHERE[kh_EMail] = @mail AND kh_Zablokowany = 0)) , 0)) ") ) { qis.Parameters.Add("@mail", SqlDbType.VarChar, 255).Value = klient.email; qis.Parameters.Add("@nip", SqlDbType.VarChar, 255).Value = klient.nip; kid = (int)qis.ExecuteScalar(); if (kid == 0) { kon = this.sfera.sgt.Kontrahenci.Dodaj(); kon.Typ = 0; kon.Miejscowosc = klient.miasto; kon.Ulica = klient.ulica; kon.NrDomu = klient.dom; kon.NrLokalu = klient.lokal; kon.KodPocztowy = klient.kod; kon.Telefony.Dodaj(klient.telefon); kon.Email = klient.email; kon.NIP = klient.nip; .... kon.Zapisz(); kid = kon.Identyfikator; } else { kon = this.sfera.sgt.Kontrahenci.Wczytaj(kid); kon.Miejscowosc = klient.miasto; kon.Ulica = klient.ulica; kon.NrDomu = klient.dom; kon.NrLokalu = klient.lokal; ... kon.Zapisz(); } } } catch (Exception ex) { .... } finally { if (kon != null) { kon.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(kon); } } return kid; } } Klasa zamówień: class Zamowienie { public int dodaj(Zamowienie zamowienie) { int dokumentId = 0; InsERT.SuDokument zk = null; try { Kontrahent kontrahent = new Kontrahent(); kontrahentId = kontrahent.dodaj(zamowienie.klient); if (kontrahentId == 0) { throw new Exception("Brak kontrahenta"); } zk = this.sfera.sgt.SuDokumentyManager.DodajZK(); zk.NumerOryginalny = zamowienie.id; zk.Podtytul = ""; zk.StatusDokumentu = 6; zk.KontrahentId = kontrahentId; foreach (Produkt produkt in zamowienie.produkty) { using (SqlCommand qProd = new SqlCommand(@"SELECT TOP 1 [tw_Id] FROM [tw__Towar] WHERE [tw_Symbol]= @ob_TowId")) { qProd.Parameters.Add("@ob_TowId", SqlDbType.VarChar, 20).Value = produkt.index; int prodId = 0; try { prodId = Convert.ToInt32(qProd.ExecuteScalar()); } catch (Exception) { } InsERT.SuPozycja poz = null; if (prodId > 0) { poz = zk.Pozycje.Dodaj(prodId); } else { poz = zk.Pozycje.DodajUslugeJednorazowa(); poz.UslJednNazwa = produkt.nazwa; } poz.CenaBruttoPrzedRabatem = produkt.brutto; poz.RabatProcent = produkt.rabat; poz.IloscJm = produkt.ilosc; System.Runtime.InteropServices.Marshal.ReleaseComObject(poz); } } zk.Zapisz(); dokumentId = zk.Identyfikator; zk.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(zk); } catch (Exception ex) { ... } finally { if (zk != null) { zk.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(zk); } } return dokumentId; } } Oraz dodawanie Subiekt.Zamowienie zamowinie = new Zamowienie(); foreach (Zamowienie zamowienie in lista) { zamowinie.dodaj(zamowienie); } Jak widać klasa Kontrahent dodaje lub otwiera do edycji InsERT.Kontrahent, zmienia dane, zapisuje i zamyka obiekt sfery. I dopiero jak doda kontrahenta to tworzy InsERT.SuDokument Ok, jest dokładniej InsERT.SuDokument zk = null; kontrahent.dodaj(zamowienie.klient);// tu moja klasa kontrahent która wywołuje sgt.Kontrahenci.Dodaj() lub sgt.Kontrahenci.Wczytaj() sgt.SuDokumentyManager.DodajZK(); no ale skoro zk na początku jest równe null to to nie powinno mieć żadnego wpływu. Przed wystąpieniu błędu w tabeli [dbo].[ins_blokada] albo nie ma wpisu albo jest z workstation podanym na stanowisko na którym jest uruchamiany ten program. Więc wychodzi na to że on blokuje sam siebie. Tego programu nie da się uruchomić kilka razy więc odpada opcja że niechcący został uruchomiony dwa razy i dwie instancje się na siebie nadkładają, próbując edytować tego samego kontrahenta. -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Faktycznie mea culpa, tu jest edycja. W każdym razie można powiedzieć że wykonuję metodę dodającą lub edytującą kontrahenta - obiekt kontrahenta zostaje zamknięty. A dopiero później zaczynam dodawać zk, w którym kontrahenta poprzez jego id Czyli to jest dosłownie zk.KontrahentId = 123; A wywala się na zapisie kontrahenta. foreach(zamówienia){ kontrahentId = kontrahent.dodaj(...); zk = sgt.SuDokumentyManager.DodajZK(); zk.KontrahentId = kontrahentId; zk.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(zk); } to kontrahent.dodaj dodaje lub edytuje kontrahenta kon = sgt.Kontrahenci.Dodaj(); lub kon = sgt.Kontrahenci.Wczytaj(kid); kon.Miejscowosc = klient.miasto; kon.Ulica = klient.ulica; kon.Zapisz(); kon.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(kon); To do dodawania zk nawet nie dochodzi. Dlatego nie wiem czy dodawanie produktów w pierwszym zk, może popsuć zapis kontrahenta przy następnym. -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Kod dodający kontrahenta wygląda dokładnie tak InsERT.Kontrahent kon = null; try { kon = this.sfera.sgt.Kontrahenci.Wczytaj(kid); kon.Miejscowosc = klient.miasto; kon.Ulica = klient.ulica; kon.NrDomu = klient.dom; kon.NrLokalu = klient.lokal; kon.KodPocztowy = klient.kod; try { if (kon.Telefony.Liczba == 0) { kon.Telefony.Dodaj(klient.telefon); } else { kon.Telefony[1].Numer = klient.telefon; } } catch (Exception e) { } kon.Email = klient.email; kon.NIP = klient.nip; if (klient.imie.Trim() != "") { kon.OsobaImie = klient.imie; } if (klient.nazwisko.Trim() != "") { kon.OsobaNazwisko = klient.nazwisko; } kon.AdresDostawy = true; kon.AdrDostKodPocztowy = klient.dowysylki_kod; kon.AdrDostMiejscowosc = klient.dowysylki_miasto; kon.AdrDostNrDomu = klient.dowysylki_dom; kon.AdrDostNrLokalu = klient.dowysylki_lokal; kon.AdrDostUlica = klient.dowysylki_ulica; string nazwa = ""; if (klient.firma != "") { kon.NazwaPelna = klient.firma; nazwa = klient.firma; } else { kon.NazwaPelna = klient.imie + " " + klient.nazwisko; nazwa = klient.imie + " " + klient.nazwisko; } kon.Nazwa = nazwa; kon.Zapisz(); } finally { if (kon != null) { kon.Zamknij(); System.Runtime.InteropServices.Marshal.ReleaseComObject(kon); } } Wywala się na kon.Zapisz(); I dopiero jak doda kontrahenta to przechodzi do dodawania zk. No ok zk, są dodawane w pętli ale i tak dodaje kontrahenta, a później zk. Więc mam rozumieć że błąd w dodawaniu pozycji spowoduje zablokowanie kontrahentów? -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Zaczęłam przerabiać ale to nie zadziała. Ja nie edytuje dokumentu tylko dodaje nowe ZK. Więc nie mogę pobrać produktów z dokumentu i przejść po nich pętlą. Tylko ja napycham nowy pusty dokument pozycjami. I tak jak pisałam ten foreach nie przechodzi po danych ze sfery tylko po moich. I może to głupie pytanie, ale czy źle dodawane pozycje mogą spowodować błąd kontrahenta? -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
suDodument.Pozycje jest tylko jako get, jak mam tam przekazać całą listę? I jak mam dodawać same pozycje? Bo w dokumentacji wszędzie jest że dodaje się je w taki sposób. Trochę nie rozumiem czemu mam zmieniać foreach na for - bo jak się domyślam to jest "zwykła" pętla. Przecież to jest pętla po danych które dostaje z mojego API, to nie coś co odczytuję ze sfery. -
Błąd 0x80040E31 przy dodawaniu kontrahenta
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT GT - Sprawy techniczne
Xeon Gold 6248 (20c/40t). Pamięć to 128GB i dysk ssd raid10 (4dyksów ssd). Platforma Insert chodzi na Wirtualnej maszynie gdzie są przydzielone 32core i 60gb ram, SQL Runtime 2017 (14.0.2047.8), baza zajmuje ~30gb a miejsca wolnego jest około 100gb. Problem pojawia się trochę losowo, działa kilka godzin po czym zaczyna sypać błędami. Przykładowo, w sobotę było jakieś 4godziny dobrze, później były błędy jakieś dwie godziny z znowu chwilę działało. W niedzielę działało około dwie godziny i od tej pory non stop błędy. To znaczy wygląda to tak że dodaje jedno max dwa zamówienia ale zajmuje to 7-10sekund na każde i przy kolejnym wali błędem. Jak działa dobrze to zamówienie dodaje się dosłownie w 1-2sekundy. Trochę szkoda że nie jest to podane wprost w przykładach... Jest już dodane wszędzie, wydawało się że pomogło ale po jakichś dwóch godzinach znowu to samo. są tworzone dosłownie tak jak jest to podane wyżej. Operacje jakie to dokładnie: - Otwarcie lub utworzenie kontrahenta - Uzupełnienie danych adresowych kontrahenta - zamknięcie kontrahenta - dodaje zk -- dodaje pozycje do zk - zamykam zk dodawanie pozycji wygląda tak foreach(p in produkty){ poz = zk.Pozycje.Dodaj(prodId); poz.CenaBruttoPrzedRabatem = p.brutto; poz.RabatProcent = p.rabat; poz.IloscJm = p.ilosc; System.Runtime.InteropServices.Marshal.ReleaseComObject(poz); } -
Dzień dobry, mam program dodający zk przez sferę, w celu dodania tego zk wykonuję następujące kroki: Sprawdzam czy kontrahent istnieje jeśli nie istnieje dodaje nowego InsERT.Kontrahent kon = this.sfera.sgt.Kontrahenci.Dodaj(); kon.Typ = 0; kon.Symbol = ".."; kon.Miejscowosc = ".."; kon.Ulica = ".."; kon.Telefony.Dodaj(".."); kon.Zapisz(); kon.Zamknij(); Jeśli istnieje to wczytuję po id i aktualizuję InsERT.Kontrahent kon = this.sfera.sgt.Kontrahenci.Wczytaj(ID); kon.Miejscowosc = ".."; kon.Ulica = ".."; kon.NrDomu = ".."; if (kon.Telefony.Liczba == 0) { kon.Telefony.Dodaj(".."); } else { kon.Telefony[1].Numer = ".."; } kon.Zapisz(); kon.Zamknij(); Następnie dodaje zk dla tego kontrahenta zk = this.sfera.sgt.SuDokumentyManager.DodajZK(); zk.UwagiExt = ".."; zk.NumerOryginalny = ".."; zk.Podtytul = "..."; zk.StatusDokumentu = 6; zk.KontrahentId = kontrahentId; zk.Zapisz(); zk.Zamknij(); I to działa ale czym dłużej działa serwer tym częściej mam błędy 0x80040E31 Błąd pojawia się dla nowych kontrahentów i tych edytowanych, dodatkowo dla tych edytowanych przed wczytaniem do edycji sprawdzam tabelę ins_blokada. Najczęściej jest pusty ale czasami faktycznie pojawia się blokada Tylko odnoszę wrażenie że najpierw jest błąd bez wpisu, a później kilka takich z wpisem w blokadach. Czy coś tu robię źle? W przykładach w dokumentacji wygląda to podobnie ale nie wiem, może jakiś zasób źle zamykam albo coś w tym stylu?
-
Dzień dobry, potrzebuję pobrać dokumenty zawierające określony produkt, mające określony status oraz będące określonego typu. Mam coś takiego IDokumenty dokumenty = sfera.PodajObiektTypu<IDokumenty>(); int asortymentId = 100047; string[] statusy = { "P", "S", "W" }; var dokumentyZProduktem = dokumenty.Dane.Wszystkie() .Where( w => w.Pozycje.Where(poz => poz.AsortymentAktualnyId == asortymentId).Count() > 0 && statusy.Contains(w.StatusDokumentu.Mnemonik) && w.Is(TypDokumentu.DokumentZakupu | TypDokumentu.DokumentSprzedazy | TypDokumentu.KorektaDokumentuSprzedazy) ); Dwa pierwsze warunki działają, ale trzeci zwraca błąd Wiem z czego wynika ten błąd - nie można używać własnych funkcji gdy linq odwołuje się do sql - oraz wiem że można to rozwiązać pobierając wszystkie dokumenty i filtrując je po stronie aplikacji. Ale to dodatkowe spowolnienie dla aplikacji. Dlatego chała bym się dopytać czy jest jakaś opcja żeby określić kilka typów już na poziomie wyszukiwania w bazie?
-
[sdk]Dodanie asortymentu do modelu
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT nexo - Sprawy techniczne
Szczerze to nie wiem o co chodzi ale teraz bez wprowadzania zmian w kodzie działa. Chociaż mam wrażenie że to przestawało działać po większej ilości prób i po restarcie komputera znowu działo -
[sdk]Dodanie asortymentu do modelu
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT nexo - Sprawy techniczne
Wygeneruj nazwę pomogło, natomiast z tym przypisywaniem cech jest coś nie tak, raz zadziałało i miałam pisać że obie wersje działają ale teraz po kilku próbach nagle przestało działać i jest ten sam błąd. Czy z tym sposobem gdzie robię new WlasciwoscAsortymentu() jest coś nie tak , czy może tak zostać? -
[sdk]Dodanie asortymentu do modelu
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT nexo - Sprawy techniczne
Próbowałam w ta stronę ale uznałam że skoro model jest nullem to pewnie trzeba jakoś od strony modelu. A w jaki sposób przypisywać cechy dla nowego asortymentu? Bo ta metoda coś nie działa Próbowałam tak jak przy dodawaniu cech modelu ale coś tu nie działa using (IAsortyment asortyment = asortymenty.Utworz()) { asortyment.Dane.Nazwa = "A1 Rozmiar: XS Kolor: Czarny"; asortyment.WypelnijNaPodstawieSzablonu(szablon.DaneDomyslne.Towar); asortyment.AutoSymbol(); asortyment.Dane.Model = model.Dane; if (!asortyment.Zapisz()) { asortyment.WypiszBledy(); } asortyment.Dane.WlasciwosciAsortymentu.Clear(); { var wl = new WlasciwoscAsortymentu(); asortyment.Dane.WlasciwosciAsortymentu.Add(wl); wl.LP = 1; wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100001).FirstOrDefault(); wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100011).FirstOrDefault()); } { var wl = new WlasciwoscAsortymentu(); asortyment.Dane.WlasciwosciAsortymentu.Add(wl); wl.LP = 2; wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100000).FirstOrDefault(); wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100008).FirstOrDefault()); } if (!asortyment.Zapisz()) { asortyment.WypiszBledy(); } } Drugi tworze tak samo tylko ma inne cechy { var wl = new WlasciwoscAsortymentu(); asortyment.Dane.WlasciwosciAsortymentu.Add(wl); wl.LP = 1; wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100001).FirstOrDefault(); wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100011).FirstOrDefault()); } { var wl = new WlasciwoscAsortymentu(); asortyment.Dane.WlasciwosciAsortymentu.Add(wl); wl.LP = 2; wl.Wlasciwosc = wlasciwosci.Dane.Wszystkie().Where(w => w.Id == 100000).FirstOrDefault(); wl.CechyAsortymentu.Add(cechy.Dane.Wszystkie().Where((w) => w.Id == 100010).FirstOrDefault()); } -
[sdk]Dodanie asortymentu do modelu
Anna Sałacińska dodał temat → w Forum użytkowników - InsERT nexo - Sprawy techniczne
Dzień dobry, w jaki sposób dodaje się asortyment do modelu? Mam coś takiego IModele modele = sfera.PodajObiektTypu<IModele>(); IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>(); var mmodel = modele.Dane.Wszystkie().Where(m => m.Sygnatura.PelnaSygnatura == "l100").First(); using (IModel model = modele.Znajdz(mmodel)) { model.Dane.Asortymenty.Add(asortymenty.Dane.Wszystkie().Where(w => w.Id == 100030).FirstOrDefault()); model.Zapisz(); model.WypiszBledy(); } I to powoduje wyjątek na linijce model.Dane.Asortymenty.Add Asortyment o id 100030 oczywiście istnieje. -
[Sfera] Wyjątek podczas wystawiania paragonu
Anna Sałacińska odpowiedział Anna Sałacińska → na temat → Forum użytkowników - InsERT nexo - Sprawy techniczne
41.1.0 5629