|
<< Kliknij, aby wyświetlić Spis treści >> Nawigacja: SIMPLE.ERP > Personel > Załączniki > Opis scriptingu dla systemu ERP.PER > Tworzenie raportu Word skryptem VBS |
Kroki budowy raportu
Przykład skryptustat = PB.GetRow("bsc_lista_prac",wiersz) stat = PB.GetItemNumber("bsc_lista_prac",wiersz,"knrewi",pracownik_nrewid) '--------Wypełnienie wejściowego XML – sterowanie wykonaniem raportu ls_xml_filter="<umowa_raport>" '--------Etykieta wiersza, nazwa użyta jest dowolna. Będziemy się do niej odnosić w procedurach iteracyjnej i budującej stronę raportu '--------PARAMETRY STERUJĄCE KONTROLKĄ (OBLIGATORYJNE) ls_xml_filter=ls_xml_filter+"<plik_wynik>C:\Users\msk\AppData\Local\raportyPersonel\Umowa o prace</plik_wynik>" '--------Katalog i nazwa pliku z raportem ls_xml_filter=ls_xml_filter+"<typ_dokumentu>pdf</typ_dokumentu>" '--------typ dokumentu raportu wynikowego (doc, docx, Pdf, Rtf, Odt) ls_xml_filter=ls_xml_filter+"<czy_operator>1</czy_operator>" '--------czy do nazwy pliku dodać identyfikator operatora ls_xml_filter=ls_xml_filter+"<czy_data>1</czy_data>" '--------czy do nazwy pliku dodać stempel czasu ls_xml_filter=ls_xml_filter+"<czy_osoba>1</czy_osoba>" '--------czy do nazwy pliku dodać identyfikator iteracji (stworzony w ITERACYJNEJ procedurze SQL ls_xml_filter=ls_xml_filter+"<szl_eksport_id>628</szl_eksport_id>" '--------id szablonu eksportu (skopiowane z okna „Definiuj raport”, dla "utworz_szablon" może być 0 ls_xml_filter=ls_xml_filter+"<spid>149</spid>" '--------spid połaczenia do bazy (może być wstawione 0) ls_xml_filter=ls_xml_filter+"<czy_laczyc_w_jeden>0</czy_laczyc_w_jeden>" '--------0 – tworzenie odrębnych dokumentów dla każdej iteracji, 1 – połączone w jeden dokument ls_xml_filter=ls_xml_filter+"<czy_wielopoziomowy>0</czy_wielopoziomowy>" '--------0 – szablon używa pól płaskich (np. «TableStart:AdminDanych»)), 1 – szablon używa pól grupowych (np. «BeginGroup:AdminDanych») ls_xml_filter=ls_xml_filter+"<czy_otworzyc_katalog>1</czy_otworzyc_katalog>" '--------0 – nic nie rób, 1 – otwórz folder z wygenerowanym dokumentem ls_xml_filter=ls_xml_filter+"<czy_otworzyc_plik>1</czy_otworzyc_plik>" '--------0 – nic nie rób, 1 – otwórz plik w skojarzonym edytorze (musi być zainstalowany na komputerze) ls_xml_filter=ls_xml_filter+"<czy_nowa_strona>1</czy_nowa_strona>" '--------0 – nic nie rób, 1 – przy łączeniu w jeden plik oddziel iteracje nową stroną '--------PARAMETRY WŁASNE – do użycia w procedurach iteracyjnej i budującej stronę raportu ls_xml_filter=ls_xml_filter+"<pracownik_nrewid>"+cstr(pracownik_nrewid)+"</pracownik_nrewid>" ls_xml_filter=ls_xml_filter+"</umowa_raport>" '--------Etykieta wiersza – koniec
ls_proc_iter = "up_msk_dane_wydr_umowy_word_iter" '--------Nazwa procedury iteracyjnej (przejście po kolejnych obiektach raportu) ls_proc_rapo = "up_msk_dane_wydr_umowy_word_rapo" '--------Nazwa procedury budującej stronę raportu
ll_status = 0 ls_result = "" i=pb.invokefunction("utworz_szablon", ls_proc_iter, ls_proc_rapo, ls_xml_filter, ll_status, ls_result) '--------Utworzenie pustego szablonu raportu, zawierającego wszystkie pola z procedury budującej stronę raportu i=pb.invokefunction("wykonaj_raport", ls_proc_iter, ls_proc_rapo, ls_xml_filter, ll_status, ls_result) '--------Utworzenie raportu wynikowego, według szablonu zaimportowanego do ERP, wskazanego w <szl_eksport_id>628</szl_eksport_id>
'--------err = PB.SetReturnValue(1) err = PB.SetReturnValue(101)
|
Przykład procedur SQLProcedury muszą mieć argumenty wywołania jak w przykładzie: CREATE PROCEDURE …._iter @filtry_xml xml = NULL
CREATE PROCEDURE …._rapo @filtry_xml xml = NULL ,@iteracja_dane xml = null
Zwracane result-sety też muszą być zgodne z wzorcem. select id, iteracja_idm ,left(iteracja_nazwa,50) iteracja_nazwa , iteracja_dane
iteracja_dane – xml o dowolnej budowie, w którym przekazywane są do procedury budującej stronę raportu informacje przydatne do zbudowania XML wynikowego
select id,filtry_xml ,iteracja_dane ,raport_dane, root_table raport_dane – xml (może być wielopoziomowy dla +"<czy_wielopoziomowy>1</czy_wielopoziomowy> root_table – nazwa węzła (root) w XML raport_dane, w przytoczonym przykładzie – 'UmowaPracownika' Procedura iteracyjnaCREATE PROCEDURE up_msk_dane_wydr_umowy_word_iter @filtry_xml xml = NULL AS BEGIN DECLARE @error_code int ,@errmess_type int --0 – nagłówek, 1 – treść ,@node varchar(max) ,@errmess varchar(256) ,@zrodlo_listy_celow int ,@tryb_druku int ,@spid int ,@grupa_idn varchar (50) ,@pracownik_nrewid int
create table #sys_rodo_raport_result ( id numeric(10,0) identity (1,1) ,iteracja_idm varchar(20) ,iteracja_nazwa varchar(61) ,iteracja_dane xml ,osoba_id numeric(10,0) )
SELECT @pracownik_nrewid = T.c.value('pracownik_nrewid[1]', 'int') FROM @filtry_xml.nodes('/umowa_raport') T(c)
insert into #sys_rodo_raport_result (iteracja_idm ,iteracja_nazwa ,iteracja_dane ) SELECT cast(kp.pracownik_nrewid as varchar(10)),'Raport: '+kp.nazwisko+' '+kp.imie , ( SELECT Osoba_Id = kp.osoba_id ,pracownik_id = kp.pracownik_id ,pracownik_nrewid = kp.pracownik_nrewid for xml path('Umowy'),root('Iteracja') ) from kp_pracownik kp where kp.pracownik_nrewid = @pracownik_nrewid
select id, iteracja_idm ,left(iteracja_nazwa,50) iteracja_nazwa , iteracja_dane = ISNULL(iteracja_dane, ( SELECT Osoba_Id = cast (null as numeric(10,0)) ,pracownik_id = cast (null as numeric(10,0)) ,pracownik_nrewid = cast(null as numeric(10,0)) FROM pusta for xml path('Umowy'),root('Iteracja')--,type )) from #sys_rodo_raport_result order by id
END
Procedura tworząca raport: CREATE PROCEDURE up_msk_dane_wydr_umowy_word_rapo @filtry_xml xml = NULL ,@iteracja_dane xml = null AS BEGIN DECLARE @error_code int ,@errmess_type int --0 – nagłówek, 1 – treść ,@node varchar(max) ,@errmess varchar(256) ,@osoba_id numeric(10,0) ,@pracownik_nrewid int
SELECT @pracownik_nrewid = T.c.value('pracownik_nrewid[1]', 'int') FROM @iteracja_dane.nodes('/Iteracja/Umowy') T(c)
create table #sys_rodo_raport_result ( id numeric(10,0) identity (1,1) ,filtry_xml xml ,iteracja_dane xml ,raport_dane xml ,root_table varchar(128) collate database_default ) --SELECT --T.c.value('dana_pracownika_id[1]', 'numeric(10,0)') AS id_obiektu --FROM @filtry_xml.nodes('/kp_lpr_d_edit_teczka_grupa_prac/kp_lpr_d_edit_teczka_grupa_prac_row') T(c))
insert into #sys_rodo_raport_result (filtry_xml, iteracja_dane, root_table, raport_dane ) SELECT @filtry_xml, @iteracja_dane, 'UmowaPracownika', ( select case when UPPER(TYTUL) like '%PROF%' then ISNULL(ltrim(rtrim(TYTUL)),'') + ' ' + NAZWISKO_IMIE when UPPER(STANOWISKO) like '%PROF%' then NAZWISKO_IMIE + ',' + 'Prof.PRz' else ISNULL(ltrim(rtrim(TYTUL)),'') + ' ' + NAZWISKO_IMIE end TYTUL_NAZWISKO, * FROM ( select TOP 1 kp.pracownik_nrewid NREWID ,kp.nazwisko NAZWISKO, kp.imie IMIE ,ltrim(rtrim(kp.imie)) +' '+ ltrim(rtrim(kp.nazwisko)) NAZWISKO_IMIE ,(select top 1 (v.wartosc_oksp) from v_kp_dana_kadrowa_1022 v where v.pracownik_id = kp.pracownik_id order by v.data_po desc) DATA_ZATR_PRZ
, ISNULL(convert(varchar(10),kp.data_rozw_umowy,105),'') DATA_ROZW_UM ,(select TOP 1 wartosc_oksp from v_kp_dm_PeselPrac v where kp.pracownik_id = v.pracownik_id ) PESEL --- adres ,ISNULL((select TOP 1 ltrim(rtrim(miejscowosc)) + case when len(ltrim(rtrim(ulica))) > 0 then ', ul.' +ltrim(rtrim(ulica)) else '' end + ' ' + ltrim(rtrim(nr_domu)) + case when len(ltrim(rtrim(nr_lokalu))) > 0 then '/' +ltrim(rtrim(nr_lokalu)) else '' end from kp_uf_doso_adres(1,kp.pracownik_id) ), (select TOP 1 ltrim(rtrim(miejscowosc)) + case when len(ltrim(rtrim(ulica))) > 0 then ', ul.' +ltrim(rtrim(ulica)) else '' end + ' ' + ltrim(rtrim(nr_domu)) + case when len(ltrim(rtrim(nr_lokalu))) > 0 then '/' +ltrim(rtrim(nr_lokalu)) else '' end from kp_uf_doso_adres(0,kp.pracownik_id)) ) ADRES ---- ,(select top 1 lower(v.kod_opis) from v_kp_dana_kadrowa_40 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) TYTUL , lower(um.kod_opis_rozsz) RODZ_UM ,convert(varchar(10),um.data_po, 121) RODZ_UM_OD ,case when year(um.data_ko)< 3000 then convert(varchar(10),um.data_ko,121) else '' end RODZ_UM_DO
,(select top 1 (v.wartosc_oksp) from v_kp_dana_kadrowa_1470 v where v.p0=um.p0 and v.pracownik_id = kp.pracownik_id order by v.data_po desc) DATA_UM_ZAW
,convert(varchar(10),um.data_po,121) DATA_UM_PO , convert(varchar(10),um.data_ko,121) DATA_UM_KO ,um.wartosc_oksp kod_um ,(select top 1 v.kod_opis_rozsz from v_kp_dana_kadrowa_6 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) JEDN_ORG , (select top 1 v.kod_opis_rozsz from v_kp_dana_kadrowa_2 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id and v.dana_pracownika_id = (select top 1 v.p0 from v_kp_dana_kadrowa_6 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) order by v.data_po desc) JEDN_NAD ,(select top 1 lower(v.kod_opis) from v_kp_dn_etat_kod v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) W_ETAT ,(select top 1 lower(v.wartosc_oksp) from v_kp_dn_etat_kod v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) W_ETAT_KOD ,(select top 1 v.wartosc_w from v_kp_dn_dobowa_norma v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) NORMA_DOBA ,(select top 1 v.wartosc_w from v_kp_dana_kadrowa_1021 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) NORMA_TYG ,(select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) STANOWISKO ,(select top 1 lower(v.kod_opis) from v_kp_dn_funkcja v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) FUNKCJA ,(select top 1 lower(v.kod_opis) from v_kp_dn_Kod_wykon__Zaw_ v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) ZAWOD ,(select top 1 v.wartosc_oksp from v_kp_dn_plec v where v.pracownik_id = kp.pracownik_id order by v.data_po desc) plec , (case when (select top 1 v.wartosc_oksp from v_kp_dn_plec v where v.pracownik_id = kp.pracownik_id order by v.data_po desc) = 'M' then 'Panem' else 'Panią' end ) TEKST1 ,(select top 1 convert(decimal(10,2),v.wartosc_oksp) from v_kp_dana_kadrowa_0 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) PLACA ,(select top 1 v.wartosc_oksp from v_kp_dana_kadrowa_0 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) KATEG ,(select top 1 convert(decimal(10,2),v.wartosc_oksp) from v_kp_dana_kadrowa_0 v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) DOD_FUNK ,(select top 1 v.wartosc_oksp from v_kp_dana_kadrowa_0 v, v_kp_dana_kadrowa_0 vn where vn.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id and v.p0 = vn.dana_pracownika_id order by vn.data_po desc) DOD_KATEG
,CASE WHEN (select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) like '%adiunkt%' then '4' WHEN (select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) like '%asyst%' then '5' WHEN (select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) like '%prof%nadz%' then '2' WHEN (select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) like '%prof% zwycz%' then '1' WHEN (select top 1 lower(v.kod_opis) from v_kp_dn_stanowisko v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) like '%prof% wizyt%' then '3' else ' ' end PKT ,(select top 1 v.wartosc_w from v_kp_dn_wymiar_urlopu v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) WYMIAR_DN ,(select top 1 v.wartosc_w from v_kp_dn_urlop_nal__dni v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) URLOP_DN ,(select top 1 v.wartosc_w from v_kp_dn_wym_urlopu_godz v where v.data_po <= ISNULL(um.data_ko,getdate()) and v.pracownik_id = kp.pracownik_id order by v.data_po desc) URLOP_G ,(select top 1 DATEADD("m",6,v.wartosc_d) from v_kp_dana_kadrowa_1022 v where v.pracownik_id = kp.pracownik_id order by v.data_po desc) WYPOW_1MC_OD ,(select top 1 DATEADD(YEAR,3,v.wartosc_d) from v_kp_dana_kadrowa_1022 v where v.pracownik_id = kp.pracownik_id order by v.data_po desc) WYPOW_3MC_OD from kp_pracownik kp, v_kp_dana_kadrowa_1005 um
where kp.pracownik_nrewid = @pracownik_nrewid and kp.pracownik_id = um.pracownik_id order by um.data_po desc ) T FOR XML PATH(''),root('UmowaPracownika'))
select id,filtry_xml ,iteracja_dane ,raport_dane, root_table from #sys_rodo_raport_result order by id
END |
Załącznikiumowa_o_prace_szablon_pusty.docx – Przykład pustego szablonu raportu wygenerowanego funkcją "utworz_szablon" Umowa o prace_Raport_ Nowak Bolesław_mmm_2018_05_25_13_13_54 – Przykład raportu wynikowego wygenerowanego funkcją "wykonaj raport". |