Skocz do zawartości

Radomił Ząbik

Użytkownik
  • Liczba zawartości

    2 552
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    44

Zawartość dodana przez Radomił Ząbik

  1. Większość rzeczy obecnie będących w Laboratorium, trafi pod skrzydła "Plusów":
  2. Formę opłaty per jeden dokument, znalazłem tylko u jednego "znaczącego" producenta, znacząco tańsi też nie jesteście, w innych przypadkach jest ewentualna dodatkowa subskrypcja, a ci na modelu subskrypcyjnym i tak mają to w cenie. To już raczej kwestia jak to zaprojektowaliście. A za to się płaci w ramach abonamentu NEXO.
  3. Przygotowałem aplikację, która importuje urządzenia serwisowe do Subiekta, za pomocą Sfery. Przy okazji, odbywają się też, odpowiednio dodawanie zleceń serwisowych, według określonych reguł, ale to już za pomocą Sfery zdarzeniowej. No i po około 600 wierszach, wywala mi błędem pamięci. Stosuje dodawanie w "using", przejrzałem zmienne z obu rozwiązań, czy gdzieś nie dodać Dispose, ale wyglądało ok. Podłączyłem wiec Debugowanie, zrobiłem Sobie dwie migawki i z analizy różnicy, wygląda, że sporą część tej pamięci, pochłonęły różne elementy Reguł Automatyzacji. Te wynikają, z ustawień użytkownika, i Swoje zapewne robią, ale pytanie, czy ja mogę jakoś odpowiednio wpłynąć na to, aby i one pamięć zwalniały? Różnica w pamięci z Debugera: Kod sfery zdarzeniowej, dodający Zlecenie: Debug.WriteLine("Tworzymy nowe zlecenie serwisowe - Po zapisaniu urządzenia."); IScenariuszeObslugiKlienta scenariusze = kontekst.Uchwyt.PodajObiektTypu<IScenariuszeObslugiKlienta>(); IKategorieZlecenSerwisowych kategorie = kontekst.Uchwyt.PodajObiektTypu<IKategorieZlecenSerwisowych>(); IRodzajeZlecenSerwisowych rodzaje = kontekst.Uchwyt.PodajObiektTypu<IRodzajeZlecenSerwisowych>(); IAsortymenty asortymenty = kontekst.Uchwyt.PodajObiektTypu<IAsortymenty>(); // tworzenie nowego zlecenia serwisowego using (IZlecenieSerwisowe zlecenie = zlecenia.Utworz()) { zlecenie.Dane.Podmiot = urzadzenieZapisane.Dane.Wlasciciel; zlecenie.Dane.ScenariuszObslugiKlienta = scenariusze.Znajdz(s => s.Nazwa == k.Value.DocelowyScenariusz).Dane; zlecenie.Dane.KategoriaZleceniaSerwisowego = kategorie.Znajdz(s => s.Nazwa == k.Value.DocelowyKategoria).Dane; zlecenie.Dane.RodzajZleceniaSerwisowego = rodzaje.Znajdz(s => s.Nazwa == k.Value.DocelowyRodzaj).Dane; zlecenie.Dane.SerwisowaneUrzadzenie = urzadzenieZapisane.Dane; // określenie daty planowanej nowego zleceniaa DateTime dataArchiwalnegoZlecenia = dataArchiwalnaUrzadzenia.Value; DateTime planowanaData = dataArchiwalnegoZlecenia.AddMonths(k.Value.MiesiecyOdZakonczenia); zlecenie.Dane.DataRozpoczecia = planowanaData; zlecenie.Dane.PlanowanaDataZakonczenia = planowanaData; Debug.WriteLine("Data zaplanowana: " + zlecenie.Dane.PlanowanaDataZakonczenia); //zlecenie.Dane.DaneOpisoweZleceniaSerwisowego.DiagnozaProblemu = "Scenariusz: " + k.Value.DocelowyScenariusz; if (!zlecenie.Zapisz()) { Debug.WriteLine("Nie można było zapisać zlecenia."); } else { Debug.WriteLine("Zapisanie identyfikatorów nowego zlecenia."); using (DbCommand addcommand = connection.CreateCommand()) { string zapytanieDodające = "INSERT INTO ModelDanychContainer.NOW_ZleceniaSerwisoweUtworzoneArchiwalne " + "(ZlecenieRealizujace_Id,Urzadzenie_Id,DocelowyScenariusz,DocelowyKategoria,DocelowyRodzaj) " + "VALUES(" + zlecenie.Dane.Id + "," + urzadzenieZapisane.Dane.Id + ",'" + k.Value.DocelowyScenariusz + "','" + k.Value.DocelowyKategoria + "','" + k.Value.DocelowyRodzaj + "');"; addcommand.CommandText = zapytanieDodające; connection.Open(); addcommand.ExecuteNonQuery(); connection.Close(); } } } Kodu dodawania urządzenia już nie wrzucam, bo nie obstawiam, że to z jego winy, tam zresztą jest using na Utworz i pola własne, no może jest ich 30 razem, ale to raczej nie to. Ewentualnie jak inaczej szukać co pochłania tą pamięć, będę wdzięczny za podpowiedź, bo tutaj moje zasoby wiedzy, już wymiękają.
  4. Temat wraca jak bumerang, raz na jakiś czas, ale rzeczywiście każdy to nazywa inaczej, więc nawet mi to trudno znaleźć na Forum. Potrzeba archiwizacji danych starszych niź X lat, ze względu na mocno przybierające na wadze bazy NEXO, na pewno jest. Aczkolwiek, 20 letni Subiekt GT, nie otrzymał takiej funkcjonalności, więc na NEXO też już nie liczę. Pozostaje kombinacja z nową bazą i próbą przeniesienia tam kluczowych danych lub bezkresne rozwijanie możliwości serwera, aby to jakoś działało.
  5. Rozumiem. Czyli muszę wstrzymać póki co przygotowywanie rozwiązań na podstawie tych rozszerzonych modułów, póki nie będzie jakiegoś pewnego cennika, a klient w pełni świadomy się na to zdecyduje. Trochę szkoda, bo zawsze tworzenie rozwiązań dla klientów, pozwalało lepiej przestudiować i wskazać też wam problemy i wpływać na rozwój w trakcie, a nie po fakcie. Osobiście, mimo iż wiem, że praca programisty nie jest darmowa, to średnio mi się podoba, że Insert też idzie drogą, abonamentu na wszystko, ale tutaj już wina nas, klientów, którzy się na to godzą.
  6. Wprowadzając zmianę w godzinach przepracowanych, tutaj opis w teorii oraz informacje jakich elementów użyć: A w Sferze, to już w zależności od potrzeb, np. dzienne wprowadza się tak: zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Godziny; var dzienne = new DzienSzczegoly(); zapisWECP.Dane.Godziny.DzienSzczegoly.Add(dzienne); dzienne.Poczatek = TimeSpan.Parse("11:30:00").Ticks; dzienne.Koniec = TimeSpan.Parse("14:00:00").Ticks; dzienne.TypOkresu = (byte)TypOkresuGodzinSzczegolowych.PierwszyDzien; dzienne.TypGodzin = 0;
  7. No uzupełnia Pan wszystko, ale nie zapisuje Brakuje: zapisWECP.Zapisz(); Oczywiście, proszę jeszcze sprawdzić kwestię zwracania błędów podczas zapisu, jest w dokumentacji
  8. Dodaliście ostatnimi czasy, wiele fajnych funkcjonalności, jak w temacie, aczkolwiek, część z nich jest już w Laboratorium już od dłuższego czasu. Z czym wiąże się tak długie "trzymanie" ich tam? Czy wiadomo już, czy to będą funkcjonalności w wersji PRO, czy może jakieś dodatkowe opłaty, jak dla automatyzacji? Zaraz wchodzą jakieś Inspunkty. Jest jakaś spora rewolucja w cenniku NEXO i trochę nie wiadomo, czy funkcje, które dzisiaj się przygotowuje, lada dzień nie będą opłacalne ze względu na koszty waszych licencji na nie. Słyszałem też plotki o powrocie plusów, normalnie jak zmora z czasów GT. Nie chciałbym wprowadzać klientów na minę, w postaci dodania im fajnej funkcjonalności dzisiaj, która potem nie będzie działać, ze względu na zbyt wysoki koszt licencji, a programista kasę wziął i to on zostanie uznany za naciągacza.
  9. Czy "zewnętrzny serwer SQL", oznacza jakiś hosting zewnętrzny? Jeśli tak, to oni pewnie robią kopie zapasowe codziennie w nocy, z zapasem na kilka dni, więc odpowiednio szybki kontakt z nimi powinien pomóc. Jeśli tego nie robią, to warto by zacząć
  10. W dokumentacji bazy danych, ma Pan zawsze relacje opisanie. Dokumenty i NaglowkiEncji, nie wiążą się wzajemnie przez Id, gdyż NaglowkiEncji, obsługują nie tylko Dokumenty. Więc sprawdzając dokumentację: Interesuje nas kolumna Dokument_Naglowek_Id, z tabeli Dokumenty, i łączy się z Id, w tablicy NaglowkiEncji. Przykładowe zapytanie, które zwróci datę utworzenia dokumentu, wygląda więc tak: SELECT dk.Id [Id] ,dk.NumerWewnetrzny_PelnaSygnatura [Numer] ,ne.Utworzono FROM ModelDanychContainer.Dokumenty AS dk INNER JOIN ModelDanychContainer.NaglowkiEncji AS ne ON ne.Id=dk.Dokument_Naglowek_Id
  11. Zdarzenia śladu rewizyjnego, owszem przechowują te dane, ale nie traktowałbym ich jako dobre miejsce - są kasowalne, niektórzy mogą w ogóle nie mieć ich włączonych. NaglowkiEncji, są zawsze, razem z dokumentem, nie znikną z bazy Po za tym, ten kod, pokaże wszystkie zdarzenia, czyli dodawania, edycje, pokazanie nawet.
  12. NagłowkiEncji Polecam pobrać SDK, tam jest dokumentacja bazy danych, z odpowiednimi linkami, łatwo znaleźć
  13. No w sensie, potwierdzam, że szukałem, tłumaczę się Podejrzewałem, przez chwilę, że może być osobna metoda, bo w logice programu, zlecenie serwisowe, jest łączone inaczej niż dokumentu, więc może przez to, podłączylibyście to do innej funkcji, od tyle. Ale jak będzie podłączone do bazowej, to lepiej
  14. Nie działa mi wywołanie metody PoWypelnieniuNaPodstawieInnegoDokumentu, w przypadku gdy po zakończeniu zlecenia serwisowego sukcesem, wybieram wystawienie dokumentu sprzedaży. Podejrzewam, że ten typ realizacji został pominięty. Nie widzę też osobnej metody, jak to jest w przypadku ZamowienieWysylkowe. Póki co, Sobie to jakoś obchodzę sprawdzając dodanie płatności, ale to mega brzydkie rozwiązanie.
  15. Niestety, po testach, z tym usuwaniem zdjęć nie jest tak kolorowo. Działanie na ogólnej bibliotece jest ok, jeśli w tym czasie nie edytujemy asortymentu, a taki jest najczęstszy scenariusz. Jeśli go edytujemy, to od razu blokujemy także obiekty galerii, i metoda odłącz, do czasu wywołania zapisz, nic tutaj nie daje niestety. w efekcie, trzeba pierw przeprowadzić iterację, celem odłączenia zdjęć od obiektu, i zapisać Sobie na boku te odłączane zdjęcia, a po zapisaniu obiektu, wykonać analizę, czy było coś usunięte, i dopiero usunąć z galerii. Było by jednak miło, aby te wszystkie metody, nie wymagały, aż takich kombinacji, względem tego co było.
  16. No, czyli trochę na około, ale rozumiem obawy o usunięcia zdjęcia z wielu obiektów. Na Galerii, ostatnimi czasy, najczęściej działam w programach uzupełniających dane towarowe lub synchronizujących dwa podmioty, i w przypadku pierwszego, te zdjęcia się najczęściej podmienia w 100%, a w drugim przypadku, obecnie też, bo brakuje mi sum kontrolnych, aby porównanie robić na poziomie zapytania do SQL, bez pobierania zdjęć z obu podmiotów - wydajność. Generalnie to trochę jeszcze jest braków w tej Galerii na moje. Funkcji usuń nie ma też od strony zdjęć produktów, gdzie w sumie rozumiem obawy, ale można by przecież dać komunikat, że zdjęcie które próbujesz usunąć, jest połączone z X produktami - wtedy jakiś przycisk "Pokaż w galerii" i tam, no właśnie, tam mamy tylko informacje, ile obiektów jest podłączonych, ale nie wiem, jak wejść w ten obiekt. Tutaj jest spory brak w Galerii, że nie wiem, skąd to zdjęcie jest.
  17. Potrzebuje jeszcze jednego wyjaśnienia. Jak to jest z metodą Usun, w Galerii? Jeśli dobrze rozumiem, powinna ona usunąć całkowicie zdjęcie z bazy danych. W wersji 47, jest komunikat, że ta metoda jest przestarzała i należy skorzystać z metody OdlaczZdjecie. Czy ta metoda przypadkiem, nie odłącza jedynie zdjęcia od obiektu? Ja bym chciał je jednak permanentnie usunąć. EDIT: No oczywiście, że tylko odłącza. To trochę nie nazwał bym zastąpieniem. Czemu Usun wylatuje?
  18. Czy istnieje możliwość wpłynięcia na dane adresowe, w Kreatorze zamówień do dostawców? Metoda PoWypelnieniuNaPodstawieInnegoDokumentu działa na docelowe ZD, tak jak chciałem, ale wcześniejsze okno kreatora, może być mylące dla użytkowników.
  19. Jakbyście mieli nadmiar czasu, to w szablonach można by dodać nowe metody sfery zdarzeniowej, których sporo przybyło w wersji 47. P.S. Możecie już w konfiguracja.xml, ustawić Copyright © na rok 2024, na zaś
  20. Próbuję utworzyć ZD różnicowe, do częściowo zrealizowanego ZD, za pomocą metody NaPodstawie, niestety nie udaje się tego zrealizować - stosuję tutaj język PHP, i niestety com_exception nie zwraca mi żadnych informacji, a ja do końca nie rozumiem przyczyny błędu, dokumentacja jest skromna w temacie, ale logicznie powinno zadziałać. Więc mamy ZD, na jedną pozycję, na 10 sztuk. Wystawiamy PZ i zmniejszamy ilość na 5: $pz = $subiekt->SuDokumentyManager->DodajPZ(); $pz->NaPodstawie((int)90885); $pz->NumerOryginalny = "1234567890"; $pz->Przelicz(); foreach($pz->Pozycje AS $pozycja) $pozycja->IloscJm = (float)5; $pz->Przelicz(); $pz->Zapisz(); $pz->Zamknij(); PZ wystawia się bez żadnego problemu, ZD jest częściowo zrealizowane. Następnie próbuje to samo ZD, wczytać do nowo tworzonego ZD, aby powstało różnicowe: $zd = $subiekt->SuDokumentyManager->DodajZD(); $zd->NaPodstawie((int)90885); $zd->Przelicz(); $zd->Zapisz(); $zd->Zamknij(); Niestety, metoda NaPodstawie się wysypuje. Identyfikator ZD źródłowego jest ten sam co dla PZ, nie zmienia się w bazie, powinien działać. W samym Subiekcie, wybranie Zrealizuj jako Zamówienie różnicowe, działa bez zarzutu i dokument powstaje:
  21. Bingo. No to trzeba skorygować kod do założenia z ratami. No to kod, w uproszczeniu i założeniu, że mamy tylko i wyłącznie jedną domyślną ratę, mamy: using (IRozrachunek rch = rozrachunki.Utworz()) { var pozycja = rch.Dane.Pozycje.FirstOrDefault(); pozycja.TerminPlatnosci = rchDate; pozycja.KwotaVAT = kwotavat; }
  22. Podczas dodawania "ręcznego" rozrachunku, trafiłem na dwa problemy z ustawieniem danych. Termin płatności using (IRozrachunek rch = rozrachunki.Utworz()) { rch.Dane.TerminPlatnosci = rchDate; } Otrzymuję błąd: Pole automatycznie wyliczane. Jego edycja jest niedozwolona. Nie wiem, czy trzeba go ustawić poprzez PlatnosciDokumentow, jeśli tak, to nie wiem jak. Kwota VAT using (IRozrachunek rch = rozrachunki.Utworz()) { rch.Dane.KwotaVAT = kwotavat; } Otrzymuję błąd: Bezpośrednia zmiana wartości KwotaVAT nie jest dozwolona. Tutaj to nawet nie mam pomysłu, jak miałbym ją inaczej dodać. Przez BazowyZapisWEwidencjiVAT?
  23. No dobra, to jeszcze zadanie na 6kę Czy można się podpiąć pod elementy okna parametrów, w sposób dynamiczny, podczas gdy okno jest otwarte? Np. wybieram Sobie jeden parametr i on powoduje wyłączenie dezaktywację innego parametru. Domyślam się, że tutaj już szalejemy.
×
×
  • Dodaj nową pozycję...