_CallDPam

(    Mode : Integer;
     ...        ) : Byte

Tato funkce umožňuje komunikaci programu Pam5 s aplikačním serverem SDPam. Komunikace se provádí dvěma způsoby:

Komunikace pomocí komunikačního serveru FlxSrv2

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

  1. cdpMode_ZpracujDTR
  2. cdpMode_CtiSchranku
  3. cdpMode_StravenkyDoSodexoCAF

Komunikace pomocí komunikačního programu D5Cmd

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 ...

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

  1. cdpMode_ZobrazFiltry
  2. cdpMode_VyberFiltr
  3. cdpMode_DejZamPodleFiltru

 

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ů.

  • CommUid - komunikační Uid, který se používá pro pozdější zjištění stavu zpracování
  • RepUid - Uid tiskové sestavy, která se bude zpracovávat (pozor! nejedná se o Uid FGE sestavy!)
  • Group - Skupina datového výstupu. Informativní údaj.
    • dtrGroup_Zam (0) zaměstnanci
    • dtrGroup_Uzaverka (1) uzávěrka
    • dtrGroup_Ostatni (2) ostatní
  • Type - Typ datového výstupu. Podle typu lze filtrovat a přidělovat práva.
    • dtrType_Pasky (1) výplatní pásky
    • dtrType_MzdList (2) mzdové listy
    • dtrType_EvidList (3) evidenční listy
    • dtrType_Rekap (4) rekapitulace
    • dtrType_VypocDanZvyh (5) výpočet daně a daňového zvýhodnění
    • dtrType_Ostatni (100) ostatní
  • Specif - Upřesnění typu. Výčet se mění podle zadaného typu.
  • Name - Název datového výstupu. Obecných 100 znaků textu, který bude zobrazován v přehledech.
  • Month, Year - období pro zpracování
  • ExtGUid - Guid nebo jiný řetězec max délky 36 znaků, podle kterého bude probíhat vyhledání v databázi. Může být prázdný.
  • Add
    false
    : podle klíče:
    'Type,Specif,ManId,Year,Month,ExtGUid,Language'
    vyhledá větu v databázi a jestliže bude nalezena, přepíše jí.
    true: věta bude vždy přidána
  • WebEnable
    true: Výstup je pro zobrazení ve webovém portálu povolen.
    false: Výstup není pro zobrazení ve webovém portálu povolen.
  • RightsMask - Maska práv k zaměstnancům. Bude použita pouze v případě, kdy nebude nulová a kdy F_Idents nebude obsahovat žádný ident.
  • F_Idents - Seznam identů zaměstnanců, kteří se mají zpracovat.
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:

  • start - start úlohy
  • stop - konec úlohy - skončila bez chyby
  • info - běžná informace o zpracování
  • count - informace o stavu zpracování (pouze každá 10 věta)
  • error - konec úlohy - skončila s chybou

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ů.

  • ModeEx
  • - způsob plnění streamu:
    • sortDoStreamu_1 - Plní stream takto.
    • sortDoStreamu_2 - Plní stream takto.
  • Year - rok pro historii a práva
  • Month - měsíc pro historii a práva
  • Rights - Přístupová práva (skupiny) na zaměstnance. Jestliže zadáte 0, budou automaticky doplněna přístupová práva pro přihlášeného zaměstnance.
  • PolRNStr - Název položky, ve které je uloženo režijní středisko pro rozpočítání nákladů (Př.: 'O0400').

    Jestliže bude tento parametr prázdný, nebudou SQL příkazy vytvářeny s ohledem na rozpočítávání nákladů ani u projektů, zakázek a zdrojů.
  • UidFilters - Seznam Uid filtrů oddělených znakem ';', které chcete zobrazit ve výběru. Jestliže zde bude prázdno, zobrazí se všechny dostupné filtry. Jestliže zde bude uveden pouze jeden filtr, nebude seznam filtrů vůbec zobrazen a bude podle něho rovnou filtrováno.
  • PolName, OnlyId, Except - Seznam třídicích kritérií
  • FDta, FRel - viz plnění streamů
  • Error - Jestliže nedopadne komunikace s aplikačním serverem SDpam dobře, vrací false a v parametru Error bude popis chyby.
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.

  • ORSDatum - k tomuto datu bude ORS řez vytvořen a k tomuto datu budou vyšetřovány historické položky pověření řízením.
  • nPocetVedSMSek - počet vedoucích SM pod sekcí
  • nPocetVedSMOdb - počet vedoucích SM pod odborem
  • nPocetVedSMOdd - počet vedoucích SM pod oddělením
  • nPocetVedSMRef - počet vedoucích SM pod referátem
  • Error - Jestliže nedopadne komunikace s aplikačním serverem SDpam dobře, vrací false a v parametru Error bude popis chyby.

Příklad

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).

  • ORSDatum - k tomuto datu bude ORS řez vytvořen a k tomuto datu budou vyšetřovány historické položky pověření řízením.
  • FData - otevřený stream, kam budou vracena data ve formátu:
    • n + 000000 = Ident
    • n + 100000 = TypOrgClenSM
    • n + 200000 = TypOrgClenPR
  • Error - Jestliže nedopadne komunikace s aplikačním serverem SDpam dobře, vrací false a v parametru Error bude popis chyby.

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:

  1. orsTypSek - Sekce
  2. orsTypOdb - Odbor
  3. orsTypOdd - Oddělení
  4. orsTypRef - Referát

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

 

Příklad

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);

cdpMode_ORSInfo_1

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);

cdpMode_ORSInfo_2

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 }