Radomił Ząbik 308 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Próbuję ustawić cenę cennikową poprzez Sferę, korzystając z przykładu z waszego manuala, dokładnie tej części kodu: towarBO.Dane.CenaEwidencyjna = 12.3m; towarBO.Dane.WalutaCenyEwidencyjnej = walutyDD.PLN; foreach (PozycjaCennika poz in towarBO.Dane.PozycjeCennika) { poz.CenaKalkulacyjna = towarBO.Dane.CenaEwidencyjna; switch (poz.Cennik.PoziomCen.Nazwa) { case "Detaliczny": poz.CenaBrutto = 21.50m; break; case "Hurtowy": poz.CenaNetto = 15m; break; } } ... a u mnie, wygląda to tak (nie zwracać mocno uwagi na komentarze i WriteLine, bo próbowałem to debugować)... if(price!=0) { Console.WriteLine("Dodajemy cenę: "+price); towar.Dane.CenaEwidencyjna = 0m; if(cur=="PLN") towar.Dane.WalutaCenyEwidencyjnej = waluty.PLN; if(cur=="EUR") towar.Dane.WalutaCenyEwidencyjnej = waluty.EUR; if(cur=="USD") towar.Dane.WalutaCenyEwidencyjnej = waluty.USD; // cennik foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika) { Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price); poz.CenaKalkulacyjna = towar.Dane.CenaEwidencyjna; switch (poz.Cennik.PoziomCen.Nazwa) { case "Odtworzeniowa": poz.CenaNetto = price; //poz.Marza = 0m; //if(cur=="PLN") poz.WalutaCenyBazowej = waluty.PLN; //if(cur=="EUR") poz.WalutaCenyBazowej = waluty.EUR; //if(cur=="USD") poz.WalutaCenyBazowej = waluty.USD; break; default: Console.WriteLine("Jakaś inna cena istnieje?"); break; } } } Sęk w tym, że tak jakby nie widziało żadnych cenników, bo dodałem nawet specjalnie wiersz z defaultem i też nie jestem w stanie dodać ceny, do cennika "Odtworzeniowa". CenaEwidencyjna się rejestruje bez problemu. Czy powinienem ten cennik pierw jakoś zainicjować? Sam cennik ma status obowiązujący, więc niby jest ok. Link to postu
Jarek KοIaѕa 2 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Zacytowana część kodu dotyczy dodawania towaru i przy tej okazji ustawiania jego cen w cennikach głównych. Czy w Pańskim przypadku również jest to etap dodawania towaru (przed zapisem) czy jest to inny scenariusz? Jeśli jest to zmiana cen towarów, należy to wykonywac od strony cennika, czyli załadować cennik do edycji i zmieniać jego pozycje. Jak to robić optymalnie opisuje rozdział Model obiektowy - Pozycje uproszczone. Link to postu
Radomił Ząbik 308 Napisano 23 Września 2016 Autor Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Jest to ustawienie ceny podczas dodawania produktu właśnie. Po kolejnym porównaniu kodu, zauważyłem, że u was jest jeszcze dodatkowa linia, ale nie wiem jaki jest jej cel: int id = asortymenty.Dane.Wszystkie().Select(a => a.Id).Max() + 1; Może to jej brak, jest moim błędem, ale nie widzę nigdzie użycia tej zmiennej potem. Link to postu
Jarek KοIaѕa 2 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Zmienna ta służy do wyliczenia symbolu w kolejnej linii: towarBO.Dane.Symbol = "TOWAR" + id.ToString(); Wróćmy do problemu. Co znaczy "Sęk w tym, że tak jakby nie widziało żadnych cenników"? Czy kolekcja PozycjeCennika jest pusta? Link to postu
Radomił Ząbik 308 Napisano 23 Września 2016 Autor Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Na to wygląda, bo np. do pętli: Cytat foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika) ... dodałem Sobie wyświetlanie nazwy kolejnych cenników, które powinny się pojawiać: Cytat Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price); ... no i nie ma żadnego rezultatu, ba, nawet jakby pętla się nie odbywała. W porównaniu do waszego przykładu, korzystam z obiektu towar, a nie towarBO, tak informacyjnie. Link to postu
Jarek KοIaѕa 2 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę towarBO to nazwa zmiennej. Tak czy inaczej Pański towar powinien się wziąć z linii kodu podobnej do: using (IAsortyment towar = asortymenty.Utworz()) Wówczas towar.Dane.PozycjeCennika powinien mieć tyle elementów ile jest zdefiniowanych cenników głównych. Link to postu
Radomił Ząbik 308 Napisano 23 Września 2016 Autor Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Oczywiście, że tak się bierze. To może tak, podam cały kod dodawania towaru - jest on trochę długi, ale ma kilka zadań. Komentarz "cena" odpowiada za cenę. Dane są przesyłane z zewnątrz i trafiają do obiektu results, skąd są pobierane. Nie kopiowałem tylko towar.Zapisz(), bo mam tam odsyłanie danych zwrotnych. Cytat // pobranie danych do wystawiania IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>(); IJednostkiMiar jednostki = sfera.PodajObiektTypu<IJednostkiMiar>(); ICechyAsortymentu cechy = sfera.PodajObiektTypu<ICechyAsortymentu>(); JednostkaMiary sztuka = jednostki.DaneDomyslne.Sztuka; JednostkaMiary kg = jednostki.DaneDomyslne.Kilogram; JednostkaMiary metr = jednostki.DaneDomyslne.Metr; JednostkaMiary metrkw = jednostki.DaneDomyslne.MetrKwadratowy; IWalutyDaneDomyslne waluty = sfera.PodajObiektTypu<IWaluty>().DaneDomyslne; using (IAsortyment towar = asortymenty.Utworz()) { // utworzenie towaru towar.Dane.Symbol = results.index; // symbol towar.Dane.Nazwa = results.name; // nazwa towar.Dane.PKWiU = results.pkwiu; // PKWiU towar.Dane.Opis = results.comment; // Opis asortymentu int cat; cat = results.cat; towar.Dane.Grupa = sfera.PodajObiektTypu<IGrupyAsortymentu>().Dane.Wszystkie().Where(g => g.Id == cat).FirstOrDefault(); // grupa // cena decimal price; string cur; price = results.price; cur = results.cur; if(price!=0) { Console.WriteLine("Dodajemy cenę: "+price); towar.Dane.CenaEwidencyjna = 0.01m; if(cur=="PLN") towar.Dane.WalutaCenyEwidencyjnej = waluty.PLN; if(cur=="EUR") towar.Dane.WalutaCenyEwidencyjnej = waluty.EUR; if(cur=="USD") towar.Dane.WalutaCenyEwidencyjnej = waluty.USD; // cennik foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika) { Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price); poz.CenaKalkulacyjna = towar.Dane.CenaEwidencyjna; switch (poz.Cennik.PoziomCen.Nazwa) { case "Odtworzeniowa": poz.CenaNetto = price; //poz.Marza = 0m; //if(cur=="PLN") poz.WalutaCenyBazowej = waluty.PLN; //if(cur=="EUR") poz.WalutaCenyBazowej = waluty.EUR; //if(cur=="USD") poz.WalutaCenyBazowej = waluty.USD; break; default: Console.WriteLine("Jakaś inna cena istnieje?"); break; } } } // jednostki miary i ich konwersje string unit; string unit2; string unit3; unit = results.unit; unit2 = results.unit2; unit3 = results.unit3; var j1 = sztuka; switch (unit){ case "szt": j1 = sztuka; break; case "kg": j1 = kg; break; case "m": j1 = metr; break; case "m2": j1 = metrkw; break; } var j2 = sztuka; switch (unit2){ case "szt": j2 = sztuka; break; case "kg": j2 = kg; break; case "m": j2 = metr; break; case "m2": j2 = metrkw; break; } var j3 = sztuka; switch (unit3){ case "szt": j3 = sztuka; break; case "kg": j3 = kg; break; case "m": j3 = metr; break; case "m2": j3 = metrkw; break; } var u1 = towar.JednostkiMiary.DodajPodstawowaJednostkeMiary(j1); // podstawowa jednostka miary if(unit2!=null) { var u2 = towar.JednostkiMiary.DodajJednostkeMiary(j2,j1,Convert.ToDecimal(results.unit2calc),1); // pierwsza dodatkowa jednostka miary if(unit2=="kg") u1.Masa = Convert.ToDecimal(results.unit2calc); } if(unit3!=null) { var u3 = towar.JednostkiMiary.DodajJednostkeMiary(j3,j1,Convert.ToDecimal(results.unit3calc),1); // druga dodatkowa jednostka miary if(unit3=="kg") u1.Masa = Convert.ToDecimal(results.unit3calc); } // dopisanie if(unit=="kg") u1.Masa = 1m; // cechy int f; foreach(var feat in results.feat) { f = feat; towar.Dane.Cechy.Add(cechy.Dane.Wszystkie().Where(c => c.Id == f).FirstOrDefault()); } // POLA WŁASNE var towarPW = towar.Dane.PobierzEncjeZaawansowanychPolWlasnych(); // slownikowe string dictk; string dictv; string dictn; foreach(dynamic dict in results.dict) { dictk = dict.k; dictn = dict.n; dictv = dict.v; //Console.WriteLine(dict); var wartoscslownika = sfera.PodajObiektTypu<ISlownikiWlasne>()[dictk].Znajdz(dictv).Dane; towarPW.UstawWartoscPola(dictn,wartoscslownika); } // pozostałe string fieldn; string fieldt; decimal fielddec; string fieldstr; int fieldint; foreach(dynamic field in results.field) { fieldn = field.n; fieldt = field.t; if(fieldt=="decimal") { fielddec = field.v; towarPW.UstawWartoscPola(fieldn,fielddec); } if(fieldt=="int") { fieldint = field.v; towarPW.UstawWartoscPola(fieldn,fieldint); } if(fieldt=="text") { fieldstr = field.v; towarPW.UstawWartoscPola(fieldn,fieldstr); } } Link to postu
Jarek KοIaѕa 2 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Proszę przenieść ustawianie jednostek miary przed ustawianie cen. Pozycje cennika nie mogą zostać utworzone jeśli nie jest znana jednostka towaru. Link to postu
Radomił Ząbik 308 Napisano 23 Września 2016 Autor Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę No teraz działa Super. Mam tylko problem z walutami cenników. Rozumiem, że jeśli cennik jest PLN, to nie ma żadnej możliwości, ustawienia ceny produktu w EUR? Musiałbym zrobić osobne cenniki dla rodzaju waluty? Link to postu
Jarek KοIaѕa 2 Napisano 23 Września 2016 Udostępnij Napisano 23 Września 2016 w Ustawienie ceny cennikowej przez Sferę Tak. Link to postu
Polecane posty