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 10:49] – [Ukázka tisku nevizuá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 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"> 
 +    <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("", "") 
 +    ...  
 </code> </code>
-====Ukázka nevizuálního tisku middle:===+ 
-Vytiskne do souboru "m:/tmp/out.sxc" řádky "R0015267", "RZ00005" z middle MD +\\ 
-Middle musí být otevřené a vybrané řádky musí být "dohledatelné".+ 
 +=== Základní metoda tisku PrintReport (WindowsManager:Print) ===
  
 <code lua> <code lua>
-ClientSession:Print(MD, {Report=REPORTSDIR().."rozpocty/rozp.stc"}{output="m:/tmp/out.sxc"}, {"R0015267""RZ00005"}, WR_USE_SELECTED+LuaForm.Func.v_zakazky_zakazky_reports_PrintZakpol=
-</code>+  function(Data) 
 +    Data.PrintMid = v_zakazky_zakazky.reports.PrintZakpol(Data.DSIData.Form) 
 +    return cf.LuaFormPrintReport(Data, Data.PrintMid, {GotoNextPage=trueSetRangeDetail=false, Recalculate=false}
 +  end, 
 +  finally=function(Data
 +    if Data.PrintMid then Data.PrintMid:Free() end 
 +  end 
 +}
  
-====Ukázka tisku vizuálního:==== 
  
-Preferovaný způsob fungující v mobisu:+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)
  
-**metoda CreatePrint-CreateReport-StartPrint**+  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 
 + 
 +</code> 
 + 
 +=== Metoda tisku Start/EndPrintReport pokud nelze použít jednodušší PrintReport ===
  
 <code lua> <code lua>
 LuaForm.Func.v_rozpocty_rozpocty_reports_Specifikace={ LuaForm.Func.v_rozpocty_rozpocty_reports_Specifikace={
   function(Data)   function(Data)
-    Data.Options = {Report = Data.FirstParams.ReportNamePrint Data.FirstParams.Action, Caption=enc"Specifikace"+    return cf.LuaFormStartPrintReport(Data, {GotoNextPage=(#Data.Form:GetSelectedRows()==1)})
-    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,   end,
   function(Data)   function(Data)
     ...     ...
-    LuaForm.CallFunc("WalkRecordsVisual", nil, Data.DSI, Data.Form, {WR_USE_SELECTED, function(DSI, ID, ntf)+    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)       v_rozpocty_rozpocty.reports.TiskKapitol(Data.DSI, Data.Form, Data.Report, GroupPolozky)
     end, "Tisk zakazek", "PrCarKod"})     end, "Tisk zakazek", "PrCarKod"})
 +  end,
 +  function(Data)
     ...         ...    
-    if Data.FirstParams.Action==PRINT_DOCUMENT then +    return cf.LuaFormEndPrintReport(Data)
-      dokumenty_dokumenty.AfterSaveToDocumentDir(nil, "", Data.FileName, Data.Options) +
-    end +
-    return LuaForm.EndPrintReport() +
-    ...+
   end,   end,
 } }
Řádek 181: Řádek 164:
 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.1657709360.txt.gz · Poslední úprava: 2022/07/13 10:49 autor: Libor Kadaník