Radomił Ząbik 308 Napisano 1 Lutego Udostępnij Napisano 1 Lutego w [Sfera zdarzeniowa] Zmiana tytułu rozrachunku automatycznego do faktury Chciałbym po zapisaniu faktury, aby w tytule rozrachunku znalazła się odpowiednia wartość. Dodatkowo planuję jeszcze przenieść tą wartość dalej, do rozrachunków cesji, ale to już inna para kaloszy. Niestety podczas próby zmiany rozrachunku, po zapisie obiektu DokumentDS, otrzymuję błąd: Cytat Nie można pojedynczo zapisać obiektu utworzonego w ramach większej operacji biznesowej. Z poziomu Subiekta, mogę Swobodnie zmienić tytuł. Zrobiłem klasyczne rozwiązanie Sferyczne kopiując część kodu odpowiedzialną za zmianę i bez problemu przeszło. Problem mam tylko w Sferze zdarzeniowej. Coś się nie zamyka po zapisaniu obiektu? Kod rozwiązania, błąd występuje w momencie użycia metody Zapisz. public override void PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu<IDokumentSprzedazy> kontekst) { if (kontekst.StanZapisanegoObiektu == StanZapisanegoObiektu.Dodany) { IDokumentySprzedazy sprzedaz = kontekst.Uchwyt.PodajObiektTypu<IDokumentySprzedazy>(); IRozrachunki rozrachunki = kontekst.Uchwyt.PodajObiektTypu<IRozrachunki>(); int identyfikatorZapisanegoPodmiotu = (int)kontekst.IdDanych; IDokumentSprzedazy ds = sprzedaz.Znajdz(d => d.Id == identyfikatorZapisanegoPodmiotu); var rozrachunek = ds.Dane.Rozrachunek; using(var rch = rozrachunki.Znajdz(rozrachunek)) { if(rch.Zablokuj()) { rch.Odblokuj(); rch.Dane.Tytul = ds.Dane.Uwagi; if(rch.Zapisz()) {} else rch.WypiszBledy(); } } } } Link to postu
Paweł Kubacki 203 Napisano 5 Lutego Udostępnij Napisano 5 Lutego w [Sfera zdarzeniowa] Zmiana tytułu rozrachunku automatycznego do faktury Problemem jest tutaj przekazywanie encji rozrachunku z załadowanego dokumentu sprzedaży do metody tworzącej obiekt rozrachunku. W zasadzie wystarczy drobna zmiana w Pana kodzie, aby odizolować oba obiekty od siebie i aby ten plugin działał. ... using (var rch = rozrachunki.Znajdz(x => x.Id == rozrachunek.Id)) { ... } Jednak sugeruję nieco większą zmianę ze względu na wydajność. Dokument sprzedaży jest dość złożonym obiektem i bez potrzeby nie warto powoływać go do życia. W tym przypadku dokument ten nie jest zmieniany, pobierane są z niego jedynie uwagi, więc proponuję następującą zmianę. public override void PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu<IDokumentSprzedazy> kontekst) { if (kontekst.StanZapisanegoObiektu == StanZapisanegoObiektu.Dodany) { IDokumentySprzedazy sprzedaz = kontekst.Uchwyt.PodajObiektTypu<IDokumentySprzedazy>(); IRozrachunki rozrachunki = kontekst.Uchwyt.PodajObiektTypu<IRozrachunki>(); int idZapisanegoDokumentu = (int)kontekst.IdDanych; var uwagi = sprzedaz.Dane.Wszystkie() .Where(x => x.Id == idZapisanegoDokumentu) .Select(x => x.Uwagi) .FirstOrDefault(); using (var rch = rozrachunki.Znajdz(x => x.Dokument.Id == idZapisanegoDokumentu)) { if (rch.Zablokuj()) { rch.Odblokuj(); rch.Dane.Tytul = uwagi; if (rch.Zapisz()) { } else rch.WypiszBledy(); } } } } Nadmiarowy wydaje mi się także kod związany z blokowaniem obiektu. 1 Link to postu
Radomił Ząbik 308 Napisano 5 Lutego Autor Udostępnij Napisano 5 Lutego w [Sfera zdarzeniowa] Zmiana tytułu rozrachunku automatycznego do faktury Dziękuje, wieczorem przetestuję, z uwzględnieniem uwag do wydajności, które przeniosę także na dalsze poszukiwania rachunków cesyjnych Link to postu
Polecane posty