Skocz do zawartości

Mateusz Matuszewski

InsERT
  • Liczba zawartości

    318
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    5

Ostatnia wygrana Mateusz Matuszewski w dniu 9 Lutego

Użytkownicy przyznają Mateusz Matuszewski punkty reputacji!

O Mateusz Matuszewski

Ostatnie wizyty

Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.

Mateusz Matuszewski's Achievements

  1. W combo wyświetlana jest wartość zwrócona przez metodę ToString() lub przez opisaną wcześniej funkcję opisu wartości, jeśli została ona ustawiona (można ją też podać w parametrze metody UtworzParametrWyboru). W domyślnej implementacji metody ToString() zwracana jest nazwa klasy, stąd obserwowane u Pana zachowanie.
  2. Nie ma konieczności ręcznego tworzenia obiektów typu Cena i PozycjaDokumentu. Pozycja zwrócona przez metodę Pozycje.Dodaj jest już uzupełniona wszystkimi niezbędnymi danymi. W Pana przypadku powinno wystarczyć ustawienie ceny netto przed rabatem, a reszta cen wyliczy się automatycznie. InsERT.Moria.ModelDanych.Asortyment asortyment = asortymenty.Dane.Wszystkie().Where(k => k.Id == asortymentId).Single(); if (asortyment != null) { var pozycjaProdukt = invoice.Pozycje.Dodaj( asortyment, Convert.ToDecimal(orderItem.quantity), asortyment.PodstawowaJednostkaMiaryAsortymentu); pozycjaProdukt.Cena.NettoPrzedRabatem = orderItem.price_netto(); }
  3. Zgadza się, wpisany koszt powinien być ujemny, chociaż nie powinno to mieć tutaj znaczenia. Tzn. ustawiał Pan wartość tuż przed zapisem dokumentu, czy po ustawieniu wartości wykonywał Pan jeszcze jakieś czynności na dokumencie, a przed koszt był inny niż wpisany?
  4. Domyślnie wyszukiwanie działa po polu Nazwa lub Tytul. Encja Podmiot nie ma takiego pola, więc wyszukiwanie tutaj po prostu nie działa - będziemy musieli tutaj dodać wyjątek, zapisuję do poprawy. Da się to jednak obejść ustalając własny opis wartości w combo, który będzie wyświetlany zamiast naszego wbudowanego wzorca: wyborTechnika.FunkcjaOpisuWartosci = p => p.NazwaSkrocona;
  5. Aktualnie okna te wymagają otworzonego jakiegoś innego okna pod spodem, aby się pod nie podpiąć, ale chyba nic nie stoi na przeszkodzie, aby można je było pokazać niezależnie. Zapisuję sugestię.
  6. Dziękujemy za zgłoszenie. Faktycznie w wersji 47 wkradł się błąd, poprawimy go do wersji 48. Obejściem na teraz jest wyciągnięcie KonfiguracjeDokumentow.Oferta_ID oraz kontekst.ZalogowanyUzytkownik.Dane.Id do zmiennych lokalnych, a następnie użycie ich w wyrażeniu: Guid ofertaId = KonfiguracjeDokumentow.Oferta_ID; return x => x.KonfiguracjaId == ofertaId; Guid uzytkownikId = kontekst.ZalogowanyUzytkownik.Dane.Id; return x => x.Podmiot == null || x.Podmiot.Opiekunowie.Any(y => y.UzytkownikId == uzytkownikId);
  7. Nie, plik nie jest odporny na nadpisywanie, będzie się zachowywał "po staremu".
  8. W raportach wbudowanych i informatorach sprawa jest trochę bardziej skomplikowana, więc aktualnie własne filtry pojawiają się tylko w niektórych z nich. Ostatecznie chcemy, aby filtry dało się dodawać do każdego wbudowanego raportu/informatora, ale nie jestem w stanie powiedzieć kiedy pojawi się taka możliwość. Co do raportów własnych - aktualnie nie planujemy.
  9. Dodam jeszcze, że w wersji 48 postaramy się ułatwić dodawanie podobnych filtrów 😉
  10. Obecne metody są przeznaczone do tworzenia podstawowych filtrów, a metoda DodajFiltrListyWyboru w założeniu ma przyjmować listę identyfikatorów, które zostaną użyte w wyrażeniu Contains. Tworzenie bardziej zaawansowanych filtrów, w których można by było definiować zachowanie pojedynczych opcji mamy zaplanowane na kolejne wersje. Jednak jak Pan słusznie zauważył, w tym przypadku można zrobić pewne obejście z wykorzystaniem powyższej metody. Nie jest to może najładniejsze rozwiązanie, ale powinno zadziałać Spójrzmy na początku na sygnaturę tej metody. Oczekuje ona podania w parametrach dwóch delegatów: Func<IEnumerable<WartoscDoWyboru<Guid>>> oraz Func<Guid[], Expression<Func<Asortyment, bool>>>. Zatem rozwiązaniem pierwszego problemu jest stworzenie listy obiektów typu WartoscDoWyboru<Guid> i nadanie im odpowiednich guidów w polu Wartosc. Rozwiązaniem drugiego problemu jest po prostu stworzenie delegata zwracającego powyższą listę opcji. Ostatni parametr metody odpowiada za wygenerowanie wyrażenia filtrującego na podstawie opcji wybranych w filtrze. Jeśli wyłączymy multiselekcję, to zawsze wybrana będzie tylko jedna wartość, więc będziemy mogli posłużyć się wtedy prostymi ifami. WartoscDoWyboru<Guid>[] opcje = new WartoscDoWyboru<Guid>[] { new WartoscDoWyboru<Guid> { Wartosc = new Guid("bf06c73c-bcc8-447a-80f8-ba365b3a3ba7"), Opis = "Tak" }, new WartoscDoWyboru<Guid> { Wartosc = new Guid("ba088d29-6279-4b93-8496-faf7402149b2"), Opis = "Nie" } }; var definicjaFiltra = rozszerzenie.DodajFiltrListyWyboru<Asortyment, Guid>( "Pachnący", () => opcje, v => { if (v[0] == opcje[0].Wartosc) // wybraną opcją jest "Tak" { return a => a.Nazwa.Contains("dezodorant") || a.Nazwa.Contains("perfum"); } else // wybraną opcją jest "Nie" { return a => !(a.Nazwa.Contains("dezodorant") || a.Nazwa.Contains("perfum")); } }); definicjaFiltra.WielokrotnyWyborDostepny = false; // wyłączamy multiselekcję
  11. Nie powtarzam problemu. Operacje sferyczne są rejestrowane trochę inaczej niż zwykłe pluginy - poprzez implementację interfejsu IGrupaOperacji, której nazwę potem trzeba wprowadzić w pliku .plugin (zamiast nazwy klasy samej operacji). Proszę o potwierdzenie czy operacja jest rejestrowana w taki sposób oraz czy plugin grupy operacji jest widoczny w okienku Ctrl+Shift+H w sekcji "Informacje o rozszerzeniach".
×
×
  • Dodaj nową pozycję...