Files
roafacturare/docs/cercetare/rec_test_writeback.md
Marius Mutu d9f5ca4226 docs: planurile, proiectarile si rapoartele de lucru intra in versionare
Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git,
nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de
cercetare pe care se sprijina modificarile din cod. O stergere acolo era
definitiva.

Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au
fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele
fisierelor de test la care se refereau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
2026-08-11 22:17:17 +03:00

95 lines
5.9 KiB
Markdown

# Test real al caii de scriere (buton=1) din do_editare_factura
Aprobat explicit de Marius pe 08.08.2026: test care scrie efectiv in `MARIUSM_AUTO@ROA_CENTRAL`.
Script: `COMUN\utile\Teste\editare_factura\test_writeback_buton1.prg`. Log complet:
`COMUN\utile\Teste\editare_factura\test_writeback_buton1_log.txt`.
## Rezultat
**PASS pe toate cele 5 verificari cerute, de doua ori** (salvare fara modificari + salvare cu o
modificare), cu COMMIT real, verificat independent prin `sqlplus` dupa rulare.
Document consumat: `cod=1140886`, `id_vanzare=1048` (factura tip 1, 07-AUG-26, `total_cu_tva=302.51`,
1 linie `VANZARI_DETALII`, 5 randuri `ACT`, `id_set=25010`, `id_fact=8009658`, 1 rand `RUL`).
**Cod-ul final ramas in baza dupa acest test: `1140894`** (a trecut prin `1140886` -> `1140893` ->
`1140894`, cate o realocare la fiecare salvare). Oricine reia testul pe acest document trebuie sa
citeasca `cod`-ul curent din `VANZARI` (nu presupune `1140886`).
## Calea testata: harness direct, NU UI condus prin Timer
`frm_modific2024` a fost **ocolit complet** - nu a fost instantiat deloc, dupa doua incercari esuate
(vezi sectiunea "Ce nu acopera" mai jos). Harnessul:
1. Reproduce exact starea de cursoare pe care `do_editare_factura` o lasa inainte de
`Createobject('frm_modific2024',...)`, folosind functia reala `IncarcaCursoareModificareNota`
(`COMUN\programe\ofacturare_editare.prg`) pe date Oracle reale.
2. Seteaza `buton=1` direct (sare peste `inainte_de_do_termin`).
3. Ruleaza LITERAL codul ramurii `buton=1` din `do_editare_factura`
(`ofacturare_comun.vc2:3805-3840`), inclusiv `OSCRIE_IN_FISIERE(2,...)` (stergere),
`OSCRIE_IN_FISIERE(0,...)` (scriere) si `pack_contafin.finalizeaza_modificare_nota`.
4. `Thisform.do_deschide_tranzactie()` / `do_inchide_tranzactie()` sunt reproduse INLINE
(`MyDeschideTranzactie`/`MyInchideTranzactie` in harness), copiate identic dupa
`_frm_base.vc2:252-302`, fara sa instantieze niciun formular.
`OSCRIE_IN_FISIERE` (`COMUN\programe\oscrie_in_fisiere.prg`) **nu a fost mock-uit** - a rulat
codul real, cu conexiune Oracle reala.
## Cele 5 verificari (ambele rulari)
| # | Verificare | TEST 1 (fara modificari) | TEST 2 (explicatie modificata) |
|---|---|---|---|
| 1 | `ACT`: vechi `STERS=1`, nou cu aceeasi suma | PASS (5/5 sters, suma 792.53 -> 792.53) | PASS (5/5 sters, suma 792.53 -> 792.53) |
| 2 | `RUL`: acelasi tipar | PASS (1 rand vechi sters, 1 rand nou) | PASS (identic) |
| 3 | `VANZARI`: `cod` nou, `sters=0`, `id_fact` neschimbat, totaluri neschimbate | PASS (`1140886`->`1140893`) | PASS (`1140893`->`1140894`) |
| 4 | `VANZARI_DETALII`: neatins | PASS (1 rand, sume identice) | PASS (identic) |
| 5 | `lnSucces>0` pe tot lantul + commit (nu rollback) | PASS (`lnSucces=1`, COMMIT) | PASS (`lnSucces=1`, COMMIT) |
Verificare suplimentara TEST 2: explicatia modificata (`NOTA 1` -> `NOTA 1 (test writeback)`) a
ajuns efectiv in randul nou din `ACT` - **PASS**, confirmat si independent prin `sqlplus`
(`cod=1140894`, randul `4111/704`, coloana `EXPLICATIA`).
Independent, prin `sqlplus` dupa rulare (nu doar din logul VFP): `VANZARI.cod=1140894`,
`sters=0`, totaluri neschimbate; `ACT` cod `1140886` si `1140893` toate `STERS=1`; `ACT` cod
`1140894` are 5 randuri active cu aceleasi sume/id_set/id_fact; `RUL` cod `1140894` 1 rand activ;
`VANZARI_DETALII` neschimbat.
## Ce NU acopera acest test
- **Validarea din `inainte_de_do_termin`** (`omodificari.vc2:13357-13549` -
`verificare_note_contabile`, echilibru 4426-4428, `VerificaAvertizareExigibilizareTVA`) - a fost
**sarita**, `buton=1` a fost fortat direct in harness.
- **Comportamentul real al formularului `frm_modific2024`** la butonul "Terminat" (sau la editari
facute de utilizator in grid-urile lui) - formularul nu a fost instantiat deloc.
- Testul demonstreaza ca **lantul de scriere** functioneaza pe acest tip de document - nu ca
utilizatorul ajunge la el prin fluxul UI complet.
## Incidente pe parcurs (rezolvate, fara sa fi fost bug de aplicatie)
1. **Instantierea `frm_modific2024` s-a blocat de doua ori**, headless, fara nicio linie de eroare
in log:
- Prima data pe un **dialog nativ Windows "Open"** (`#32770`), confirmat prin enumerarea
ferestrelor procesului (`EnumWindows`/`GetWindowText`) - tipar deja documentat in
`testare-ui-vfp.md`, capcana j (o tabela/cursor lipsa in mediul minimal declanseaza dialogul
de cautare fisier in loc de eroare catchabila). Cauza exacta (ce control/tabela anume) nu a
fost investigata mai departe - nu era obiectul acestui test, si `omodificari.vc2` era in
lucru in paralel la S4/PAGE3.
- Din aceasta cauza s-a decis **ocolirea completa** a formularului (vezi sectiunea de mai sus).
2. **Bug de harness (nu de aplicatie): `pnAn`/`pnLuna` declarate `LOCAL` in loc de `Private`.**
Apelul `pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,...)` foloseste `?pnLuna`/`?pnAn`
ca bind-variabile, rezolvate de `goExecutor.oExecuta` in josul stivei de apel - vizibilitatea
asta cere `Private`, nu `Local` (exact cum sunt declarate in codul real,
`ofacturare_comun.vc2:3742`: `Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare`). Cu `Local`,
rularea a produs o fereastra nativa VFP **"View Parameter"** (vizibila o singura data prin
`EnumWindows`, apoi rezolvata singura fara interventie) si `finalizeaza_modificare_nota` a
returnat `-1` de doua ori consecutiv - fara nicio scriere efectiva (ROLLBACK ambele dati, date
verificate neatinse). Corectat in harness (`Private pnAn, pnLuna, lnCod, lnIdFact`), dupa care
ambele teste au trecut curat. **Concluzie: nu e un defect al `ofacturare_comun.vc2` sau al
`oscrie_in_fisiere.prg`** - codul real foloseste deja declararea corecta.
## Date de test consumate ireversibil
`cod=1140886` (id_vanzare=1048) nu mai exista ca document activ - a fost realocat de doua ori.
Orice test viitor pe acest document trebuie sa porneasca de la `cod=1140894` (curent) sau sa aleaga
alt document.