Aktualizační příkaz BROWSE

 

 

Úvod

Příkaz BROWSE je jedním z příkazů pro interaktivní doplňování, vyhledávání, aktualizování a rušení záznamů jednoho nebo více souborů (v relačním propojení), v jednouživatelském nebo ve sdíleném režimu (více uživatelů současně pracuje v síti se stejnými soubory).

Vyvinul se z původně primitivního příkazu pro prohlížení obsahu databázových souborů (odtud název). V současné době má široké možnosti uplatnění v úlohách evidenčního charakteru a při programování tabulkových procesorů. Zejména se však uplatňuje při údržbě souborů normativního charakteru (číselníků, třídníků, katalogů, ceníků, a pod).

Příkaz předpokládá otevřený databázový soubor (soubory). Pokud je předmětem zájmu více souborů, musí být spojeny v relaci (jsou povoleny relace 1:1 a 1:N).

Při relačním spojení databázových souborů (SET RELATION) je možno pro každý z nich otevřít okno Browse. Při pohybu po větách v okně nadřazeného souboru se automaticky posouvá obsah Browse oken spřežených (podřízených) databázových souborů. Pokud byla příkazem SET SKIP vytvořena vazba typu 1:M mezi dvěma databázovými soubory, Browse může v jednom okně zobrazit položky z záznamu nadřazeného souboru a vícenásobný výskyt odpovídajících vět z podřízeného souboru. Při práci s oknem Browse lze využít funkce VARREAD(), RECNO(), ROW() a COL().

Přidávání záznamů do souborů se provádí klávesami CTRL+N (new). Označení záznamu ke zrušení se provádí klávesami CTRL+T (toggle = ohoz) nebo stiskem myši těsně vlevo od názvu. Vlastní rušení se provádí již jiným příkazem (PACK). Znepřístupnění záznamů označených ke zrušen předpokládá dřívější zadání příkazu SET DELETE ON (standard je off)..

Když jsou soubory indexovány a provede se změna v klíčové položce, pak "setřídění záznamů" se navenek projeví až když změněný záznam opustí okno. Je to záměrně, aby uživatel viděl záznam na tom místě, kde ho mění, ale pouze po dobu změny.

 

 

Zobrazení záznamů

Záznamy databázových souborů jsou zobrazeny v okně BROWSE ve tvaru tabulky (browse) nebo s položkami uspořádanými pod sebou. Jeden záznam je na tolika řádcích, kolik má záznam položek. Tomuto uspořádání se říká tvar EDIT nebo CHANGE. Okno je možné rozdělit do dvou částí, s různým způsobem zobrazení.

Položky záznamu jsou zobrazené v tom pořadí, v jakém jsou uvedené v seznamu (položek). Součástí seznamu mohou být i vypočtené položky. Uspořádání položek lze měnit.

Obsah memo položek se zobrazuje ve zvláštním editačním okně, které se aktivuje klávesami CTRL+PgDn.

Pohyb v tabulce se zajišťuje kurzorovými klávesami. K přechodu mezi sloupci se doporučuje používat klávesy Tab (směr vpřed) nebo Shift+Tab (pro směr zpět).

 

Vypočtená položka

Kromě položek databázových souborů lze v okně BROWSE zobrazovat vypočtené položky. Tyto položky mají dočasně platné pojmenování. Mají tvar

 

<jméno> = <výraz>

 

 

Popis položky

Každá položka, zobrazena v okně BROWSE, může být doprovázena atributy zobrazení a manipulace, oddělených navzájem dvoutečkou. Atributy jsou v podstatě jednopísmenové zkratky klauzulí příkazu @...GET. Výraz určující hodnotu atributu je oddělen rovnítkem. Neuvedením atributů se připouští jeho standardní hodnota. Na pořadí atributů nezáleží.

 

:R

 

read only - zobrazený údaj ve sloupci nelze přepsat

 

:<expN>

 

určí novou šířku zobrazené položky (standardně je dána rozsahem položky).

 

:V=<expr4>

 

valid - používá se na kontrolu správnosti hodnoty nebo k aktivaci jiných programů. Když je hodnota výrazu <expr4> pravdivá, přemístí se kurzor na další položku. Při hodnotě .F. kurzor nelze přemístit a vypíše se chybové hlášení. Při hodnotě nula (0) kurzor nelze přemístit, hlášení se nevypíše.

 

:F

 

forced - kontrola výrazu <expr4> se bude provádět i tehdy, nebyl-li obsah sloupce modifikován

 

:E=<expC4>

 

error - vypíše se namísto standardního chybového hlášení řetězec <expC4>

 

:P=<expC5>

 

picture - řetězec editačních symbolů (viz klauzuli picture příkazu

 

:B=<expr5>,<expr6>

 

between - hodnota ve sloupci musí ležet v rozsahu určeném zadanými výrazy

 

:H=<expC6>

 

head - zadání hlavičky sloupce (namísto standardního jména položky nebo výrazu)

 

:W=<expL4>

 

when - při <expL4>=.F. je vstup do sloupce záznamu zakázán

 

 

Popis příkazu BROWSE

 

BROWSE [FIELDS <seznam položek>] [FORMAT]

[FOR <expL1>] [KEY <expr1> [, <expr2>]]

[FREEZE <položka>] [LOCK <expN1>] [WIDTH <expN4>]

[PARTITION <expN2>] [LPARTITION] [NOLINK] [NOLGRID]

[NORGRID]

[LEDIT] [REDIT]

[LAST] [PREFERENCE <expC1>] [TITLE <expC2>]

[NOCLEAR] [SAVE] [TIMEOUT <expN3>] [NOWAIT]

[VALID [F:] <expL2> [ERROR <expC3>][]

[[WINDOW <okno1>] [IN [WINDOW] <okno2> | SCREEN]]

[COLOR [<seznam dvojic barev>] | COLOR SCHEME <expN5>]

[NOAPPEND] [NODELETE] [NOEDIT | NOMODIFY] [NOMENU] [NORMAL]

[NOOPTIMIZE]

[NOREFRESH] [REST]

 

FIELDS <seznam položek>

určuje, jaké položky nebo výrazy se mají zobrazit. Současně určuje jejich pořadí. Položky stejného jména, ale z různých souborů, nutno odlišit přeponami (alias pracovní oblasti, zapsaná před jménem a oddělená tečkou). Když není uvedena klauzule FIELDS, zobrazí se všechny položky v pořadí jejich výskytu v záznamu. Seznam položek je seznam popisů jednotlivých položek (položek, oddělovačem je čárka) a určuje jejich pořadí ve výpisu. Popis jednotlivých položek bude uveden ve zvláštním odstavci

 

FORMAT

klauzule se používá pouze při použití souboru formátů, který musí být otevřen (SET FORMAT TO)

 

FOR <expL1>

známá klauzule pro výběr záznamů odpovídajících logickému výrazu <expL1>

 

KEY <expr1> [, <expr2>]

slouží k výběru zobrazovaných vět (předpokládá indexovaný soubor). Jsou zobrazené (a tím pádem přístupné) věty, u kterých je indexový výraz roven <expr1> nebo leží v rozmezí <expr1> , <expr2>

 

FREEZE <položka>

povoluje modifikaci pouze jediného specifikovaného sloupce

 

WIDTH <expN4>

definuje největší přípustnou šířku sloupce (pro všechny ve výstupu)

 

PARTITION <expN2>

provede rozdělení okna Browse na dvě sekce, <expN2> určuje šířku levé sekce. Kurzor je standardně umístěn v pravé sekci. Záměnu umístění kurzoru provede klauzule LPARTITION. Obě sekce okna jsou standardně spřeženy (vertikální pohyb v jedné má za následek odpovídající pohyb v druhé). Zrušení tohoto spřežení se dosáhne uvedením NOLINK. Zobrazení rastru (mřížky) v sekcích potlačí NOLGRID a NORGRID

 

LOCK <expN1>

 rozdělení okna na dvě sekce, velikost levé je <expN1> položek (analogie PARTITION)

 

LEDIT a REDIT

mění standardní tabulkový vzhled zobrazení (věta v jednom řádku) na vzhled, při kterém je každá položka na samostatném řádku)

 

LAST

zajistí, že Browse bude mít stejné vlastnosti jako při předchozím použití

 

PREFERENCE <expC1>

uloží k uložení konfigurace BROWSE do <expC1>. Další vyvolání Browse s PREFERENCE <expC1> tuto konfiguraci obnoví

 

TITLE <expC2>

slouží k zadání titulku okna (místo jména databázového souboru)

 

NOCLEAR

ponechá pasivní obraz okna Browse na obrazovce i po ukončení práce s příkazem

 

SAVE

používá se v programových aplikacích BROWSE případech, kdy požadujeme, aby okno Browse zůstalo po jeho opuštění aktivní (viditelné) a bylo možné se do něj z jiných oken vrátit

 

TIMEOUT <expN3>

doba (v sec.), po kterou program čeká na zásah obsluhy.

 

VALID [F:] <expL2>

když je <expL2> nepravdivý, pak nelze přemístit kurzor z právě modifikovaného záznamu. [ :F ] vnutí test i když záznam nebyl modifikován

 

ERROR <expC3>

slouží k zadání chybového hlášení

 

WHEN <expL3>

když je <expL3> nepravdivé, pak nelze modifikovat záznamy

 

NOAPPEND

nedovolí přidávání záznamů do souboru

 

NODELETE

zabrání označování záznamů ke zrušení

 

NOEDIT nebo NOMODIFY

nedovolí provádět opravy, nezakazuje ale "DELETE"

 

NOMENU

znepřístupní menu Browse (v systémovém menu)

 

NORMAL

zamezí převzetí atributů uživatelsky definovaného okna pro Browse okno. (Pokud je okno Browse do uživatelsky definovaného okna otevřeno)

 

NOREFRESH

nepovolí pravidelné obnovování obsahu okna Browse (viz SET REFRESH). Je užitečné pro soubory, určené pouze pro prohlížení

 

REST

ukazatel záznamu si zachová stávající pozici namísto umístění na začátek souboru (pouze v souvislosti s klauzulí FOR)

 

Příkaz CHANGE

Slouží podobně jako Příkaz BROWSE k editaci databázového souboru v okně. Oproti příkazu BROWSE má navíc parametr <rozsah> a frázi WHILE. Naopak zde chybí klauzule LOCK, NOREFRESH a REST. V praxi se používá velice málo. Jelikož jsou klauzule příkazu známé, je zde uveden příkaz bez podrobného popisu.

 

CHANGE [FIELDS <seznam položek>] [FORMAT]

[<rozsah>] [FOR <expL1>] [WHILE <expL2>] [KEY <expr1> [, <expr2>]]

[FREEZE <položka>] [WIDTH <expN3>]

[PARTITION <expN1>] [LPARTITION] [NOLINK] [NOLGRID]

[NORGRID]

[LEDIT] [REDIT]

[LAST] [PREFERENCE <expC1>] [TITLE <expC2>]

[NOCLEAR] [SAVE] [TIMEOUT <expN2>] [NOWAIT]

[VALID [F:] <expL3> [WHEN <expL4>]

[[WINDOW <okno1>] [IN [WINDOW] <okno2> | SCREEN]]

[COLOR [<seznam dvojic barev>] | COLOR SCHEME <expN4>]

[NOAPPEND] [NODELETE] [NOEDIT | NOMODIFY]

[NOOPTIMIZE]

[NOREFRESH]

[NOMENU] [NORMAL]

 

 

Cvičení

Evidence a účtování léčiv

Příklad byl použit při formulaci zadání subsystému Lékárna ASVŘ VLÚ. Umožnil rychlou domluvu řešitelů s uživateli. Skutečné řešení bylo uživatelsky příjemnější za cenu větší pracnosti i rozsahu programu. Poznámka: Účtování léčiv probíhá pouze za běžný kalendářní rok. Program PR405_1

 

SET TALK OFF                                        && Nezobrazovat mezivýsledky

CLEAR                                                           && Výmaz obrazovky

CLEAR ALL                                                   && Uzavření všech souborů

PUBLIC recepty                                                && Proměnná recepty je veřejná

SET ESCAPE OFF                                        && ESC nepřeruší výpočet

ON KEY LABEL ctrl+s DO pr405_4            && Klíče aktivace prog. PR405_4

ON KEY LABEL ctrl+R DO pr405_2    && Klíče aktivace prog. PR405_2

ON KEY LABEL ctrl+E DO pr405_3            && Klíče aktivace prog. PR405_3

 

SELE 0                                                           && Volná pracovní oblast

USE recepty                                                   && Otevření souboru

SUM ALL castka TO recepty                                    && Součet nákladů za recepty

SELE 0                                                           && Volná pracovní oblast

USE lekarna ORDER TAG nazev               && Otevření souboru

@16,1 CLEAR TO 18,78                                 && Výmaz části obrazovky

@ 16,42 SAY "Pohyb v tabulce          PgUp, PgDn"

@ 17,42 SAY "Záznam bez jména bude zrušen  !!!!!"

@ 18,42 SAY "Konec práce                     Esc"

@ 16,3 SAY "Přepínání tabulek           Ctrl+H"

@ 17,3 SAY "Nový záznam                 Ctrl+N"

@ 18,3 SAY "Součty vyvoláte klávesami   Ctrl+S"

@ 19,1 SAY "  Recepty zaúčtujete          Ctrl+R"

@ 20,1 SAY "  Expiraci zjistíte           Ctrl+E"

DEFINE WINDOW wind1 FROM 1,1 TO 14,79 COLOR SCHEME 2            && Definice okna

DEFINE WINDOW wind2 FROM 20,40 TO 24,79 COLOR SCHEME 3

DEFINE WINDOW wind3 FROM 19,45 TO 24,70 COLOR SCHEME 4

SET DATE TO GERMAN                                                                   && Naše konvence data

BROWSE FIELD nazev:H="Název léku", ;

FORMA, ;

zakoupeno , ;

expirace , ;

kusu:H="Zakoupeno    [ks]" , ;

cena:H="Cena za kus [Kčs]" , ;

spotr:H="Spotřebováno [ks]" , ;

 _="--------" , ;

 zust=kusu-spotr:H="Z Ů S T A T E K ":p="99999999" , ;

cenpo=kusu*cena:H="CENA POŘIZOVACÍ [Kčs]":p="99999.99" ;

TITLE "S e z n a m   l é k ů   v   l é k á r n ě   V L Ú" ;

WINDOW wind1 ;

PARTITION 30 REDIT

DELETE ALL FOR LEN(TRIM(nazev))=0                       && Označení prázdných záznamů

PACK                                                                         && Vlastní rušení

 

 

Evidence receptů – PR405_2

Program je volán z PR405_1

 

star = RECNO()                                            && Pamatování pozice ukazatele

prac = ALIAS()                                               && Pamatování pracovní oblasti

SELE recepty                                                  && Prac. oblast souboru recepty

BROWSE TITLE "R E C E P T Y";

WINDOW wind3

GO TOP                                                         && Ukazatel na začátek souboru

SUM ALL castka TO recepty                                    && Součet nákladů

SELE &prac                                                   && Návrat do původ.prac.oblasti

GO star

RETURN                                                         && Konec

 

Expirace léčiv – PR405_3

Program je volán z PR405_1

 

DEFINE WINDOW wind5 FROM 1,1 TO 24,60

ACTIVATE WINDOW wind5

star = RECNO()                                                        && Pamatování pozice ukazatele

prac = ALIAS()                                                           && Pamatování pracovní oblasti

SELE lekarna                                                             && Prac.oblast souboru lékárna

? "    S E Z N A M   N E P O U Ž I T E L N Ý C H   L É K Ů "

?

GO TOP                                                                     && Začátek souboru

DISPLAY ALL FIELD nazev, expirace, kusu OFF FOR expirace<=DATE()

WAIT "Pokračování libovolným klíčem" WINDOW

DEACTIVATE WINDOW wind5

SELE &prac                                                               && Návrat do prac. oblasti

GO star                                                                       && Ukazatel na původní místo

Náklady za léčivá v aktuálním kalendářním roce – PR405_4

Program je volán z PR405_1

 

ACTIVATE WINDOW wind2                          && Aktivace okna

star=RECNO()                                                          && Zapamatování pozice ukazatele

GO TOP                                                                     && Začátek souboru

rok = YEAR(DATE())                                              && Aktuální rok

SUM ALL  cena*kusu TO C ;

FOR LEN(TRIM(nazev))>0 and rok = YEAR(porizeno)

@ 0,1 SAY STR(rok,4)                                          && Zobrazení kalendářního roku

@ 1,1 SAY "Suma pořizovací ceny  "+STR(C+recepty,10,2)

@ 2,1 SAY "Z toho recepty        "+STR(recepty,10,2)

WAIT "Pokračování libovolným klíčem" WINDOW

DEACTIVATE WINDOW wind2

GO star                                                                       && Obnovení pozice ukazetele