Pravidla pro uživatelské definice a čeho je vhodné se vyvarovat

Zde zmíníme několik pravidel a zásad, na které je vhodné upozornit, pokud chcete definovat vlastní položky a definovatelné formuláře.

Základní pravidla

  • Na vlastní uživatelské formuláře lze vkládat i položky neuživatelské, tj. položky definované k danému Business objektu výrobcem. Naopak uživatelské položky lze vkládat pouze na uživatelské formuláře, tedy nelze nikterak modifikovat neuživatelské definovatelné formuláře dané výrobcem.
  • Definovatelné položky nepodporují možnost navzájem ovlivňovat a validovat své hodnoty. Např. že by v závislosti na hodnotě jedné položky se nastavila hodnota jiné položky apod. Jediná validace, která je u nich zatím podporována, je kontrola vyplněnosti dané položky a to hodnotou platnou pro daný typ položky. Další možností, jak zrealizovat validaci, je přidat na definovatelný formulář, kde je položka umístěna, i prvek typu výraz, a pomocí vhodné definice výrazu provést požadovanou kontrolu hodnot jiných položek.

    Kontroly hodnoty uživatelsky definovatelné položky v závislosti na jiné položce by bylo možno realizovat též skriptováním.

  • Definovatelné položky a formuláře jsou VELMI volné. To znamená, že kladou uživateli minimální omezení, co se týče možností, které on hodlá použít. To ovšem nese i riziko, že nevhodným nastavením si buď způsobí, že systém začne vykazovat v dané agendě chyby a nebude možno jej použít, dokud nebudou definice provedeny korektně, anebo si uživatel "povolí" zadat v dané agendě něco tak, jak by mu to agenda sama o sobě nepovolila.

    Jakých zásad se při vytváření definovatelných položek držet a jak správně definovatelné položky vytvářet, mazat a používat na formulářích najdete v sekci Návody, zde.

  • Volné jsou i povolené úpravy, tj. opravy definic formulářů, ale i opravy definic položek a do značné míry i jejich mazání a to ve většině případů bez ohledu na předchozí použití dané položky. Pokud tedy takové akce potřebujete provést, provádějte je VELMI obezřetně a s rozmyslem. Mohli byste si zbytečně způsobit, že do systému vnesete chyby, které začne vykazovat, nebudete se moci dostat k dříve zadaným uživatelským datům nebo systém začne ukazovat nesmyslné hodnoty apod. Objasníme na příkladu:

    Uživatel si nadefinuje položku jako Přepínač s nějakými možnostmi a použije ji k uložení definice Omezení dané agendy. Pak z nějakého důvodu zásadně definici dané položky opraví, např. změní její typ. Při použití dané definice omezení v dané agendě mu pak program bude vykazovat chybu typu "neznámé hodnoty pro omezení" apod.

  • Při vložení položky do definovatelného formuláře lze takřka libovolně pozměnit její definiční údaje oproti její definici. Tedy je možná značná variabilita při konkrétním použití dané položky v konkrétním formuláři.
  • Jednu položku lze mít v jednom formuláři vloženu vícekrát,a to i pokaždé s trochu odlišnou definicí. Hodnoty v nich se pak program snaží synchronizovat, tj. pokud zadáte hodnotu do jedné z nich, hodnota v druhé z nich se podle toho zaktualizuje.
  • Položku typu Celé číslo lze do formuláře vložit přímo jako Celé číslo, ale i jako skrytý seznam, jako vodorovný přepínač nebo svislý přepínač. Interně je každá z možností u posledních tří prvků zapsána jako celé číslo. Jaké jsou vizuální reprezentace daných možností, tj. co se bude nabízet ve formuláři vizuálně uživateli u takového prvku, je dáno pouze definicí daného formuláře.
  • Pokud chcete hodnoty položek přenášet při vzájemném importu dokladů, pak nemohou být odpovídající položky různých Business objektů nadefinovány libovolně. Co musí položka splňovat, aby bylo možno je při importu přenášet, viz Importy uživatelsky definovatelných položek.

Je pouze na uživateli, aby si za vhodnost a použití svých definic ručil!

Příklady možných důsledků

Z výše uvedeného plyne např. že položku si lze nadefinovat tak, že povolí i zadání hodnot, které jsou pro program korektní, ale pro uživatele nesmyslné. Objasníme na příkladu:

Uživatel si nadefinuje položku pro zadání hodnoty z číselníku dodávaného výrobcem, např. pro zadání řady dokladů a chce ji využít pro zadání řady skladového dokladu. Pokud by chtěl, aby se nabízely jen řady skladových dokladů, pak by si číselník musel volat s odpovídajícími parametry. Uživatel si jej ale takto nedefinuje, tedy číselník se mu nabízí celý. Pokud pak obsluha v dané položce hodnotu vybere tak, že se nejedná o skladovou řadu, systém uložení povolí (ani nemůže jinak), nicméně hodnota je pak s ohledem na původní požadavek uživatele nesmyslná.

Dále z výše uvedeného plyne, že položku můžete mít např. nadefinovánu jako skrytý seznam se třemi možnostmi, ale vloženu do formuláře jako skrytý seznam se čtyřmi úplně jinými možnostmi. Posouzení smysluplnosti takového použití je na uživateli, lépe je se mu vyvarovat. Příklad důsledku objasníme na příkladu:

Uživatel si nadefinuje položku typu skrytý seznam s možnostmi A, B, C a nastaví si, že ji chce používat pro omezení, tedy v záložce Omezení dané agendy přibude omezovací prvek s možnostmi A, B, C. Při vložení položky do formuláře však možnosti nadefinuje jinak a to X, Y, Z, W a z nich pak taky bude na jednotlivých záznamech dané agendy vybírat. Tedy na dokladech budou hodnoty X, Y, Z nebo W. Pokud si pak bude chtít záznamy dle této položky omezit, budou se mu nabízet ale hodnoty A, B, C. (Omezení bude funkční, jedná se jen o jinou reprezentaci jednotlivých voleb, nicméně za čtvrtou volbu nebude možno omezovat, jelikož pro ní v definici položky není zavedena vizuální reprezentace.)

Dále z výše uvedeného plyne, že jednu a tu samou položku můžete mít definovánu např. jako skrytý seznam a vloženu např. jako číselnou položku v jednom formuláři, příp. jako skrytý seznam s úplně jinými možnostmi v jiném formuláři. Posouzení smysluplnosti takového použití je opět na uživateli. Objasníme na příkladech:

Uživatel si nadefinuje položku skrytý seznam s možnostmi A, B, C. Tedy 3 povolené možnosti a požaduje, aby obsluha zadala jednu z nich. Danou položku si ovšem vloží jako celé číslo bez omezení. Pak obsluha může do položky zadat libovolné celé číslo i mimo počet možností - např. 5. Systém uložení povolí (ani nemůže jinak), nicméně uživatel má u záznamu zadánu hodnou, pro níž nemá vizuální reprezentaci ve skrytém seznamu (tudíž minimálně podle ní nebude moci omezit).

Uživatel si tutéž položku skrytý seznam s možnostmi A, B, C použije jako skrytý seznam s těmito hodnotami v jednom formuláři a dále jako skrytý seznam s úplně jinými hodnotami např. KK, LL, MM. Jestliže se edituje záznam přes první formulář, nabízí se mu hodnoty A, B, C a jestliže přes druhý formulář, nabízí se mu hodnoty KK, LL, MM. Volba hodnoty A je však pro program totožná s volbou hodnoty KK atd. Záleží na tom, zda je to smysluplné mít dané volby totožné i pro uživatele.

Dále, z výše uvedeného plyne, že můžete do jednoho formuláře vložit jednu a tutéž položku vícekrát a pokaždé trochu jiným způsobem. Objasníme na příkladu:

Uživatel si tutéž položku typu celé číslo vloží do formuláře dvakrát: jednou s nastavenými hranicemi pro Minimum=3 a Maximum=5 a podruhé bez hraničních hodnot. Pokud pak např. v první z nich zadá hodnotu 8, program se pokusí danou hodnotu převzít i do druhé položky, ale navíc na ni aplikuje zadané povolené maximum, tedy ji upraví na 5. Tedy uživatel v jedné položce vidí hodnotu 8, v druhé 5, přestože vnitřně jde o jednu a tu samou položku. (Do databáze se samozřejmě uloží pro každou položku pouze jedna hodnota).