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/07/13 11:16] – [Ukázka tisku vizuálního:] 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 95: Řádek 38:
  
 ====Ukázka nevizuálního tisku middle:==== ====Ukázka nevizuálního tisku middle:====
-Vytiskne do souboru "m:/tmp/out.sxc" řádky "R0015267", "RZ00005" z middle MD+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é". Middle musí být otevřené a vybrané řádky musí být "dohledatelné".
  
 <code lua> <code lua>
-ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.stc"}, {output="m:/tmp/out.sxc"}, {"R0015267", "RZ00005"}, WR_USE_SELECTED)+ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.rep", Print=PRINT_FILE}, {output="/tmp/out.pdf"}, {"R0015267", "RZ00005"}, WR_USE_SELECTED)
 </code> </code>
  
 ====Ukázka tisku vizuálního:==== ====Ukázka tisku vizuálního:====
  
--pokud potřebuji **ID** a tiskne se z **SQL** je **první field v SQL (ID)**. ID urcuje, zda je report seznam ID="" nebo neni ID~="" \\ +-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**\\+-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**\\ -**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é !!!**+-//<Middle Name="MiddleName">// pro podadresář v reports (report/MiddleName/)\\ 
 +-pokud neni DSI z SQL **otevřené** otevře se automaticky v cf.LuaFormPrintReport
  
 <code lua> <code lua>
Řádek 115: Řádek 59:
       <Table Name="a">       <Table Name="a">
         <RequredIndexes>         <RequredIndexes>
-IDPrijemka-P+IDPRIJEMKA-P
         </RequredIndexes>         </RequredIndexes>
       </Table>       </Table>
Řádek 130: Řádek 74:
  
 \\ \\
-Preferovaný způsob fungující v mobisu: 
  
-**metoda CreatePrint-CreateReport-StartPrint** +=== Základní metoda tisku PrintReport (WindowsManager:Print) ===
- +
-<code lua> +
-LuaForm.Func.v_rozpocty_rozpocty_reports_Specifikace=+
-  function(Data) +
-    Data.Options {Report Data.FirstParams.ReportName, Print = Data.FirstParams.Action, Caption=enc"Specifikace"+
-    local ID = "" +
-    --pokudse tiskne jen 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.DSI, ID, dokumenty_dokumenty.GetDocumentFileName("ROZPOCTY", +
-        Data.FirstParams.ReportName, Data.FirstParams.Name, Data.DSI), Data.Options) +
-    end +
-    local Config = {output = Data.FileName, output_type = Data.FirstParams.OutputType, document_name = Data.FirstParams.Name} +
-    return LuaForm.StartPrintReport(Data.Options, Config) +
-  end, +
-  function(Data) +
-    ... +
-    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"}) +
-    ...     +
-    if Data.FirstParams.Action==PRINT_DOCUMENT then +
-      dokumenty_dokumenty.AfterSaveToDocumentDir(nil, "", Data.FileName, Data.Options) +
-    end +
-    return LuaForm.EndPrintReport() +
-    ... +
-  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 +
-</code> +
- +
-\\ +
-**metoda LuaFormPrintReport (WindowsManager:Print)**+
  
 <code lua> <code lua>
Řádek 186: Řádek 81:
   function(Data)   function(Data)
     Data.PrintMid = v_zakazky_zakazky.reports.PrintZakpol(Data.DSI, Data.Form)     Data.PrintMid = v_zakazky_zakazky.reports.PrintZakpol(Data.DSI, Data.Form)
-    return cf.LuaFormPrintReport(Data, Data.PrintMid, {GotoNextPage=true, SetRangeDetail=false, Recalculate=false, Report=Data.FirstParams.ReportName, Print=Data.FirstParams.Action})+    return cf.LuaFormPrintReport(Data, Data.PrintMid, {GotoNextPage=true, SetRangeDetail=false, Recalculate=false})
   end,   end,
   finally=function(Data)   finally=function(Data)
Řádek 233: Řádek 128:
  
 </code> </code>
 +
 +=== Metoda tisku Start/EndPrintReport pokud nelze použít jednodušší PrintReport ===
 +
 +<code lua>
 +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
 +</code>
 +
 +\\
 +
 ==== Vložení LUA bandu do existujícího reportu ==== ==== Vložení LUA bandu do existujícího reportu ====
  
lua/tisk_pomoci_lua.1657710975.txt.gz · Poslední úprava: 2022/07/13 11:16 autor: Libor Kadaník