# Stilul rapoartelor ROA (aprobat de Marius pe `Rapoarte/pvcasare_mf`) Model de referinta: `Rapoarte/pvcasare_mf.fr2` (portret, grupare per document, tabel cu linii). Aplica stilul de la inceput; fiecare punct de mai jos a costat o runda de corectura. ## Pagina si fonturi - Portret (`ORIENTATION=0`, A4) daca incape; tabelul pe ~74000 FRU, toate obiectele cu acelasi X max. - Firma (`goFirma.Antet`): Arial 10 bold. Titlul: Arial 12 bold, centrat. - Restul (texte, cap de tabel, detaliu, total, comisie): **Arial Narrow 10** (bold la capete si total). Subsolul de pagina: Arial Narrow 8. - Texte fixe fara diacritice, sentence case ("Numar document", nu "NUMAR DOCUMENT"). ## Grupare - Un document (PV, factura etc.) per grup, cu pagina noua: GH cu `EXPR` = cheia documentului (ex. `ALLTRIM(NVL(nrdoc,'')) + '|' + DTOS(NVL(datadoc,{}))`), `PAGEBREAK=.T.`. - Continutul per document (numar/data, texte, cap de tabel) sta in **Group Header**, nu in Page Header; toate obiectele din GH cu `SUPRPCOL=3`, `SUPGROUP=6`. Page Header doar firma + titlu. - Nr. crt. si totalurile se reseteaza pe grup: variabile de raport (Count / Sum, `RESETTOTAL=6`), nu precalcul in cursor, nu `recno()` (`totaluri.md`). ## Ordonare - Ordinea o da cursorul, nu raportul: `INDEX ON + ` (ex. `Alltrim(nrdoc) + '|' + Dtos(datadoc) + denumire`). Cheia din INDEX = exact `EXPR`-ul GH, altfel grupul se rupe in mai multe pagini. - Campuri din Oracle: NULL si tipuri reale (nrdoc numeric, datadoc datetime) -> `Nvl`, `Iif(Isnull...)`, `Str()`; testeaza cu tipurile reale, nu doar cu cursori sintetici. ## Tabel - Cap de tabel pe **un singur rand**, texte scurte ("Amortizare", nu "Amortizarea pana la ..."), centrate (`@I`), fundal gri (`FILL*=200`, `MODE=0`) doar pana la marginea tabelului, linie sub cap. - Coloana de text lunga (Denumirea) lata; coloanele numerice cat valoarea maxima cu masca. Text la stanga, numere la dreapta (`OFFSET=1`), masca `get_mask(14,gnpa)` peste tot (si la total). - Linii verticale in detaliu: `OBJTYPE=6`, `STRETCH=.T.`, aceleasi `HPOS` ca in capul de tabel. - Campul de text care se poate lungi (Denumirea): `STRETCH=.T.` (se rupe pe mai multe randuri, nu se trunchiaza). - **Linie orizontala sub fiecare rand de detaliu**, pe toata latimea tabelului, la baza benzii Detail, cu **`FLOAT=.T.`** (`STRETCH=.F.`, `TOP=.F.`) - altfel ramane sus cand randul se lungeste. - Tabelul se inchide doar cu linia ultimului rand: **fara linie suplimentara la inceputul GF** (se dubleaza si iese o linie groasa). - Fara spatiu gol intre capul de tabel si primul rand (detaliul incepe imediat sub linia capului). ## Total si subsol de document (Group Footer) - Randul "TOTAL" fara chenar, sub tabel, valorile aliniate sub coloanele lor, aceeasi masca. - Comisia: tabel cu perechi "Nume si prenume | Semnatura" alaturate, pe latimea tabelului, un singur rand gol pentru semnaturi (nu 3). ## Verificare specifica stilului - Test cu o denumire lunga (3-4 randuri): linia orizontala coboara sub rand, verticalele se intind. - Doua documente -> doua pagini, nr. crt. reincepe de la 1, totalurile per document.