Radomił Ząbik 306 Napisano 10 Sierpnia 2020 Udostępnij Napisano 10 Sierpnia 2020 w [Sfera] Zmieniające się ceny, podczas wystawiana PZ do pozycji ZD W ostatnich tygodniach, zwrócono mi uwagę, że w przypadku niektórych faktur w EURO, zmienia się cena przyjęcia PZ, względem tej oryginalnie ustawionej na ZD. Stanowi to momentami problem, gdyż materiał może być u nas użyty, zanim będziemy mieli do niego FZ, przez co mogą nam się trochę popsuć kalkulacje kosztów. Podczas prób powielenia problemu, doszedłem do wniosku, że wynika on z przekroczenia oryginalnie zamówionej ilości - można go nawet powielić w GUI, wpisując podczas przetwarzania ZD w PZ, większą niż oryginalnie zamówiona ilość. A aby nie było tak łatwo, to nie powiela mi się to na każdym dokumencie. Czy wynika to z jakiegoś ustawienia konfiguracji, jakiś uprawnień użytkownika, może ma coś wspólnego z walutą, albo parametrami klienta? Jakby co, dodatkowo kod mojego rozwiązania jest tutaj: Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodawanie PZki do wybranych pozycji ZD."); // przygotowanie danych IAsortymenty asortyment = sfera.PodajObiektTypu<IAsortymenty>(); IJednostkiMiar jednostkiMiary = sfera.PodajObiektTypu<IJednostkiMiar>(); IPodmioty podmioty = sfera.PodajObiektTypu<IPodmioty>(); IUzytkownicy uzytkownicy = sfera.PodajObiektTypu<IUzytkownicy>(); IStatusyDokumentowDaneDomyslne statusyDD = sfera.PodajObiektTypu<IStatusyDokumentow>().DaneDomyslne; Konfiguracja konfPz = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.PrzyjecieZewnetrzne; string stock; stock = results.stock; Magazyn mag = sfera.PodajObiektTypu<IMagazyny>().Dane.Wszystkie().Where(m => m.Symbol == stock).FirstOrDefault(); IPrzyjeciaZewnetrzne dokumentPrzyjecia = sfera.PodajObiektTypu<IPrzyjeciaZewnetrzne>(); IZamowieniaDoDostawcow zamowienia = sfera.PodajObiektTypu<IZamowieniaDoDostawcow>(); using (IPrzyjecieZewnetrzne pz = dokumentPrzyjecia.Utworz(konfPz)) { // ustawienie podstawowych paramatreów dokumentu ParametryGrupowaniaPodstawowe parametryGrupowania = new ParametryGrupowaniaPodstawowe(); parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji; parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego; pz.Dane.Magazyn = mag; pz.Dane.Uwagi = results.comment; pz.Dane.NumerZewnetrzny = results.number; // data dokumentu oryginalnego if(results.dateoriginal!=null) { string dateString = results.dateoriginal+" 12:00:00,000"; DateTime pzOrginalDate = DateTime.ParseExact(dateString,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture); pz.Dane.DataWydaniaWystawienia = pzOrginalDate; } // przetwarzanie pozycji IDokumentZRozbiciem dok = (IDokumentZRozbiciem)pz; var positions = new List<zdPos>(); foreach(var posadd in results.pos) { Console.WriteLine("Przygotowanie pozycji do pobrania: "+posadd.id); positions.Add(new zdPos(){ id=posadd.id, docid=posadd.docid, quantity=posadd.quantity }); } // wybranie zamówienia var docid = positions.First().docid; var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == docid).FirstOrDefault(); // znalezienie pozycji zamówień var idy = positions.Select(p => p.id).ToArray(); var pozycjeZrodlowe = zamowienia.Dane.Wszystkie().SelectMany(zd => zd.Pozycje).Where(p => idy.Contains(p.Id)).ToList(); var pozycjeNowe = pz.WypelnijNaPodstawieZD(pozycjeZrodlowe, zamowienie, parametryGrupowania); // ponowne odczytanie pozycji i uzupełnienie partii foreach(var posadd in results.pos) { int posdocid; int posid; decimal posq; posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity; //znalezienie pozycji Console.WriteLine("Szukanie pozycji do modyfikacji: "+posid); var poz = pozycjeNowe.Where(p => p.PozycjeRealizowane.Select(pre => pre.PozycjaRealizowanaId).Contains(posid)).Single(); // obsługa partii var r = dok.RozpocznijRozbicie(poz) as IRozbiciePozycjiPrzyjeciowe; IPozycjaRozbiciaPrzyjeciowa pr = r.Pozycje.FirstOrDefault(); //.First(); if(pr == null) { pr = r.DodajPozycje(); Console.WriteLine("Tworzę pozycję, bo pusta!"); } int batches = 1; foreach(var posbatch in posadd.batch) { decimal batchquantity; string batchcode; string batchhash; batchquantity = posbatch.quantity; batchcode = posbatch.code; batchhash = posbatch.hash; Console.WriteLine("Dopisane partii: "+batchcode); if(batches>1) pr = r.DodajPozycje(); pr.KodDostawy = batchcode; pr.Ilosc = batchquantity; pr.OpisDostawy = batchhash; batches++; } r.ZakonczRozbicie(); pz.Przelicz(); } // osoba wystawiająca string sign = results.sign; pz.Dane.OdebralaOsoba = uzytkownicy.Dane.Wszystkie().Where(p => p.Sygnatura == sign).FirstOrDefault().Osoba; // zapisanie PZ if(pz.Zapisz()) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodano PZkę: "+pz.Dane.NumerWewnetrzny.PelnaSygnatura); response = "{ \"number\":\""+pz.Dane.NumerWewnetrzny.PelnaSygnatura+"\", \"id\":\""+pz.Dane.Id+"\" }"; } else { Globals.errors = ""; pz.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - błąd przy dodawaniu PZ: "+Globals.errors); response = "{ \"error\":\""+Globals.errors+"\" }"; } } Link to postu
Mateusz Matuszewski 89 Napisano 11 Sierpnia 2020 Udostępnij Napisano 11 Sierpnia 2020 w [Sfera] Zmieniające się ceny, podczas wystawiana PZ do pozycji ZD Problem występuje, gdy cena na ZD nie była zmieniana ręcznie, wtedy przy realizacji do PZ i zmianie ilości cena zostanie przeliczona wg ustawień. Poprawimy to do wersji jesiennej, a na teraz może Pan na pozycjach PZ ustawić flagę CenaRecznieEdytowana na wartość true. 1 Link to postu
Polecane posty