Uživatelské nástroje

Nástroje pro tento web


lua:tisk_pomoci_lua

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
lua:tisk_pomoci_lua [2022/06/30 07:58] – [Doplnění LUA reportů o správné ukládání při SaveDocument] Libor Kadaníklua:tisk_pomoci_lua [2023/05/25 11:34] (aktuální) – [Ukázka tisku vizuálního:] Karel Petrů
Řádek 1: Řádek 1:
 ==== Doplnění LUA reportů o správné ukládání při SaveDocument ==== ==== Doplnění LUA reportů o správné ukládání při SaveDocument ====
- 
-  * Name - jméno reportu, je použito v názvu souboru: [ID-]Name-IDDokument.ext 
-  * v reports.xml doplnit volaní LUA funkce o parametr Name (..., Use, Name) 
-  * volanou Lua funkci doplnit o parametr Name 
-  * ve volání Print doplnit třetí parametr hash: {document_name=Name} 
  
   * MiddleName je použit jako podadresář v reports (report/MiddleName/)   * MiddleName je použit jako podadresář v reports (report/MiddleName/)
Řádek 11: Řádek 6:
   * 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 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 potřebuji ID a tiskne se z SQL je první field v SQL (ID) === 
- 
-Do typu reportu napsat: ''@cf.trydofile(VLUADIR().."zakazky/v_zakazky_zakazky-reports.lua") v_zakazky_zakazky.reports.PracVykaz(DSI, Form, Action, ReportName, Use, Name)'' 
- 
-Pro doplneni //TypDokl// a //Cisla dokladu// do dokumentu je potreba v SQL mit field //TypDokl// a mit nastaven primarni index nebo //DataModelName//. CDokladu do dokumentu si to bere pres DSI:GetPrimaryIndex. Tzn. musí být nadefinován **DataModel** s **RequredIndexes** 
- 
-DSI z SQL musi být před tiskem otevřené !!! 
- 
-<code lua> 
-function v_zakazky_zakazky.reports.PracVykaz(DSI, Form, Action, ReportName, Use, Name) 
-  local TiskMD=v_prost_vykony.ZakazkaVykazMiddle(DSI:FieldByName("IDZakaz")) 
-  if TiskMD then 
-    TiskMD:FindDataSetItem(""):SetOptions({FetchAllBlobs=true}, true) --nutne protoze se zapisuje do syslogu a je jina transakce 
-    TiskMD:FindDataSetItem(""):LocateRange("","") --DS musi byt otevrene kvuli primarnimu indexu 
-    WindowsManager:Print(TiskMD, {GotoNextPage=true, SetRangeDetail=true, Recalculate=false, Report=ReportName, Print=Action}, {document_name=Name}) 
-    TiskMD:Free() 
-  end 
-end 
- 
---ponovu 
-return LuaForm.PrintReport(Data.TiskMD, {GotoNextPage=true, Report=ReportName, Print=Data.Params.Action}, 
-    {document_name=Data.Params.Name, output_type=Data.Params.OutputType, Caption=Caption, StatOverride=Data.Params.StatOverride, 
-      AfterSaveLuaHookFunc="v_sklad_prijemky.reports.ConvertToPdf"}, nil, Data.Params.Use) 
- 
-</code> 
  
 === 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 === === 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 ===
  
 <code lua> <code lua>
 +  --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   if res.idpartner ~= "" and Action==PRINT_DOCUMENT and dokumenty_dokumenty.LastIDDokument then
     local MD=ClientSession:ActivateMid("DOKUMENTY")     local MD=ClientSession:ActivateMid("DOKUMENTY")
Řádek 55: Řádek 25:
 </code> </code>
  
-=== Pro tisk metodou CreatePrint-CreateReport-StartPrint === 
  
-Pro doplneni //TypDokl// a //Cisla dokladu// do dokumentu je potreba ve **BeforeSaveToDocumentDir(DSI, ID...)** mit parametry **DSI** a **ID**. 
-Z DSI se bere //TypDokl// a //CDokladu// pres //DSI:GetPrimaryIndex//. //ID// urcuje, zda je report seznam **ID=""** nebo neni **ID~=""**. 
- 
-<code lua> 
-  local prnt=WindowsManager:CreatePrint() 
-  local report=prnt:CreateReport(ReportName) 
-  local FileName 
-  local Options = {Report=ReportName, Print=Action, Caption=enc"Popis dokumentu", Poznamka="Poznamka dokumentu"} 
-  if Action==PRINT_DOCUMENT then 
-    if ID ~= "" then Name=ID.."-"..Name end 
-    FileName=dokumenty_dokumenty.BeforeSaveToDocumentDir(DSI, ID, dokumenty_dokumenty.GetDocumentFileName("middle_name", ReportName, Name, DSI), Options) 
-  end 
-  prnt:StartReport(Action, {output=FileName}) 
-   
-  ... 
- 
-  prnt:PrintReport() 
-  report:Free() 
-  prnt:Free() 
-  if Action==PRINT_DOCUMENT then  
-    dokumenty_dokumenty.AfterSaveToDocumentDir(nil, "", FileName, Options) 
-  end 
-   
-</code> 
- 
-  
 ====Ukázka tisku vizuálního:==== ====Ukázka tisku vizuálního:====
  
Řádek 93: Řádek 36:
 Pomocí output lze nastavit jméno výstupního souboru (má přednost před nastavením v <CONFIG> sekci pro HTML). Pomocí output lze nastavit jméno výstupního souboru (má přednost před nastavením v <CONFIG> sekci pro HTML).
  
-Preferovaný způsob fungujívcí v mobisu. + 
-<code lua> +====Ukázka nevizuálního tisku middle:==== 
-  function(Data) +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é".
-    local Options {Report Data.FirstParams.ReportName, Print Data.FirstParams.Action} +
-    local Config {output_type Data.FirstParams.OutputType, document_name Data.FirstParams.Name}   +
-    return LuaForm.PrintReport(Middle, Options, Config, [FormUse]) +
-   end, +
-</code>+
  
 <code lua> <code lua>
-mid=ClientSession:ActivateMid("majetek_majetek"+ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.rep", Print=PRINT_FILE}, {output="/tmp/out.pdf"}, {"R0015267", "RZ00005"}, WR_USE_SELECTED)
-mid:FindDataSetItem(""):LocateRange("idmajetek", "M0605091"+
-WindowsManager:Print(mid, {Typ=1, Report=REPORTSDIR()..'majetek/vypis.rep', Print=PRINT_FILE}, {output=USERDIR().."M0605091.rep"}+
-ClientSession:Passivate(mid)+
 </code> </code>
  
-Tisk přímo z tiskového dialogu. Umožňuje tisknout označené/všechny řádky dle volby uživatele.  +====Ukázka tisku vizuálního:====
-Výsledek se uloží do souboru pojmenovaném dle sloupce IDMajetek.+
  
-<code lua> +-pokud potřebuji **ID** a tiskne se z **SQL** je potřeba nastavit **primarni index root DSI**GotoNextPage urcujezda je report seznam ID="" nebo neni ID~="" \\ 
-WindowsManager:Print(DSI:OwnerMiddleDB(), {Report=REPORTSDIR()..'majetek/vypis.rep'Print=PRINT_FILE},  +-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)\\ 
-  {output=USERDIR()..DSI:FieldByName("IDMajetek")..".csv"}, Form, Use+-**CDokladu** do dokumentu si to bere pres **DSI:GetPrimaryIndex**Tznmusí být nadefinován **DataModel** s **RequredIndexes**\\ 
-</code>+-//<Middle Name="MiddleName">// pro podadresář v reports (report/MiddleName/)\\ 
 +-pokud neni DSI z SQL **otevřené** otevře se automaticky v cf.LuaFormPrintReport
  
-Uložení reportu do dokumentu 
 <code lua> <code lua>
-WindowsManager:Print(DSI:OwnerMiddleDB(), {Report=REPORTSDIR()..'majetek/vypis.rep', Print=PRINT_FILE},  +  local query enc[[ 
-  {document_name = Name}, Form, Use) +  <Middle Name="POHYBY_TAB"> 
-</code+    <DataModel
-====Ukázka nevizuálního tisku middle:==== +      <Table Name="a"> 
-Vytiskne do souboru "m:/tmp/out.sxc" řádky "R0015267", "RZ00005" z middle MD +        <RequredIndexes> 
-Middle musí být otevřené a vybrané řádky musí být "dohledatelné".+IDPRIJEMKA-P 
 +        </RequredIndexes> 
 +      </Table> 
 +    </DataModel>
  
-<code lua> +    <QueryItem Name="" DataModelName="a"><SQL><![CDATA[ 
-ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.stc"}, {output="m:/tmp/out.sxc"}, {"R0015267", "RZ00005"}, WR_USE_SELECTED) +    select p.idprijemka, 'P' as typdokl 
-</code+    ... 
-====Ukázka tisku nevizuálního:==== +    Data.TiskMD=ClientSession:CreateMidFromXML(query
-<code lua> +    local ds=Data.TiskMD:FindDataSetItem("") 
-mid=ClientSession:ActivateMid("majetek_majetek"+    ds:LocateRange("", ""
-mid:FindDataSetItem(""):LocateRange("idmajetek", "M0605091") +    ...  
-print=ClientSession:CreatePrint() +
-report=print:CreateReport(REPORTSDIR()..'majetek/vypis.rep'+
-print:StartReport(PRINT_FILE, {output=USERDIR().."report-output"}) +
-mid:PrintPrepareReport(report) +
-print:PrintReport() +
-report:Free() +
-print:Free() +
-ClientSession:Passivate(mid)+
 </code> </code>
  
-====Ukázka tisku vizuálního:====+\\ 
 + 
 +=== Základní metoda tisku PrintReport (WindowsManager:Print) ===
  
-Preferovaný způsob fungující v mobisu: 
 <code lua> <code lua>
 +LuaForm.Func.v_zakazky_zakazky_reports_PrintZakpol={
   function(Data)   function(Data)
-    ... +    Data.PrintMid v_zakazky_zakazky.reports.PrintZakpol(Data.DSI, Data.Form) 
-    Data.Options {Report = Data.FirstParams.ReportName, Print = Data.FirstParams.ActionCaption=enc"Specifikace souhrn"+    return cf.LuaFormPrintReport(Data, Data.PrintMid, {GotoNextPage=trueSetRangeDetail=falseRecalculate=false})
-    local ID = "" +
-    --pokudse tiskne jeden rozpocet, muze se do dokumentu doplnit odkaz na rozpocet +
-    if #Data.Form:GetSelectedRows()==1 then ID=Data.DSI:FieldByName("idrozp"end +
-    if Data.FirstParams.Action==PRINT_DOCUMENT then +
-      Data.FileName=dokumenty_dokumenty.BeforeSaveToDocumentDir(Data.DSIID, dokumenty_dokumenty.GetDocumentFileName("rozpocty", +
-        Data.FirstParams.ReportNameData.FirstParams.Name, Data.DSI), Data.Options) +
-    end +
-    local Config = {output Data.FileNameoutput_type Data.FirstParams.OutputTypedocument_name Data.FirstParams.Name} +
-    return LuaForm.StartPrintReport(Options, Config)+
   end,   end,
-  function(Data) +  finally=function(Data) 
-    Data.Report:BandDSAndByNames("body_druhy", Data.DSI, {"field"="Value"}) +    if Data.PrintMid then Data.PrintMid:Free() end
-    ... +
-    if Data.FirstParams.Action==PRINT_DOCUMENT then +
-      dokumenty_dokumenty.AfterSaveToDocumentDir(nil, "", Data.FileName, Data.Options) +
-    end +
-    return LuaForm.EndPrintReport()+
   end   end
-</code>+}
  
-<code lua> + 
-function Tisk(DSI, Form, Action, ReportName, Use+function v_zakazky_zakazky.reports.PrintZakpol(DSI, Form) 
- local prnt=WindowsManager:CreatePrint() +  local idzakaz=DSI:FieldByName("idzakaz"
- local report=prnt:CreateReport(ReportName+  local polDS DSI:OwnerMiddleDB():FindDataSetItem("zakazky_zakpol"
- local FileName +  polDS:SetRangeDetail() 
- if Action==PRINT_DOCUMENT then +  local tIDZakpol = Form:GetSelectedRows(polDS) 
-   FileName=dokumenty_dokumenty.BeforeSaveToDocumentDir(nil, "", dokumenty_dokumenty.GetDocumentFileName("MiddleName", ReportNameName, DSI){}) + 
- end +  local tisk=[[ 
- prnt:StartReport(Action, {oput=FileName, document_name=Name}+  <Middle Name="ZAKAZKY"> 
- report:BandDSAndByNames("body_druhy", DSI, {"field"="Value"}) +    <DataModel> 
- prnt:PrintReport() +      <Table Name="zakazky_zakpol"
- report:Free() +        <Field Name="idpartner" Type="String"/> 
- prnt:Free() +        <Field Name="popiszak" Type="String"/> 
- if Action==PRINT_DOCUMENT then +      </Table> 
-   dokumenty_dokumenty.AfterSaveToDocumentDir(nil, "", FileName, {}+    </DataModel> 
- end+ 
 +    <QueryItem Name="lua_zakpol" DataModelName="zakazky_zakpol"><SQL> 
 +        select z.idzakazz.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 end
 +
 </code> </code>
  
-**Konkrétní příklad**+=== Metoda tisku Start/EndPrintReport pokud nelze použít jednodušší PrintReport === 
 <code lua> <code lua>
-LuaForm.Func.v_faktury_faktury_reports_PrehledFakturZakPol={+LuaForm.Func.v_rozpocty_rozpocty_reports_Specifikace={
   function(Data)   function(Data)
-    return LuaForm.ShowDlg({ +    return cf.LuaFormStartPrintReport(Data, {GotoNextPage=(#Data.Form:GetSelectedRows()==1)})
-      Caption=enc"Přehled faktur s vybranou zakpol", +
-      Items=+
-        {"idfdruh", "luaform", enc"Druh dokladů", "MultiSelectLookup", nil, nil, nil, {ArgumentStr="faktury_fdruh:idfddruh"}}, +
-        {"datum", "calbetweentime", enc"Datum vystavení od|Datum vystavení do", "From|To" }, +
-        {"idzakpol", "lookup", enc"Zakázková položka", "zakazky_czakpol:idzakpol"}, +
-      } +
-    })+
   end,   end,
   function(Data)   function(Data)
-    if Data.Params.Result == DLG_CANCEL then return end +    ... 
-    local Options = {Report = Data.FirstParams.ReportNamePrint = Data.FirstParams.Action} +    return LuaForm.CallFunc("WalkRecordsVisual", nil, Data.DSI, Data.Form, {WR_USE_SELECTED, function(DSI, ID, ntf) 
-    local Config = {output_type = Data.FirstParams.OutputTypedocument_name = Data.FirstParams.Name} +      v_rozpocty_rozpocty.reports.TiskKapitol(Data.DSI, Data.Form, Data.Report, GroupPolozky) 
-    return LuaForm.StartPrintReport(OptionsConfig)+    end"Tisk zakazek", "PrCarKod"})
   end,   end,
   function(Data)   function(Data)
-    Data.PrintMid = v_faktury_faktury.reports.PrehledFakturZakPol(Data.Params, Data.DSI, Data.Form, Data.FirstParams.Action, Data.FirstParams.ReportName, Data.FirstParams.Use) +    ...     
-    return cf.LuaFormPrintReport(Data, Data.PrintMid)+    return cf.LuaFormEndPrintReport(Data)
   end,   end,
-  finally=function(Data) 
-    if Data.PrintMid then Data.PrintMid:Free() end 
-  end 
 } }
  
-function v_faktury_faktury.reports.PrehledFakturZakPol(res, DSI, Form, ActionReportName, Use+ 
-... +function v_rozpocty_rozpocty.reports.TiskKapitol(DSI, Form, ReportGroupPolozky
-... +  ... 
-  return md, {GotoNextPage=false, SetRangeDetail=false, Recalculate=false, Report=ReportNamePrint=Action}+      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 end
 </code> </code>
 +
 +\\
 +
 ==== Vložení LUA bandu do existujícího reportu ==== ==== Vložení LUA bandu do existujícího reportu ====
  
lua/tisk_pomoci_lua.1656575901.txt.gz · Poslední úprava: 2022/06/30 07:58 autor: Libor Kadaník