Radomił Ząbik 308 Napisano 7 Sierpnia 2018 Udostępnij Napisano 7 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Czy jest jakaś metoda na szybkie wystawienie FS na podstawie WZ, w Sferze - 1 do 1, jedna WZ = jedna FS. Domyślam się, że zapewne jak w tworzeniu WZ na podstawie ZK, można pobierać pozycje, ale może można prościej. A może podczas wystawiania WZ, można automatycznie wykonać FS? Byłbym wdzięczny za podpowiedź, zanim zacznę szukać drogi na około Link to postu
Wojciech Szopiński 227 Napisano 7 Sierpnia 2018 Udostępnij Napisano 7 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Nie wiem gdzie jest haczyk w tym pytaniu, ale istnieje w sferze w interfejsie IDokumentSprzedazy metoda: ICollection<PozycjaDokumentu> WypelnijNaPodstawieWZ(IEnumerable<DokumentWZ> dokumentyWZ, DokumentWZ dokumentWZGlowny, ParametryGrupowaniaDS parametryGrupowania) Link to postu
Radomił Ząbik 308 Napisano 7 Sierpnia 2018 Autor Udostępnij Napisano 7 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ No właśnie pytanie jest, czy jest jakaś inna droga, bo tutaj, w przypadku w/w metody, to tak: - tworzymy FS - pobieramy parametry grupowania z WZ (już się boję, że coś przegapię) - uzupełniamy pozycje, w/w metodą Myślałem, że może jest coś takiego, że jak już tworzę FS, to od razu jakąś metodą zaczytuje mi komplet wszystkiego, tak jak w GUI Link to postu
Wojciech Szopiński 227 Napisano 7 Sierpnia 2018 Udostępnij Napisano 7 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ GUI robi to dokładnie tak samo. 1 Link to postu
Radomił Ząbik 308 Napisano 7 Sierpnia 2018 Autor Udostępnij Napisano 7 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ A jakaś podpowiedź, jak przenieść formy płatności? Znalazłem coś takiego parametryGrupowania.OdroczonaFormaPlatnosci , tylko nie wiem czy to dobry kierunek, czy raczej osobno po prostu uzupełnić je na podstawie ZK? Link to postu
Radomił Ząbik 308 Napisano 13 Sierpnia 2018 Autor Udostępnij Napisano 13 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Da radę jakąś wskazówkę uzyskać? Link to postu
Wojciech Szopiński 227 Napisano 14 Sierpnia 2018 Udostępnij Napisano 14 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ W obiekcie ParametryGrupowaniaDS są dwa parametry odnoszące się do sposobu przenoszenia przedpłat (PrzeniesPrzedplaty) oraz płatności natychmiastowych (PrzeniesNatychmiastowe) oraz tak jak Pan zauważył odroczona forma płatności, która może być ustawiona do wypełnienia płatności nierozliczonych. Link to postu
Radomił Ząbik 308 Napisano 14 Sierpnia 2018 Autor Udostępnij Napisano 14 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ 1 minutę temu, Wojciech Szopiński napisał: W obiekcie ParametryGrupowaniaDS są dwa parametry odnoszące się do sposobu przenoszenia przedpłat (PrzeniesPrzedplaty) oraz płatności natychmiastowych (PrzeniesNatychmiastowe) oraz tak jak Pan zauważył odroczona forma płatności, która może być ustawiona do wypełnienia płatności nierozliczonych. Tak, zauważyłem, i pierwsze dwa problemy ustawiłem bez problemu: parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz; parametryGrupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz; Niestety, właśnie z odroczonymi formami płatności nie mogę Sobie poradzić. Zaczytałem sobie zarówno ZK jak i WZ: var wz = wydania.Dane.Wszystkie().Where(p => p.Id == docid).FirstOrDefault(); var zk = wz.DokumentyRealizowane.Where(d => d.Symbol == "ZK").FirstOrDefault(); Zgodnie z dokumentacją mam: public FormaPlatnosci OdroczonaFormaPlatnosci { get; set; } Tylko, że z WZ i ZK nie mam pasujących obiektów. Chciałbym 1:1 przenieść te płatności, w sumie na logikę wydawało mi się, że powinno to być jak z przedpłatami, na zasadzie Przepisz. Link to postu
Radomił Ząbik 308 Napisano 16 Sierpnia 2018 Autor Udostępnij Napisano 16 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Próbowałem ominąć kwestię kopiowania płatności, po prostu dodając płatność domyślną dla klienta: ParametryGrupowaniaDS parametryGrupowania = new ParametryGrupowaniaDS(); parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji; parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego; parametryGrupowania.MiejsceDostawy = wz.MiejsceDostawy; parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca; parametryGrupowania.NabywcaSprzedawca = wz.NabywcaSprzedawcaWybrany; parametryGrupowania.OdbiorcaDostawca = wz.OdbiorcaWybrany; parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz; parametryGrupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz; foreach(var poz in wz.Pozycje) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - pozcyja dodana: "+poz.AsortymentAktualny.Nazwa); fs.WypelnijNaPodstawieWZ(wz.Pozycje.Where(p => p.Id == poz.Id),wz,parametryGrupowania); } //fs.WypelnijNaPodstawieWZ(wydania.Dane.Wszystkie().Where(p => p.Id == docid),wz,parametryGrupowania); fs.Przelicz(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - wartość dokumentu: "+fs.Dane.Wartosc.BruttoPoRabacie); fs.Platnosci.DodajPlatnoscOdroczona(zk.Podmiot.DomyslnaFormaKredytuKupieckiego,fs.Dane.Wartosc.BruttoPoRabacie); I ciągle dostawałem błąd: Cytat Suma płatności nie jest równa kwocie do zapłaty na dokumencie na polach: DokumentDS.PlatnosciDokumentow Kwota rozrachunku nie jest równa sumie kwot z pozycji harmonogramu rozrachunku na polach: Rozrachunek.Kwota No to coś jest nie tak, więc postanowiłem wylistować płatności: foreach(var platnosc in fs.Dane.PlatnosciDokumentow) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - płatność: "+platnosc.KwotaPlatnosci); } I dostałem taki wynik: Cytat 2018-08-16 11:59:30 - wartość dokumentu: 10049,10 2018-08-16 11:59:30 - płatność: 49468,02 2018-08-16 11:59:30 - płatność: 10049,10 I nie mam pojęcia skąd ta kwota pierwszej płatności i czy ten błąd przez który nie mogę dodać FS, to z jej powodu. Link to postu
Wojciech Szopiński 227 Napisano 20 Sierpnia 2018 Udostępnij Napisano 20 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Przepraszam, ale z tą płatnością odroczoną to trochę wprowadziłem Pana w błąd. Przenoszenie płatności działa tak, że w pierwszej kolejności przenoszone są przedpłaty oraz płatności natychmiastowe z WZek (również jako przedpłaty) o ile oczywiście są ustawione odpowiednie własności w parametrach grupowania. Jeśli na WZce były płatności odroczone i fakturujemy WZkę jeden do jednego (1 WZ = 1 FS) to płatność odroczona również zostanie przeniesiona. Odroczona forma płatności ma znaczenie jedynie przy fakturowaniu wiele WZ do jednej faktury. Błąd zapisu Pańskiego dokumentu na pewno wynika z tej płatności na kwotę 49468,02. Należałoby sprawdzić jej rodzaj (RodzajPlatnosci) i formę (FormaPlatnosci) oraz jakie były dodane płatności na źródłowym dokumencie WZ. Link to postu
Radomił Ząbik 308 Napisano 20 Sierpnia 2018 Autor Udostępnij Napisano 20 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Już chyba wiem skąd się bierze te 49k i jest to coraz bardziej zagmatwane. Otóż na ZK mam 6 pozycji, i podsumowanie wygląda tak: Natomiast na WZ, wydaję tylko jedną pozycję, dlatego wartość jest mniejsza i wygląda w podsumowaniu tak: Nie pobieram nigdzie danych z ZK do parametrów grupowania (chociaż pobieram je Sobie na początku do wiadomości). W każdym razie efekt logu jest taki: Cytat 2018-08-20 13:31:15 - dodawanie FS na podstawie WZ. 2018-08-20 13:31:16 - realizowane z ZK: ZK 18051191 2018-08-20 13:31:20 - pozcyja dodana: H35339 IT3981 1.4404 2018-08-20 13:31:23 - wartość dokumentu: 10049,10 2018-08-20 13:31:23 - płatność: Przelew - 60 dni - 2018-10-19 00:00:00 - 49468,02 2018-08-20 13:31:25 - błąd przy dodawaniu FAKTURY! Suma płatności nie jest równa kwocie do zapłaty na dokumencie na polach: DokumentDS.PlatnosciDokumentow Kwota rozrachunku nie jest równa sumie kwot z pozycji harmonogramu rozrachunku na polach: Rozrachunek.Kwota Czyli ta kwota płatności odroczonej, wzięła mi się z powiązanego ZK, do WZ. Przy testach na pewno ta kwota wchodzi w momencie pobrania pozycji i nawet po mocnym ograniczeniu parametrów grupowania, wchodzi mi kwota z ZK: // przeniesnie parametrów ParametryGrupowaniaDS parametryGrupowania = new ParametryGrupowaniaDS(); parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji; //parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego; parametryGrupowania.MiejsceDostawy = wz.MiejsceDostawy; parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca; parametryGrupowania.NabywcaSprzedawca = wz.NabywcaSprzedawcaWybrany; parametryGrupowania.OdbiorcaDostawca = wz.OdbiorcaWybrany; //parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz; //parametryGrupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz; Link to postu
Wojciech Szopiński 227 Napisano 28 Sierpnia 2018 Udostępnij Napisano 28 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ Próbowałem sobie powtórzyć taki przypadek jak u Pana i niestety nie udało mi się. Wystawiłem sobie (sferycznie) zamówienie z odroczoną płatnością na kilka pozycji. Zrealizowałem jedną z pozycji z ZK do WZki (również sferycznie) i nie dodałem do WZ żadnej płatności (tak jak na Pana drugim screenie). Następnie zrealizowałem WZkę do faktury sprzedaży z ustawieniem przenoszenia przedpłat, płatności natychmiastowych i ustawioną taką samą formą płatności odroczonej jak na ZK. Efekt jest taki, że na fakturze nie mam przeniesionych żadnych płatności (i to jest w porządku ponieważ na WZce nie było żadnych płatności więc nie było co przenosić). Potrzebowałbym chyba więcej szczegółów dotyczących Pana przypadku. Jak tworzone jest zamówienie (sfera/UI)? Czy dzieje się tak dla każdego zestawu ZK+WZ? Jak wygląda cały kod fakturujący WZkę? Czy klient, na którego jest wystawione zamówienie ma ustawioną domyślną formę płatności odroczonej? Link to postu
Radomił Ząbik 308 Napisano 28 Sierpnia 2018 Autor Udostępnij Napisano 28 Sierpnia 2018 w [Sfera] Wystawianie FS, na podstawie WZ No to lecimy z postem, oj będzie długi Osobiście, obstawiam coś w miejscu pobierania pozycji z WZ, bo tam się dzieją bzdury 2 godziny temu, Wojciech Szopiński napisał: Wystawiłem sobie (sferycznie) zamówienie z odroczoną płatnością na kilka pozycji. U nas podstawowe zamówienie czasem jest wystawiane Sferycznie, ale potem jest normalnie obrabiane w NEXO, więc to nie było konieczne 2 godziny temu, Wojciech Szopiński napisał: Zrealizowałem jedną z pozycji z ZK do WZki (również sferycznie) i nie dodałem do WZ żadnej płatności (tak jak na Pana drugim screenie). Więc u nas kod do realizacji pozycji ZK do WZ, wygląda tak jak poniżej. Skrypt jest trochę rozbudowany, ale samo dodawanie pozycji z ZK, odbywa się na podstawie ID pozycji, potem do tego dochodzą jeszcze konkretne wskazane partie. Jak widać, nie ma żadnych manipulacji przy płatnościach w parametrach grupowania. Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodawanie WZki do wybranych pozycji."); // przygotowanie danych IAsortymenty asortyment = sfera.PodajObiektTypu<IAsortymenty>(); IPodmioty podmioty = sfera.PodajObiektTypu<IPodmioty>(); IUzytkownicy uzytkownicy = sfera.PodajObiektTypu<IUzytkownicy>(); IStatusyDokumentowDaneDomyslne statusyDD = sfera.PodajObiektTypu<IStatusyDokumentow>().DaneDomyslne; Konfiguracja konfWz = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.WydanieZewnetrzne; string stock; stock = results.stock; Magazyn mag = sfera.PodajObiektTypu<IMagazyny>().Dane.Wszystkie().Where(m => m.Symbol == stock).FirstOrDefault(); IWydaniaZewnetrzne dokumentWydania = sfera.PodajObiektTypu<IWydaniaZewnetrzne>(); IZamowieniaOdKlientow zamowienia = sfera.PodajObiektTypu<IZamowieniaOdKlientow>(); // pobranie danych jakiegokolwiek ZK, aby ustawić parametry int docid; docid = results.docid; var zk = zamowienia.Dane.Wszystkie().Where(p => p.Id == docid).FirstOrDefault(); // znalezienie zamówienia using (IWydanieZewnetrzne wz = dokumentWydania.Utworz(konfWz)) { // 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; IAplikatorSkutkowMagazynowych aplikatorSM = (IAplikatorSkutkowMagazynowych)wz; wz.Dane.Magazyn = mag; wz.Dane.Uwagi = results.comment; wz.Dane.StatusDokumentu = statusyDD.Rozchod_WydanyTowar; IDokumentZRozbiciem dok = (IDokumentZRozbiciem)wz; // wypełnienie pozycji na podstawie ZK foreach(var posadd in results.pos) { int posdocid; int posid; decimal posq; int posbatch; string comment; posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity; posbatch = posadd.batch; comment = posadd.comment; //Console.WriteLine("Pobieranie pozycji: "+posid+" z ZK "+posdocid); 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 Console.WriteLine("Dodanie pozycji: "+posid+", "+poz.AsortymentAktualny.Nazwa); poz.Opis = comment; if(posadd.batch!=null) { poz.Ilosc = 0; // ustawiamy na 0, wyjdzie z rozbicia aplikatorSM.AplikujSkutkiMagazynowe(poz); // poprawka od Insertu na poprawne działanie skutku magazynu var r = dok.RozpocznijRozbicie(poz) as IRozbiciePozycjiRozchodowe; Console.WriteLine("Wprowadzenie partii: " + posbatch + " w ilości " + posq); r.Pozycje.Where(p => p.PartiaZrodlowa.Id == posbatch).Single().Ilosc = posq; foreach (var pozr in r.Pozycje.Where(p => p.PartiaZrodlowa.Id != posbatch && p.Ilosc > 0m)) pozr.Ilosc = 0m; //Console.WriteLine("Partia wprowadzona: " + posbatch); r.ZakonczRozbicie(); aplikatorSM.AplikujSkutkiMagazynowe(poz); // ponowna poprawka na poprawne rozbicie } else { poz.Ilosc = posq; // ustawiamy na 0, wyjdzie z rozbicia aplikatorSM.AplikujSkutkiMagazynowe(poz); } //Console.WriteLine("Ilość na pozycji: " + poz.Ilosc); wz.Przelicz(); } // wypełnienie pozycji na podstawie asortymentu foreach(var posadd in results.posextra) { int posid; decimal posq; posid = posadd.id; posq = posadd.quantity; Asortyment a = asortyment.Dane.Wszystkie().Where(t => t.Id == posid).First(); var poz = wz.Pozycje.Dodaj(a,posq, a.JednostkaSprzedazy); Console.WriteLine("Dodanie pozycji dodatkowej: "+poz.AsortymentAktualny.Nazwa); // jeśli jest opis pozycji if(posadd.desc!=null && posadd.desc!="") { string posd; posd = posadd.desc; poz.Opis = posd; } // jeśli jest cena pozycji if(posadd.price!=null) { decimal posp; posp = posadd.price; poz.Cena.NettoPoRabacie = posp; } wz.Przelicz(); } // poprawka na nabywcę if(wz.Dane.NabywcaSprzedawca==null) { wz.Dane.NabywcaSprzedawca = wz.Dane.Podmiot; wz.Dane.RolaInnegoPodmiotu = (byte)RolaInnegoPodmiotu.InnyNabywca; } // dopisanie transportu, jeśli jest - DO USUNIĘCIA!!!! decimal transport; transport = results.transport; if(transport!=0) { Asortyment a = asortyment.Dane.Wszystkie().Where(t => t.Symbol == "U Transport").First(); var poz = wz.Pozycje.Dodaj(a, 1m, a.JednostkaSprzedazy); poz.Cena.NettoPoRabacie = transport; } // ustawienie daty if(results.date!=null && results.date!="") { string dateString = results.date+" 07:00:00,000"; DateTime wzDate = DateTime.ParseExact(dateString,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture); wz.Dane.DataWydaniaWystawienia = wzDate; wz.Dane.DataWprowadzenia = wzDate; Console.WriteLine("Data wystawienia: " + wzDate); } // osoba wystawiająca string sign = results.sign; wz.Dane.WystawilaOsoba = uzytkownicy.Dane.Wszystkie().Where(p => p.Sygnatura == sign).FirstOrDefault().Osoba; // zapisywanie i eksportowanie wydruku if(wz.Zapisz()) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodano WZkę: "+wz.Dane.NumerWewnetrzny.PelnaSygnatura); response = "{ \"number\":\""+wz.Dane.NumerWewnetrzny.PelnaSygnatura+"\", \"id\":\""+wz.Dane.Id+"\" }"; // eksportowanie do PDF Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - eskportowanie pliku PDF: "+wz.Dane.NumerWewnetrzny.PelnaSygnatura); //..... } else { Globals.errors = ""; wz.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - błąd przy dodawaniu WZki: "+Globals.errors ); response = "{ \"error\":\""+Globals.errors+"\" }"; } } 2 godziny temu, Wojciech Szopiński napisał: Następnie zrealizowałem WZkę do faktury sprzedaży z ustawieniem przenoszenia przedpłat, płatności natychmiastowych i ustawioną taką samą formą płatności odroczonej jak na ZK. U mnie kod w całości poniżej. Jest on akurat rozbudowany o informacje debugujące. Jak widać też w kodzie, zmieniłem nawet podejście przy dodawaniu pozycji, jedna po drugiej, aby poszukać problem. Poniżej dodaję też to co nam się w efekcie wyświetliło. Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodawanie FS na podstawie WZ."); IUzytkownicy uzytkownicy = sfera.PodajObiektTypu<IUzytkownicy>(); IDokumentySprzedazy faktury = sfera.PodajObiektTypu<IDokumentySprzedazy>(); Konfiguracja konfFS = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.FakturaVAT; IWydaniaZewnetrzne wydania = sfera.PodajObiektTypu<IWydaniaZewnetrzne>(); int docid; docid = results.docid; var wz = wydania.Dane.Wszystkie().Where(p => p.Id == docid).FirstOrDefault(); var zk = wz.DokumentyRealizowane.Where(d => d.Symbol == "ZK").FirstOrDefault(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - realizowane z ZK: "+zk.NumerWewnetrzny.PelnaSygnatura); using (IDokumentSprzedazy fs = faktury.Utworz(konfFS)) { // przeniesnie parametrów ParametryGrupowaniaDS parametryGrupowania = new ParametryGrupowaniaDS(); parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji; parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego; parametryGrupowania.MiejsceDostawy = wz.MiejsceDostawy; parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca; parametryGrupowania.NabywcaSprzedawca = wz.NabywcaSprzedawcaWybrany; parametryGrupowania.OdbiorcaDostawca = wz.OdbiorcaWybrany; parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz; parametryGrupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz; // listujemy płatnośći DEBUG foreach(var platnosc in fs.Dane.PlatnosciDokumentow)Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - płatność: "+platnosc.FormaPlatnosci.Nazwa+" - "+platnosc.Termin+" - "+platnosc.KwotaPlatnosci); foreach(var poz in wz.Pozycje) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - pozcyja dodana: "+poz.AsortymentAktualny.Nazwa); fs.WypelnijNaPodstawieWZ(wz.Pozycje.Where(p => p.Id == poz.Id),wz,parametryGrupowania); // listujemy płatnośći DEBUG foreach(var platnosc in fs.Dane.PlatnosciDokumentow)Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - płatność: "+platnosc.FormaPlatnosci.Nazwa+" - "+platnosc.Termin+" - "+platnosc.KwotaPlatnosci); } //fs.WypelnijNaPodstawieWZ(wydania.Dane.Wszystkie().Where(p => p.Id == docid),wz,parametryGrupowania); fs.Przelicz(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - wartość dokumentu: "+fs.Dane.Wartosc.BruttoPoRabacie); //fs.Platnosci.DodajPlatnoscOdroczona(zk.Podmiot.DomyslnaFormaKredytuKupieckiego,fs.Dane.Wartosc.BruttoPoRabacie); // listujemy płatnośći DEBUG foreach(var platnosc in fs.Dane.PlatnosciDokumentow)Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - płatność: "+platnosc.FormaPlatnosci.Nazwa+" - "+platnosc.Termin+" - "+platnosc.KwotaPlatnosci); // osoba wystawiająca if(zk.NumerZewnetrzny!="" || zk.NumerZewnetrzny!=null) fs.Dane.WystawilaOsoba = zk.OdebralaOsoba; else fs.Dane.WystawilaOsoba = zk.WystawilaOsoba; // odpowiedzi zwrotne if(fs.Zapisz()) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - dodano fakturę: "+fs.Dane.NumerWewnetrzny.PelnaSygnatura); response = "{ \"number\":\""+fs.Dane.NumerWewnetrzny.PelnaSygnatura+"\", \"id\":\""+fs.Dane.Id+"\" }"; } else { Globals.errors = ""; fs.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - błąd przy dodawaniu FAKTURY!"+"\n"+Globals.errors); response = "{ \"error\":\""+Globals.errors+"\" }"; } } 2018-08-28 8:51:51 - dodawanie FS na podstawie WZ. 2018-08-28 8:51:52 - realizowane z ZK: ZK 18051191 2018-08-28 8:51:57 - pozcyja dodana: H35339 IT3981 1.4404 2018-08-28 8:52:04 - płatność: Przelew - 60 dni - 2018-10-27 00:00:00 - 49468,02 2018-08-28 8:52:04 - wartość dokumentu: 10049,10 2018-08-28 8:52:04 - płatność: Przelew - 60 dni - 2018-10-27 00:00:00 - 49468,02 2018-08-28 8:52:07 - błąd przy dodawaniu FAKTURY! Suma płatności nie jest równa kwocie do zapłaty na dokumencie na polach: DokumentDS.PlatnosciDokumentow Kwota rozrachunku nie jest równa sumie kwot z pozycji harmonogramu rozrachunku na polach: Rozrachunek.Kwota 3 godziny temu, Wojciech Szopiński napisał: Czy dzieje się tak dla każdego zestawu ZK+WZ? Czy dzieje się dokładnie tak samo, moim zdaniem tak, poniżej kilka przykładów innych WZ, z inną ilością pozycji, inni klienci. Tutaj, tak jakby szło dobrą drogą, ale to zapewne dlatego, że na ZK nie ma ustawionej żadnej płatności 2018-08-28 8:53:56 - dodawanie FS na podstawie WZ. 2018-08-28 8:53:56 - realizowane z ZK: ZK 18061169 2018-08-28 8:53:56 - pozcyja dodana: Kołnierz płaski DN200/219,1 PN16 EN typ 01B 1.4301 2018-08-28 8:53:57 - pozcyja dodana: Kołnierz płaski DN150/168,3 PN16 EN typ 01B 1.4301 2018-08-28 8:53:57 - wartość dokumentu: 436,65 2018-08-28 8:53:58 - błąd przy dodawaniu FAKTURY! Suma płatności nie jest równa kwocie do zapłaty na dokumencie na polach: DokumentDS.PlatnosciDokumentow Maksymalna liczba dni spóźnienia dla kontrahenta została przekroczona. na polach: DokumentDS.KwotaDoZaplaty Kwota rozrachunku nie jest równa sumie kwot z pozycji harmonogramu rozrachunku na polach: Rozrachunek.Kwota Kwota raty rozrachunku powinna być większa od 0. na polach: PozycjaHarmonogramuRozrachunku.Kwota Kwota VAT raty rozrachunku jest większa od kwoty raty rozrachunku na polach: PozycjaHarmonogramuRozrachunku.KwotaVAT Tu już na ZK jest płatność na 14 dni 1283,63 i tak kwota od ręki ląduje w FS z automatu. Oryginalnie na ZK, były dwie 3 pozycje, tutaj akurat są rozbite, więc na WZ są 4, ale na WZ został także dopisany transport, który nie jest powiązany z ZK, co ciekawe, on wywołał podwojenie płatności, coraz ciekawiej. 2018-08-28 8:57:20 - dodawanie FS na podstawie WZ. 2018-08-28 8:57:20 - realizowane z ZK: ZK 18061127 2018-08-28 8:57:20 - pozcyja dodana: Rura z/sz EN10217-7 114,3x2,0mm 1.4301 2018-08-28 8:57:21 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 1283,63 2018-08-28 8:57:21 - pozcyja dodana: Rura z/sz EN10217-7 114,3x4mm 1.4301 2018-08-28 8:57:21 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 1283,63 2018-08-28 8:57:21 - pozcyja dodana: Rura z/sz EN10217-7 114,3x4mm 1.4301 2018-08-28 8:57:21 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 1283,63 2018-08-28 8:57:21 - pozcyja dodana: Kolano z/sz 114,3x2mm 1,5D 90° 1.4404 2018-08-28 8:57:22 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 1283,63 2018-08-28 8:57:22 - pozcyja dodana: Transport 2018-08-28 8:57:22 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 2567,26 2018-08-28 8:57:22 - wartość dokumentu: 1436,64 2018-08-28 8:57:22 - płatność: Przelew - 14 dni - 2018-09-11 00:00:00 - 2567,26 2018-08-28 8:57:22 - błąd przy dodawaniu FAKTURY! Suma płatności nie jest równa kwocie do zapłaty na dokumencie na polach: DokumentDS.PlatnosciDokumentow Maksymalna liczba dni spóźnienia dla kontrahenta została przekroczona. na polach: DokumentDS.KwotaDoZaplaty Kwota rozrachunku nie jest równa sumie kwot z pozycji harmonogramu rozrachunku na polach: Rozrachunek.Kwota 3 godziny temu, Wojciech Szopiński napisał: Czy klient, na którego jest wystawione zamówienie ma ustawioną domyślną formę płatności odroczonej? Tak, każdy z tych klientów ma ustawioną formę płatności odroczonej. Link to postu
Wojciech Szopiński 227 Napisano 3 Września 2018 Udostępnij Napisano 3 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Jedyny przypadek, w którym udało mi się takie zachowanie programu powtórzyć to sytuacja gdy w konfiguracji typu dokumentu ZK jest włączona obsługa płatności (zakładka "Ceny i przeliczenie dokumentu", sekcja "Płatności"). Czy u Państwa jest takie ustawienie włączone? Link to postu
Radomił Ząbik 308 Napisano 3 Września 2018 Autor Udostępnij Napisano 3 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Tak, bo tego używamy: Link to postu
Wojciech Szopiński 227 Napisano 3 Września 2018 Udostępnij Napisano 3 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ W takim razie potwierdzam występowanie problemu. Na ten moment mogę jedynie doradzić samodzielne zmodyfikowanie płatności przed zapisaniem faktury. Zapisuję ten problem do poprawy w jednej z kolejnych wersji. Link to postu
Radomił Ząbik 308 Napisano 4 Września 2018 Autor Udostępnij Napisano 4 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Jako, że te płatności to się często mi dublują, to wolałbym je całkowicie usunąć i następnie dodać jedną na całą kwotę dokumentu, na podstawie ustawionej na kliencie. Czy mógłbym prosić o podpowiedź jak usunąć płatność? Nie znalazłem metody Usun dla IPlatnosciNaDokumencie, dlatego byłbym wdzięczny za podpowiedź, jak usunąć płatności prawidłowo. Link to postu
Wojciech Szopiński 227 Napisano 7 Września 2018 Udostępnij Napisano 7 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Zwykłe Remove z kolekcji PlatnosciDokumentu powinno wystarczyć. Link to postu
Radomił Ząbik 308 Napisano 7 Września 2018 Autor Udostępnij Napisano 7 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ 33 minuty temu, Wojciech Szopiński napisał: Zwykłe Remove z kolekcji PlatnosciDokumentu powinno wystarczyć. No właśnie nie potrafię Sobie z tym poradzić w ten sposób i w waszej dokumentacji też nie dostałem odpowiedzi. Wychodzi mi błąd. Cytat Zmodyfikowano kolekcję. Nie można wykonać operacji wyliczania. Link to postu
Wojciech Szopiński 227 Napisano 7 Września 2018 Udostępnij Napisano 7 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Może robi Pan to w ten sposób: foreach (PlatnoscDokumentu platnosc in dokument.PlatnosciDokumentow) dokument.PlatnosciDokumentow.Remove(platnosc); ? Jeśli tak to trzeba to zmienić np. tak: foreach (PlatnoscDokumentu platnosc in dokument.PlatnosciDokumentow.ToArray()) dokument.PlatnosciDokumentow.Remove(platnosc); Ponieważ po pierwszym wykonaniu pętli zmienia się rozmiar kolekcji i operator foreach jak wskazuje wyjątek nie potrafi przejść do kolejnego elementu. Dopisek ToArray() spowoduje, że pętla będzie działała na osobnej tablicy złożonej z elementów kolekcji PlatnosciDokumentow. Jeśli to nie to, to proszę pokazać kawałek kodu. Link to postu
Radomił Ząbik 308 Napisano 7 Września 2018 Autor Udostępnij Napisano 7 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ I tu był pies pogrzebany! Niestety nie jestem specjalistą C#, bo 99% czasu programuje w PHP, więc inaczej rozumiem pewne kwestie, ale ważne, że się udało i powstała FS Można liczyć na info o usunięciu problemu bazowego, abym wtedy poprawił w przyszłości kod - nie lubię zostawiać takich łatanych rozwiązań na stałe. Link to postu
Wojciech Szopiński 227 Napisano 10 Września 2018 Udostępnij Napisano 10 Września 2018 w [Sfera] Wystawianie FS, na podstawie WZ Oczywiście, dam znać w tym wątku. Link to postu
Radomił Ząbik 308 Napisano 20 Listopada 2018 Autor Udostępnij Napisano 20 Listopada 2018 w [Sfera] Wystawianie FS, na podstawie WZ Pozwolę Sobie kontynuować w tym wątku, ponieważ jest tutaj już większość kodu, który rozbudowuje właśnie o dodatkową funkcjonalność - zmiana Nabywcy, na fakturze. Mamy takie przypadki, że WZ są wystawiane na innego klienta, a potem przy wystawianiu do nich FS, zmieniamy nabywcę i płatnika. Zastosowałem poniższy kod, który działa dla płatnika, ale nabywcy nie chce zmienić - jakieś sugestie, co jeszcze zrobić?: fs.Dane.NabywcaSprzedawca = podmiot; fs.Dane.NabywcaSprzedawcaWybrany = podmiot.Historia.FirstOrDefault(); // próbowałem to, ale to też nic nie daje :) fs.Dane.Platnik = podmiot.Historia.FirstOrDefault(); Link to postu
Wojciech Szopiński 227 Napisano 21 Listopada 2018 Udostępnij Napisano 21 Listopada 2018 w [Sfera] Wystawianie FS, na podstawie WZ Na każdym typie dokumentu mamy jeden podmiot, który jest tzw podmiotem głównym. Dla dokumentu sprzedaży jest to nabywca, dla zamówienia od klienta - zamawiający, dla wydania - odbiorca itp. Podmiot główny ustawia się zawsze poprzez pola Podmiot / PodmiotWybrany. Więc w Pana przypadku należy skorzystać właśnie z tych pól. Pola z podmiotami o specyficznych nazwach typu NabywcaSprzedawca, Dostawca, Odbiorca zawsze zawierają informacje o dodatkowych podmiotach na dokumencie. Na dokumencie sprzedaży można ustawić innego odbiorcę (Odbiorca / OdbiorcaWybrany) lub dostawcę (Dostawca / DostawcaWybrany). Na innych typach dokumentów zbiór "używalnych" pól z podmiotami będzie inny. 1 Link to postu
Radomił Ząbik 308 Napisano 21 Listopada 2018 Autor Udostępnij Napisano 21 Listopada 2018 w [Sfera] Wystawianie FS, na podstawie WZ Najciemniej pod latarnią Działa. 1 Link to postu
Polecane posty