# Handoff — runda 6 (punctul 6) + runda 7 (sincronizare articole-rulaje) Scris 20.08.2026, seara. Sesiunea principala a trecut de pragul de context. **Numai stare, fara analize noi.** ## Stare periculoasa — citeste asta prima - **Nimic nu e comis.** Nici SVN, nici git, nici in `COMUN`. Marius a decis explicit: **un singur commit, dupa ce sunt gata toate trei lucrarile** (punctul 6 + cele doua cereri de runda 7). Punctul 6 e gata si probat, dar asteapta. - `COMUN\clase\omodificari.vc2` si `COMUN\programe\ofacturare_editare.prg` erau, la scrierea acestui fisier, **in lucru la subagentul `r7-sincronizare`**. Verifica pe disc `mtime` + `git status` in `COMUN` inainte sa presupui ceva; nu porni un al doilea scriitor pe ele. - `roafacturare.PJT` / `.PJX` / `.exe` apar modificate in `svn status`. **Nu sunt ale noastre** — vin din sesiunea de VFP a lui Marius. Decizia lui: **se lasa asa**, nu se comit, nu se reverteaza. ## 1. Punctul 6 — TERMINAT, verificat, necomis Explicatia TVA in dialogul de modificare a articolului deschis din `frm_facturi`. **Cod, pe numerotarea finala** (`COMUN\clase\ofacturare_comun.vc2`): | ce | unde | |---|---| | `data_act` + `id_part` puse pe `poRec` din antetul `crsfacturi` | `frm_facturi.do_modifica_explicatie`, `:4650-4651` | | layout: `Height` 370->431, randul `cbo_saft` coborat, obiecte noi `_shape4` / `lbExplTva` / `cbo_expl_tva` / `lbExplTvaInfo` | `frm_modifica_articol_factura`, `:5140-5300` | | proprietatea `nidjtvaales` (+ intrarea `*p:`, obligatorie) | `:5147`, `:5158` | | popularea combo-ului, filtrata | `Init`, `:5328-5360` | | filtrul SQL | `:5340-5342` | | derivarea `taxcode` | `cbo_expl_tva.InteractiveChange` | | al 5-lea parametru pozitional, literal `null` cand combo-ul n-a fost atins | `inainte_de_do_termin` | | `Destroy` inchide `crsExplTvaCbo` + `crsExplTvaArt` | in aceeasi clasa | **Write-back FACUT si dovedit** (nu prin `mtime`): reconversie binar -> text intr-un cache temporar, `diff` **0 linii**, md5 identic. Binar la 19:59. Encoding: **13** octeti >0x7F, zero `EF BF BD`, CRLF pe toate liniile; octetul diacritic din `lbExplTva.Caption` e **`0xFE`** (cp1250), verificat citind din binar. **Probat pe ecran de Marius, de doua ori** (a doua oara dupa corectia de filtru). E OK. ### Ce s-a stabilit — nu se redeschide - **Filtrul listei**: `id_jtva_coloana > 0 AND afisat > 0 AND jv = 1 AND cota_tva = `. Verificat pe date in `vjtva_coloane` (`MARIUSM_AUTO`, 197 randuri cu `id > 0`): `afisat = 0` sunt **liniile de TVA**, `afisat = 1` **bazele** cu cota, `afisat = 2` neimpozabilele. `jv = 1` tine afara explicatiile de achizitie, care altfel treceau de garda `FACT-029` (au aceeasi cota). Acelasi filtru pe care il foloseste emiterea (`ofacturare.prg:170`). - **NU** se preia si restrictia pe `cote_tva` de an/luna curenta din `update_jtva_coloane`: ar goli lista la editarea unei facturi vechi cu cota iesita din uz (24%). - **`neexigibil` = `.F.`** (parametru omis), la fel `n50`/`n100`. Nu e presupunere: emiterea foloseste `GetTaxCode(gnAn, gnLuna, ldDataAct, lnIdJtva, .F.)` cu ultimii trei impliciti (`ofacturare.vc2:2529` si `:3101`), iar pe jurnal de vanzari `GetTaxCodeIdPart` degenereaza exact in acel apel. - `crsDetalii` **nu are** `data_act`/`id_part`; vin din randul curent din `crsfacturi`, care e chiar antetul liniei editate (`ofacturare_comun.vc2:3621-3623`). - Combo-ul **nu** are `ControlSource` — valoarea se preia in `InteractiveChange`, ca sa se poata distinge "userul a atins combo-ul" de "nu l-a atins" (al doilea caz trimite `null` si lasa procedura PL/SQL pe ramura veche). - Ordinea de tab: `Ed_tx_simplu1`=1, `cbo_expl_tva`=2, `cbo_saft`=3, `BUT_TERMIN1`=4, `But_renunt1`=5, `Lb_titlu_alb_b121`=6, `lbSaft`=7, `lbExplTva`=8. ### Oracle — nimic de facut `ff_2026_08_20_02_COMUN_PACK_FACTURARE.sql` **era deja aplicat** pe schema `MARIUSM_AUTO` de pe `ROA_CENTRAL`, contrar notei "NERULAT" din rapoartele vechi. Dovezi: rand `20.08.2026 / seq 2 / COMUN_PACK_FACTURARE` in `VERSIUNE`; PACKAGE + PACKAGE BODY **VALID**, `last_ddl_time` 13:56:38; sursa vie din `ALL_SOURCE` identica cu fisierul de pe disc, **0 linii diferenta pe 16 407**. **Nu se re-aplica `ff_2026_08_20_01`** — ar sterge punctul 6. ## 2bis. ACTUALIZARE 20.08.2026 20:40 - starea reala pe disc, dupa oprirea subagentului Sesiunea subagentului `r7-sincronizare` a fost inchisa din greseala, **inainte sa scrie raport**. `docs\raport_r7_sincronizare.md` **nu exista**. Starea de mai jos e citita direct de pe disc, nu dintr-un raport. ### STARE PERICULOASA: text editat FARA write-back | fisier | text | binar | concluzie | |---|---|---|---| | `COMUN\clase\omodificari.vc2` | **20:35** | `.vcx`/`.vct` la **14:08** | **modificarea NU exista in binar, deci nu exista in aplicatie** | | `COMUN\programe\ofacturare_editare.prg` | 20:33 | - | `.prg`, nu are nevoie de write-back | | `COMUN\clase\ofacturare_comun.vc2` | 19:59 | 19:59, diff 0 linii | punctul 6, sincronizat si verificat | `vfp9.exe` **nu ruleaza** - lock-ul e liber, write-back-ul se poate face oricand. ### M1 - facut pe text, corect Blocul "al doilea punct de declansare" a disparut din `frm_modific2024.inainte_de_do_termin` (0 potriviri pe comentariu). `AfiseazaDialogSincronizareArticole()` mai are **un singur** apelant, `omodificari.vc2:16665`, adica butonul. Corect. **Ramane de facut write-back-ul.** ### M2 - facut pe text, dar DEPASESTE perimetrul aprobat `AplicaModificareTrul` (`ofacturare_editare.prg`) calculeaza si scrie acum: `pretv`, `pretvtva`, `tvav` (cerute) **plus `valoarev`, `valtvav`, `valoarevcTVA`** - pe care **Marius le-a respins explicit**: sincronizarea e intre cantitate si preturi, nu valori. Subagentul a apucat sa aplice varianta initiala a brief-ului; corectia de perimetru nu a mai ajuns la el. **De facut in sesiunea urmatoare, in aceasta ordine:** 1. Scoate din `AplicaModificareTrul` cele trei campuri de valoare din `REPLACE` si cele trei linii care le calculeaza (`lnValoarecTVA`, `lnValoareTVA`, `lnValoareFtva`), plus `lnCantitate` daca ramane nefolosit. Raman `pretv`, `pretvtva`, `tvav`. Verifica si `LOCAL`-urile declarate, si comentariul-antet al lui `AplicaSincronizareArticole`. 2. Write-back pe `omodificari.vc2` (`txt2vcx.ps1 -TextFile ... -AllowComun`), apoi **dovada prin reconversie** cu `vcx2txt.ps1` intr-un cache temporar si `diff` - trebuie 0 linii. 3. Ruleaza cele doua suite (vezi mai jos), o suita per apel, cu `.fxp` sters inainte. 4. Raspunde la intrebarea de fapt ramasa deschisa (cine recalculeaza `valoarev`/`valtvav`/`valoarevcTVA` dupa sincronizare) - **doar raspuns, fara reparatie**. 5. Adauga cele doua puncte in changelog, regenereaza `docs\diff_r6_punct6.md` si cere aprobarea de commit. Nimic nu a fost testat: **cele doua suite nu au fost rulate**. ## 2. Runda 7 — IN LUCRU la subagentul `r7-sincronizare` Brief executabil, cu liniile si formula: `docs\brief_r7_sincronizare.md`. Raportul lui va fi la `docs\raport_r7_sincronizare.md`. **M1** — sincronizarea articole-rulaje porneste **doar din buton**. Se sterge blocul "al doilea punct de declansare" din `frm_modific2024.inainte_de_do_termin`, `omodificari.vc2:14484-14494`. Butonul `pgfArticole.PAGE3.cmdSincronizeazaArticole.Click` (`:16671`) ramane singura cale. Dupa stergere raman **fara consumator** metoda `SemnaturaDivergenteSincronizare` (`:14840`), proprietatea `cSemnaturaSincronizare` si atribuirea de la `:14956` — se semnaleaza, **nu** se sterg. **M2** — `AplicaModificareTrul` (`ofacturare_editare.prg:924`) scrie azi doar `cant`/`cante` si `pretvtva`; trebuie sa scrie **si `pretv`, si `tvav`**. - **Perimetru corectat de Marius**: **DOAR `pretv` si `tvav`.** Versiunea initiala a brief-ului cerea si `valoarev`/`valtvav`/`valoarevcTVA` — **respinsa**: sincronizarea e intre cantitate si preturi, nu valori. Nu o reintroduce. - **Intrebare de fapt inca deschisa**, ceruta subagentului, fara modificare de cod: cine recalculeaza `valoarev`/`valtvav`/`valoarevcTVA` pe randul `trul` dupa sincronizare, inainte de scrierea in Oracle? Trei concluzii posibile — le recalculeaza cineva / le recalculeaza salvarea / nu le recalculeaza nimeni si ajung vechi in Oracle. In ultimul caz **se raporteaza ca defect, nu se repara**; decide Marius. - Formula canonica, **de reutilizat, nu de reinventat**: `omodificari.vc2`, `calculeaza_valori_rul`, ramura `pretvtva`, `:13566-13587`. Doua precizii diferite: `gnPPretV` pentru preturi, `gnPC` pentru valori. - `calculeaza_valori_rul` **nu se poate apela direct** din sincronizare: isi alege cursorul din `This.pgfArticole.ActivePage` (`:13532-13533`) si nimereste `trul` doar cand pagina activa e 1; sincronizarea porneste de pe pagina 3, deci ar scrie in `trul_obinv`. ### Teste obligatorii pentru runda 7 `COMUN\utile\Teste\editare_factura\test_s4b_sincronizare.prg` (42 cazuri, **sectiunea C** e chiar directia `ARTICOLE_SURSA`) si `test_s4b_dialog.prg` (35 cazuri). Reguli: sterge `.fxp`-ul inainte de fiecare rulare; **o singura suita per apel** de comanda; cifra se ia numarand `PASS`/`FAIL` din log, iar dovada ca rularea a ajuns la capat e **linia de `REZULTAT`** (care contine ea insasi cuvintele `PASS` si `FAIL` — un `Select-String` naiv raporteaza cu unu mai mult din fiecare). ## 3. Changelog `changelog_roafacturare.txt` — intrarea rundei 6 e **scrisa**, in blocul existent **2.11.15**, data mutata la 20/08/2026. Versiunea **nu se bifurca** cat timp #6 nu e in productie (decizia lui Marius, commit `09f9d47`). **Ramas de adaugat**, dupa ce runda 7 e gata: sincronizarea porneste doar din buton, si copierea `pretv`/`tvav` in rulaj. ## 4. Ce se comite, cand vine aprobarea SVN (sursa de adevar), **tintit** — pe binare, niciodata pe `.vc2`/`.sc2`: - `COMUN\clase\ofacturare_comun.vcx` + `.vct` - `COMUN\clase\omodificari.vcx` + `.vct` (dupa runda 7) - `COMUN\programe\ofacturare_editare.prg` (dupa runda 7) - `changelog_roafacturare.txt` - `docs\progres.md` **Nu**: `roafacturare.PJT` / `.PJX` / `.exe`. Imediat dupa `svn commit` -> `roa_sync.bat`, si se raporteaza revizia SVN si ce a intrat pe `main`. Fisierele noi din `docs\` sunt doar in git. Diff-ul pentru aprobare, deja generat pentru punctul 6: `docs\diff_r6_punct6.md` (contine si rationamentul filtrului, cu cifrele pe date). **Trebuie regenerat** dupa ce intra runda 7. ## 5. Capcane de mediu platite in aceasta sesiune - **`python <