====== Ú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. Nastavuje se v Menu -> Ostatní -> Nastavení -> záložka **Upozorňování** {{lua:nastaveni_budik.png|}} **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 < 'return os.date('%d.%m.%Y %H:%M:%S')' and piduzivatele = 'return ClientSession:GetIDUzivatele()' Č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: Aktualizace ceníkové ceny a nákladů v označeném rozpočtu @ 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() 38 ==== Hromadná změna ID v LUAConsole MassChange ==== * v LUA console, zapnout DEBUG * master tabulku není nutné opravovat, změní se v MassChange (je ale nutný refresh) * spustit: cf.MassChangeID("partneri_partneri:idpartner", "oldid", "newid", DEBUG, nil, true) --posledni param je dryrun