Skocz do zawartości

[Sfera] Problem z Odebrał/Wystawił na WZ, po wypełnieniu na podstawie ZK

Polecane posty

Mam kod, który wypełnia pozycje WZ, na podstawie pozycji ZK, i od jakiegoś miesiąca mam problem, że na WZ zarówno w Odebrał jak i Wystawił, mam osobę zalogowaną, pracownika firmy, zamiast adekwatnie jako wystawiającego pracownika firmy, a odbierającego odpowiedniego przedstawiciela z FP/ZK. Aby było ciekawej, to ten sam kod mam na kilku podmiotach, u różnych klientów, i kaszani się tylko u jednego - nie znalazłem aby było jakieś ustawienie za to odpowiedzialne. Poniżej kawałek kod odpowiedzialny za parametry grupowania oraz wczytanie pozycji - właśnie po nich się kaszani:

// przeniesienie parametrów z ZK
ParametryGrupowaniaPodstawowe parametryGrupowania = new ParametryGrupowaniaPodstawowe();
parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji;
parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego;
parametryGrupowania.MiejsceDostawy = zk.MiejsceDostawy;
parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca;
parametryGrupowania.NabywcaSprzedawca = zk.NabywcaSprzedawcaWybrany ?? zk.PodmiotWybrany;
IAplikatorSkutkowMagazynowych aplikatorSM = (IAplikatorSkutkowMagazynowych)wz;
// wypełnienie pozycji na podstawie ZK
foreach (var posadd in results.pos)
  {
  int posdocid; int posid; decimal posq; string comment;
  posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity; comment = posadd.comment;
  var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == posdocid).FirstOrDefault(); // znalezienie zamówienia
  var poz = wz.WypelnijNaPodstawieZK(zamowienie.Pozycje.Where(p => p.Id == posid), zamowienie, parametryGrupowania).Single(); // dodanie pozycji z ZK
  poz.Opis = comment;
  poz.CenaRecznieEdytowana = true;
  poz.Ilosc = posq; // ustawiamy na 0, wyjdzie z rozbicia
  aplikatorSM.AplikujSkutkiMagazynowe(poz);
  }

Jak Sobie wyrzucam do konsoli wartości Wystawil/Odebral, to mam odpowiednio:

- Początek - utworzenie WZ

- Grupowanie - ustawienie parametrów grupowania

- Pozycje - po wczytaniu pozycji z ZK i tam następuje podmiana

image.png.cda190348c35474e66466b57eceeb1ca.png

Skończyły mi się pomysły, nie wiem, coś brakuje w parametrach grupowania?

Link to postu

Ok, dodałem logowanie danych z zamówienia wczytanego, proszę. Znam myk Wystawil/Odebral, i go sprawdzałem, na moje jest ok w Zamówieniu. ZK robione są Sferycznie, gdzie nie ustawiam Wystawiającego, jeśli jest to ustawiam Odbierającego, a dopiero potem ewentualnie dodaje numer oryginału.

2023-03-24 12:45:52 - dodawanie WZki do wybranych pozycji.
Początek - Wystawil: Bogumił 
Początek - Odebral:
Grupowanie - Wystawil: Bogumił 
Grupowanie - Odebral:
Zamówienie - Wystawil: Bogumił 
Zamówienie - Wysta.ID: 136866
Zamówienie - Odebral: Adam 
Zamówienie - Odeb.ID: 140001
Zamówienie - Oryginal:
Zamówienie - Wystawil: Bogumił 
Zamówienie - Wysta.ID: 136866
Zamówienie - Odebral: Adam 
Zamówienie - Odeb.ID: 140001
Zamówienie - Oryginal:
Zamówienie - Wystawil: Bogumił 
Zamówienie - Wysta.ID: 136866
Zamówienie - Odebral: Adam 
Zamówienie - Odeb.ID: 140001
Zamówienie - Oryginal:
Zamówienie - Wystawil: Bogumił 
Zamówienie - Wysta.ID: 136866
Zamówienie - Odebral: Adam 
Zamówienie - Odeb.ID: 140001
Zamówienie - Oryginal:
Pozycje - Wystawil: Bogumił 
Pozycje - Odebral: Bogumił 
Osoba - Wystawil: Bogumił 
Osoba - Odebral: Bogumił 
2023-03-24 12:45:56 - dodano WZkę: WZ/131/03/2023
2023-03-24 12:45:57 - Drukowanie WZki: WZ/131/03/2023
2023-03-24 12:45:58 - Wydrukowano: wz238198.pdf

Log tak biorę:

var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == posdocid).FirstOrDefault(); // znalezienie zamówienia
Console.WriteLine("Zamówienie - Wystawil: " + zamowienie.Wystawil);
Console.WriteLine("Zamówienie - Wysta.ID: " + zamowienie.WystawilaOsobaId);
Console.WriteLine("Zamówienie - Odebral: " + zamowienie.Odebral);
Console.WriteLine("Zamówienie - Odeb.ID: " + zamowienie.OdebralaOsobaId);
Console.WriteLine("Zamówienie - Oryginal: " + zamowienie.NumerZewnetrzny);
var poz = wz.WypelnijNaPodstawieZK(zamowienie.Pozycje.Where(p => p.Id == posid), zamowienie, parametryGrupowania).Single(); // dodanie pozycji z ZK

 

Edytowane przez Radomił Ząbik
Link to postu

Te zamówienia jak rozumiem są wystawiane sferą, tak? Bo jeśli dodamy takie samo zamówienie w Subiekcie w dwóch wersjach (z numerem oryginału i bez) to efekt w bazie jest następujący:

image.png.4945d1c903a71215820505aab1dbdb45.png 

Proszę zwrócić uwagę, że identyfikator osoby dla "przedstawiciela" zamawiającego zawsze jest null. Dzieje się tak ponieważ to pole na formatce można wypełniać "z ręki" i nie zapisujemy tam nigdy powiązania z osobą. U Pana na zamówieniu ustawione jest powiązanie z osobą wystawiającą jak i odbierającą dlatego występuje opisany efekt.

Edytowane przez Wojciech Szopiński
Link to postu

Hmm, w ZK nie uzupełniam w ogóle osoby wystawiającej - zakładam, że powinna podłożyć się sama. Następnie, jeśli mam przedstawiciela, to dodaję go normalnie jako obiekt Osoba. Dopiero na koniec, dodaje numer zewnętrzny. Czyli trzeba by było, tak czy siak ustawiać obie osoby, zawsze i adekwatnie czyścić osobę po stronie odbiorcy, jeśli nie istnieje?

Link to postu

No rzeczywiście nie mam NULL w bazie:

SELECT wz.Id
,wz.NumerWewnetrzny_PelnaSygnatura[NumerWZ]
,zk.NumerWewnetrzny_PelnaSygnatura[NumerZK]
,zk.Wystawil
,zk.WystawilaOsobaId
,zk.Odebral
,zk.OdebralaOsobaId
FROM ModelDanychContainer.Dokumenty AS wz 
INNER JOIN ModelDanychContainer.DokumentDokument AS dd ON dd.DokumentyRealizujace_Id=wz.Id
INNER JOIN ModelDanychContainer.Dokumenty AS zk ON zk.Id=dd.DokumentyRealizowane_Id
WHERE wz.NumerWewnetrzny_PelnaSygnatura='WZ/131/03/2023'

Wynik:

image.png.09077586f94721f54c9b3ce8a7517b7c.png

I trochę nie rozumiem, czemu musi być NULL, na osobie, która jest przedstawicielem? Przecież mam go w podmiocie, nie bierze się z nikąd. W dodatku to działało Sobie spokojnie do wersji 41 - potem skleiłem rozwiązanie na nowo, w VS 2022, na nowym szablonie itp. aby było 100% zgodne z nowymi frameworkami.

 

W kodzie dodawania ZK, mam tylko to w temacie:

// przedstawiciel
if (results.person != null)
  {
  int person; person = results.person;
  zk.Dane.OdebralaOsoba = podmioty.Dane.Wszystkie().Where(p => p.Osoba.Id == person).FirstOrDefault().Osoba;
  }
// numer oryginalu
if (results.oryginal != null)
  {
  string oryginal = results.oryginal;
  zk.Dane.NumerZewnetrzny = oryginal;
  }

 

Link to postu

Takie założenie było od dawna, że identyfikator osoby będącej przedstawicielem nie jest ustawiany na dokumencie - tak jak napisałem w interfejsie to pole można dowolnie edytować, a wybór osoby z combo-boxa ustawia tylko treść w kolumnie Odebral (lub Wystawil w przypadku zamówienia z numerem oryginału). Ciężko jest mi powiedzieć dlaczego wcześniej działało to u Pana inaczej, ale z analizy kodu wynika, że przepisywanie wartości w polu Odebral z zamówienia działa tak jak teraz od wersji 26 i jeśli na zamówieniu wskazanym jako główne jest wypełniona kolumna OdebralaOsobaId to jako odebrał do WZki przepisuje się Wystawil z zamówienia (czyli przedstawiciel klienta będzie odbierającym wydanie zewnętrzne).

 

Link to postu

No ok, zmieniam w kodzie, zobaczymy. Rzeczywiście, to jest jedyny klient, u którego jest przypisywany przedstawiciel, stąd nie udało mi się wykryć tego zachowania. Swoją drogą, nie warto by zabezpieczyć sferycznie FP/ZK, przed wprowadzaniem tego identyfikatora osoby?

Link to postu
  • 2 miesiące temu...

Zgłoszenie zostało zrealizowane w wersji 46.0.0. Fragment listy zmian:

"Poprawiono ustawianie osoby wystawiającej i odbierającej dokument realizujący zamówienie od klienta. Dotychczas, w specyficznych kombinacjach danych zamiast przepisać osoby z dokumentu realizującego, program ustawiał na dokumencie realizowanym zalogowanego użytkownika.";

Link to postu
×
×
  • Dodaj nową pozycję...