===== Lua dialogy =====
==== Přehled možností ==
local res = dlg.create({Caption="Test dialog", Encoding=encoding,
Items={
{"label1", "label", "Nápis", nil, nil, "return Sender..' changed, value: '..cf.tostring(Params[Sender])"},
{"edit1", "edit", "editační pole", "", "default val"},
{"memo1", "memo", "memo pole", "", "default memo val"},
{"edit_integer", "edit", "integer editační pole", "integer", "1,123"},
{"edit_float", "edit", "float editační pole", "float", 1.123},
{"edit_currency", "edit", "currency editační pole - zaokrouhluje default hodnotu", "currency", "1.123"},
{"lookup1", "lookup", "lookup pole", "partneri_partneri:firma", "default val"},
{"lualookup1", "lualookup", "lualookup pole", "return cf.ShowMsg('LuaLookup pole')", "default val"},
{"combo1", "combo", "combo pole", "tohlesezobrazuje1=tohlesevraci1|tohlesezobrazuje2=tohlevraci2"},
{"list1", "listbox", "listbox pole", "tohlesezobrazuje1=tohlesevraci1|tohlesezobrazuje2=tohlevraci2"},
{"checkbox1", "checkbox", "checkbox pole", "", "1"},
{"calendartime1", "calendartime", "kalendář time", "", os.time()},
{"calbetweentime1", "calbetweentime", "datum od time|datum do time","From|To", {os.time(), os.time()+24*3600}},
{"calc1", "calc", "kalkulačka pole", "1.1.2005,EUR", "1000"},
{"dirdialog1", "dirdialog", "Výběr adresáře", "", "default dir"},
{"filedialog1", "filedialog", "Výběr souboru", "Filter EXE|*.exe|Filter DLL|*.dll", "default file"}
},
Buttons={
{"show", "Ukaž výsledek", 18},
{DLG_CANCEL, "Storno", 19}
}
})
{{:lua:dialog.png|}}
==== Správná práce s datumy ====
[[lua:datetime|Odkaz]]
==== Použítí LUA a LUA dialogů v SQL ====
Příklad SQL dotazu pro zobrazení pořadí dodavatelů/odběratelů dle ceny
local res = dlg.create(Caption="Výběr", Encoding=encoding,
Items="datum", "calbetweentime", "datum od|datum do","From|To",
"znamenko", "combo", "Odběratelé/dodavatelé","Odběratelé=1|Dodavatelé=-1",
"pocet", "edit", "Vypsat prvních ... (prázdno = všechny)"
)
if res.Result == "Cancel" then return [[select ' Storno' from common_nast]] end
local pocet = ''
if res.pocet ~= "" then pocet = [[first ]]..cf.tonumber(res.pocet) end
local sql = [[select ]]..pocet..[[ prijemky.idpartner, partneri.firma,
sum(ppolozky.mnozstvi * ppolozky.cena ) as cena, count(prijemky.idprijemka) as pocet
from sklad_prijemky prijemky
JOIN sklad_ppolozky ppolozky ON ppolozky.idprijemka = prijemky.idprijemka
JOIN sklad_karty karty ON ppolozky.idskladkarta = karty.idskladkarta
LEFT JOIN partneri_partneri partneri ON partneri.idpartner = prijemky.idpartner
where
prijemky.datum between ']]..cf.FormatSQLUnixTime(res.datumfrom)..[[' and ']]..cf.FormatSQLUnixTime(res.datumto)..[[' and
prijemky.znamenko = ']]..res.znamenko..[['
group by prijemky.idpartner, partneri.firma
order by 3 desc]]
return sql
==== Použítí "lualookup" pole ====
Příklad použití "lualookup" pole pro výběr hodnot z navázané tabulky.
Tento p říklad se používá při tisku obratové předvahy v deníku.
--zobrazeni osnovy pro vyber uctu.
--osnova se zobrazuje pres lualookup z dialogu
--vraci oznacene ucty jako string oddeleny strednikama
--Params je pole s hodnotama vsech fieldu v dialogu
--Sender je jmeno fieldu, ktery akci vyvolal
function ucto_denik.reports.SelectIDUcet(Params, Sender)
local md=ClientSession:ActivateMid("ucto_osnova")
local ds=md:FindDataSetItem("ucto_osnova")
local form=WindowsManager:CreateDetailMidDBForm(md)
local OutSP=WindowsManager:ShowFormSP(form, {Modal=true})
local values=form:GetSelectedRows()
local str=""
table.foreachi( values, function(k, v)
if k ~= values.n then
str = str..v..";"
else --posledni (nedavat strednik)
str = str..v
end
end)
ClientSession:Passivate(md)
return str
end
-- ucto print dialog (datum OD, DO, druh, prefix, vyber uctu)
function ucto_denik.reports.UctoPrintDialog()
local res = dlg.create({Caption="Zadejte rozmezí datumů, druh a prefix", Encoding=encoding,
Items={
{"datum", "calbetween", "datum od|datum do","From|To"},
{"iddruh", "lookup", "Prefix druhů dokladů", "ucto_udruh:iddruh" },
{"idstred", "lookup", "Středisko", "common_stred:idstred" },
{"iducet", "lualookup", "Vyber účty - jednotlivé účty oddělené středníkem", "return ucto_denik.reports.SelectIDUcet(Params, Sender)"}
}})
return res
end