Obsah
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 <Middle Name="MiddleName"> … </Middle>
- 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 <CONFIG> 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
-<Middle Name="MiddleName"> pro podadresář v reports (report/MiddleName/)
-pokud neni DSI z SQL otevřené otevře se automaticky v cf.LuaFormPrintReport
local query = enc[[ <Middle Name="POHYBY_TAB"> <DataModel> <Table Name="a"> <RequredIndexes> IDPRIJEMKA-P </RequredIndexes> </Table> </DataModel> <QueryItem Name="" DataModelName="a"><SQL><![CDATA[ select p.idprijemka, 'P' as typdokl ... Data.TiskMD=ClientSession:CreateMidFromXML(query) local ds=Data.TiskMD:FindDataSetItem("") ds:LocateRange("", "") ...
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=[[ <Middle Name="ZAKAZKY"> <DataModel> <Table Name="zakazky_zakpol"> <Field Name="idpartner" Type="String"/> <Field Name="popiszak" Type="String"/> </Table> </DataModel> <QueryItem Name="lua_zakpol" DataModelName="zakazky_zakpol"><SQL> 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")..[[ </SQL> </QueryItem> </Middle> ]] 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)
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=[[<?xml version="1.0" encoding="]]..encoding..[["?> <Middle Name="v_PolozkyFaktury"> <QueryItem Name="lua_faktury" DataModelName="faktury_faktury"> <SQL> select * from faktury_faktury where idfaktura = ']]..idfaktura..[[' </SQL> <QueryItem Name="lua_fpolozky" DataModelName="faktury_fpolozky"> <SQL> select * from faktury_fpolozky where idfaktura=']]..idfaktura..[[' </SQL> </QueryItem> </QueryItem> </Middle>]] 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ží.
<BAND>#@…#</BAND>