Skocz do zawartości

Anna Sałacińska

Użytkownik
  • Liczba zawartości

    66
  • Rejestracja

  • Ostatnia wizyta

Posty dodane przez Anna Sałacińska

  1. 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.

     

  2. 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.

     

  3. 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?

     

  4. 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?

  5. suDodument.Pozycje jest tylko jako get, jak mam tam przekazać całą listę?

     

    image.png.78ea5c2cea9f3784845978a46ed38ed7.png

    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.

  6.  

    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);
    }

     

  7. 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

    Cytat

    System.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?

     

  8. 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

    Cytat

    System.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?

  9. 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ć?

  10. 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

     

    Cytat

    WlasciwoscAsortymentu 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());
    }

     

    image.thumb.png.bc3bef761d8fa572158fac247168e16c.png

     

     

  11. 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

    Cytat

    InsERT.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.

  12. 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.

     

    Cytat

    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)

    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

    image.png.30bcad9aefcfaa72e8f4d44d79fdbbe3.png

     

     

     

    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

     

     

     

  13. 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 ?

  14. Witam,

    losowo przy probie połączenia ze sferą występuje mi taki błąd,

    Cytat

    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)

    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

  15. 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

    Cytat

    InsERT.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.

     

     

  16. Witam,

    co może powodować błąd 0x800414C0 ?

    jedyne informacje jakie mi się pojawiają to

    Cytat

    System.Runtime.InteropServices.COMException (0x800414C0): Wyjątek od HRESULT: 0x800414C0
       w InsERT.Kontrahent.Zapisz()

     

    Cytat

    System.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 ?

  17. 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",

    obraz.png.b689c312d4c3dc7e8c727edcdda57eb0.png
    na paragonie dodaje mi się wpłata bankowa

     

    obraz.png.46bc0157a7371185f90cc50eb53f7614.png

     

    Czy opcja "przepisz" nie powinna działać w taki sposób że skoro na ZK formę p1 to na dokumencie wynikowym też powinno być p1 ?

     

     

  18. 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"

×
×
  • Dodaj nową pozycję...