Skocz do zawartości

Zapis nie powiódł się, dla zmiany ilości na PZ

Polecane posty

Mamy PZ na usługę, wystawiony na podstawie ZD. Z jakiś przyczyn magazynier wpisał za dużą ilość o jeden na jednej pozycji, która tam jest i chcieliśmy to poprawić, ale otrzymujemy komunikat nic w sumie nie mówiący: "Zapis nie powiódł się". Chcemy zmienić ilość z 31, na 30 (tyle też było na ZD). Po przywróceniu ilości na 31, dokument zapisuje się bez błędu. Gdzie szukać przyczyny? (oczywiście wiem, że możemy go skorygować). Dodam, że dokument jest tworzony Sferycznie, na podstawie ZD.

Link to postu

Hmm, jeśli rozumiemy przez to specyfikację partii, to wygląda na to, że tak - w sumie rozwiązanie jest głównie do asortymentów, a że działało bez problemu na usługach, to może coś z tego wynikać. Poniżej kod:

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
2 minuty temu, Przemysław Werner napisał:

Wychodzi na to, że problemem są właśnie specyfikacje partii na pozycjach usług i nie da się zmienić ilości na pozycjach usług, na których zrobiono rozbicie

W sensie poprawicie i moje rozwiązanie wywali błędem, czy poprawicie i mimo próby zapisu rozbicia, wejdzie prawidłowo do dokumentu.

3 minuty temu, Przemysław Werner napisał:

W wersji letniej InsERT nexo poprawimy tę kwestię, ale na teraz pozostaje przestać je tworzyć w swoim rozwiązaniu.

Albo poprawie Swoję rozwiązanie własne, że jak asortyment jest usługą, to nie rozbijać :)

Link to postu
1 godzinę temu, Radomił Ząbik napisał:

W sensie poprawicie i moje rozwiązanie wywali błędem, czy poprawicie i mimo próby zapisu rozbicia, wejdzie prawidłowo do dokumentu.

1 godzinę temu, Przemysław Werner napisał:

Poprawka nie spowoduje "wywalania" Pańskiego rozwiązania. Będzie ona obejmowała tylko niewykonalność zmiany ilości na usłudze ze specyfikacją partii.

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