50 lines
3.1 KiB
Markdown
50 lines
3.1 KiB
Markdown
# 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 <cheia grupului> + <sortarea din grup>` (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.
|