Toto je starší verze dokumentu!
Obsah
Úpravy systému OBIS
Obarvování
OBIS umožňuje na základě určité podmínky obarvovat jak písmo tak i pozadí řádku. Je možné měnit i styl písma.
Příklad obarvování - položky rozpočtu obarví červene, pokud je cena menší než náklady a zeleně, pokud je ceníková cena menší než náklady ale cena je vetší než náklady. Obarvování dle ceny má prioritu.
ClientSession:AddLUAEvent("rozpocty_rpolozky.PrintRow","RpolozkyCenaNaklady")
function RpolozkyCenaNaklady( DSI, FieldName)
local cena=DSI:FieldByName("cena")
local naklady=DSI:FieldByName("naklady")
local cenikcena=DSI:FieldByName("cenikcena")
if cena and naklady and cena < naklady then
return {FontColor=RGB2Color(255,70,0)}
elseif cenikcena and naklady and cenikcena < naklady then
return {FontColor=RGB2Color(50,170,0)}
end
end
Příklad obarvování - dle prvního znaku '*' v hlavičce rozpoctu
ClientSession:AddLUAEvent("rozpocty.rozpocty_rozpocty.PrintRow","RozpoctyPrvniZnak")
function RozpoctyPrvniZnak( DSI, FieldName)
local znak=string.sub(DSI:FieldByName("hlavicka"),1,1)
if znak=="*" then
return
{FontColor=RGB2Color(250,100,0),FontStyle=FontStyleBold,BrushColor=RGB2Color(0,100,250)}
end
end
FontColor – barva písma v řádku BrushColor – barva pozadí řádku FontStyle – styl písma
Obarvování písma a pozadí využívá funkci RGB2Color, která má tři barevne složky - R (red), G (green), B (blue). Všechny složky se nastavují v rozmezí 0 – 255. Např. bílá barva je {(255,255,255)}, černá barva je (0,0,0), červená barva je (255,0,0).
Styly písma mohou být FontStyleBold pro tučné písmo, FontStyleItalic pro kurzívu, FontStyleUnderline pro podtržené písmo a FontStyleStrikeOut pro písmo přeškrtnuté. Jednotlivé styly se sčítají. Pokud bychom tedy chtěli použít všechny čtyři styly napíšeme FontStyleBold+FontStyleItalic+FontStyleUnderline+FontStyleStrikeOut.
Kopírování, vkládání, potvrzování
Možné eventy
Popis na stránce eventy.
Příklady
pri kopirovani rozpoctu doplneni aktualniho datumu
ClientSession:AddLUAEvent("rozpocty.rozpocty_rozpocty.AfterCopy", "AktualniDatum")
function AktualniDatum( DSI, FieldName)
DSI:SetFieldByName("Datum",os.date("%d.%m.%Y %X"))
end
pri vytvoreni nove polozky faktury doplneni kodu DPH "0"
ClientSession:AddLUAEvent("faktury.faktury_fpolozky.AfterInsert", "PolozkaFaktury")
function PolozkaFaktury( DSI, FieldName)
DSI:SetFieldByName("iddph","0")
end
pri vytvoreni noveho skladu se doplni IDSklad a Popis dle cisla zakazky
ClientSession:AddLUAEvent("sklady.sklad_sklady.BeforePost", "PopisMeziskladu")
function PopisMeziskladu( DSI, FieldName)
if DSI:FieldByName("idzakaz") then
DSI:SetFieldByName("popis",
ClientSession:LookupFields("zakazky_zakazky","idzakaz",DSI:FieldByName("idzakaz"),"popis"))
DSI:SetFieldByName("idsklad", DSI:FieldByName("idzakaz"))
end
end
pri vytvoreni noveho partnera vyplneni cenove skupiny '2'
ClientSession:AddLUAEvent("partneri.partneri_partneri.AfterInsert", "PolozkaFaktury")
function PolozkaFaktury( DSI, FieldName)
DSI:SetFieldByName("CenSkupina","2")
end
pri zalozeni vyk.protokolu vyplneni druhu 'S'
ClientSession:AddLUAEvent("vykprot.prost_vykprot.AfterInsert", "DruhVykProtokolu")
function DruhVykProtokolu( DSI, FieldName)
DSI:SetFieldByName("idvpdruh","S")
end
po postu vykonu doplneni popisu dle idvyk
ClientSession:AddLUAEvent("prostredky.prost_vykony.BeforePost", "PopisVykonu")
function PopisVykonu( DSI, FieldName)
if DSI:FieldByName("idvyk") then
DSI:SetFieldByName("popis",
ClientSession:LookupFields("prost_vyktext","idvyk",DSI:FieldByName("idvyk"),"popis"))
end
end
pri pridani noveho partnera se automaticky vyplni v partnerech novy sloupecek 'v_idvyridil' se jmenem uzivatele, ktery partnera zapsal
ClientSession:AddLUAEvent("partneri.partneri_partneri.AfterInsert", "PridaniZapsalPartnera")
function PridaniZapsalPartnera(DSI, FieldName)
DSI:SetFieldByName("v_idvyridil",ClientSession:GetIDUzivatele())
end
Cenová politika
Příklad - když se bude vydávat materiál ze skladu 01, pak vydej za Cenu1 ze skladových karet. Když ze skladu 02, pak vydej za Cenu2 a když ze skladu 03, pak vydej za Cenu3. Když se bude vydávat z jiných skladů, vždy vydej za cenu ze sloupce Cena
ClientSession:AddLUAEvent("sklkarty_zaklad.sklad_karty.GetCena","CenovaPolitikaKarty")
function CenovaPolitikaKarty( DSI, DestDSI, Params)
local SkladDS=DestDSI:OwnerMiddleDB():FindDataSetItem("sklad_prijemky")
if not SkladDS then return end
local idsklad=SkladDS:FieldByName("idsklad")
if idsklad=="01" then return DSI:FieldByName("Cena1") end
if idsklad=="07" then return DSI:FieldByName("Cena2") end
if idsklad=="13" then return DSI:FieldByName("Cena3") end
return Params.CenikCena
end
Upozorňování - budík
Upozornování slouží k připomenutí nějaké události, akce na základě výběru pomocí SQL dotazu.
Syntaxe
<{název}>|<{interval_v_minutách}>|<{další_spuštění}>
|{Tablename}|<{SQL_dotaz}>
Příklad: Chceme upozornit na všechny {Akce} partnerů, které mají {Datum akce} starší, než je aktuální datum.
Akce|10|8.11.2005 8:01:49|partneri_akce|select * from partneri_akce where
datumakce < '<lua>return os.date('%d.%m.%Y %H:%M:%S')</lua>' and
piduzivatele = '<lua>return ClientSession:GetIDUzivatele()</lua>'
Čas dalšího spuštění se nastaví automaticky po předešlém spuštění - k času posledního spuštění se přičte interval v minutách.
Lokální menu
Do lokálního menu ve všech hlavních tabulkách lze přidat vlastní uživatelskou funkci. tyto funkce jsou uloženy v xml souborech v /user/lua a jsou psané pomocí skriptovacího jazyka lua.
Příklad: Do lokálního menu v rozpočtech chceme přidat funkci, která u položek zaktualizuje ceníkovou cenu a náklady dle ceníku.
Výpis souboru rozpocty.rozpocty_rozpocty_menu.xml bude tedy vypadat např. takto:
<?xml version="1.0" encoding="windows-1250"?>
<menu>
<menuitem>
<caption>Aktualizace ceníkové ceny a nákladů v označeném rozpočtu</caption>
<cmdstring>@
local RozpoctyMD=DSI:OwnerMiddleDB()
local RozpoctyDS=RozpoctyMD:FindDataSetItem("Rozpocty_rozpocty")
RozpoctyDS:SetRangeDetail()
RkapDS=RozpoctyMD:FindDataSetItem("Rozpocty_rkap")
RpolozkyDS=RozpoctyMD:FindDataSetItem("Rozpocty_rpolozky")
RkapDS:LocateFirst()
repeat
RkapDS:SetRangeDetail()
RpolozkyDS:LocateFirst()
repeat
IDCen=RpolozkyDS:FieldByName("IDCen")
if IDCen then
Cena=ClientSession:LookupFields("Rozpocty_cenik","IDCen",IDCen,"Cena")
Naklady=ClientSession:LookupFields("Rozpocty_cenik","IDCen",IDCen,"Naklady")
LuaObj:Print(RpolozkyDS:FieldByName("IDRozp"))
RpolozkyDS:Edit()
RpolozkyDS:SetFieldByName("CenikCena", Cena)
RpolozkyDS:SetFieldByName("Naklady", Naklady)
RpolozkyDS:Post()
end
until not RpolozkyDS:LocateNext()
until not RkapDS:LocateNext()
</cmdstring>
<imageindex>38</imageindex>
</menuitem>
</menu>