Schvalovací postupy

Top  Previous  Next

Seznam témat:

umístění

popis funkce

Umístění

Funkce pro práci se schvalovacími postupy (schvalovací proces) je umístěna v jednotlivých agendách (viz bod Popis funkce) většinou v dialogovém okně a spouští se kombinací kláves Ctrl+F2 (obr. 1).

Obr. 1 Umístění tlačítka schvalovacího postupu v agendě nabídky

V některých agendách jsou schvalovací postupy umístěny v přídavném panelu prohlížeče (např. Nabídky) - viz obr. 2:

Obr. 2 Umístění schvalovacího postupu v přídavném panelu prohlížeče nabídek

Popis funkce

Schvalovací procesy jsou součástí řízení toku práce. Funkce slouží typicky k tomu, aby bylo možné předem stanovit způsob (postup), jakým bude konkrétní doklad vypořádán a aby bylo možno zjistit, ve které fázi se doklad právě nachází. Funkce současně umožňuje zobrazení množiny dokladů, které jsou právě přiřazeny jednomu uživateli. Vedlejším efektem jsou záznamy o zpracování jednotlivých kroků, kdo je zpracoval, kdy a jakým způsobem.

Tato funkce je implementována do úloh:

Evidence dokumentů (Evidence pošty, Evidence smluv)
Nabídky
Zakázky
Přijaté objednávky
Účetní doklady
Příkazy k úhradě
Projekty
Výrobní příkazy
Vydané objednávky
Evidence změn dokumentů (Evidence pošty, Evidence smluv)
Evidence zmetků
Obchodní plány
Hodnocení zaměstnanců ve mzdách
Evidence údržby v nájemném

Vytvoření schvalovacího postupu

Aby bylo možno se schvalovacími postupy v jednotlivých agendách pracovat, je potřeba je nejdříve vytvořit. To lze provést v menu Workflow | Schvalovací postupy (viz obr. 3)

Obr. 3 Umístění schvalovacích postupů v menu systému Vision ERP

Po výběru položky menu se otevře prohlížeč nadefinovaných schvalovacích postupů (obr. 4)

Obr. 4 Prohlížeč schvalovacích postupů

Po výběru konkrétního postupu se otevře dialogové okno schvalovacího postupu (obr. 5)

Obr. 5 Dialogové okno schvalovacího postupu

Kromě polí jednoznačně identifikujících schvalovací postup obsahuje dialogové okno posloupnost kroků, které je potřeba absolvovat, aby byl dokument dané agendy řádně zpracován.

Každý krok schvalovacího postupu obsahuje tyto informace (obr. 6)

Obr. 6 Dialogové okno konkrétního kroku schvalovacího postupu

Popis položek:

Uživatel nebo skupina, kdo provede akci ... Po vyplnění tohoto pole bude moci krok postupu provést buď konkrétní uživatel nebo libovolný člen zadané skupiny. V případě, že pole zůstane nevyplněno, bude moci krok provést libovolný uživatel
Skript před/po akci ... pomocí těchto skriptů lze do schvalovacího postupu vložit "inteligenci" - tzn. provést akce související s prováděným krokem. (viz oddíl Návaznosti | Práce se skripty)
Osobu převzít z kroku ... nastaví uživatele, který má provést daný krok, na základě vybraného kroku schvalovacího postupu
Následující kroky ... seznam všech možných následujících kroků, kterými může schvalovací proces pokračovat. V přiloženém parametru můžete rozhodnout, zda program bude pokračovat jedním nebo vícero kroky

Přiřazení schvalovacího postupu vybrané agendě

Ve většině případů stačí v příslušné řadě dokladů dané agendy vyplnit sloupec schvalovací postup (obr. 7)

Obr. 7 Vyplnění schvalovacího postupu v řadě nabídek

V projektovém řízení lze navíc vyplnit schvalovací postup do typu prvku (obr. 8)

Obr. 8 Vyplnění schvalovacího postupu u typu prvku

Prohlížeč nabídek lze upravit tak, aby obsahoval údaje ze schvalovacího procesu (obr. 9)

Obr. 9 Přidané sloupce do prohlížeče nabídek

Příklad: ukázka skriptu, pomocí kterého byly přidány sloupce do prohlížeče nabídek v obrázku 9

SELECT h.rada, h.dokl,

 (SELECT FIRST f.nazev1 || ',   ' || f.obec || ', ' || f.ulice FROM DBA.gfinfo as f

 WHERE f.ico = h.ico AND f.multi = h.multi AND

   f.platiod <= cast (h.zalozeno as date) AND

   (f.platido >= cast (h.zalozeno as date) OR f.platido IS NULL)) as _poptavajici,

 h.stav, h.nazev, h.terminnab, h.datplatnab, h.termin, h.terminzac, h.zaruka,

 h.cena,

 h.oprada || substring ('000000', 1, 6-length (h.opdokl)) || h.opdokl as _oop,

 h.ico, h.multi, h.obchodnik, h.zalozeno, h.zalozil,

 s.color, s.bgcolor,

 // přidané sloupce Dalsi_krok, Termin, Povereny_prac

  (select first nazev from dba.wfukoly as w

    where (cast(h.dokl as char)||';'||h.rada) = w.doklad

      and w.typ_vazby=1 order by w.id DESC) as Dalsi_krok,

                     

  (select first termin from dba.wfukoly as w

    where (cast(h.dokl as char)||';'||h.rada) = w.doklad

      and w.typ_vazby=1 order by w.id DESC) as Termin,

     

     

    (select p.Prijmeni||' '||p.Jmeno from dba._mzosobnikarty as p where

    p.ai =  (select first osoba_id from dba.wfukoly as w

             where (cast(h.dokl as char)||';'||h.rada) = w.doklad and w.typ_vazby=1 order by w.id DESC)  

    and data_id = (select first osoba_data_id from dba.wfukoly as w

             where (cast(h.dokl as char)||';'||h.rada) = w.doklad and w.typ_vazby=1 order by w.id DESC)) as  Povereny_prac        

     

FROM DBA.onabhd as h, DBA.onabstavy as s

WHERE h.stav = s.stav

 and (h.stav not like 'Prodán%') and (h.stav not like 'Zamít%') and h.obchodnik = (select fullname from dba._gusers)

ORDER BY h.rada, h.dokl DESC

Použití schvalovacího postupu

V případě, že jsou splněny výše uvedené podmínky - tzn. schvalovací postup je vytvořen a přiřazen dané řadě agendy, lze vybraný schvalovací postup používat k vypořádání dokladů dané agendy.

Při vytvoření nového dokladu dané agendy (např. nové nabídky) program na pozadí vytvoří první úkol schvalovacího postupu (obr. 10)

Obr. 10 Vytvoření prvního úkolu schvalovacího postupu při vytvoření nové nabídky

nebo se při otevření nabídky, pokud je v položce schvalovacího postupu vyplněno pole Zobrazit zprávu při prvním otevření tak, jako na obr. 6, zobrazí informační okno (obr. 11)

Obr. 11 Informativní okno o úkolu, který se má provést

Pokud chcete daný doklad agendy postoupit k dalšímu zpracování, je potřeba buď kliknout na zvýrazněný obdélník v panelu schvalovacího postupu, nebo otevřít dialogové okno agendy a kliknout na tlačítko Ctrl+F2 Předání, schválení... Otevře se okno kroku schvalovacího procesu (viz obr. 12).

Obr. 12 Dialogové okno schvalovacího procesu

V tomto okně lze nastavit další průběh schvalovacího procesu. Přepínač Schvalovací proces určuje směr, kterým se bude proces ubírat. V případě, že seznam možných následujících kroků obsahuje víc než jeden záznam, lze kliknutím na sloupec Použít nebo stisknutím mezerníku vybrat kroky, kterými se bude schvalovací proces ubírat. U každého z následujících kroků lze zvolit konkrétního uživatele a termín, do kdy je třeba daný krok provést. Tato pole lze měnit jak myší, tak i pomocí klávesnice.

Pokud nepatříte do skupiny uživatelů, která může ukončit daný krok, otevře se dialogové okno kroku schvalovacího procesu v omezeném zobrazí - pouze se záložkou Historie (viz obr. 13), ve které jsou zobrazeny všechny doposud vytvořené kroky schvalovacího procesu.

Obr. 13 Historie schvalovacího procesu

Omezení, podmínky provozu

Hromadné schvalování záznamů

Zkušení uživatelé se mohou pokusit nastavit agendu schvalovacích postupů tak, aby bylo možno schvalovat více označených záznamů v agendě naráz. K tomu je potřeba splnit několik podmínek:

1. Hromadně schvalovat záznamy lze pouze v těch agendách, u který lze v prohlížeči zobrazit přídavný panel (obr. 2)

2. Ve skriptu před ošetřit, zda vybraný záznam může být hromadně zpracován. K tomu lze použít proměnnou Iterace, která je naplněna pořadovým číslem průchodu cyklem. Při prvním průchodu se uloží parametry, které musí splňovat každý následující průchod cyklem.

3. Programově je hlídáno, aby vybrané záznamy byly ve stejném stupni zpracování (stejný krok schvalovacího postupu)

Nastavení adresáta prvního kroku schvalovacího procesu

V každém kroku schvalovacího postupu, tedy i v prvním, může být předem určeno, který uživatel daný krok provede. Při předávání schvalovacího procesu do dalšího kroku si uživatel, pokud je to v definici schvalovacího postupu umožněno, může zvolit adresáta, který následující krok provede. Výjimkou je první (počáteční) krok schvalovacího procesu, který se zakládá v databázovém triggeru dané agendy. Pro zkušenější uživatele zde existuje možnost, jak tohoto adresáta prvního kroku zvolit. Lze toho dosáhnout nastavením proměnné workflow_start_user v dočasné tabulce oparams (ukládá se zde sysname uživatele).

Zastavení procesu

Kliknutím na tlačítko Zastavení procesu dojde k "násilném" přerušení schvalovacího procesu. Ve skriptu po lze tuto skutečnost zjistit tak, že proměnná SelectedStepId má hodnotu -1.

Restart procesu

Tlačítko Restart procesu restartuje schvalovací proces tím, že znovu založí první krok.

Návaznosti

Práce se skripty

Ve skriptech schvalovacích postupů lze pracovat s následujícími proměnnými:

Název proměnné

Script before

Script after

Popis

BrowserData

X

X

Odkaz na datovou množinu obsahující aktuální záznam v prohlížeči. Má smysl použít pouze v případě, že se schvalovací postup volá z přídavného panelu prohlížeče. Při spuštění schvalovacího procesu z dialogu agendy (přes tlačítko Ctrl+F2) má odkaz hodnotu null

CanStop

X

 

Nastavení přístupnosti tlačítka Zastavení procesu. Pokud má proměnná hodnotu False, tlačítko je nepřístupné

DalsiKrok

X

 

Booleovská proměnná umožňující provedení dalšího kroku v případě, že ho má provést ten samý uživatel

DeadLine

X

X

Počet dnů ode dneška k vyřízení úkolu

DeadLineDate

X

X

Termín vyřízení úkolu

Dialog

X

X

Odkaz na dialogové okno schvalovacího procesu. Má smysl použít pouze v případě, že se schvalovací postup volá z dialogu agendy (přes tlačítko Ctrl+F2). V opačném případě (z přídavného panelu prohlížeče) má odkaz hodnotu null

Direction

X

 

Nastavením této proměnné je možno předvyplnit směr pokračování schvalovacího procesu (vrátit zpět O, zopakovat 1, předat dál 2)

FinishedStepDataId

X

X

Ukončovaný krok - wfschvalpostupit.data_id

FinishedStepId

X

X

Ukončovaný krok - wfschvalpostupit.ai

FinishedStepUserId

X

X

Ukončovaný krok - wfschvalpostupit.u_id

Iterace

X

X

Pořadové číslo záznamu, pro který se spouští schvalovací proces

PostupDataId

X

X

Identifikace hlavičky schvalovacího postupu - wfschvalpostuphd.data_id

PostupId

X

X

Identifikace hlavičky schvalovacího postupu - wfschvalpostuphd.ai

SelectedStepDataId

X

X

Krok, který se má provést - wfschvalpostupit.data_id

SelectedStepId

X

X

Krok, který se má provést - wfschvalpostupit.ai. V případě, že se má provádět více kroků než 1, obsahuje proměnná hodnotu -2. V takovém případě je potřeba kroky, které se mají provádět, zjistit z dočasné tabulky wtfschvalproces - jsou to ty řádky, které mají ve sloupci pouzit hodnotu 1.
V případě násilného ukončení schvalovacího postupu (stisknutí tlačítka Zastavení procesu) má proměnná hodnotu -1.

SelectedStepUserId

X

X

Krok, který se má provést - wfschvalpostupit.u_id. V případě, že se má provádět více kroků než 1, obsahuje proměnná hodnotu -2. V takovém případě je potřeba kroky, které se mají provádět, zjistit z dočasné tabulky wtfschvalproces - jsou to ty řádky, které mají ve sloupci pouzit hodnotu 1.

StoppedDue

X

 

Důvod zastavení schvalovacího procesu

StopProcess

X

 

Booleovská proměnná rozhodující o tom, zda se má schvalovací proces zastavit či nikoliv

TaskDataId

X

X

Ukončovaný úkol - wfukoly.data_id

TaskId

X

X

Ukončovaný úkol - wfukoly.id

TextToTrustee

X

X

Poznámka pro příjemce dalšího kroku

Trustee

X

X

Hodnota sloupce gusers.sysname uživatele, který má provést následující krok

 

 

 

 

Kromě proměnných se ve skriptech schvalovacích postupů používají dočasné tabulky:

wtfschvalproces, která je naplněna všemi kroky pro daný směr. Při změně směru schvalovacího procesu program tuto tabulku vymaže a znovu naplní všemi přípustnými kroky dle definice schvalovacího postupu. Tato tabulka slouží jako datový zdroj pro DBGrid zobrazující následující kroky schvalovacího procesu. Klíčový sloupec pouzit slouží k označení kroků, kterými bude schvalovací proces pokračovat (pouzit=1).

wtfukoly_osoby, která slouží pro výběr osoby, která provede následující krok. Program tuto tabulku předvyplní dle nastavení sloupce "Uživatel nebo skupina, která provede akci" v položce schvalovacího postupu (viz obr. 6). V případě, že sloupec bude vyplněn konkrétním uživatelem systému Vision ERP, dočasná tabulka bude obsahovat pouze tohoto uživatele a nebude možno jej změnit. Pokud sloupec bude obsahovat skupinu uživatelů, program dočasnou tabulku naplní všemi členy skupiny. Pokud sloupec nebude vyplněn, dočasná tabulka bude obsahovat všechny uživatele systému Vision ERP.
Takto předvyplněná dočasná tabulka vstupuje do skriptu před provedením akce, ve kterém je možno provést v této tabulce změny. Jako uživatel, který provede následující akci, je pak vybrán uživatel s nejnižší hodnotou sloupce poradi.
Tabulka původně obsahovala sloupce osoba_id, osoba_data_id, poradi a sysname. Po změně algoritmu schvalovacího procesu, kdy byly umožněny paralelní kroky, přibyly do tabulky i sloupce step_ai, step_dataid identifikující krok schvalovacího procesu, ke kterému se uživatelé vztahují.

Část skriptu po provedení akce (mění stav projektu):

var

 RadaCtrl: TBrowserStatic;

 DoklCtrl: TBrowserStatic;

 PoradiCtrl: TBrowserStatic;

 StavCtrl: TBrowserLookupEdit;

 Rada, Stav: string;

 Dokl, Poradi: Integer;

 

 if Dialog <> nil then // voláno z dialogového okna projektů

 begin

   StavCtrl:= TBrowserLookupEdit(Dialog.FindComponent('BrLEditStav'));

   RadaCtrl:= TBrowserStatic(Dialog.FindComponent('BrStaticRada'));

   DoklCtrl:= TBrowserStatic(Dialog.FindComponent('BrStaticdokl'));

   PoradiCtrl:= TBrowserStatic(Dialog.FindComponent('BrStaticPoradi'));

 

   if (StavCtrl = nil) or (RadaCtrl = nil) or (DoklCtrl = nil) or (PoradiCtrl = nil) then

   RaiseException('Nenalezen potřebný editační prvek.');

 

   Rada:= RadaCtrl.text;

   Dokl:= StrToInt(DoklCtrl.text);

   Poradi:= StrToInt(PoradiCtrl.text);

   Stav:= StavCtrl.Text;

 end

   else // voláno z přídavného panelu prohlížeče projektů

 begin

   Rada:= BrowserData.FieldByName('rada_id').AsString;

   Dokl:= BrowserData.FieldByName('id_dokl').AsInteger;

   Poradi:= BrowserData.FieldByName('id_poradi').AsInteger;

   Stav:= BrowserData.FieldByName('stav').AsString;

 end;

 

case SelectedStepUserId of

 

 23:   begin

         Stav:= 'Nový požadavek';

         ExecuteSQL('UPDATE dba.omarkakce SET stav =:stav WHERE rada_id =:rada_id AND id_dokl =:id_dokl AND id_poradi =:id_poradi', [Stav, Rada, Dokl, Poradi]);

       end;

end;

Související témata