2. Liste de tip document

O lista de tip document este creata pe baza unui tip de document si poate incorpora unul sau mai multe documente listate. Listarea efectiva are loc in modul urmator: - se construieste primul document intr-o zona de manevra (memorie sau fisier) pe baza definitiei din Tipuri de documente, - documentul construit este listat, - se construieste documentul urmator, daca e cazul, s.a.m.d. In aplicatiile hMET2 liste de tip document pot fi definite numai pentru fisierele generice. Tipurile de documente, pe baza carora se genereaza listele de tip document, definesc un sablon al continutului prin urmatoarele componente: - MODEL: Format pagina, Formular, Formule. Definirea acestor componente in aplicatiile hMET2 se face in mare parte cum este descris la 1. Tipuri de documente in hMARFA. Notatie: In continuare ne vom referi cu XX la fisierul generic care are o lista de tip document. Elementele componente ale definirii unei liste de tip document 1. O interfata de tip LISTA cu numarul nn pentru fisierul XX, pentru care se configureaza cel putin urmatoarele: - pentru tip lista se alege D - document; - in primul criteriu de grupare (Grupa1) se scrie acel camp din fisierul XX pe baza caruia se delimiteaza articolele care intra in acelasi document. De fapt acest camp trebuie se fie primul camp din primul index al fisierului XX. 2. Un tip de document, care trebuie sa aiba codul XXnn, unde XX este aliasul fisierului generic si nn este numarul listei de la punctul 1. Definitia tipului de document XXnn se compune la randul lui din: declarare, format pagina, formule, formular. Structura documentului Documentul are urmatoarea structura generala, redactata in formular: #INCEPUT #INCEPUTGRUPA #RIND/X1 #RIND/X2 ... #RIND/Xn #SFARSITGRUPA #SFARSIT #INCEPUTPAGINA #SFARSITPAGINA Langa directivele #RIND notatia Xn indica fisierul generic din care trebuie citite datele pentru acea sectiune. Specificarea lor este obligatorie, sectiunuile #RIND fara /Xn vor fi omise la construirea listei. Rezulta ca intr-o lista de tip document pot fi preluate date din mai multe fisiere hMET2, urmand ca lista sa fie definita pentru acel fisier, care este sursa principala de date. Articolele cuprinse in document, gruparea si ordinea lor La generarea listei se iau in considerare acele articole, care: - corespund criteriilor de filtrare inscrise in LISTA nn; - satisfac filtrul curent din fereastra de fisier al fisierului XX, adica filtrul existent in momentul alegerii listei. In lista se genereaza atatea documente cate valori distincte are campul din Grupa1. In cadrul unui document pot exista subgrupe, daca a fost completat Grupa2 in LISTA nn si structura formularului implementeaza subgrupele. Grupa2 poate sa fie numai cel de al doilea camp din primul index al fisierului XX. Ordinea articolelor la listare se va stabili cf. indexului Grupa1+Grupa2+Grupa3+<index_nr_2> , unde <index_nr_2> este cheia index nr.2 a fisierului, daca exista. Acest index se construieste de fiecare data cand se lanseaza listarea. Obs. Grupa3 din definitia listei este luata in considerare doar la ordonarea articolelor. Executarea listei - dupa lansarea listei se creeaza indexul cf. grupei 1 si 2 din definitia de lista, - se incepe listarea cu respectarea selectiei din fereastra de fisier, - se evalueaza sectiunea #INCEPUT daca exista, - se evalueaza #INCEPUTGRUPA daca exista, - se evalueaza prima sectiune #RIND/x1 daca exista, - x1 este referinta de fisier. Poate referi insusi fisierul pt. care a fost lansata lista sau un alt fisier, - x1 refera insusi fisierul, se evalueaza sectiunea #RIND dupa care se trece la articolul urmator, - x1 refera un alt fisier, se cauta primul articol corespunzator. Articolul corespunzator se cauta pe baza index-ului nr.1 al fisierului referit. Se citeste expresia pt.cheia index si din fisierul curent se inlocuiesc valorile cimpurilor cu acelasi cod cu cele participante la index. Cu valoarea rezultata se cauta primul articol din fisierul referit cf. primului index. Se evalueaza sectiunea #RIND si se trece la articolul urmator in fisierul referit. - daca nu s-a schimbat grupa prin trecerea la articolul urmator, se evalueaza din nou sectiunea #RIND si se trece la articolul urmator. - daca s-a schimbat grupa se evalueaza sectiunea #SFIRSITGRUPA (daca exista), - se evalueaza urmatoarea sectiune #RIND/x2 daca exista, - se evalueaza sectiunea #SFARSIT si se termina documentul, - se trece la articolul urmator si se incepe construirea unui nou document. De fiecare data cind se evalueaza oricare din sectiunile #RIND/xx, #INCEPUTGRUPA, #SFIRSITGRUPA se analizeaza daca mai exista spatiu suficient pe pagina curenta ca sa poate sa fie tiparita sectiunea curenta urmata de sectiunea #SFIRSITPAGINA. Daca nu exista spatiu suficient, se evalueaza sectiunea #SFIRSITPAGINA si se face saltul pe pagina urmatoare. La inceputul pagini noi se evalueaza sectiunea #INCEPUTPAGINA si se continua cu evaluarea sectiunii #RIND. Zona de manevra Documentul mai intai se construieste separat intr-o zona de manevra, dupa construirea documentului acesta se listeaza. De obicei zona de manevra in care se construieste documentul este o variabila de tip sir de caractere sau un fisier text. In unele aplicatii HAMOR zona de manevra poate fi impusa prin parametru. De ex. hSALAR incepind cu versiunea V 5.0 accepta parametrul MANEVRA in sectiunea [TIPURI_DOCUMENTE]. Prin parametrul MANEVRA se stabileste zona de manevra: M-zona de manevra in memorie; F-zona de manevra in fisier. Daca zona de manevra este in variabila, intinderea maxima a documentului nu poate depasi 64 Ko. Daca zona de manevra este in fisier, documentul poate avea orice intindere. Lista finala poate fi formata din mai multe documente. Intinderea maxima are importanta numai la nivelul documentului si numai in procesul de construire a documentului, nu si la listare. O lista formata din mai multe documente teoretic poate avea orice intindere. Exemple Exemple de astfel de liste se gasesc in declaratii hSALAR. Liste cu parcurgerea unui singur fisier: somaj, CAS Liste cu parcurgerea mai multor fisiere: fise fiscale. Exemplu pentru crearea unei liste de tip document Aplicatia: HSALAR Baza de date: DEMOS.DEM Lista de creat: o adeverinta de salar pentru 6 luni, solicitat pentru luarea unui credit, cu urmatorul continut: ADEVERINTA SALAR Societatea comerciala ................NUMELE FIRMEI..................., avand CUI: ....COD UNIC DE INREGISTRARE...., adevereste prin prezenta, ca d-ul/d-na ...NUME SI PRENUME ANGAJAT.. este angajat la unitatea noastra incepand cu data de ....DATA ANGAJARII.... Salarul realizat in ultimele 6 luni: ------------------------------------- | Luna | Venit Brut | Venit Net | |-----------------------------------| |aaaa.ll 1| BRUT 1| NET 1| |-----------------------------------| |aaaa.ll 2| BRUT 2| NET 2| |-----------------------------------| |aaaa.ll 3| BRUT 3| NET 3| |-----------------------------------| |aaaa.ll 4| BRUT 4| NET 4| |-----------------------------------| |aaaa.ll 5| BRUT 5| NET 5| |-----------------------------------| |aaaa.ll 6| BRUT 6| NET 6| ------------------------------------- Unitatea isi asuma responsabilitatea pentru corectitudinea datelor. Functia Numele si prenumele Semnatura Director NUME SI PRENUME .............. Contabil NUME SI PRENUME .............. Data: DATA EMITERII Stampila angajatorului ..................... Analiza: Intr-o adeverinta intra datele unui singur angajat. Principala sursa de date va fi fisierul T5 - Fise de evidenta salarii. Din Catalogul fisierelor rezulta ca primul index al acestui fisier este: ST503+ST500+ST500M. Primul camp din index contine marca angajatilor, ceea ce este potrivit pentru lista de elaborat. Pasii implementarii: I. In hSALAR > Salarii > Fise de evidenta salarii > operatii/ferestre /liste cream o lista noua: +------------------------------------------------------------+ ¦ ADAUGARE TIP LISTA / Fise de evidenta salarii ¦ ¦------------------------------------------------------------¦ ¦ ¦ ¦ Tip/nr. : LISTA / 11 ¦ ¦ Denumire: Adev. salar - ultimele 6 luni ¦ ¦ Antet: ¦ ¦ ¦ ¦ Lista, Centralizator, Extras sau Document: D ¦ ¦ Numar extrase pe orizontala: 0 ¦ ¦ ¦ ¦ Filtru: cimp : = ¦ ¦ valoare: ¦ ¦ Filtru expresie: Perioada>T500.AND.h_DifMonth(DataAppl,h_CTOD(T500+".01","aaaa.ll.zz"))<=6 ¦ Grupa1 Grupa2 Grupa3 ¦ ¦ Criteriu grupare (cimpul) : T503 ¦ ¦ Salt pagina dupa grupa ? [D,N]: N N N ¦ ¦ ¦ ¦ Numar cimpuri: 0 Latime: 0 ¦ ¦ ¦ +------------------------------------------------------------+ Obs. Filtrul expresie asigura ca luna curenta sa nu fie luata in considerare si sa fie afisate cel mult 6 luni premergatoare. II. In hSALAR > Configurari > Tipuri de documente adaugam un nou tip de document, astfel: +----------------------------------------------------------------+ ¦ ADAUGARE TIP DOCUMENT ¦ ¦----------------------------------------------------------------¦ ¦ ¦ ¦ Jurnal: S --> hSALAR ¦ ¦ Tip document: T511 Cod model: A ¦ ¦ Denumire: Adeverinta salar pt. credit ¦ ¦ Emitent: ¦ ¦ Expeditor: ¦ ¦ Destinatar: ¦ ¦ ¦ +----------------------------------------------------------------+ Obs. Jurnalul de care apartine un tip de document depinde de aplicatie. In hSALAR acest jurnal este S, in hDOC D ... Cu F1 se poate consulta lista jurnalelor disponibile. Codul tipului de document este T511, unde T5 este aliasul fisierului si 11 este numarul de ordine al listei. III. In Tipuri de documente alegem optiunea Modif. > MODEL > Formule si definim campurile care pot sa apara in formular, astfel: NUMSOC ; Numele societatii ; h_PADC(x_SocData("LG_NAME"),50,".") ; C50 CUI ; Cod unic de inregistrare ; h_PADC(x_SocData("Cod_Fiscal"),15,"."); C15 NUME ; Nume si prenume angajat ; h_PADC(RTRIM(T5031),25,".") ; C25 DATAANG; Data angajarii ; IF(vf_sal(UPPER("p_"),T503),P_->SP_AB1,NIL); D10 LUNA ; Luna ; T500 ; C7 VBRUT ; Venit brut ; T5K9 ; N10 SNET ; Salar net ; T5M43-T5M48 ; N10 TIT1 ; Functia ; x_SocData("TIT1") ; C15 NAME1 ; Nume si prenume ; x_SocData("NAME1") ; C30 TIT3 ; Functia ; x_SocData("TIT3") ; C15 NAME3 ; Nume si prenume ; x_SocData("NAME3") ; C30 DATAADV; Data adeverintei ; DATE() ; D10 Obs. Formulele sunt salvate in T511_AM2.txt IV. Alegem optiunea Modif. > MODEL > Formular si redactam continutul adeverintei, astfel: #INCEPUT ADEVERINTA SALAR Societatea comerciala {NUMSOC }, avand CUI: {CUI }, adevereste prin prezenta, ca d-ul/d-na {NUME } este angajat la unitatea noastra incepand cu data de {DATAANG }. Salarul realizat in ultimele 6 luni: ÚÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Luna ³ Venit Brut ³ Venit Net ³ #RIND/T5 ÃÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ {LUNA } ³ {VBRUT } ³ {SNET } ³ #SFIRSIT ÀÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÙ Unitatea isi asuma responsabilitatea pentru corectitudinea datelor. Functia Numele si prenumele Semnatura {TIT1 } {NAME1 } .............. {TIT3 } {NAME3 } .............. Data: {DATAADV } Stampila angajatorului ..................... Obs. Formularul este salvat in T511_AM1.txt V. In Salarii > Fise de evidenta salarii alegem optiunea Listare selectiva > 11 Adev. salar - ultimele 6 luni si verificam lista. Concluzii 1. Cheia primului index al fisierului XX trebuie sa inceapa cu campurile inscrise in Grupa1 si Grupa2. Daca exista sectiuni RIND/Xn, care citesc date din alte fisiere generice decat XX, atunci si in cazul acestora cheia primului index trebuie sa inceapa cu campurile omonime lui Grupa1 si Grupa2. 2. Dupa cum s-a vazut in definitia listei de tip document nu apare codul tipului de document pe baza caruia lista trebuie generata. Codul este dedus din aliasul fisierului generic pentru care s-a definit lista de tip document si numarul de ordine al listei. 3. In cazul listelor de tip document nu este necesar ca in Cimpuri sa atasam la lista campuri. 4. Tipurile de documente din aplicatiile hMET2 sunt descrise prin componente care apar si in descrierea tipurilor din hMARFA si aceste componente se descriu aproape identic in ambele parti. Dar, in hMARFA tipurile de documente: - au componente prin care contribuie si la manipularea datelor (MACHETA: Parametrii, Text liber; VALIDARE: Formule; CONTARE: Formule); - sunt legate de fisierele de date la nivelul articolelor (si nu la nivel de fisier + lista). Astfel, desi exista similaritati la nivelul definirii tipurilor de documente, in ce priveste integrarea si rolul lor in aplicatie exista diferente radicale.