Skocz do zawartości

[Sfera] Wystawianie FS, na podstawie WZ

Polecane posty

Dobra, jeszcze jedna sprawa, która nie wyszła na bazie testowej. Otóż jednym, z magicznych celów, jaki ma wystawiania FS, do wielu WZ, jest wystawienie faktury w EURO z podanymi przez mnie cenami. Pewnie było by to banalne, gdyby nie fakt, że jest ona wystawiania na ponad 100 pozycji, z wielu WZ, a WZ mają różne waluty. Na testach, przy 47 pozycjach, wszystko szło ok, ale teraz na produkcyjnej, przy 147 pozycjach, nastąpiło pomnożenie przekazanej przez mnie wartości w EURO, przez jego kurs. Prawdopodobnie wynika to z którejś WZ. Da się temu jakoś zapobiegać? Kod poniżej:

  // przeniesnie parametrów z pojedyńczej WZ
  ParametryGrupowaniaDS parametryGrupowania = new ParametryGrupowaniaDS();
  parametryGrupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji;
  parametryGrupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.Brak;
  parametryGrupowania.MiejsceDostawy = wz.MiejsceDostawy;
  parametryGrupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Nabywca;
  parametryGrupowania.NabywcaSprzedawca = wz.NabywcaSprzedawcaWybrany;
  parametryGrupowania.OdbiorcaDostawca = wz.OdbiorcaWybrany;
  parametryGrupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz;
  parametryGrupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz;

  
  // ustawiamy cenę w EURO
  if(results.currency=="PLN") fs.Dokument.Waluta = walutyDD.PLN;
  if(results.currency=="EUR") fs.Dokument.Waluta = walutyDD.EUR;
  if(results.currency=="USD") fs.Dokument.Waluta = walutyDD.USD;
  
  // pobieramy pozycje z WZ
  foreach(var posadd in results.pos)
    {
  	int posid; int posdoc; decimal posq; decimal posprice; string comment;
  	posid = posadd.id; posdoc = posadd.docid; posq = posadd.quantity; posprice = posadd.price; comment = posadd.comment;
    var wydanie = wydania.Dane.Wszystkie().Where(w => w.Id == posdoc).Single();
    Console.WriteLine("Pobieranie pozycji: "+posid+" z "+wydanie.NumerWewnetrzny.PelnaSygnatura);
    //var poz = wydanie.Pozycje.Where(p => p.Id == posid).SingleOrDefault();
    var poz = fs.WypelnijNaPodstawieWZ(wydanie.Pozycje.Where(p => p.Id == posid),wz,parametryGrupowania).Single(); 
    Console.WriteLine("Dopisano: "+poz.AsortymentAktualny.Nazwa);
  
    poz.Ilosc = posq;
    poz.Cena.NettoPrzedRabatem = posprice;
    poz.Cena.NettoPoRabacie = posprice;
    if(comment!=null && comment!="") poz.Opis = comment;
    }

  // zmieniamy odbiorcę faktury
  fs.Dane.Podmiot = podmiot;
  fs.Dane.Platnik = podmiot.Historia.FirstOrDefault();
  
  // ustawiamy cenę w EURO
  if(results.currency=="PLN") fs.Dokument.Waluta = walutyDD.PLN;
  if(results.currency=="EUR") fs.Dokument.Waluta = walutyDD.EUR;
  if(results.currency=="USD") fs.Dokument.Waluta = walutyDD.USD;

 

Link to postu

Czy wartość w zmiennej posprice przychodzi w Pana aplikacji zawsze w walucie ostatecznej dokumentu (czyli tej, która jest ustawiana na końcu) ? Próbowałem sobie powtórzyć takie zachowanie w prostszym scenariuszu (dwie WZki z różnymi walutami EUR i PLN) i za każdym razem cena na pozycjach dokumentu sprzedaży jest taka jak ustawiana ręcznie w linii:

poz.Cena.NettoPrzedRabatem = posprice;

(bo jak rozumiem - tak ma być). Problematyczne tutaj może być to, że każde wywołanie "WypelnijNaPodstawieWZ" ustala walutę dokumentu sprzedaży na podstawie podanej kolekcji dokumentów WZ (jeśli waluty dokumentów są takie same to ustawiana jest wspólna waluta, w przeciwnym wypadku ustawiana jest waluta PLN). Więc w Pana przypadku przy ponad 100 wywołaniach ta waluta zmienia się zapewne bardzo często i być może w którymś przypadku występuje jakieś nadmiarowe przeliczenie.

Czy jest Pan w stanie stwierdzić, na której pozycji WZki wystąpił ten problem? Można byłoby wtedy spróbować zrealizować osobno tę jedną WZkę w celu wykluczenia problemu z tym jednym dokumentem.

Czy kursy na dokumentach są zawsze pobierane z tabel kursów walut czy może są wprowadzane ręcznie (ja testowałem na kursach pobieranych z tabel) ?

Link to postu
2 godziny temu, Wojciech Szopiński napisał:

Czy wartość w zmiennej posprice przychodzi w Pana aplikacji zawsze w walucie ostatecznej dokumentu (czyli tej, która jest ustawiana na końcu) ?

Od razu wysyłam już w EURO, czyli w takiej jaka ma być.

2 godziny temu, Wojciech Szopiński napisał:

Próbowałem sobie powtórzyć takie zachowanie w prostszym scenariuszu (dwie WZki z różnymi walutami EUR i PLN) i za każdym razem cena na pozycjach dokumentu sprzedaży jest taka jak ustawiana ręcznie w linii:

Sęk w tym, że mi także wychodziło dobrze, na 5 WZ, z 47 pozycjami, na kopii bazy developerskiej. W głównej bazie miałem już więcej WZ i 147 pozycji i podejrzewam, że to któraś dokładnie jedna powoduje problem - zrobię dzisiaj odświeżenie i spróbuje ją namierzyć :)

2 godziny temu, Wojciech Szopiński napisał:

(bo jak rozumiem - tak ma być). Problematyczne tutaj może być to, że każde wywołanie "WypelnijNaPodstawieWZ" ustala walutę dokumentu sprzedaży na podstawie podanej kolekcji dokumentów WZ (jeśli waluty dokumentów są takie same to ustawiana jest wspólna waluta, w przeciwnym wypadku ustawiana jest waluta PLN). Więc w Pana przypadku przy ponad 100 wywołaniach ta waluta zmienia się zapewne bardzo często i być może w którymś przypadku występuje jakieś nadmiarowe przeliczenie.

Yhym, tego się właśnie obawiałem, a w parametrach grupowania, nie znalazłem niczego co mogło by dotyczyć nie przenoszenia waluty/ceny - myślałem, że macie Coś tam ukryte i się pochwalicie :D

2 godziny temu, Wojciech Szopiński napisał:

Czy jest Pan w stanie stwierdzić, na której pozycji WZki wystąpił ten problem? Można byłoby wtedy spróbować zrealizować osobno tę jedną WZkę w celu wykluczenia problemu z tym jednym dokumentem.

Czy kursy na dokumentach są zawsze pobierane z tabel kursów walut czy może są wprowadzane ręcznie (ja testowałem na kursach pobieranych z tabel) ?

Dobra, to biorę się za kopię i szukanie, to będę mógł coś wtedy dopowiedzieć w temacie.

Link to postu

Dobra i w wyborze podmiotu cały problem zapewne, bo powtórzyłem go na GUI - zmiana podmiotu, zaczytuje jego walutę, tylko że w GUI jak zmienię na EURO po tym, to przelicza mi ceny z powrotem. To teraz pytanie - czy da się jakoś powstrzymać pobranie waluty z klienta, przy jego zmianie?

Link to postu
  • 2 tygodnie później...

Nie można tego zablokować. Aby zmienić walutę razem z przeliczeniem cen można wykorzystać metodę Przewalutuj z interfejsu IDokumentWalutowy np. tak:

Waluta eur = waluty.Dane.Wszystkie().Where(w => w.Symbol == "EUR").FirstOrDefault();
using (IWydanieZewnetrzne wz = wydania.Utworz(wydanieKonfiguracja))
{
	// ...
	(wz as IDokumentWalutowy).Przewalutuj(eur, null, null, false, null, null);
}

Z tej metody korzysta również UI przy zmianie waluty dlatego też ceny są wtedy odpowiednio przeliczane. Dla parametrów linii kursów, pozycji tabeli kursów walut itp można podać null-e, wtedy kursy zostaną pobrane wg konfiguracji.

Edytowane przez Wojciech Szopiński
Link to postu
×
×
  • Dodaj nową pozycję...