Sunteți pe pagina 1din 9

MG - Lucrarea practică 12 2015/2016 UMF “Carol Davila” – Informatică Medicală şi Biostatistică

Lucrarea practică 12
Indicaţii generale:
Una dintre cele mai importante activităţi în legătură cu baza de date a spitalului este
raportarea (inclusiv pe hârtie) a unor date selectate. Această activitate presupune (la fel ca
şi cea de selectare) două faze: în prima fază este creată macheta de raportare, urmând ca în
faza a doua să fie obţinut raportul propriu-zis.
Dar scopul principal pentru care sunt create şi întreţinute bazele de date îl
constituie obţinerea, într-un timp cât mai scurt, a unor informaţii utile conţinute în datele
plasate în tabele de date. Una dintre cele mai importante facilităţi ale bazelor de date este
posibilitatea obţinerii unor date cu caracter global despre înregistrări (cum ar fi, de
exemplu, calculul vârstei medii a pacienţilor trataţi de un medic, din înregistrările
pacienţilor în care apare codul numeric personal – cod în care este conţinută data naşterii).
Veţi exersa câteva dintre acestea.
În această lucrare practică:
a) veţi crea machete de raportare şi le veţi modifica;
b) veţi crea machete pentru etichete, exersând controlul hârtiei;

Teme
47: machete de raportare
48: etichete
suplimentară: baze de date complexe

Softul ce va fi utilizat în lucrarea practică:


Visual FoxPro

160
UMF “Carol Davila” – Informatică Medicală şi Biostatistică MG - Lucrarea practică 12 2015/2016

Tema 47: machete de raportare.


Preluaţi fişierele LP12_*.* (ar trebui să găsiţi patru) şi deschideţi tabelul de date
LP12_1.dbf. Conţinutul său ar trebui să vă fie familiar: aveţi înregistrări despre 42 de pacienţi,
incluzând vârsta în ani în momentul internării, sexul, chirurgul care i-a operat, plus multe alte
date prelevate.
O primă operaţiune pe care o veţi executa va fi calculul automat al categoriei de vârstă.
În scop didactic vom considera doar trei categorii de vârstă:
1 – sub 50 ani 2 – între 50 si 60 ani 3 – peste 60 ani
(Exprimarea de mai sus nu este precisă: în ce categorie vom plasa pacientul de 50 de
ani? O vom preciza în algoritmul de calcul.)
Introduceţi în tabel un câmp nou, de tip Numeric (2.0) – la fel ca şi varsta – denumit
catvar. (Încercaţi să-l introduceţi imediat după câmpul varsta, după care priviţi tabelul şi
controlaţi poziţia în care a fost introdus.)
În fereastra Command daţi comanda de umplere automată a valorilor câmpului, prin
folosirea funcţiei IIF()
replace all catvar with iif(varsta<50,1,iif(varsta<60,2,3))
Observaţi efectul. În ce categorie de vârstă au fost plasaţi pacienţii cu vârsta de 60 ani?
Reţineţi că funcţia „logică” IIF() are trei argumente: 1) condiţia logică, 2) valoarea în cazul
True, şi 3) valoarea în cazul False.
O altă posibilitate de
completare a valorilor câmpului
catvar o constituie folosirea
comenzii TableReplace Field.
Comanda ar trebui folosită
de trei ori, odată pentru fiecare
valoare 1, 2, 3. Algoritmul de
înlocuire va putea fi programat în LP012.varsta>50 AND LP0
caseta For, cu ajutorul
constructorului de expresii (vezi
fig. pentru cazul valorii 2).
Creaţi acum o machetă de
raportare pe care o veţi folosi
ulterior pentru a obţine un raport.
Se presupune că pregătim raportul
pentru a fi imprimat pe foi
consecutive, toate având un antet
şi un subsol controlat. Comandaţi
în fereastra de comenzi:

CREATE REPORT

Se va deschide fereastra
Report Designer a „generatorului
de rapoarte” (de fapt a
generatorului de machete). Se
observă că se rezervă automat
câteva rânduri pentru antetul
paginii (zona Page Header), alte
câteva rânduri pentru fiecare
161
MG - Lucrarea practică 12 2015/2016 UMF “Carol Davila” – Informatică Medicală şi Biostatistică

înregistrare din tabelul de date (zona Detail) şi în sfârşit câteva rânduri pentru subsolul paginii
(zona Page Footer).
Observaţi apariţia pe bara meniurilor a unui nou meniu, Report. Executaţi de aici
comanda Quick Report. Apăsaţi butonul OK în caseta de dialog Quick Report, obţinând un
exemplu de felul în care va trebui să arate macheta de raportare. Observaţi plasarea în zona
Page Header a denumirilor câmpurilor, iar în zona Page Footer a comenzii de inserare a datei
calendaristice curente.
Pentru a vizualiza „raportul”, folosiţi comanda Print Preview din meniul File. Fiind un
raport automat, standard, este mai puţin adecvat comunicării de rezultate. Probabil că nu veţi
reuşi afişarea pe ecran a „paginilor” raportului, complexitatea structurii tabelului de date fiind
prea mare. În continuare veţi exersa modul de finisare a unui raport.
Pentru crearea rapoartelor RECOMANDĂM FOLOSIREA INSTRUMENTULUI
AUXILIAR Wizard. Aşadar, FileNewReport (Wizard). Veţi fi conduşi, pas cu pas, prin
etapele de creare a machetei, apoi veţi putea vizualiza şi, în cele din urmă, imprima rezultatul.
În prima etapă aveţi de făcut doar o alegere simplă (vezi figura următoare).
Deocamdată nu este cazul folosirii simultane a datelor din mai multe tabele, întrucât avem unul
singur, aşadar opţiunea aleasă va fi Report Wizard, ca în figură.

Pasul următor (Step 1!) este însă esenţial.


Este obligatoriu să selectăm acum toate câmpurile
ale căror valori vor fi incluse în raport. Selectaţi
aşadar (atenţie la butonul ►) câmpurile
numpren, chirurg, sexf, varsta şi catvar.

La pasul 2 va trebui precizat


criteriul de grupare a înregistră-
rilor. Avem intenţia de a grupa
pacienţii în cele trei grupe de
vârstă, de aceea vom selecta
câmpul catvar.
(Nu vom folosi criteriile LP12.dbf
secundar şi terţiar!)

162
UMF “Carol Davila” – Informatică Medicală şi Biostatistică MG - Lucrarea practică 12 2015/2016

Alegerea stilului raportului,


dintre cele câteva gata pregătite,
este doar o chestiune de estetică
personală (vezi figura următoare)

Este simplă şi alegerea


„poziţionării” paginilor de hârtie: nu
avem alte posibilităţi de alegere, decât
între orientarea „portret” şi cea
„peisaj”.

Pasul 5 este însă ceva mai


complicat. În mod obişnuit, datele
imprimate pe foile de hârtie ale
rapoartelor sunt ordonate, pentru a
permite o regăsire vizuală rapidă.
ALEGEREA CRITERIULUI DE
ORDONARE ESTE ESENŢIALĂ.

163
MG - Lucrarea practică 12 2015/2016 UMF “Carol Davila” – Informatică Medicală şi Biostatistică

S-ar putea ca să existe deja


ordonări complexe ale
înregistrărilor tabelului! În cazul
nostru, având de-a face cu lista
pacienţilor, se impune natural
ordonarea alfabetică după nume şi
prenume.
Prin urmare, veţi selecta
câmpul numpren dintre cele
aflate în lista Available fields or
index tag, prin folosirea butonului
► (ca mai sus).

Înainte de a încheia
machetarea „automată”, mai este
necesară doar declararea unui titlul
pentru raport, fie acesta „Raport
Sectia I (responsabil numele d-
voastră)”. Evident, din butonul radio
Select an option and click Finish
preferăm să alegem opţiunea Save
report for later use.

Aceasta ne va obliga să acordăm un nume fişierului-machetă de raportare (cu extensia


frx). Îl veţi denumi nume_CATVAR.
Deschideţi acum macheta de raportare pe care tocmai aţi creat-o. Aşadar, comandaţi
FileOpenReport. Veţi vedea pe ecran macheta de raportare. Asiguraţi-vă cu ajutorul
comenzii Toolbars din meniul View că aveţi la dispoziţie instrumentele necesare pentru
controlul machetei de raportare, grupate în Report Controls. Activaţi şi bara de instrumente
Standard (vezi figura de mai jos).
În machetă puteţi observa
apariţia a trei noi zone: 1) Title, în
care apare automat data curentă,
printr-o apelare a funcţiei DATE();
2) Group Header; 3) Group Footer.
Puteţi observa efectul
machetei de raportare dând
comanda, evidentă, File Print
Preview. Capul de tabel din zona
Page Header nu este corect; ar
trebui să apară inscripţii în clar!

164
UMF “Carol Davila” – Informatică Medicală şi Biostatistică MG - Lucrarea practică 12 2015/2016

Să ne propunem să efectuăm modificări în zona Page Header astfel încât să se obţină


capul de tabel următor (inclusiv sublinierea):
Numele si prenumele Codul chirurgului Sexul Varsta
(Plasaţi linia de subliniere pe un rând separat.)
Pentru a putea efectua modificări în zona
Page Header apăsaţi, de fiecare dată când doriţi
aceasta, butonul simbolizat cu A din caseta
Report Controls.
Butonul cu litera A simbolizează aici „inserarea de text”; butoane alăturate
simbolizează inserarea de casete-text, linii orizontale/verticale, dreptunghiuri „clasice”,
dreptunghiuri cu colţurile rotunjite, imagini din fişiere sau din câmpuri de tip Picture).
Un clic stânga deasupra inscripţiei „Catvar” din zona Page Header va determina
selectarea acesteia. Odată selectată, o veţi putea elimina cu comanda Cut (fie din meniul pe
care-l activaţi cu un clic dreapta, fie din meniul Edit), ori tastând [Delete]. Eliminaţi şi
inscripţia „Numpren”, în locul ei plasând inscripţia „Numele şi prenumele”. În acest scop
preluaţi (cu un clic stânga deasupra butonului cu litera A din Report Controls) un obiect Label;
cursorul mausului va lua forma de I-beam pe care o va avea până la un clic deasupra poziţiei
pe care aţi ales-o. Puteţi tasta apoi inscripţia dorită. (Pentru a controla mai bine plasarea
obiectului, este recomandabil să activaţi opţiunea Grid Lines din meniul View.)
Odată selectat un obiect, comenzile din meniul Format vă permit o serie de modificări;
încercaţi de exemplu efectul comenzii Font, determinând afişarea inscripţiei „Numele şi
prenumele” cu fontul Arial, mărimea 14 p.t. (Este bine să ştiţi că în imprimarea rapoartelor „pe
hârtie” fontul Arial este tradiţional.)
În zona Group Header apare reprezentarea unui obiect de tipul Field ce conţine valorile
din câmpul catvar. Acest valori 1, 2, 3 vor fi înlocuite, în rapoarte, cu inscripţii clare, de
exemplu cu „Sub 50 ani”, „50-60 ani”, „Peste 60 ani”. Evident, va fi folosită funcţia IIF()
pentru a construi inscripţiile:
IIF(catvar=1,”Sub 50 ani”,iif(catvar=2,”50-60 ani”,”Peste
60 ani”))
Mai precis, cu un dublu-clic deasupra reprezentării obiectului veţi intra direct în Report
Expression în care veţi găsi caseta Expression ocupată cu „TRANS(CATVAR)”. Deschizând-
o (atenţie la butonul … din dreapta casetei) veţi intra în constructorul de expresii (Expression
Builder), vezi figura de mai jos. Aici, atenţie, este recomandabil să folosiţi numai funcţii
(Functions), câmpuri (Fields), variabile (Variables) alese din listele afişate pentru a construi
expresia. Semnele = pot fi tastate, însă recomandăm să fie selectate din lista funcţiilor logice.
Mai este nevoie de „lungirea” spaţiului de afişare, care poate fi obţinută simplu, prin
tragere de bordura obiectului, spre dreapta.
Să trecem în zona Detail. Aici trebuie să ţinem seamă de faptul că datele privind sexul

165
MG - Lucrarea practică 12 2015/2016 UMF “Carol Davila” – Informatică Medicală şi Biostatistică

pacientului au fost introduse ca date Logical, mai precis sexf este True (numai) pentru
pacienţii de sex feminin. Funcţia IIF() ne permite modificarea afişării valorii din celulă, din
„SEXF” în „masculin” sau „feminin”, printr-o comandă relativ simplă
IIF(sexf=.T.,”feminin”,”masculin”)

Celula va trebui extinsă


suficient (spre dreapta), ceea ce va
impune şi deplasarea spre dreapta a
IIF(LP07_1.catvar=1, “Sub 50 ani”
celulei pentru vârstă, iar ca urmare şi
a inscripţiei „Varsta” din zona Page
Header.

LP12_1.nrcrt
LP12_1.numpren
LP12_1.chirurg
LP12_1.sexf
LP12_1.varsta
LP12_1.catvar
LP12_1.obezitate
LP07_1.fumator

(Aceasta din urmă va trebui aliniată, ceea ce este recomandabil a se face după o
examinare a rezultatului (FilePrint Preview).
Observaţi în zona subsolului (Page Footer) comanda de introducere a paginaţiei,
formată din eticheta „Page” – pe care o veţi înlocui cu „Pagina” – şi combinaţia
ALLTRIM(STR(_PAGENO)). Ea se obţine prin aplicarea funcţiei de conversie STR()
asupra numărului curent al paginii, urmată de aplicarea funcţiei ALLTRIM() care elimină
blancurile din secvenţele de caractere. Ar fi de preferat să construiţi, cu ajutorul constructorului
de expresii, valoarea concatenată
”Pagina ”+ALLTRIM(STR(_PAGENO))
Lărgiţi zona Group Footer pentru a introduce aici o informaţie de totalizare (a
numărului de linii din fiecare grup de pacienţi). Plasaţi aici un obiect de tip Field, care să
conţină de exemplu LP12_1.varsta, dar CalculationsCount în caseta de dialog Expression
Builder. Încercaţi să-l încadraţi cu inscripţiile „Total” şi „pacienti”, realizate ca obiecte de tip
Label.
Ar fi de dorit să introduceţi în această zonă a raportului şi alte informaţii supli-mentare
utile, de exemplu vârsta medie a pacienţilor.
Refaceţi macheta în stilul Executive, luând în considerare gruparea după chirurg (nu
după categoria de vârstă, de care nu aveţi nevoie), observând şi diferenţele în afişare. Veţi
numi această nouă machetă nume_CHIRURG.
De data aceasta, în zona Group Footer, sub coloana vârstelor pacienţilor, veţi plasa un
obiect de tip Field, care să conţină LP12_1.varsta, dar pentru care alegeţi
CalculationsAverage în caseta de dialog Expression Builder. În stânga sa plasaţi textul
„Varsta medie”.
Se obişnuieşte – în raportările medicale – ca vârsta medie să fie însoţită de abaterea
(deviaţia) standard.
Pentru a respecta aceasta, plasaţi în zona Group Footer încă un obiect de tip Field, în
dreapta precedentului. Puteţi alege şi pentru acesta expresia LP12_1.varsta, însă
166
UMF “Carol Davila” – Informatică Medicală şi Biostatistică MG - Lucrarea practică 12 2015/2016

CalculationsStandard deviation. Între cele de tipul Field plasaţi textul „Ds” aşa încât
informaţiile afişate să arate astfel:
Varsta medie 48 Ds 3
(Cum reuşiţi să afişaţi: „Varsta medie 48 (Ds 3)”?)
Ar mai fi de făcut o singură corecţie machetei de raportare nume_CHIRURG (de fapt
şi celei anterioare, nume_CATVAR). Este vorba despre faptul că numele şi prenumele
fiecărui pacient ar trebui să apară, în zona Detail, cu prima literă majusculă. Transformarea în
majuscule se poate face imediat, cu ajutorul funcţiei UPPER(). Aşadar, înlocuiţi în obiectul de
tip Field ce apelează câmpul numpren expresia cu următoarea
UPPER(LP12_1.numpren)
(Transformarea în majusculă a doar primei litere din fiecare cuvânt nu este însă atât de
uşor de efectuat! Vă puteţi informa „în Internet” asupra oricărei comenzi sau funcţii speciale,
de asemenea puteţi afla cum se pot obţine diverse efecte sau rezultate. Este suficient să cereţi
în Google informaţii despre FoxPro şi comandă.)

Tema 48: etichete.


Preluaţi acum tabelul de date LP12_2.dbf, care conţine adresele şi numerele de apel
telefonic (atenţie, neactualizate din 1995!) ale farmaciilor, spitalelor şi policlinicilor din
Bucureşti.
Începeţi prin a actualiza numerele de apel telefonic, ştiind că la trecerea de la 6 la 7
cifre s-a adăugat o cifră „3” înaintea celor ce formau vechiul număr de apel. Ar trebui (atenţie,
cu comanda TablePropertiesModify) să redimensionaţi câmpul telefon la 7 cifre, apoi să
asiguraţi efectuarea comenzii
replace all telefon with telefon+3000000
Modificaţi apoi structura tabelului, introducând două câmpuri Logical, anume farmac
(în care valoarea True ar trebui să însemne că înregistrarea se referă la o farmacie) respectiv
spital. (Dacă nu reuşiţi, aceasta se întâmplă deoarece fişierului-tabel de date i-a fost activat
atributul de protecţie Read-only. Dezactivaţi-l înainte de a încerca modificări ale conţinutului.)
Completaţi automat valorile acestor câmpuri. Reamintiţi-vă efectul comenzii:
replace all farmac with ”FARM”$nume
Redenumiţi tabelul, după modificări, în nume_TELEFON.dbf. Asiguraţi-vă că fişierul
are din nou atributul Read-only activat.
Fişierul este perfect adecvat pentru exemplificarea etichetelor. Folosirea etichetelor „de
hârtie”, care se lipesc pe plicuri, nu necesită prea multe explicaţii; caracteristicile lor sunt
evidente. Trebuie menţionat doar că după imprimare pe foaia de hârtie ar putea apărea etichete
pe două-trei coloane.
Şi pentru crearea etichetelor recomandăm folosirea instrumentului auxiliar Wizard.
Aşadar, FileNewLabel (Wizard). Veţi fi conduşi, pas cu pas, prin etapele de creare a
machetei, apoi veţi putea vizualiza şi, în cele din urmă, imprima rezultatul.
Atenţie la Pasul 3 – vezi figura de mai jos – în care „proiectaţi” etichetele. Aveţi la
dispoziţie butoane speciale pentru concatenare, plasare de spaţii albe, trecerea la rând nou,
plasare de texte. Controlul este simplu.

167
MG - Lucrarea practică 12 2015/2016 UMF “Carol Davila” – Informatică Medicală şi Biostatistică

Temă suplimentară: bază de date complexă.


Creaţi acum o bază de date nouă, denumită nume_HOSPIT (.dbc). În interiorul său
creaţi:
a) un prim tabel, denumit
nume_CALIFICARI (.dbf),
care conţine câmpurile cod şi
denumire, şi pe care-l
completaţi cu cel puţin 20 de
specializări medicale;
b) tabelul nume_SECTII(.dbf),
care conţine câmpurile cod şi
denumirea, pe care-l completaţi
cu cel puţin 6 secţii ale
spitalului. Salvaţi-l şi ca pagină
Web;
c) tabelul nume_MEDICI(.dbf), care conţine câmpurile cod, numprenm, cnpm,
codc şi cods, pe care-l completaţi cu datele a cel puţin 12 medici (cel puţin doi în
fiecare secţie!);
d) tabelul nume_PACIENTI(.dbf), care conţine câmpurile numprenp, cnpp,
adresa, datainter, dataexter, codm. Îl veţi completa cu datele a cel puţin 20 de
pacienţi.
e) o relaţie de la nume_MEDICI.codc la nume_CALIFICARI.cod;
f) o relaţie de la nume_MEDICI.cods la nume_SECTII.cod;
g) o relaţie de la nume_PACIENTI.codm la nume_MEDICI.cod;
h) o machetă de raportare nume_MEDSEC, prin care să reuşiţi listarea medicilor pe
secţii;
i) o machetă de raportare nume_MEDSPEC, prin care să reuşiţi listarea medicilor
pe specialităţi;
j) o machetă de raportare nume_PACMED, prin care să reuşiţi listarea pacienţilor
grupaţi după medicul curant;
k) o machetă de raportare nume_PACVAR, prin care să reuşiţi listarea pacienţilor în
ordinea crescătoare a vârstei, cu calculul vârstei medii;
l) o machetă de raportare nume_DURATA, prin care să reuşiţi listarea pacienţilor
după durata internării, cu calculul duratei medii de spitalizare.
Creaţi un document Word denumit nume_REPORTS în care plasaţi
informaţiile despre crearea de rapoarte (paşi, alternative, recomandări). Continuaţi cu
listarea comenzilor din meniul Report, apoi cu cu listarea claselor – reprezentate
prin butoane specifice – din bara de instrumente Report Controls a aplicaţiei Visual
FoxPro, explicând la ce poate folosi fiecare. (De exemplu, Label serveşte la
inserarea unui text în cadrul unei machete de raportare … .) Încheiaţi prin a compara
machetele pentru etichete cu machetele de raportare.

168