Curatenie ceruta dupa inchiderea lui #6. Folderul cercetare\ NU se putea sterge in bloc: plan_13 se sprijina pe el cu 85 de trimiteri, deci e baza de dovezi a planului aflat in lucru. Impartirea: - 14 cercetari trans-proiect trec in COMUN\docs\cercetare\ - valuta si curs, TVA/VANZARI, consumatorii VANZARI din toata suita, integrarile #10/#11/#12, watchdog VFP, proiectarea Oracle a lui S5, view-ul VVANZARI_ARTICOLE. Nu sunt ale ROAFACTURARE, iar #10/#11/#12 se reiau chiar din ele. - 20 de rapoarte de executie ale lui #6, nereferite de nimic viu, sterse. - 91 raman, neatinse. Trimiterile catre handoff-urile si diff-urile intermediare deja desfiintate au fost curatate peste tot (39 de fisiere): 50 catre handoff-uri, 37 catre diff-uri aplicate, plus caile celor mutate in COMUN. Zero trimiteri rupte ramase. progres.md preia rolul de predare: ce ramane din #6 (cele sase documente parazite, cele doua esecuri reale din S8 pe factura din aviz), cifrele de test citite din log, si cele doua capcane de mediu platite - .FXP vechi executat in locul .prg-ului, si GETFONT() care atarna un formular instantiat fara goApp. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
11 KiB
S4 runda 3, sub-blocul C — verdictul de corelatie ACT/RUL (partea 2)
Livrat: doua randuri de control (Total ACT, Total RUL) plus un indicator informativ cu 3 stari
(sincronizat / divergent / nu se aplica), pe pgfArticole.PAGE3 din frm_modific2024
(COMUN\clase\omodificari.vc2). Formulele erau deja stabilite si verificate in
docs\cercetare\rec_suma_act.md — s-au aplicat direct, fara recercetare.
Ce s-a implementat
COMUN\clase\omodificari.vc2, clasa frm_modific2024:
- Metoda noua
ActualizeazaVerdictActRul(apelata dinActualizeazaBaraTotaluri, in acelasi punct in care se recalculeaza azi bara —Show(),calculeaza_valori_articol(),cmdStergeArticol.Click,txtDiscountArt.Valid):- Total ACT: sold net debit-credit pe cursorul
tactdeja incarcat, filtratsters=0(tacte deja filtratcod+an+lunadeIncarcaCursoareModificareNota— nicio interogare noua). Contul de referinta se alege pe grupa de tip:461pentru avize catre clienti debitori (28,29),418pentru restul avizelor (21,22,24,26),4111pentru restul (facturi, factura din aviz, rate/contract, ROAACNPRO) — simplificare fata de tabelul complet dinrec_suma_act.md(acolo contul pentru rate/contract vine teoretic dinNOTE_CONTABILE, dar cercetarea a confirmat empiric ca iese mereu4111; a deschide o interogare noua doar pentru acest caz ar fi contrazis principiul "nu deschide interogare noua daca sumele se pot calcula din cursoarele deja deschise"). - Total RUL:
SUM(cant*pretvtva) + SUM(cante*pretvtva WHERE id_tip_rulaj<>3)petrul(deja incarcat), corectat cu valoarea liniilor nestocate dintvd(in_stoc=0), convertita in RON la cursul documentului (acelasicurs/multiplicatorca restul barei, decizia 33). Eticheta randului devine "Total RUL (ajustat):" cand corectia s-a aplicat efectiv (corectie <> 0). - Indicator informativ, 3 stari: "sincronizat" (
|ACT-RUL| <= 0.02), "divergent (informativ, nu e eroare)" (peste toleranta), sau "nu se aplica (informativ, date de import)" — fortat pe tipul 51 (ROAACNPRO), unde cercetarea a stabilit ca divergenta nu e de formula, ci de calitatea datelor de import (rec_suma_act.md, sectiunea D). Toleranta de 0.02 acopera rotunjirile de genul celei documentate pecod=1138989(0.01 lei). - Ascundere pe tipurile fara suma comparabila (23,25,27,30,41,42,47, decizia 22): cele 5
controale noi se ascund odata cu restul barei, pe acelasi flag
!llAscundetransmis ca parametru — nu se dubleaza lista de tipuri in doua locuri.
- Total ACT: sold net debit-credit pe cursorul
- 8 controale existente + 5 noi pe
PAGE3:lblTotalActArt/txtTotalActArt,lblTotalRulArt/txtTotalRulArt(Top=132/136, al doilea rand sub bara existenta), silblVerdictArt(text + culoare setate direct in cod, dupa modelulVisible-urilor existente —Labelnu suportaControlSourcepentruCaption). - Randul 2 a cerut spatiu vertical nou:
pgfArticole.Height142->164,frm_modific2024.Height508->530 (+22px, acelasi delta pe ambele, ca pageframe-ul sa nu depaseasca formularul), si cele 4 butoane din coloana din dreapta (But_copiazaR,But_modificaR,But_stergeR,but_afiseaza_rulaje) mutate cu acelasi +22px, ca sa ramana la aceeasi distanta vizuala fata de cadrulpgfArticole(Anchor=12, bottom+right, dar editarea e statica — anchor-ul VFP nu recalculeaza pozitia la o simpla schimbare deHeightin clasa, doar la un resize la runtime). Verificat pe cod ca nimic altceva nu depinde de valorile vechi (resize_grid1foloseste284fix candpgfArticolee vizibil, siThis.Height - 100cand e ascuns — ambele raman corecte, a doua chiar beneficiaza de cei 22px in plus). Grid-ulgrdArticoleFactura(Height=81) nu s-a atins — 0 linii pierdute, la fel ca la partea 1.
COMUN\programe\ofacturare_editare.prg:
tvdcapata coloana nouain_stoc I NULL, in ambele locuri unde structura cursorului se repeta (CreeazaCursorArticoleGolsiLoad()ramuraELSEdinomodificari.vc2).IncarcaArticoleFacturaextinde interogarea existenta (nu adauga una noua) culeft join nom_articole na on na.id_articol = v.id_articol, proiectandna.in_stoc— view-ulVVANZARI_ARTICOLEnu expuneIN_STOC(verificat pe cod, confirmat pe date printr-un probe live).
Verificat pe cod / pe date, nu presupus
- Coloanele reale ale
tact/trul/tvdau fost verificate live pe schema (MARIUSM_AUTO, documentcod=1140895/an=2026/luna=8, tip=1) inainte de a scrie codul:tactareSCD/ASCD/SCC/ASCC/SUMA/STERS/AN/LUNA/COD,trulareCANT/CANTE/PRETVTVA/ID_TIP_RULAJ/STERS, ambele exact ca inrec_suma_act.md. Scriptul de probe (test_probe_columns.prg) a fost sters dupa verificare — nu face parte din suita permanenta. - Comparatia de cont foloseste
==peAlltrim(), nu=simplu — VFP cuSET EXACT OFF(implicit) ar fi potrivit'411'ca prefix al lui'4111'cu un=simplu, exact capcana semnalata in cercetare ("411 vs 4111").
Descoperire pe parcurs: randuri RUL "duplicat" schimba verdictul pe documentul de test
Documentul folosit pentru testul dedicat (cod=1140895, descoperit prin DescoperaCazTest) are
exact tiparul semnalat ca intrebare deschisa in rec_suma_act.md sectiunea F punctul 3: perechi
ID_TIP_RULAJ=3 (diferenta de pret) insotite de randuri ID_TIP_RULAJ=0 cu aceeasi
cantitate/pret ca randul-partener din pereche. Aplicand formula exact cum e specificata
(SUM(cant*pretvtva) + SUM(cante*pretvtva WHERE id_tip_rulaj<>3), fara nicio excludere
suplimentara), rezultatul pe acest document e 3728.18, in timp ce Total ACT (si
VANZARI.TOTAL_CU_TVA) e 1924.59 — deci verdictul iese "divergent" desi documentul e, de fapt,
corect emis. Cercetarea anterioara (E.4) aratase ca EXCLUDEREA randurilor "duplicat" inchide exact
diferenta, dar aceasta excludere nu a fost inclusa in formula finala transmisa (a ramas intrebare
deschisa, nu decizie). Am implementat formula asa cum a fost specificata in brief/decizii, fara
sa adaug o regula de excludere nedecisa — testul nou confirma ca implementarea calculeaza exact ce
scrie formula (verificat prin recalcul independent, SCAN separat de codul din clasa), iar
"divergent" pe acest tip de document e comportamentul asteptat si documentat, nu un bug. Ramane
o intrebare pentru Marius: se decide excluderea randurilor ID_TIP_RULAJ=0 care dubleaza exact un
rand din perechea 3 (ar inchide acest caz), sau ramane asa cum e acum (informativ, divergenta
posibila pe documentele cu acest tipar de date)?
Limitare cunoscuta, in afara perimetrului
Liniile adaugate manual in aceeasi sesiune (AdaugaLinieTvdDinArticol, sub-blocul B) nu primesc
in_stoc — selectorul caut_articol() (decizia 34) nu carrying stocul articolului. Pana la
salvarea si reincarcarea notei, o linie noua e tratata implicit ca stocata (Nvl(in_stoc,1)=1, fara
corectie). Nu a fost atins AdaugaLinieTvdDinArticol — in afara scopului acestei livrari.
Testat
Regresie, headless, vfp9.exe -A -T, watchdog, exit 0, zero dialoguri, identic cu baseline-ul
de plecare (handoff intermediar (sters)):
test_page3_articole.prg: 14 PASS / 2 FAIL (cele 2 = artefactul headless cunoscut de la datoria 7, neschimbat).test_incarca_vanzare_din_nota.prg: 5 PASS / 0 FAIL.test_adauga_linie_articol.prg: 20 PASS / 0 FAIL (liniaREZULTATdin log — grep brut pe "PASS"/"FAIL" da 21/1 din cauza ca linia de sumar contine ambele cuvinte; cifra corecta e cea dinREZULTAT).test_adauga_linie_valuta.prg: 6 PASS / 0 FAIL.test_ui_sterge_linie.prg: 8 PASS / 0 FAIL.
Suita noua, COMUN\utile\Teste\editare_factura\test_verdict_act_rul.prg, pe documentul
descoperit prin proprietate (FACTURA_ARTICOLE, nu ancorat pe cod): 18 PASS / 0 FAIL
(REZULTAT in log). Acopera: calculul Total ACT si Total RUL verificat prin recalcul
independent (SCAN, cod separat de metoda testata); marcajul "(ajustat)" cand corectia pe linii
nestocate s-a aplicat; textul verdictului informativ, niciodata prezentat ca eroare de sine
statatoare; starile sincronizat/divergent; tratamentul special tip=51 (verdict fortat "nu se
aplica", cifrele raman vizibile); ascunderea celor 5 controale pe transfer (23) si custodie (42);
alegerea contului pe grupa de tip (28→461, 21→418); corectia sintetica pe linie fortata in_stoc=0
(creste Total RUL exact cu valoarea liniei convertita in RON).
Zero scrieri in Oracle in toata sesiunea (doar SELECT-uri prin goExecutor si cursoare in
memorie). Date de test (MARIUSM_AUTO) — divergenta gasita pe documentul de test e un caz izolat
documentat mai sus, nu o dovada ca formula e gresita pe restul datelor.
Cens de octeti si write-back
- Inainte:
2 aa / 2 e3 / 2 fe, zeroEF BF BD. - In timpul editarii: fiecare scriere cu Edit a stricat din nou cele doua linii cu diacritice
(
Renunțare/Adăugare/Ștergere, censul a urcat la6 ef/6 bf/6 bd) — reparat byte-cu-byte cu Perl, folosind bytes-urile corecte din backup-ulomodificari.vc2.pre_verdict.bak(facut inainte de prima editare). - Final:
2 aa / 2 e3 / 2 fe, zeroEF BF BD— identic cu baseline-ul. - Write-back:
txt2vcx.ps1 -AllowComun. Prima rulare a picat fidelity check-ul (diferenta era doar formatarea liniilor goale din metoda noua — spatii vs tab-uri, capcana deja cunoscuta), rezolvata prin adoptarea textului regenerat din staging ca sursa canonica (verificat ca are acelasi cens de octeti inainte de a-l adopta). A doua rulare: OK..vc2/.vcx/.VCTsincrone (acelasi mtime,svn statusarataMpe.vcx/.VCT,Ipe.vc2— ignorat de SVN, urmarit doar in git).
Fisiere atinse
COMUN\clase\omodificari.vc2(+.vcx/.VCT, scris in binar) — metoda nouaActualizeazaVerdictActRul, apel dinActualizeazaBaraTotaluri, 5 controale noi pe PAGE3, proprietati noi (ntotalactron,ntotalrulron,lrulajustat), redimensionarepgfArticole+ formular + 4 butoane din dreapta.COMUN\programe\ofacturare_editare.prg—in_stocintvd(structura + interogare).COMUN\utile\Teste\editare_factura\test_verdict_act_rul.prg(nou) — suita dedicata.- Backup:
COMUN\clase\omodificari.vc2.pre_verdict.bak,COMUN\programe\ofacturare_editare.prg.pre_verdict.bak(pastrate).
Diff-uri
- diff aplicat (sters) —
omodificari.vc2(fata de.pre_verdict.bak). - diff aplicat (sters) —
ofacturare_editare.prg, izolat.
Fara commit (nici git, nici SVN).
Intrebari ramase pentru Marius
- Randurile RUL "duplicat" (
ID_TIP_RULAJ=0care dubleaza exact un rand din perechea3) — se exclud din formula (ar inchide cazuri ca cel gasit pecod=1140895), sau ramane formula literala asa cum a fost decisa, cu riscul asumat de "divergent" pe aceste documente? Vezi sectiunea dedicata de mai sus. - Cont pentru rate/contract (tip 2,6,52 cu
id_rata<>0): s-a folosit simplificarea4111(empiric confirmat, dar nu derivat dinNOTE_CONTABILE). Ramane acceptabil, sau merita o interogare dedicata intr-o runda viitoare?