Uživatelské nástroje

Nástroje pro tento web


lua:upravy_systemu_obis

Ú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í

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>

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
lua/upravy_systemu_obis.txt · Poslední úprava: 2016/05/03 15:00 autor: Karel Petrů