Skocz do zawartości

[Sfera] Zmieniające się ceny, podczas wystawiana PZ do pozycji ZD

Polecane posty

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
×
×
  • Dodaj nową pozycję...