#6 editare factura emisa: articolele nu se mai editeaza pe facturi trimise in eFactura

Cand documentul e deja trimis in eFactura, pagina de articole ramane vizibila,
dar needitabila: cantitate, pret, pret achizitie, flagul pret cu TVA, discountul
de antet, plus adaugarea si stergerea de linii. Alegerea e "vizibil, dar blocat",
nu "pagina ascunsa" - contabilul trebuie sa vada ce contine factura trimisa.

- omodificari.vc2: flag lArticoleReadOnly calculat in frm_modific2024.Show, impins
  peste .When-urile de celula, peste Enabled si peste garda din Click-ul butoanelor,
  si peste txtDiscountArt.ReadOnly. Eticheta lblArticoleReadOnly explica motivul.
- ofacturare_editare.prg: id_fact adus pe tvanz, in IncarcaVanzareNota si in
  CreeazaCursorTvanzGol. EsteInEFactura interogheaza anaf_efactura dupa id_fact,
  nu dupa id_vanzare - fara asta garda nu s-ar fi declansat niciodata pe date reale.
- teste: test_efactura_readonly (headless, garda in ambele sensuri),
  test_ui_efactura_readonly (formular vizibil - coloanele gridului nu se
  materializeaza sub -A -T), test_s7_rotunjire, si test_s8_matrice_surse pentru
  matricea S8 pe tipuri de sursa.

S8 rulat pe cate un document din fiecare tip de sursa (lista de preturi, contract,
aviz, factura din aviz), fiecare editat din ambele puncte de intrare: notele vechi
raman STERS=1, id_fact nu se schimba, totalurile si liniile raman coerente.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
2026-08-10 23:27:26 +03:00
parent 1c42ae0af4
commit 2dfbef40dc
6 changed files with 1555 additions and 10 deletions

View File

@@ -1,9 +1,10 @@
*** ofacturare_editare
*!* 09.08.2026
*!* 10.08.2026
*!* marius.mutu
*!* helpere comune pentru editarea unei facturi emise: garda eFactura, cursoarele notei si ale rulajelor,
*!* randul de vanzare corespunzator notei (inclusiv valuta documentului: in_valuta/id_valuta/nume_val),
*!* randul de vanzare corespunzator notei (inclusiv valuta documentului: in_valuta/id_valuta/nume_val,
*!* si id_fact - pentru garda eFactura pe pagina de articole),
*!* liniile de articole pentru pagina de articole factura (inclusiv in_stoc si id_vanzare_set/pret_achizitie,
*!* pentru corectia verdictului RUL pe liniile nestocate si pentru liniile din seturi), pregatirea
*!* cursorului de articole inainte de Createobject(frm_modific2024), construirea obiectului poArticol
@@ -151,7 +152,7 @@ FUNCTION CreeazaCursorTvanzGol
Use In tvanz
ENDIF
CREATE CURSOR tvanz (id_vanzare I, tip I, discount N(12,2), total_fara_tva N(14,2), total_tva N(14,2), total_cu_tva N(14,2), curs N(10,4), multiplicator N(10,4), ;
in_valuta I NULL, id_valuta I NULL, nume_val C(20) NULL)
in_valuta I NULL, id_valuta I NULL, nume_val C(20) NULL, id_fact I NULL)
ENDFUNC && CreeazaCursorTvanzGol
@@ -175,7 +176,7 @@ FUNCTION IncarcaVanzareNota
lcSerieAct = Alltrim(Nvl(m.tcSerieAct,""))
lcSql = [select v.id_vanzare, v.tip, v.discount, v.total_fara_tva, v.total_tva, v.total_cu_tva, v.curs, v.multiplicator, ] + ;
[v.in_valuta, v.id_valuta, nv.nume_val from vanzari v left join nom_valute nv on nv.id_valuta = v.id_valuta where v.cod = ] + Transform(m.tnCod) + ;
[v.in_valuta, v.id_valuta, nv.nume_val, v.id_fact from vanzari v left join nom_valute nv on nv.id_valuta = v.id_valuta where v.cod = ] + Transform(m.tnCod) + ;
[ and Nvl(v.numar_act,-1) = ] + Transform(Nvl(m.tnNract,-1)) + ;
[ and Nvl(v.serie_act,'') = '] + m.lcSerieAct + [' and trunc(v.data_act) = to_date('] + Dtoc(m.tdDataAct,1) + [','YYYYMMDD') and v.sters = 0]