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

5.9 KiB

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.