Skocz do zawartości

[Sfera] Wystawianie FS, na podstawie WZ

Polecane posty

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

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

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
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

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

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

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:

fstowz_01.thumb.JPG.7e8ca4167eea682a9d4be289b980c33d.JPG

Natomiast na WZ, wydaję tylko jedną pozycję, dlatego wartość jest mniejsza i wygląda w podsumowaniu tak:

fstowz_02.thumb.PNG.031f9c3e6e2585c7935fedbc3e180370.PNG

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

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

No to lecimy z postem, oj będzie długi :D

Osobiście, obstawiam coś w miejscu pobierania pozycji z WZ, bo tam się dzieją bzdury :P

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 :D

 

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

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
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

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

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 :D

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
  • 2 miesiące temu...

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

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.

  • Dziękuję 1
Link to postu
×
×
  • Dodaj nową pozycję...