Formuláře/Razítka v klasickém kompatibilním formátu
Klíčová slova:
Formulář
Datová položka
Číselník
Kontrola dat
Vstup údajů do systému
Zde se popisuje jazyk definice razítek v klasické podobě kompatibilní s předchozími verzemi
systému. Razítka je možno i nadále definovat tímto způsobem, exituje ale i novější syntax
a možnosti definování razítek bez nutnosti detailního kreslení. O tom viz
Práce s knihovnou razítek
Editace razítek, MIC, sestavy apod.
Jazyk definice razítek
Klasický jazyk definice razítek je velmi obecný a umožňuje vytváření skutečně ďábelsky se chovajících
objektů. Vznikl ovšem před cca 8-mi lety a má svoje slabiny. Největší je složitost při definici
MIC razítek a sestav vůbec, kde se jenom s krajní opatrností dá udržet vztah mezi položkami, číselníky,
orakuly na přepočet a orakuly na interpretaci. Jakmile je jednou razítko hotovo, je vyhráno, ale
jeho design může být dosti složitý. Novější syntax tedy ke klasické, která je pořád možná, dodává
silnější nástroje, kterými se dá řada exotických vlastností definovat jedním rázem.
Abychom si to trochu osvětlili. Typické MIC razítko obsahuje sekvenci trojic položek. V první složce
trojice je název/zkratka antibiotika. Ve druhé se zadává číslo nebo písmenná zkratka - v každém případě
se to chápe jako údaj popisující minimální koncentraci, která daného mikroba "zdeptala". Ve třetí složce
je pak interpretace, zda tedy byl mikrob na dané antibiotiku citlivý apod. Pohyb po těchto trojicích
chceme organizovat jako po celcích - je tedy potřeba naprogramovat manuálně chod mezi položkami. Dále
většinou nechceme, aby se jméno předdefinovaného antibiotika dalo přepsat - jedná se o standardizovanou
sestavu. K ní ovšem můžeme chtít přidat manuálně další antibiotika. Pak chceme do druhé složky vyplňovat
data - koncentrace jsou ale pokaždé jinačí u každého antibiotika a přitom chceme buď používat nabídku,
nebo přepočítávat data - logaritmovat nebo interpretovat písmenné zkratky. nakonec chceme, aby se podle
breakpointu našla vhodná interpretace C,R,I a "šoupla" do třetí složky, v ní to ale klidně zase budeme
chtít i z ruky poopravit. Důležité ale je, že nechceme, aby tyto vlastnosti byly zadrátovány v programu,
ale abychom razítko mohli definovat externě. Program ale musí nadále umět chápat správně obsah razítka.
Tato diskuse snad trochu ozřejmuje i složitost implementace celého software. Program se nemůže nijak spoléhat na obsah
razítek podle jmen položek, například. Žádná jména předem nezná, rovněž ani kódy antibiotik nic neznačí
a předem nejsou známy. Pokud se ale správce systému chová podle pravidel, může sám definovat libovolné sestavy
a systém jim bude rozumět - to také bylo hlavním cílem vývoje systému, úplná nezávislost uživatele na
programování.
Princip funkce formulářů je následující bez ohledu na použitou syntax, kalsickou i novou:
Formuláře slouží ke skupinovému vstupu dat do počítače. Jsou relativně autonomní složkou systému, která má společné rysy za všech okolností. Formulářový vstup se uplatňuje všude tam, kde vstupuje najednou celá řada údajů. Umožňují se různé nestandardní akce, jako je křížové doplnění údajů z databáze, kontrola na správnost součtu, automatické generování výčetek apod.
V následujícím popise budeme vycházet ze standardního vybarvení programů rodiny ArcShellu.
Jelikož mají tyto programy společně nastavitelné barvy, může se finální nastavení lišit případ
od případu. To se týká verze 2001 i předchozích verzí.
Formuláře se objevují obvykle v okénkách a jejich rozměr může být v podstatě libovolný. Formulář zde figuruje jako
papír a okénko jako průzor na něj. Okénkem je možno rolovat všemi směry, kam to má smysl. Manuální rolování je vesměs
zbytečné, formulář sám okénkem roluje tak, jak vyplňování postupuje. Většina formulářů je navíc navržena / generována
tak, že odpovídají velikostí přesně zobrazovacímu okénku.
Formuláře se objevují v tomto kontextu resp uspořádání obrazovky:
Razítko vypadá typicky takto:
Titulek okénka obsahuje pro kontrolu jméno razítka z knihovny - je to položka "DefSoubor".
Hned v horní části je místo pro chybovou hlášku - pokud dojde k chybě, "formulář se zlobí"
červenou hláškou.
Střední část obsahuje rámeček se snímaným formulářem.
Šedá část formuláře odpovídá papírovému podtisku.
Nažloutlé kolonky jsou datové položky - tedy ty části formuláře, které je možno vyplňovat.
Bílá kolonka je ta, kterou operátor právě vyplňuje a chová se jako každé dialogové okénko.
V cyklu práce s formulářem operátor prochází položkami, vkládá do nich data a až je spokojen, data předá k dalšímu
zpracování. Tento cyklus je doprovázen kontrolami ze strany formulářového systému:
Během práce na jediné položce se kontrolují vstupující znaky na přípustnost.
Po opuštění položky se kontroluje položka na správnost jako celek.
Při ukládání resp ukončení se kontrolují všechny položky na konzistentnost.
Některé položky mohou být vyplněny jenom výběrem z číselníku.
Některé položky mohou být vnuceny systémem (součet jiných položek apod.).
Jiné položky mohou být předvyplněny, ale operátor má možnost je přepsat. Vyznačují se tím, že posledním
znakem v jejich jménu není "W". W-položky jsou nepřepsatelné.
Způsob hlášení chyb.
Chyby při vyplňování se projevují výpisem vysvětlujícího textu v horní části formuláře.
Text zmizí obvykle po dalším stisku klávesy. Zvlášť důležitá hlášení se zobrazí v rámečku a
operátor je musí potvrdit stiskem klávesy Enter.
Pohyb mezi položkami. Ve formuláři se mezi jednotlivými položkami pohybuje pomocí kláves i myší:
Enter ... na další položku
Tab ... na další položku s ev. kopírováním směrem shora dolů
Ctrl+Enter ... na předchozí položku
Up ... o řádek nebo odstavec výše
Down ... o řádek nebo odstavec níže
^Y ... smaže položku
^U ... smaže párované položky v razítku s citlivostmi, tedy položku Hodnota i Interpretace.
Cvaknutí levým knoflíkem myši - skok na udanou položku
Formulář může ale posun přes položku sám odmítnout - to pokud hodnota aktuální položky
neprošla odpovídajícím testem.
Obdobně se může stát, že je způsob chodu kurzoru po individuálních položkách odlišný - definovaný programátorem
aplikace. Přípustný je například automatický odskok po vyplnění jednoznakové položky nebo vertikální chod.
Pohyb v rámci položky. Zde se uplatňují klávesy:
Left ... posun vlevo
Right ... posun vrpavo
Backspace ... výmaz znaku před kurzorem
Del ... výmaz znaku na kurzoru
Vyplňování údajů
Vstup dat se děje jako na psacím stroji - přepisováním kolonky. Jako data sepřipouštějí
alfanumerické znaky. Ty
jsou průběžně kontrolovány a systém například nedovolí vstup písmen tam, kde musí být číslice.
Kontroly po opuštění položky
Tyto kontroly probíhají tehdy, pokud operátor - nejčastěji stiskem Enter - "odešle" data do kolonky.
Například se
číslo kontroluje na sémantickou vlastnost resp. na výskyt v databázi. Typickými důvody pro chybové hlášení jsou:
Nepovolená hodnota.
Formálně nesprávná hodnota.
Prázdná avšak povinná položka.
Chybný formát číselného údaje.
Neprošla kontrola údaje proti číselníku.
Sémantická chyba plynoucí z kontextu.
...
Kontroly na závěr práce s formulářem
Stiskem F2 operátor odesílá ke zpracování formulář jako celek. Před tím je formulář zkontrolován jak na formální
tak i na logickou správnost. Mají-li být například určité položky součtem jiných, je tento fakt kontrolován.
Důležité klávesy
Esc, Storno - ukončí práci s formulářem aniž by se data zpracovávala.
F2 - odesílá data z formuláře ke zpracování.
F3, dvojklik - rozsvítí menu pro určitou položku - pokud existuje nebo je vyžadováno systémem.
F12 a Alt+F12 - slouží k "zamrazení" a "rozmražení" formuláře. Hodí se pokud je třeba práci na složitém
formuláři přerušit, počítač použít na něco jiného a poté pokračovat v práci.
Nebo se tak data přenášejí mezi dvěma razítky v záspisech u různých vzorků. Třebas se tak dá přenést
úplně stejně vyplněná sestava s citlivostí, aniž by se musela znovu psát po krocích.
Implementační informace
Informace v této kapitole jsou určeny administrátorovi a pojednávají o detailech implementace formulářů. Manipulace
s definičními soubory formulářů by finální uživatel měl provádět jenom výjimečně a to po předchozím uvážení všech
důsledků.
Formuláře jsou definovány v souborech *.def a jejich struktura je rádek po řádku následující. Nejprve je sekce
definice formálního vzhledu a položek ve formuláři. Vždy lichý řádek definuje vzhled formuláře - jednoho řádku v
něm. Sudý řádek začíná povinně lomítkem a jsou na něm úseky odpovídající položkám. Tyto mají jedno až tříznaková jména
a jejich skutečná délka je označena sekvencí znaků $. Na řádku může být neomezeně položek, nemohou se ale ani
překrývat a ani přesně dotýkat. Formulář je koncipován na řádky široké až 255 znaků a dlouhý 64 řádků. Počet položek
je omezen číslem 512. Po sekci definice vzhledu formuláře ukončené znakem @ na samostatném řádku následuje sekce
definic vlastností položek. Řádky mohou obsahovat některé z rovnic:
check=on - zapíná automatické scanování.
int=prefix - deklaruje položky jako celočíselné.
number=prefix - deklaruje položka jako číselné s buiseness formátem zápisu.
float=prefix - deklaruje položky jako reálné hodnoty.
mod11=prefix - deklaruje jako modulo 11 položku (viz dále).
evmod11= - viz dále.
evf3=položka - deklaruje položku jako číselníkovou.
cis=položka|číselník - deklaruje položku jako číselníkovou s s kontrolou na udaný soubor.
jump|položka - po vyplnění znaku do položky se jde rovnou vbez Enter na další.
vertical=on - donutí systém snímat formulář po sloupcích.
default=položka|předdefinovaná hodnota - dává položce před snímáním nastavenou hodnotu.
paired=P|Q - svazuje dvě položky jako párované, první P bude obsahovat název antibiotika a druhá, Q,
jeho citlivost (resp. citlivost mikroba na antibiotikum uvedené v P).
oracle= ...
upper=prefix - zapíná automatickou konverzi na velká písmena, viz též v kapitole o technické konfiguraci systému o tom, jak se interpretují násobné stisky stejné klávesy na stejném místě bez ohledu na Shift a Caps Lock, je to v kapitole Frekventované dotazy.
...
Verze od verze formulářový systém může obsahovat také další klauzule. Je-li na pravé straně rovnice prefix, pak se podmínka testů týká všech položek, začínajících daným prefixem. Rozdíl mezi float a number je v tom, že number umožňuje zápis čísla včetně oddělovačů čárkami. Klauzule mod11 deklaruje položku jako bankovní účet splňující test na mod11, evmod11 pak umožní i prázdnou položku (obvykle se používá pro předčíslí).Klauzule evf3 a cis slouží ke svázání položky s číselníky.
Pro jednoznakové položky je zavedena v některých aplikacích konvence, že systém automaticky konvertuje malá písmena na velká. Týká se to jenom standardních ascii znaků s kódem <=127.
Formuláře jsou implementovány jako objecty s overloadovanými metodami. Metody obsahují řadu parametrů, které je možno konfigurovat buď globálně, nebo i na úrovni definičních souborů jednotlivých fomulářů. Každé snímání formuláře probíhá podle schématu:
Načtení formuláře z definičního souboru.
Cyklus snímání jednotlivých znaků. Formulář funguje jako konečný automat, který volá automaticky některé metody, které stav formuláře libovolně změnit - obvykle ale modifikují jenom podlední vstup z klávesnice. Detailní diskuse metod je uvedena dále.
Kontrola údajů po stisku F2.
Uložení údajů do transakčního souboru.
Nastartování transakce.
Hlavní metody, kterými je možno formulář ovládat jsou tyto:
Test vstupujícího znaku. Je-li například položka deklarována jako mod11, není do ní možno ani zapisovat písmena.
Test opuštění položky (po Enter apod). Testuje integritu na úrovni jedné položky. Například mod11 se testuje na modularitu. Položky deklarované jako cis se kontrolují na udaný číselník.
Stisk F3 - nabídka. Použije se číselník deklarovaný v klauzuli cis.
Test po stisku F2 - položky se podrobí individuálním testům.
Vedle uživatelsky definovaných metod obsahují programy také řadu testů, které se nedají na uživatelské úrovni modifikovat - různé křížové testy, vazby mezi čísly účtů a databází evidence účtů apod.
Zásahy do definice formulářů by se měly dít opatrně. Zde se pokusíme ještě shrnout některé problémy, ke kterým by mohlo dojít:
Zrušení/přejmenování důležité položky - přestane fungovat transakce.
Zkrácení položky pod minimální míru - systém se zacyklí, typicky nepůjde vložit údaj z čísleníku ale hned se bude proti číselníku kontrolovat.
Nevhodná redeklarace položky. Bude-li například částka redeklarována jako číselníková položka, pravděpodobně se nikdy nepodaří vyplnit formulář s výčetkou.
Zkorumpování struktury - formulář bude nesmyslný.
Za běhu se mohou při nevhodné redefinici formuláře objevovat i varovná hlášení "reference na neexistující položku XXX" apod.
Každý zásah do struktury formulářů je nutno uvážit a nejprve vyzkoušet. Při problémech je nutno se vrátit k originálnímu tvaru nebo konzultovat dodavatele programového vybavení.
Laboratorní systém s výjimkou nejsložitějších formulářů používá automatické generování. Zde se tedy všechna výše uvedená varování týkají pouze několika formulářů (MOP apod).
Rejstřík kapitoly