Skocz do zawartości

Wypełnienie pozycji PW na podstawie ZK

Polecane posty

Próbuje przygotować narzędzie wspomagające, które ma na celu wygenerowanie PW na podstawie ZK, które jest w systemie. Próbuję, na razie bezskutecznie z metodą WypelnijNaPodstawie, aczkolwiek pytanie, czy to dobra droga, bo może kombinuje, a nie da się tego zrobić? Jakieś sugestie?

Link to postu

WypelnijNaPodstawie jest metodą służącą w założeniu do powielania dokumentów, więc może coś skopiować, bo struktura dokumentów jest podobna, ale nie możemy zapewnić, że to będzie biznesowo sensowne. Metoda DodajPozycjeNaPodstawieInnejPozycji przeznaczona jest do dodawanie pozycji na podstawie listy ostatnich cen sprzedaży/zakupu towaru, więc też nie złuży do takiego scenariusza.

Należy więc samodzielnie zaimplementować wystawienie jednego dokumentu na podstawie drugiego.

Link to postu

Ok, udało mi się to zrobić. Ale, drugim krokiem jest wystawienie WZ do określonych pozycji z tego ZK i tu mam drobny problem. Otóż samo przeniesienie pozycji, to nie problem, bo do pozycji używam WypelnijNaPodstawieZK i wszystko działa prawidłowo. Problem jest np. z walutami, które były zastosowane w oryginalnych zamówieniu. Próbowałem już podpiąć już na kilka sposobów, a musi to jakoś działać, bo w programie można zrealizować dokument na podstawie ZK. Ważne, chce robić częściowe realizację ZK. Próbowałem między innymi tak:

DokumentZK zk = zamowienia.Dane.Wszystkie().Where(d => d.Id == docid).First();
using (IWydanieZewnetrzne wz = dokumentWydania.Utworz(zk.KonfiguracjaRealizujacego))

Pomocy, jakieś sugestie?

Link to postu

Więc tak, mam zamówienie w Euro:

Przechwytywanie.PNG

 

I chciałbym na jego podstawie wystawić dokument PW oraz WZ. Jest to dla nas rozwiązanie tymczasowe, zanim całkowicie przejdziemy na wasz system. PW tworzę Sobie w złotówkach, tutaj nie ma większych problemów, cena to jest rzecz drugorzędna, bo to nam póki co nie jest potrzebne. Natomiast w przypadku WZ, chciałbym aby te kwoty i waluty, były identyczne jak na dokumencie źródłowym, czyli ZK. I to jest właśnie moje pytanie, jak podpiąć parametry z ZK, do wystawiania WZ. W Subiekcie można zrealizować ZK w WZ i wtedy wszystko ładnie się podpina. Chciałbym uzyskać taki sam efekt w Sferze. No chyba, że ograniczę się do samego przeniesienia Cen, bo też dla mnie ważne jest działanie na pozycjach ZK, na tą chwilę robię to tak:

 

                  using (IWydanieZewnetrzne wz = dokumentWydania.Utworz(konfWz))
                    {
                  	wz.Dane.Magazyn = mag;
                  	wz.Dane.Uwagi = results.comment;   

                  	
                  	// wypełnienie pozycji
                  	foreach(var posadd in results.pos)
                  	{
                  	int posdocid; int posid; decimal posq;
                  	posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity;
                  		
                  	var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == posdocid).FirstOrDefault(); // znalezienie zamówienia
                    wz.Dane.StatusDokumentu = statusyDD.Rozchod_Odlozony; // ustawienie odłożonego statusu dokumentu
                  	var poz = wz.WypelnijNaPodstawieZK(zamowienie.Pozycje.Where(p => p.Id == posid),zamowienie).Single(); // dodanie pozycji z ZK
                  	poz.Ilosc = posq;
                  	}

 

Link to postu

W omawianej sytuacji najlepiej użyć metody

IWydanieZewnetrzne.WypelnijNaPodstawieZK(IEnumerable< PozycjaDokumentu> , Dokument, ParametryGrupowaniaPodstawowe)

, która jest właśnie przewidziana do scenariusza realizacji ZK za pomocą WZ.

using (var wz = dokumentyWydan.Utworz(konfWz))
{
    ParametryGrupowaniaPodstawowe parametryGrupowania = new ParametryGrupowaniaPodstawowe();
    parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji;
    parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego;
    parametryGrupowania.MiejsceDostawy = zamowienie.MiejsceDostawy;
    parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca;
    parametryGrupowania.NabywcaSprzedawca = zamowienie.NabywcaSprzedawcaWybrany;
    parametryGrupowania.OdbiorcaDostawca = zamowienie.OdbiorcaWybrany;

    wz.WypelnijNaPodstawieZK(zamowienie.Pozycje, zamowienie, parametryGrupowania);
    if (zamowienie.KursWalutyDokumentu != null)
        wz.Dane.KursWalutyDokumentu.Kurs = zamowienie.KursWalutyDokumentu.Kurs;

    if (!wz.Zapisz())
        wz.WypiszBledy();
}

Dodatkowo, jeśli chce się później poprawnie np. przeliczać czy rozliczać WZ, należy przed zapisaniem przenieść kurs z ZK, czyli np.
 

if (zamowienie.KursWalutyDokumentu != null)
    wz.Dane.KursWalutyDokumentu.Kurs = zamowienie.KursWalutyDokumentu.Kurs;

 

Link to postu

Działa! No tego ...

parametryGrupowania

... bym się nie domyślił :ph34r:, szukałem go gdzieś w parametrze głównego dokumentu. Nawet udało mi się wystawić WZ, które jest Fakturą xD W każdym razie, dziękuje bardzo za jak zwykle bardzo skuteczną pomoc i przepraszam za zawracanie głowy.

Link to postu

Dobra, jest mały problem z tym rozwiązaniem, nie udało mi się go rozwiązać, więc znowu pokornie proszę o pomoc. Otóż, przy wystawianiu, zamieniają się kolejnością odbiorcy, poniżej przykład.

 

Na ZK odbiorcą jest firma, a innym odbiorcą jest handlowiec.

... po wygenerowaniu sugerowaną przez Pana metodą WZ, wszystko się zgadza, oprócz kolejności "odbiorców", tak że głównym odbiorcą staje się handlowiec, a innym firma, co jest nieprawidłowe:

Jak temu zaradzić? Próbowałem na końcu jeszcze dodatkowo dopisać dane do odbiorcy WZ, ale Sfera odrzuciła to. Będę ogromnie wdzięczny za pomoc, bo rozbudowany moduł wystawiający te dokumenty już działa super, poza tą drobnostką :(

Edytowane przez Radomił Ząbik
Link to postu

No ok, dobra tą część rozumiem. Ale nie jest to do końca zgodne, gdy na ZK nie mamy wybranego Innego Odbiorcy (handlowca), tworzą nam się dokumenty tak:

 

ZK, na którym mamy tylko zamawiającego...

... na WZ zamawiający staje się odbiorcą, a nie nabywcą tak jak w poprzednim przykładzie, przez co nie mam jednoznaczności.

Próbowałem do danych WZ podpiąć na siłę nabywce z ZK po wczytaniu pozycji, ale nie odniosło to efektu:

wz.Dane.NabywcaSprzedawcaWybrany = zk.NabywcaSprzedawcaWybrany;

Oczywiście, mogę uczulić pracowników, aby zawsze pojawiał się inny odbiorca na każdym ZK, wtedy w WZ nastawię się na pole Nabywca, ale to chyba nie jest do końca rozwiązanie problemu.

Edytowane przez Radomił Ząbik
Link to postu

Tak po prostu działa Subiekt nexo. Jeśli nie podamy specjalnie innego odbiorcy i innego nabywcy na ZK to właśnie zamawiający pełni funkcję zarówno nabywcy jak i odbiorcy (dlatego nazwy pozostałych pól zaczynają się od Inny) a potem na WZ również pełni rolę zarówno nabywcy jak i odbiorcy. Jest po prostu naszym klientem, który najpierw zamawia, potem odbiera, a na końcu płaci za dostarczone towary. To uważam jest logiczne. Inny, znaczy inny niż ten widniejący na dokumencie.

Link to postu

No ok, a mógłby Pan zasugerować, w jaki sposób Sferą, w obu przypadkach zaprezentowanych przez mnie ZK, mógłbym mieć firmę do której następuje WZ w jednej kolumnie/polu, nabywca lub odbiorca, aby nasze dokumenty były spójne, a na liście WZ dało się to jakoś filtrować po jednej kolumnie, bo w obecnej sytuacji, jest trochę losowo:

Edytowane przez Radomił Ząbik
Link to postu

Tak, to chyba będzie najbardziej rozsądne rozwiązanie i wszystkich wtedy ustawię Nabywce jako to pole główne i tak też zrobię na dokumentach. Oczywiście taka sytuacja będzie musiała zaistnieć tylko w drugim zaprezentowanym przez mnie przypadku, gdy na ZK, nie był wprowadzony przedstawiciel w polu Inny odbiorca. W efekcie taki dokument WZ, będzie miał takiego samego Odbiorcę i Nabywcę, jeśli dobrze rozumiem?

Edytowane przez Radomił Ząbik
Link to postu

Można tak powiedzieć. Żeby ustawić jawnie nabywcę takiego samego jak odbiorca WZ:

wz.Dane.NabywcaSprzedawca = wz.Dane.Podmiot;

Właściwości, które mają w nazwie Wybrany są wtórne i służą do wskazywania dodatkowo konkretnego wpisu z historii zmian danych, więc jeśli nie ma konkretnej potrzeby to nie należy ich używać.

Link to postu
  • 1 rok później...

Powrócę do tematu, bo mam jeszcze jeden problem z metodą WypelnijNaPodstawieZK. Scenariusz jest następujący:

- na ZK, do wydania 10m rury

- ponieważ długość rury, w naszym przypadku bywa różna, a klientowi zależało na kawałkach, to przykładowo wydajemy ją w 3 pozycjach, po 9m, 2m, 1m - celowo, ta ilość jest większa

- dopisanie partii 9 i 2 metry, powoduje już zrealizowanie zamówienia

- dopisanie ostatniej partii, jako pozycja, z ilością 1m skutkuje błędem - sekwencja nie zawiera elementów:

var poz = wz.WypelnijNaPodstawieZK(zamowienie.Pozycje.Where(p => p.Id == posid),zamowienie,parametryGrupowania).Single();

NEXO oczywiście działa prawidłowo, nie mam tutaj żadnych zarzutów. Kombinuje z mocnym walidowaniem po mojej stronie i np. sortuje partie wielkościami, tak aby pierw wydać te drobne, co niweluje 99% przypadków, z 1% taki przekroczeń, więc zostaje promil. Zastanawia mnie, czy istnieje jakaś możliwość pominięcia całkowitego zrealizowania pozycji, przy pobieraniu jej do WZ - takie nadwydanie. A może pobierać ją w inny sposób?

Link to postu

Realizowanie pozycji jest nierozłącznie związane z wypełnianiem pozycji WZ na podstawie ZK i niech tak zostanie, bo przecież to ZK zostanie w ten sposób zrealizowane.

Jak rozumiem, celem jest dopchanie pozostałych kawałków do powstającej WZ i to oczywiście można zrobić dodając do ostatnio dodanej lub nowej pozycji. W tym celu należy sprawdzić, czy kolejna pozycja (poz) została dodana i jeśli:

przypadek 1. TAK - to zwiększyć na niej ilość przez dodanie kolejnej/kolejnych partii rury, bo rozumiem, że te kawałki występują jako partie

przypadek 2. NIE - to dodawać kolejne pozycje (albo jedną pozycję) z kolejnymi kawałkami, które chcemy wcisnąć na WZ

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