# 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.