Skocz do zawartości

Jarek KοIaѕa

InsERT
  • Liczba zawartości

    224
  • Rejestracja

  • Ostatnia wizyta

Zawartość dodana przez Jarek KοIaѕa

  1. Zapisaliśmy taką sugestię. Na razie nie mogę obiecać zmian w tym zakresie.
  2. Oczywiście jest to możliwe. Wszystkie problemy da się rozwiązać. Jeśli chodzi o wzajemne używanie obiektów sferycznych to nie będzie to możliwe bezpośrednio, bo różne wersje to przecież różne typy. Mechanizmy, które można by użyć (chociaż raczej nie w zastępstwie wymiany danych za pomocą obiektów), to np. wymiana danych przez pliki EPP.
  3. Dane są spakowane zgodnie z RFC 1951 - DEFLATE. My używamy do tego celu Ionic.Zlib.Zlibcodec.
  4. Nie można ustawiać innego niż Brak. Brak można ustawić. :) Najlepiej zrobić to z wykorzystaniem odpowiedniego typu wyliczeniowego (patrz dokumentacja). Z drugiej jednak strony ta właściwość jest poprawnie wypełniana w przypadku inicjowania danymi z szablonu (tak jak to się dzieje w UI) i nie ma potrzeby ustawiania ponownie: var towary = sfera.PodajObiektTypu<IAsortymenty>(); using (var usluga = towary.Utworz()) { usluga.WypelnijNaPodstawieSzablonu(sfera.PodajObiektTypu<ISzablonyAsortymentu>().DaneDomyslne.Usluga); usluga.Dane.SposobRozbiciaNaPartie = (byte)SposobRozbiciaNaPartie.Brak; // to jest już niepotrzebne usluga.AutoSymbol(); if (!usluga.Zapisz()) usluga.WypiszBledy(); }
  5. Dokumentacja jest w nexo SDK, które można pobrać ze stron programów linii PRO, w sekcji Dodatkowe rozwiązania dostępne w wersji PRO znajduje się link do pobierania, np. na stronie Subiekt nexo PRO: https://www.insert.com.pl/programy_dla_firm/sprzedaz/subiekt_nexo_pro/opis.html albo z FTP: ftp://ftp.insert.com.pl/pub/aktualizacje/InsERT_nexo/
  6. Nie wiem co ma Pan dokładnie na myśli pisząc "jak powiązać". To jest w dokumentacji bazy - tabele i relacje. Dokumenty są powiązane z korektami bezpośrednio, a pozycje poprzez tabelę asocjacyjną PozycjeDokumentu_PozycjaKorekty.
  7. Zgadza się. Przepraszam, ale nie byłem w stanie tego szybko przetestować i odpisałem teoretycznie. Tamto wyrażenie oczywiście było bez sensu, ale tak jak pisałem liczy się idea polegająca na tym, że można te nowe pozycje namierzyć po idzie pozycji, które realizują.
  8. Ja wpisałem maksymalnie dużo w każdą z linii, żeby idea była czytelna, ale faktycznie moga być problemy z wykonaniem takiego kodu przy pańskiej strukturze danych. Proszę postarać się uprościć poszczególne zapytania oraz zmusić do wykonania zapytań od razu, np. 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);
  9. Moduł Raporty - Operacje - Zarządzaj wzorcami wydruków (po wskazaniu odpowiedniego raportu)
  10. Chyba się nie zrozumieliśmy, ale może to przez to, że miałem problem z wklejeniem kodu przykładu jak to zrobić. Czy teraz jest to jasne?
  11. Kolekcję pozycji źródłowych należy pobrac z bazy. Potem tylko trzeba namierzyć pozycję, którą chcemy rozbić. Można to zrobić na podstawie identyfikatora pozycji realizowanej. ... // podstawowe dane pz.Dane.Magazyn = mag; pz.Dane.Uwagi = results.comment; pz.Dane.NumerZewnetrzny = results.number; IDokumentZRozbiciem dok = (IDokumentZRozbiciem)pz; // wybranie zamówienia var docid = results.pos.First().docid; var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == docid).FirstOrDefault(); // znalezienie pozycji zamówień var pozycjeZrodlowe = zamowienia.Dane.Wszystkie().SelectMany(zd => zd.Pozycje).Where(p => results.pos.Select(po => po.id).Contains(p.Id)); var pozycjeNowe = pz.WypelnijNaPodstawieZD(pozycjeZrodlowe, zamowienie, parametryGrupowania); // wypełnienie pozycji foreach (var posadd in results.pos) { int posdocid; int posid; decimal posq; posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity; //var zamowienie = zamowienia.Dane.Wszystkie().Where(p => p.Id == posdocid).FirstOrDefault(); // znalezienie zamówienia //var poz = pz.WypelnijNaPodstawieZD(zamowienie.Pozycje.Where(p => p.Id == posid), zamowienie, parametryGrupowania).Single(); //poz.UstawIlosc(posq); //pz.Przelicz(); //znalezienie pozycji var poz = pozycjeNowe.Where(p => p.PozycjeRealizowane.Select(pre => pre.Id).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) ...
  12. Tworzona jest PZ i do niej dodawane pozycje. Mamy na wejściu listę id-ów pozycji. Wystarczy na jej podstawie zrobić kolekcję pozycji i ją przekazać do tej metody WypelnijNaPodstawieZD i zrobić to przed pętlą, która będzie rozbijać. To wszystkie zmiany.
  13. To raczej nie jest wina rozbicia. Zresztą można to sprawdzić - jaka jest cena na pozycji po wykonaniu rozbicia. Winne jest najprawdopodobniej wypełnianie na podstawie, które, podstawiając ponownie kontrahenta, powoduje przeliczenie cen. Proszę spróbować wywołać metodę WypelnijNaPodstawieZD tylko raz, przekazując listę pozycji z ZD, zamiast wielokrotnie, dla każdej pozycji z osobna.
  14. _ |)` | | | |_____ / (]__) / (]___) / (]___) ___(]_) / /
  15. Jaka jest cena na nowododanej pozycji bezpośrednio po wywołaniu metody WypelnijNaPodstawieZD?
  16. Zgodnie z dokumentacją bazy danych z nexo SDK, w tabeli UmowyPracownicze mamy powiązanie z pracownikiem: FK_PracownikUmowaPracownicza: Pracownik_Id -> Pracownicy.Id z kolei w tabeli Pracownicy mamy dopiero powiązanie z osobą: FK_OsobaPracownik: Osoba_Id -> Osoby.Id W tabeli Osoby są przechowywane dane wszelkich osób.
  17. Wartość parametru może być określona przez stałą, zmienną, wyrażenie. Więcej na ten temat w dokumentacji Stimulsoft Reports.
  18. Generalnie zasada na wydrukach jest taka, że pewne dane są już przygotowane pod wydruki standardowe i są to właśnie, poza Dokumentem, m.in. Nabywca, Dostawca, itd. Akurat REGON nie jest wykorzystywany w standardowych wydrukach i w związku z tym nie działa, mimo, że się w tych typach znajduje. Zostanie to poprawione, ale i tak pozostaje więcej danych, które mogą być potrzebne na wydruku. Trzeba do nich dotrzeć, tak jak Pan to robił, przez powiązania: Dokument-encjaDokumentu itd. Wchodzimy tu w zakres tzw. model u danych, który jest bardziej szczegółowo opisany w nexo SDK. Na tym poziomie należy sobie samemu pododawać powiązane obiekty, z których dane mają się pojawić na wydruku. I tak, dla nabywcy na WZ należy wybrać encjaDokumentu, z menu kontekstowego wybrać New Business Object i w sekcji Child… zaznaczyć NabywcaOdbiorcaWybrany (dane z momentu wystawienia dokumentu) lub NabywcaOdbiorca (aktualne dane klienta) W podobny sposób należy dodać dla niego PolaWlasne i już można je wykorzystywać we wzorcu. Analogicznie jest z odbiorcą. Inaczej natomiast na WZ jest z dostawcą, którym jest, de facto, firma (podmiot) prowadząca działalność i nie ma jawnego powiązania do jej danych. Część danych, ta najpotrzebniejsza, jest dostępna poprzez obiekt Dostawca. Inne dane należy pobrać z serwera SQL w następujący sposób: Wybrać opcję New Data Source typu MS SQL Ustawić tzw. Connection String, czyli parametry połączenia do serwera SQL. Po naciśnięciu ikonki (i) i ustawia się domyślny, można go zmienić na swój, np. Integrated Security=False; Data Source=SERWER\EXPRESS; Initial Catalog=nexo_FirmaSpzoo; User ID=sa; Password=insert; W oknie Select Data wybrać New Query i podać zapytanie pobierające wartość pola własnego 1 z "mojej firmy": SELECT PoleWlasne1 FROM ModelDanychContainer.Podmioty_PolaWlasnePodmiot AS pw INNER JOIN modeldanychcontainer.Podmioty AS pdm ON pdm.Id=pw.Id WHERE pdm.__MdmDiscriminator__='PodmiotMojaFirma'; Nacisnąć RetrieveColumns i zapisać Na stronie wzorca, w odpowiednim miejscu umieścić element Panel i na niego przeciągnąć nowododany element z Data Sources: Temat powiązań między dokumentami i dostawania się do odpowiednich właściwości był omawiany w wątku https://forum.insert.com.pl/index.php?/topic/765-wzorce-wydruk%C3%B3w-informacje-na-fakturze/ . Dodam tylko, że dla WZ-ek faktury są widoczne jako Dokument.encjaDokumentu.DokumentyRealizujace.
  19. W przypadku np. zamówień, dokumentów sprzedaży symbol klienta ukrywa się pod Podmiot.Sygnatura.PelnaSygnatura. Wszystkie właściwości pochodzą z modelu danych, który to jest opisany w nexo SDK, w pliku dokumentacji InsERT.nexo.Sfera.chm. Tam jest opisane dosłownie wszystko, więc nie ukrywam, że znalezienie konkretnej rzeczy, bez wprawy, może być trudne. W tym konkretnym przypadku najłatwiej szukać w indeksie Dokument class, properties, a dokładnie interesuje nas InsERT.Moria.ModelDanych.Dokument. Wśród właściwości jest Podmiot, więc możemy korzystać dalej z jego właściwości itd.
  20. Jeśli chodzi o wniosek o urlop, to jego wygląd jest definiowany treścią dokumentu (a nie wzorcem wydruku), a to oznacza, że wydruk należy zrealizować za pomocą typu wzorca WydrukRTF. Mogę przesłać na PW przykład jak to zrealizować.
  21. Jeszcze dla kompletu metoda obiektowa: ICenniki cenniki = sfera.PodajObiektTypu<ICenniki>(); foreach (Cennik dodatkowy in usluga.Dane.PozycjeCennika.Select(p => p.Cennik).Distinct()) { ICennik dodatkowyBo = cenniki.Znajdz(dodatkowy); foreach (IUproszczonaPozycjaCennika uprPozCen in dodatkowyBo.Pozycje.Wszystkie.Where(p => p.IdAsortymentu == usluga.Dane.Id)) dodatkowyBo.Pozycje.Usun(uprPozCen); if (!dodatkowyBo.Zapisz()) dodatkowyBo.WypiszBledy(); }
  22. Przed usuwaniem pozycji z cennika ta nowa usługa musi zostać zapisana, dopiero wtedy ją znajdzie. Wykonywane jest zapytanie w bazie danych, gdzie jeszcze nie ma tej niezapisanej usługi. Są jednak jakieś problemy z obiektowym usuwaniem pozycji cennika w takiej sytuacji, bo to sprawdziłem. Proponuję to zrobić bezpośrednio w SQL, oczywiście po zapisaniu usługi: var dbcFactory = sfera.PodajObiektTypu<IDbConnectionFactory>(); using (var connection = dbcFactory.CreateConnection(DbConnectionFlags.NoPooling | DbConnectionFlags.NoEnlist)) using (DbCommand command = connection.CreateCommand()) { try { connection.Open(); command.CommandText = string.Format( "DELETE pc FROM ModelDanychContainer.PozycjeCennika AS pc " + "INNER JOIN ModelDanychContainer.Cenniki AS cen ON pc.Cennik_Id=cen.Id " + "WHERE Asortyment_Id={0:d} AND cen.Bazowy=0", usluga.Dane.Id); command.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine("Wystąpił problem:\n{0}", ex.Message); } }
×
×
  • Dodaj nową pozycję...