Piotr Taraszkiewicz 12 Napisano 4 Grudnia 2019 Udostępnij Napisano 4 Grudnia 2019 w [Sfera] Generyczny sposób wydruku dokumentów Dzień dobry Próbuję przygotować generyczną funkcję wydruku dokumentu. IDokumentySprzedazy dokumenty = _sfera.PodajObiektTypu<IDokumentySprzedazy>(); Dokument dokumentDoWydruku = dokumenty.Dane .Wszystkie() .FirstOrDefault(x => x.Id == daneId); Mając już dokument, można utworzyć wydruk i wybrać dla niego wzorzec wydruku IWydruki manager = _sfera.PodajObiektTypu<IWydruki>(); IWydruk wydruk = manager.Utworz(TypWzorcaWydruku.DokumentSprzedazy); Chciałbym używać wzorca dedykowanego dla dokumentu TypWzorcaWydruku.FakturaSprzedazy TypWzorcaWydruku.ParagonImienn TypWzorcaWydruku.Paragon Jak powinno się mapować dokument na typ wzorca? Chciałem spróbować po typie dokumentu TypDokumentu typ = dokumentDoWydruku.PodajTypDokumentu(); Niestety dla PA/PI/FS zwracany jest "DokumentSprzedazy". Jest jakiś sposób aby na podstawie pobranego dokumentu użyć dedykowanego dla niego wzorca? Link to postu
Radomił Ząbik 308 Napisano 4 Grudnia 2019 Udostępnij Napisano 4 Grudnia 2019 w [Sfera] Generyczny sposób wydruku dokumentów Podrzucam mój kod, do drukowania WZ w PDF (lekka modyfikacja i będzie drukował na drukarce). Można na podstawie niego, potem odpowiednio zrobić przeróbkę pod inne dokumenty. Kod wspiera pobieranie odpowiednio przypisanych do klienta wzorców wydruków, kopia/oryginał. Oczywiście zmienne powstałe z results, trzeba Sobie poprawić - to moja zmienna, z przetworzonego zapytania JSON. Zmienna response, to także odpowiedź do mojego systemu, więc też do wywalenia int id; id = results.id; // uzyskanie dokumentu do wydruku IWydaniaZewnetrzne dokumenty = sfera.PodajObiektTypu<IWydaniaZewnetrzne>(); Dokument dokument = dokumenty.Dane.Wszystkie().Where(d => d.Id == id).Single(); if(dokument == null) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Wskazany do wydruku dokument nie istnieje!"); response = "{ \"error\":\"Dokument nie istnieje!\" }"; } { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Drukowanie WZki: "+dokument.NumerWewnetrzny.PelnaSygnatura); //pobranie managera drukowania IWydruki manager = sfera.PodajObiektTypu<IWydruki>(); // utworzenie zadania drukowania using (IWydruk wydruk = manager.Utworz(TypWzorcaWydruku.WydanieZewnetrzne)) { // wskazanie obiektu do wydruku wydruk.ObiektDoWydruku = dokument; using (var podmiot = sfera.PodajObiektTypu<IPodmioty>().Znajdz(dokument.Podmiot)) { IOperacjePodmiotuDlaDokumentu operacje = podmiot.OperacjePodmiotuDlaDokumentu[dokument.Konfiguracja]; wydruk.ParametryDrukowania.WybranyWzorzec = operacje.WzorzecWydruku; // sposób ustawienia "kopia" na wydruku IWydrukParametryExtension param = (IWydrukParametryExtension)wydruk.ParametryDrukowania; if(results.type=="copy") ((IWydrukParametryDokument)wydruk.ParametryDrukowania).SposobWydrukuOryginalKopia = SposobWydrukuOryginalKopia.Kopia; if(results.type=="org") ((IWydrukParametryDokument)wydruk.ParametryDrukowania).SposobWydrukuOryginalKopia = SposobWydrukuOryginalKopia.Oryginal; param.ZastapPliki = true; // wyeksportowanie dokumentu do pliku wydruk.ObiektDoWydruku = dokument; string filename; if(Globals.mode=="developer") filename = "wz"+dokument.Id+"_"+results.type+"_DEV"; else filename = "wz"+dokument.Id+"_"+results.type; wydruk.ParametryDrukowania.NazwaDokumentuUzytkownika = filename; wydruk.ParametryDrukowania.SciezkaEksportu = @"N:\"; wydruk.Eksport(); if(!wydruk.OstatniaOperacjaZakonczonaSukcesem) { foreach (var blad in wydruk.PobierzListeBledow()) { Console.WriteLine(blad); }} Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Wydrukowano: " +wydruk.ParametryDrukowania.NazwaDokumentuUzytkownika+".pdf"); response = "{ \"number\":\""+dokument.NumerWewnetrzny.PelnaSygnatura+"\", \"filename\":\""+filename+"\", \"id\":\""+dokument.Id+"\" }"; } } } 1 Link to postu
Piotr Taraszkiewicz 12 Napisano 4 Grudnia 2019 Autor Udostępnij Napisano 4 Grudnia 2019 w [Sfera] Generyczny sposób wydruku dokumentów Dzięki serdeczne za przykład, ale też odwołanie jest do konkretnego wzorca: using (IWydruk wydruk = manager.Utworz(TypWzorcaWydruku.WydanieZewnetrzne)) Ja bym chciał aby wydrukować dokument niezależnie od jego typu. Na razie poradziłem sobie ifami: IDokumenty dokumenty = _sfera.PodajObiektTypu<IDokumenty>(); Dokument dokumentDoWydruku = dokumenty.Dane .Wszystkie() .FirstOrDefault(x => x.Id == daneId); IWydruki manager = _sfera.PodajObiektTypu<IWydruki>(); TypDokumentu typ = dokumentDoWydruku.PodajTypDokumentu(); string symbol = dokumentDoWydruku.Symbol; // utworzenie zadania drukowania TypWzorcaWydruku typWzorca = TypWzorcaWydruku.DokumentSprzedazy; if (symbol == "FS") typWzorca = TypWzorcaWydruku.FakturaSprzedazy; else if (symbol == "FU") typWzorca = TypWzorcaWydruku.FakturaSprzedazyUproszczona; else if (symbol == "FL") typWzorca = TypWzorcaWydruku.FakturaSprzedazyZaliczkowa; else if (symbol == "FM") typWzorca = TypWzorcaWydruku.FakturaVatMarza; else if (symbol == "PI") typWzorca = TypWzorcaWydruku.ParagonImienny; else if (symbol == "PA") typWzorca = TypWzorcaWydruku.Paragon; else if (symbol == "ZK") typWzorca = TypWzorcaWydruku.ZamowienieOdKlienta; else if (symbol == "ZD") typWzorca = TypWzorcaWydruku.ZamowienieDoDostawcy; else if (symbol == "WZ") typWzorca = TypWzorcaWydruku.WydanieZewnetrzne; else typWzorca = TypWzorcaWydruku.DokumentSprzedazy; using (IWydruk wydruk = manager.Utworz(typWzorca)) { // wskazanie obiektu do wydruku wydruk.ObiektDoWydruku = dokumentDoWydruku; // wykonanie wydruku wydruk.Drukuj(); } Ale nie wydaje mi się aby to był odpowiedni sposób Link to postu
Radomił Ząbik 308 Napisano 4 Grudnia 2019 Udostępnij Napisano 4 Grudnia 2019 w [Sfera] Generyczny sposób wydruku dokumentów (edytowane) I to działa z tymi wszystkimi typami dokumentów? To się nawet nie spodziewałem. Ale jeśli działa i te wydruki na tych IF'ach się generują, to pewnie Insert ma jakąś tajną funkcję W sumie, jest według dokumentacji numeryczna możliwość określenia typu dokumentu, poszuka Pan "TypWzorcaWydruku Enumeration". Tam jest taka fajna tabelka: Teraz tylko znaleźć to po stronie IDokumenty..... Awaryjnie, można tego IF'a podrasować i oprzeć go wtedy na ładnej tablicy DOBRA, poddaje się z gdybaniem, to już Insert podpowie Możliwe, że jest coś na wzór pobrania wzorca dla klienta, względem wzorca dla dokumentu, bo przecież takie są, ale to już jakaś tajemna, zaszyta w manualu wiedza Edytowane 4 Grudnia 2019 przez Radomił Ząbik Link to postu
Polecane posty