-
Liczba zawartości
66 -
Rejestracja
-
Ostatnia wizyta
Posty dodane przez Anna Sałacińska
-
-
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.
-
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ładniejInsERT.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.
-
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.
-
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? -
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?
-
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.
-
W dniu 21.11.2023 o 12:57, Daniel Kozłowski napisał:
Istotne informacje, których brakuje:
- jaka jest konfiguracja sprzętowa (zwłaszcza ilość pamięci RAM) i programowa (edycja serwera SQL) tego serwera
- jakie są zasoby pamięci ram w momencie pojawiania się błędów
- po jakim czasie od rozpoczęcia operacji zapisu pojawia się błąd (szczegółowe logi rozwiązania)
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.
W dniu 21.11.2023 o 12:17, Dariusz Nowak napisał:Zwalnianie nieużywanych obiektów w .NET
Pytanie:
W jaki sposób zwalniać nieużywane obiekty?
Odpowiedź:
Nieużywane obiekty w środowisku .NET należy zwalniać metodą:
System.Runtime.InteropServices.Marshal.ReleaseComObject( obj );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.W dniu 21.11.2023 o 12:17, Dariusz Nowak napisał:Warto też nie stosować "tasiemcowych konstrukcji" typu sgt.Kontrahenci — najlepiej każdy obiekt czy kolekcję osobno i jawnie zadeklarować, a po użyciu usunąć metodą ReleaseComObject.
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 nowegoInsERT.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
CytatSystem.Runtime.InteropServices.COMException: Wyjątek od HRESULT: 0x80040E31\r\n w InsERT.Kontrahent.Zapisz()
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
Cytat<obid>1272492<\/obid><obextra>0<\/obextra><obtype>151<\/obtype><workstation>SERWER<\/workstation><username>Szef<\/username><locktime>2023-11-20T19:25:07.037<\/locktime><counter>5<\/counter>
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
CytatSystem.NotSupportedException: „LINQ to Entities does not recognize the method 'Boolean Is(InsERT.Moria.ModelDanych.Dokument, InsERT.Moria.Dokumenty.Logistyka.TypDokumentu)' method, and this method cannot be translated into a store expression.”
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?
-
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
-
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ć?
-
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
CytatWlasciwoscAsortymentu kolorAsortymentu = asortyment.Dane.WlasciwosciAsortymentu.First(w => w.Wlasciwosc.Nazwa == "Kolor");
System.InvalidOperationException: „Sekwencja nie zawiera pasującego elementu.”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()); }
-
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
CytatInsERT.Mox.DataAccess.UnsponsoredModificationException: „Modyfikacja pola Asortymenty encji Model nie powiodła się, ponieważ albo encja nie została przyłączona do obiektu kontrolującego modyfikację danych (biznesowego), albo ten, do którego jest przyłączona nie pozwala na zmianę tego konkretnego pola.”
Asortyment o id 100030 oczywiście istnieje.
-
-
Dzień dobry,
od pewnego czasu podczas wystawiania paragonu przez sferę występuje poniższy wyjątek, nie pojawia się on za każdym razem ale ostatnio jest coraz częściej.
CytatResolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)".
Exception occurred while: while resolving.
Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)
2022-10-07 07:55:42.1279 ERROR Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)".
Exception occurred while: while resolving.
Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)
---> Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych
---> System.AggregateException: Wystąpił przynajmniej jeden błąd. ---> System.OutOfMemoryException: Zgłoszono wyjątek typu 'System.OutOfMemoryException'.
w System.Linq.Set`1..ctor(IEqualityComparer`1 comparer)
w System.Linq.Enumerable.<UnionIterator>d__67`1.MoveNext()
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
w System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
w System.Data.Entity.Utilities.TypeExtensions.TryGetElementType(Type type, Type interfaceOrBaseType)
w System.Data.Entity.Infrastructure.DependencyResolution.TransactionContextInitializerResolver.GetService(Type type, Object key)
w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
w System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
w System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
w System.Data.Entity.Infrastructure.DependencyResolution.RootDependencyResolver.GetService(Type type, Object key)
w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
w System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
w System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
w System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key)
w System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.CreateMetadataPropertyFromXmlAttribute(String xmlNamespaceUri, String attributeName, String value)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.AddOtherContent(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseAttribute(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.StructuredType.HandlePropertyElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.StructuredType.HandleElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaEntityType.HandleElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleEntityTypeElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleTopLevelSchemaElement(XmlReader reader)
w System.Data.Entity.Core.SchemaObjectModel.Schema.InternalParse(XmlReader sourceReader, String sourceLocation)
w System.Data.Entity.Core.SchemaObjectModel.Schema.Parse(XmlReader sourceReader, String sourceLocation)
w System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, AttributeValueNotification providerNotification, AttributeValueNotification providerManifestTokenNotification, ProviderManifestNeeded providerManifestNeeded, IList`1& schemaCollection)
w System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, DbProviderManifest providerManifest, IList`1& schemaCollection)
w System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.LoadItems(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModelOption, DbProviderManifest providerManifest, ItemCollection itemCollection, Boolean throwOnError)
w System.Data.Entity.Core.Metadata.Edm.EdmItemCollection..ctor(IEnumerable`1 xmlReaders)
w InsERT.Mox.Runtime.DataAccessLayerModule.<>c__DisplayClass44_0.<CreateMetadataWorkspace>b__3()
w System.Threading.Tasks.Task.InnerInvoke()
w System.Threading.Tasks.Task.Execute()
--- Koniec śladu stosu wyjątków wewnętrznych ---
w System.Threading.Tasks.Task.FastWaitAll(Task[] tasks)
w System.Threading.Tasks.Parallel.Invoke(ParallelOptions parallelOptions, Action[] actions)
w System.Threading.Tasks.Parallel.Invoke(Action[] actions)
w InsERT.Mox.Runtime.DataAccessLayerModule.CreateMetadataWorkspace(IUnityContainer unity)
w Microsoft.Practices.Unity.InjectionFactory.<>c__DisplayClass2.<.ctor>b__0(IUnityContainer c, Type t, String s)
w Microsoft.Practices.ObjectBuilder2.FactoryDelegateBuildPlanPolicy.BuildUp(IBuilderContext context)
w Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
w Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
--- Koniec śladu stosu wyjątków wewnętrznych ---
w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
w Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
w Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, String name, ResolverOverride[] overrides)
w InsERT.Mox.Runtime.DataAccessLayerModule.ResolveMetadataWorkspaceForThisAssembly(IUnityContainer unity)
w Microsoft.Practices.Unity.InjectionFactory.<>c__DisplayClass2.<.ctor>b__0(IUnityContainer c, Type t, String s)
w Microsoft.Practices.ObjectBuilder2.FactoryDelegateBuildPlanPolicy.BuildUp(IBuilderContext context)
w Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
w Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
--- Koniec śladu stosu wyjątków wewnętrznych ---
w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
w Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
w Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
w InsERT.Mox.Runtime.Unity.UnityAdapter.GetObject(Type t)
w InsERT.Mox.Runtime.IInjectionContainerExtensions.GetMetadataWorkspace(IInjectionContainer container)
w InsERT.Moria.Sfera.Uchwyt.7TE=(String login)
w InsERT.Moria.Sfera.Uchwyt.ZalogujOperatora(String login, String haslo)
Ostatni wyjątek OutOfMemoryException wskazuje na brak pamięci, ale można powiedzieć że mamy jej aż naddto
Schemat dzialania programu jest nastepujący
Zaloguj się do sfery => przekształć zk na pa => wydrukuj pa => wyloguj się
Ostatni komunikat wskazuje na to że bąd wystąpił już podczas logowania, ale jak wykonuję inne operacje typu "dodaj zk" to ten probem nie występuje
-
To znaczy asortymentu nie zapisuję ponieważ nie chcę modyfikować asortymentu tylko nazwę pozycji na dokumencie,
a pozycja na dokumencie nie ma opcji modyfikacji nazwy
-
Program wywala się na tej linijce
produkt.Nazwa = "Nowa nazwa";
więc dalej nie mam możliwości zrobienia czegokolwiek
-
Witam,
załóżmy że mam subiekta nexo pro na 3 stanowiska oraz chcę korzystać ze sfery/sdk.
Jak są wtedy liczone licencje ?
Trzech użytkowników może się zalogować do subiekta i dodatkowo ci sami użytkownicy mogą korzystać z sdk czy do sdk muszę dokupić kolejne licencje ? -
Witam,
losowo przy probie połączenia ze sferą występuje mi taki błąd,
CytatResolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)".
Exception occurred while: while resolving.
Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych
-----------------------------------------------
At the time of the exception, the container was:Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)
co najgorsze występuje tylko na serwerze produkcyjnym, na testowym nie zdarzyło mi się ani razu.
Problem występuje przy tym kodzie
var laucher = new SferaLauncher(Db.host, spolka.podmiot, daneNexo.login, daneNexo.password, Db.login, Db.haslo); return laucher.UruchomSfere(); .... public Uchwyt UruchomSfere() { DanePolaczenia danePolaczenia = DanePolaczenia.Jawne(_serwer, _baza, autentykacjaWindowsDoSerwera: false, uzytkownikSerwera: _uzytkownikSerwera, hasloUzytkownikaSerwera: _hasloSerwera); MenedzerPolaczen mp = new MenedzerPolaczen(); Uchwyt sfera = mp.Polacz(danePolaczenia, InsERT.Mox.Product.ProductId.Subiekt); if (!sfera.ZalogujOperatora(_login, _haslo)) throw new ArgumentException("Nieprawidłowa nazwa lub hasło użytkownika.(" + _baza + "|" + _login + ") - " + sfera.Zaloguj(_login, _haslo)); return sfera; }
Połączenie jest tworzone w BackgroundWorker,
jest tworzone jedno w połączenie w jednym czasie -
Witam,
mam program który dodaje zk z zewnętrznego systemu do subiekta,
produkty są wyszukiwana na podstawie ean-u,następnie muszę zmienić nazwę pozycji na taką jak w zewnętrznym systemie
IAsortymenty produkty = sfera.PodajObiektTypu<IAsortymenty>(); InsERT.Moria.ModelDanych.Konfiguracja konfZk = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.ZamowienieOdKlienta; using (IZamowienieOdKlienta zk = zamowienia.Utworz(konfZk)) { .... Asortyment produkt = produkty.Dane.Wszystkie().Where(e => e.PodstawowaJednostkaMiaryAsortymentu.PodstawowyKodKreskowy.Kod.Trim()== "123456").FirstOrDefault(); produkt.Nazwa = "Nowa nazwa"; zk.Pozycje.Dodaj(produkt, 1, produkt.JednostkaSprzedazy); ... }
i właśnie przy zmianie nazwy dostaję wyjątek
CytatInsERT.Mox.Locking.AppLockNotAcquiredException: Nie można zablokować podanego zasobu.
w InsERT.Mox.Locking.SqlServer.SqlApplicationLock..ctor(SqlLockManager manager, IDbConnectionFactory dbConnectionFactory, String resourceId, Guid sessionId, Boolean acquire)
w InsERT.Mox.Locking.SqlServer.SqlLockManager.AcquireLock(String resourceId)
w InsERT.Mox.BusinessObjects.BusinessObject`3.Lock(TId id)
w InsERT.Mox.BusinessObjects.BusinessObject`3.Lock()
w InsERT.Mox.BusinessObjects.BusinessObject`3.OnModifying()
w InsERT.Mox.BusinessObjects.BusinessObject`3.InsERT.Mox.DataAccess.IDataEventsSink.OnScalarPropertyChanging[TProperty](Object entity, String propertyName, TProperty propertyValue)
w InsERT.Mox.DataAccess.EntityFramework.EntityDataObjectBase.ReportScalarPropertyChanging[T](IDataEventsSink sink, String propertyName, T& value)
w InsERT.Moria.ModelDanych.Asortyment.set_Nazwa(String value)W czasie działania tego programu nikt inny nie pracuje na subiekcie, nie są również uruchamiane inne programy.
Przy probie pobrania jakichś 30 zk przy 20 potrafi wywalić ten błąd.
Wiem że błąd może występować jeśli ktoś inny edytuje produkt ale mam informacje od pracowników że nikt nic nie robi,
drugą opcją jest nagle wyłączenie serwera ale wszystko jest cały czas uruchomione. -
Ehhh.... jak się człowiek spieszy ...
nie ten log skopiowałam 🤦♀️
CytatSystem.Runtime.InteropServices.COMException (0x8004111E): Wyjątek od HRESULT: 0x8004111E
w InsERT.Kontrahent.Zapisz()- 1
-
Witam,
co może powodować błąd 0x800414C0 ?
jedyne informacje jakie mi się pojawiają to
CytatSystem.Runtime.InteropServices.COMException (0x800414C0): Wyjątek od HRESULT: 0x800414C0
w InsERT.Kontrahent.Zapisz()CytatSystem.Runtime.InteropServices.COMException (0x8004111E): Wyjątek od HRESULT: 0x8004111E
w InsERT.Kontrahent.Zapisz()Według opisu błąd oznacza "Konto o podanym numerze już istnieje." ale jakie konto ? Chodzi o kontrahenta ?
-
Witam,
mam problem z przepisywaniem parności natychmiastowych z ZK na paragon
parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz; ... ds.WypelnijNaPodstawieZK(zk.Dane.Pozycje, zk.Dane, parametryGrupowania);
Na zk mam dodaną testową formę płatności p1 typu "Zapłacono przelewem",
na paragonie dodaje mi się wpłata bankowaCzy opcja "przepisz" nie powinna działać w taki sposób że skoro na ZK formę p1 to na dokumencie wynikowym też powinno być p1 ?
-
W dniu 25.05.2022 o 12:46, Wojciech Szopiński napisał:
A nie rozważała Pani może trzymania otwartego uchwytu przez cały czas działania aplikacji? Bo jak rozumiem tutaj jest on dispose'owany po zakończeniu wykonywanej operacji.
Teoretycznie mogę ale po doświadczeniach ze sferą gt jakoś temu nie ufam,
obecnie problemem jest to że każdorazowe uruchamianie sfery jest wolne.
Zobaczymy jeśli będą problemy ze zbyt wolnym działaniem to spróbuje uruchamiać "na stałe"
Błąd 0x80040E31 przy dodawaniu kontrahenta
w Sprawy techniczne
Napisano
Około 500-700 tysięcy, nie pamiętam dokładnie