( Mode : Integer; ... ) : Byte
Tato funkce umožňuje komunikaci programu Pam5 s aplikačním serverem SDPam. Komunikace se provádí dvěma způsoby:
U tohoto způsobu komunikace, zařadí Pam5 do fronty FlxSrv2 příkaz pro aplikační server SDPam (parametr Mode). Po zařazení do fronty dostane příkaz komunikační Uid, (to může trvat až 10 sec) pomocí kterého se lze později dotazovat na stav zpracování. Tak lze například hromadně generovat výplatní pásku atd.
Funkce komunikuje s prvním nalezený SDPamem. Jestliže bude SDpam nalezen a příkaz se podaří v pořádku zařadit, vrací funkce true. Jinak vrací false.
Pro uživatele Pam5 bude před vykonáním příkazu v serveru SDPam standardně vytvořeno konto jako by se uživatel přihlásil. Přihlášený uživatel musí mít práva na použité položky!
Příkazy, které tento způsob používají:
Tento způsob používá komunikační program D5Cmd.Exe. D5Cmd komunikuje s aplikačním serverem SDPam jako každý jiný jeho klient.
Tento způsob je sice rychlejší než předchozí, ale je potřeba najít program D5Cmd. To znamená, že před prvním použitím se zobrazí dialog s vyhledáním programu D5Cmd. Po vybrání si program cestu uloží do registrů pro budoucí použití:
reg:\HKEY_CURRENT_USER\Software\FLUX\GlobalSettings\Dir of D5Cmd
Další možností je uložení cesty k programu do konfiguračního souboru Net.Ini:
[DEF-PATH] Dir of D5Cmd=N:\Pam5\DPam
Toto nastavení je upřednostněno! Používá se hlavně při ladění a testování.
Jestliže bude D5Cmd nalezen, provede se přihlášení k aplikačnímu serveru SDPam. Bude hledán podle informací obsažených ve standardním konfiguračním souboru Net.Ini, který je nalezen u Pam5!!!!
[NET-DPAM] Server=localhost ServerPort=3150
Poté bude v SDPamu vytvořeno uživatelské konto podle přihlášeného uživatele v Pam5. Tento uživatel musí mít přístup k později požadovaným položkám atd.
Příkazy, které tento způsob používají:
Mode | Parametry | Popis |
cdpMode_DPamExistuje | ) : Byte | Testuje, zda je v systemu přítomen aplikační server SDPam. Test spočívá pouze v dotazu na komunikační server FlxSrv2, jestli je nějaký SDPam přihlášen. Netestuje správné nastavení aktuálního prostředí! Jestliže tedy vrátí true, je nějaký SDPam komunikačnímu serveru FlxSrv2 aktuálně znám. |
cdpMode_ZpracujDTR |
...
dim CommUid : String[40]; RepUid : String[40]; Group : Integer; Type : Integer; Specif : Integer; Name : String[100]; Month : Integer; Year : Integer; ExtGUid : String[36]; Add : Byte; WebEnable : Byte; RightsMask : Longint; dim F_Idents : File) : Byte |
Příkaz na zpracování datových výstupů pro definovanou množinu zaměstnanců.
|
cdpMode_StravenkyDoSodexoCAF |
...
dim CommUid : String[40]; RepUid : String[40]; Mes : Integer; Rok : Integer) : Byte |
Vytvoří akci pro přenos stravenek do Sodexo kafeterie. |
cdpMode_CtiSchranku |
...
CommUid : String[40]; dim F : File) : Byte |
Dotaz na stav zpracování. Čte obsah schránky CommUid ze serveru FlxSrv2 (nekomunikuje s SDPamem) a výsledek ukládá do streamu F. Při opakovaném čtení schránky se vždy vrací všechny řádky! Struktura streamu: Rozsah 0..999999 je pro textovou informaci a rozsah 1000000-1999999 slouží jako textový popis obsahu informace. Klíčová slova jsou:
Pozor! Schránka má platnost danou nastavením komunikačního serveru FlxSrv2! Po této době bude schránka zrušena! NET.INI [NET] Max recycle repository sec= |
cdpMode_ZobrazFiltry |
...
dim Error : String) : Byte |
Zobrazí seznam všech filtrů s možností jejich editace.
Jestliže nedopadne komunikace s aplikačním serverem SDpam dobře, vrací false a v parametru Error bude popis chyby. |
cdpMode_VyberFiltr |
... UidFilters : StringZ; dim IdSelFilter : Longint; dim UidSelFilter : String; dim NameSelFilter : String; dim DescSelFilter : String; dim Error : String) : Byte |
Zobrazí seznam filtrů s možností výběru jednoho filtru. Údaje vybraného filtru vrací v parametrech IdSelFilter, UidSelFilter, atd.
Jestliže bude vstupní parametr UidFilters prázdný, nabídnou se k výběru všechny dostupné filtry. Jestliže chcete výběr omezit pouze na určitou množinu filtrů, uveďte do tohoto parametru jejich Uid oddělené znakem ';'. Jestliže uživatel nic nevybere (stiskne Přeruš ), vrací funkce true, ale parametr IdSelFilter bude nula! Jestliže nedopadne komunikace s aplikačním serverem SDpam dobře, vrací false a v parametru Error bude popis chyby. |
cdpMode_DejZamPodleFiltru |
... ModeEx : Integer; Year : Word; Month : Word; Rights : Longint; PolRNStr : String[10]; UidFilters : StringZ; PolName : String[10]; OnlyId : String; Except : Byte; dim FDta : File; dim FRel : File; dim Error : String) : Byte |
Vrací vyfiltrovaný a setříděný stream zaměstnanců.
|
cdpMode_ORSInfo_1 |
... ORSDatum : DateTime; dim nPocetVedSMSek : Longint; dim nPocetVedSMOdb : Longint; dim nPocetVedSMOdd : Longint; dim nPocetVedSMRef : Longint; dim Error : String) : Byte |
Vrací počty systemizovaných míst vedoucích sekcí, odborů, oddělení a referátů, která mají nastaveno 'Vedoucí organizačního členění' = Ano a jejich přímo nadřazený organizační uzel má 'Typ členění' = Sekce, Odbor, Oddělení, Referát.
|
cdpMode_ORSInfo_2 |
... ORSDatum : DateTime; dim FData : Longint; dim Error : String) : Byte |
Vrací seznam vedoucích zaměstnanců a jejich úrovní vedení. V seznamu budou zahrnuti pouze zaměstnanci, kteří jsou zařazeni na systemizovaném místě 'Vedoucí organizačního členění' = Ano nebo kteří jsou pověřeni řízením (vyplněna alespoň jedna z položek SM - 'Pověřen řízením' X0040 - X0049).
Poznámky: n = 1..počet nalezených zaměstnanců TypOrgClenSM = typ organizačního článku, kde je vedoucí podle systemizovaného místa:
TypOrgClenPR = typ organizačního článku, kde je vedoucí podle pověření řízením. Pověřen řízením může být až na 10ti místech. Zde bude pouze nejvyšší typ podle priority (nejvyšší vlevo): orsTypSek, orsTypOdb, orsTypOdd, orsTypRef
|
Podívejte se na: System
Příklady:
Zpracování výplatních pásek pro vybrané zaměstnance (id: 63,2154,4445):
procedure Test_SDpam dim sCommUid : String; dim F : File; dim Idx : Longint; dim sText : String; dim sComm : String[20]; dim bEnd : Byte; SRewrite(F, "", true); SPut(F, 1, 63); SPut(F, 2, 2154); SPut(F, 3, 4445); if(_CallDPam(cdpMode_ZpracujDTR, sCommUid, "10080b1f39306b14f662a4", dtrGroup_Zam, dtrType_Pasky, 0, "Výplatní pásky", _ActMonth, _SysYear, "", false, false, 0, F))then bEnd := false; Idx := 0; repeat if(_CallDPam(cdpMode_CtiSchranku, sCommUid, F))then Idx := 0; while(_SGetTyp(F, Idx) > 0)do sText := _SGet(F, Idx); sComm := _SGet(F, Idx + 1000000); Trace(sText," [",sComm,"]"); if(bEnd = false)then bEnd := sComm = "stop" or sComm = "error"; endif _Inc(Idx); endwhile else bEnd := true; endif if(bEnd = false)then Delay(5000); endif until bEnd; else _MsgBox(1, "Aplikační server SDPam nebyl nalezen!!", 0); endif endproc
Zobrazení všech dostupných filtrů:
dim sErr : string;
_CallDPam(cdpMode_ZobrazFiltry, sErr);
Výběr jednoho filtru ze všech dostupných filtrů:
dim sErr : string;
dim UID : string;
_CallDPam(cdpMode_VyberFiltr, "", UID, sErr);
Výběr zaměstnanců podle všech filtrů, třídění podle položky O[400]:
dim FDta : File; dim FRel : File; SRewrite(FDta,"",true); SRewrite(FRel,"",true); _CallDPam(cdpMode_DejZamPodleFiltru, sortDoStreamu_1, _SysYear, _ActMonth, 0, "", "", "O0400", "", false, "#", FDta, FRel, sErr);
dim ORSDatum : DateTime; dim nPocetVedSMSek : Longint; dim nPocetVedSMOdb : Longint; dim nPocetVedSMOdd : Longint; dim nPocetVedSMRef : Longint; dim sErr : String; ORSDatum := _ActDateTime; Trace(_CallDPam(cdpMode_ORSInfo_1, ORSDatum, nPocetVedSMSek, nPocetVedSMOdb, nPocetVedSMOdd, nPocetVedSMRef, sErr)," Err='", sErr, "'"); Trace(ORSDatum, " ", nPocetVedSMSek, " ", nPocetVedSMOdb, " ", nPocetVedSMOdd, " ", nPocetVedSMRef);
function TextORS( Typ : Integer) if(Typ = orsTypSek)then return "Sek"; else if(Typ = orsTypOdb)then return "Odb"; else if(Typ = orsTypOdd)then return "Odd"; else if(Typ = orsTypRef)then return "Ref"; endif endif endif endif return "--"; endfunc { TextORS } procedure GetORSInfo_2 dim FDta : File; dim ORSDatum : DateTime; dim sErr : String; dim Idx : Longint; dim nUvazekId : Longint; dim nTypOrgClenSM : Longint; dim nTypOrgClenPR : Longint; ORSDatum := _ActDateTime; {_Date(1,1,2018);} SRewrite(FDta,"",true); Trace(_CallDPam(cdpMode_ORSInfo_2, ORSDatum, FDta, sErr), " Err='", sErr, "'"); if(_SFirst(FDta, Idx))then repeat if(_SGetTyp(FDta,Idx + 000000) <> 0)then nUvazekId := _SGet(FDta, Idx + 000000); endif; if(_SGetTyp(FDta,Idx + 100000) <> 0)then nTypOrgClenSM := _SGet(FDta, Idx + 100000); endif; if(_SGetTyp(FDta,Idx + 200000) <> 0)then nTypOrgClenPR := _SGet(FDta, Idx + 200000); endif; if(_FindRecId(dbtO, nUvazekId))then Trace(O[oJmeno],";",TextORS(nTypOrgClenSM),";",TextORS(nTypOrgClenPR)); endif until _SNext(FDta, Idx) = false or Idx > 100000; endif endproc { GetORSInfo_2 }