==== Doplnění LUA reportů o správné ukládání při SaveDocument ==== * MiddleName je použit jako podadresář v reports (report/MiddleName/) * doplnit query o nadřazený tag ... * POZOR pro ukladání Excelu MUSÍ být MiddleName - v cestě nemohou být 2xbackslash (chyba není vidět) * pokud se tiskne z Query a chceme dokument ukládat k danému rozpočtu, musí byt v prvním Query field //TypDokl=R// a v printu **NESMÍ** být //GotoNextPage=false// === pokud je použit GotoNextPage=false, ale v dialogu výběru dat pro tisk je vybrána zakázka nebo partner doplnit po Print odpovídající pole v dokumentu === --pro specielni pripady ze je dialogu vybran konktretni partner nebo zakazka a dokument pak chci s nim spojit (napr. seznam faktur) if res.idpartner ~= "" and Action==PRINT_DOCUMENT and dokumenty_dokumenty.LastIDDokument then local MD=ClientSession:ActivateMid("DOKUMENTY") do local function finally_MD() MD=ClientSession:Passivate(MD) end local DokumentyDS=MD:FindDataSetItem("") assert(DokumentyDS:LocateRange("IDDokument", dokumenty_dokumenty.LastIDDokument)) DokumentyDS:Edit() DokumentyDS:SetFieldByName("IDPartner", res.idpartner) DokumentyDS:Post() finally_MD() end end ====Ukázka tisku vizuálního:==== Konstanty pro Option Print: (typ akce) * PRINT_FILE - pouze vytvoří soubor * PRINT_PREVIEW * PRINT_PRINT * PRINT_DOCUMENT Pomocí output lze nastavit jméno výstupního souboru (má přednost před nastavením v sekci pro HTML). ====Ukázka nevizuálního tisku middle:==== Vytiskne do souboru "/tmp/out.pdf" řádky "R0015267", "RZ00005" z middle MD Middle musí být otevřené a vybrané řádky musí být "dohledatelné". ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.rep", Print=PRINT_FILE}, {output="/tmp/out.pdf"}, {"R0015267", "RZ00005"}, WR_USE_SELECTED) ====Ukázka tisku vizuálního:==== -pokud potřebuji **ID** a tiskne se z **SQL** je potřeba nastavit **primarni index root DSI**. GotoNextPage urcuje, zda je report seznam ID="" nebo neni ID~="" \\ -pro doplneni **TypDokl** a **Cisla dokladu** do dokumentu je potreba v SQL mit field TypDokl a mit nastaven **primarni index** nebo **DataModelName** (potreba pro BeforeSaveToDocumentDir)\\ -**CDokladu** do dokumentu si to bere pres **DSI:GetPrimaryIndex**. Tzn. musí být nadefinován **DataModel** s **RequredIndexes**\\ -//// pro podadresář v reports (report/MiddleName/)\\ -pokud neni DSI z SQL **otevřené** otevře se automaticky v cf.LuaFormPrintReport local query = enc[[ IDPRIJEMKA-P
\\ === Základní metoda tisku PrintReport (WindowsManager:Print) === LuaForm.Func.v_zakazky_zakazky_reports_PrintZakpol={ function(Data) Data.PrintMid = v_zakazky_zakazky.reports.PrintZakpol(Data.DSI, Data.Form) return cf.LuaFormPrintReport(Data, Data.PrintMid, {GotoNextPage=true, SetRangeDetail=false, Recalculate=false}) end, finally=function(Data) if Data.PrintMid then Data.PrintMid:Free() end end } function v_zakazky_zakazky.reports.PrintZakpol(DSI, Form) local idzakaz=DSI:FieldByName("idzakaz") local polDS = DSI:OwnerMiddleDB():FindDataSetItem("zakazky_zakpol") polDS:SetRangeDetail() local tIDZakpol = Form:GetSelectedRows(polDS) local tisk=[[
select z.idzakaz, z.idpartner, zp.*, z.popis as popiszak from zakazky_zakpol zp JOIN zakazky_zakazky z ON z.idzakaz = zp.idzakaz where ]]..cf.ConstructWhereFromString("idzakaz;idzakpol", tIDZakpol, "zp")..[[
]] if DEBUG_DETAIL then DEBUG_WRITE({mid=tisk}) end local TiskMD=ClientSession:CreateMidFromXML(tisk) if DEBUG_DETAIL and not DEBUG_NOVISIBLE then local form=WindowsManager:CreateDetailMidDBForm(TiskMD) local outSP=WindowsManager:ShowFormSP(form, {Modal=true}) form=form:Free() if outSP.MRCode==2 then TiskMD=TiskMD:Free() return end end --pro save dokument musi byt otevrene DSI local ds = TiskMD:FindDataSetItem("") ds:LocateRange("", "") return TiskMD end
=== Metoda tisku Start/EndPrintReport pokud nelze použít jednodušší PrintReport === LuaForm.Func.v_rozpocty_rozpocty_reports_Specifikace={ function(Data) return cf.LuaFormStartPrintReport(Data, {GotoNextPage=(#Data.Form:GetSelectedRows()==1)}) end, function(Data) ... return LuaForm.CallFunc("WalkRecordsVisual", nil, Data.DSI, Data.Form, {WR_USE_SELECTED, function(DSI, ID, ntf) v_rozpocty_rozpocty.reports.TiskKapitol(Data.DSI, Data.Form, Data.Report, GroupPolozky) end, "Tisk zakazek", "PrCarKod"}) end, function(Data) ... return cf.LuaFormEndPrintReport(Data) end, } function v_rozpocty_rozpocty.reports.TiskKapitol(DSI, Form, Report, GroupPolozky) ... if GroupPolozky then local md = v_rozpocty_rozpocty.reports.GetMiddlelGroupPolozky(kapDS:FieldByName("idrozp"), kapDS:FieldByName("idkap")) md:PrintPrepareReport(Report, {GotoNextPage=false, SetRangeDetail=false, Recalculate=false}) if md then md=md:Free() end else ... Report:BandDSAndByNames("body_rpolozky", rpDS, {}) ... end Report:BandDSAndByNames("afterdetail_rkap", kapDS, {}) end \\ ==== Vložení LUA bandu do existujícího reportu ==== Do předcházejícího bandu než se má tisknout náš nový "lua_band", vložíme field s následujícím kódem: @cf.trydofile(VLUADIR().."v_faktury_faktury-reports.lua") v_faktury_faktury.reports.TiskPolozek(DSI, Params, Report) {{lua:tisk_lua_bandu.png|Report}} Toto zavolá funkci, která pak tiskne band "lua_fpolozky". Nadřazený QueryItem "lua_faktury" je tam kvůli správnému zobrazení měn. Funkce tisku ve v_faktury_faktury-reports.lua: function v_faktury_faktury.reports.TiskPolozek(DSI, Params, Report) local idfaktura=DSI:FieldByName("idfaktura") local tisk=[[ select * from faktury_faktury where idfaktura = ']]..idfaktura..[[' select * from faktury_fpolozky where idfaktura=']]..idfaktura..[[' ]] if DEBUG_DETAIL then DEBUG_WRITE({mid=tisk}) end local TiskMD=ClientSession:CreateMidFromXML(tisk) TiskMD:PrintPrepareReport(Report,{GotoNextPage=true}) TiskMD:Free() end ==== Tisk v cizí měně ==== Tisku vlastního bandu a hodnot v cizí měně. Parametr DSI je povinný, stejně jako znak $ Report:BandDSAndByNames("body_neco", DSI, {["cena$"]=cena}) ==== Command Band ==== Nově lze nastavit v reportu příznak "Command band". Tento band nebude ve výstupu, ale budou v něm spuštěny lua funkce. * V R-line je "zaškrtávátko" ve vlatsnostech bandu. * V excelu a openoffice se napíše kouzelné slovíčko **commandband** do 1. řádku a posledního + 3 sloupce daného bandu. * V html se prostě mezi značky nic nevloží. ''#@...#''