#6 editare factura emisa: runda 6 - nomenclatoare, zecimale, aspect grid, meniu

Pagina Articole din frm_modific2024:
- DblClick pe cele cinci coloane cu nomenclator (articol, gestiune, taxcode,
  valuta, explicatie TVA). Explicatia TVA are ControlSource expresie, deci
  tastarea nu putea declansa niciodata InteractiveChange; DblClick se sprijina
  pe pccontrol si acopera uniform toate cele cinci.
- Pret si Pret cu TVA folosesc gnPPretV (precizie pret vanzare) in loc de
  gnPPret (precizie achizitie). Coloana de pret achizitie ramane pe gnPPret.
- Culori dupa conventia de pe pagina Rulaje: verde pe coloanele care se
  editeaza prin dialog, alb pe cele care se tasteaza direct.
- Serie, lot si explicatie devin editabile in celula. Garda .When ramane si
  blocheaza in continuare liniile din seturi si facturile din e-Factura.

frm_facturi: textul optiunii de editare factura din meniul contextual devine
"Editare factura (note, rulaje, articole)".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
This commit is contained in:
2026-08-20 16:28:02 +03:00
parent 09ddeabb1c
commit b9a14bcb9c
13 changed files with 906 additions and 258 deletions

View File

@@ -12,19 +12,22 @@
* Ce verifica dupa fiecare editare (VerificaDupaEditare): nota veche (vact_tot, cod dinainte) are
* STERS=1, nota noua (cod nou) exista si e activa cu acelasi id_fact, VANZARI.id_fact ramane
* neschimbat, VANZARI/VANZARI_DETALII raman sincronizate (numar de linii active si totalurile
* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele sunt refacute
* (Reccount(trul)>0 pe nota noua) si totalurile de control ACT/RUL (ActualizeazaVerdictActRul,
* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele nu se pierd la
* editare (Reccount(trul) pe nota noua ramane cel putin cat era inainte - un document care nu misca
* stocul, cum e factura emisa din aviz, n-are rulaje deloc si nici nu capata) si totalurile de
* control ACT/RUL (ActualizeazaVerdictActRul,
* omodificari.vc2) raman concordante fata de inainte de editare - CalculeazaTotaluriS4b instantiaza
* frm_modific2024 exact ca test_verdict_act_rul.prg, fara UI. Suplimentar: gcMockUltimMesaj
* (mock_amessagebox.prg) trebuie sa ramana gol dupa lantul de scriere - dovada ca verifica_stoc
* (oscrie_in_fisiere.prg:92-106, apelata doar cand tnScrie_Sterge=2 And !tlModificare) nu s-a
* declansat, pentru ca ambele lanturi trec tlModificare=.T. la OSCRIE_IN_FISIERE.
*
* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, dar
* NUMAI id_vanzare=1048 e activ in gaCazuriActive - celelalte trei se consuma ireversibil (cod se
* realoca, note vechi raman sterse) si se ruleaza separat, dupa ce felia asta trece. Cazurile
* neactive sunt doar loghate, fara niciun acces la Oracle. Codul e parametrizat pe id_vanzare -
* activarea unui caz nou inseamna doar adaugarea lui in gaCazuriActive.
* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, iar
* gaCazuriActive alege ce se ruleaza: fiecare document se consuma ireversibil (cod se realoca, note
* vechi raman sterse), deci se activeaza cate unul pe rand, iar implicit lista e goala ca o rulare
* accidentala sa nu consume nimic. Cazurile neactive sunt doar loghate, fara niciun acces la Oracle.
* Codul e parametrizat pe id_vanzare - activarea unui caz nou inseamna doar adaugarea lui in
* gaCazuriActive. Logul se rescrie la fiecare rulare, deci contine doar ultima felie activata.
*
* Documentele de test se editeaza exclusiv prin fluxul aplicatiei (OSCRIE_IN_FISIERE,
* finalizeaza_modificare_nota, ScrieArticoleFacturaEditate) - interogarile SQL sunt doar de citire.
@@ -247,7 +250,7 @@ ENDPROC
*-- stare VANZARI dupa, nota veche/noua din vact_tot, totalurile de control S4b dupa editare
PROCEDURE VerificaDupaEditare
LPARAMETERS tnIdVanzare, tcEtapa, tnCodInainte, tnIdFactInainte, tnTotFtvaInainte, tnTotTvaInainte, ;
tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnAn, tnLuna, tcLog
tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnNrRulBaseline, tnAn, tnLuna, tcLog
LOCAL lcSql, lnQ, lnCodDupa, lnIdFactDupa, lnStersDupa, lnTotFtvaDupa, lnTotTvaDupa, lnTotCtvaDupa, lnNrActiveDupa
LOCAL lnStersNotaVeche, lnStersNotaNoua, lnIdFactNotaNoua
@@ -305,7 +308,10 @@ PROCEDURE VerificaDupaEditare
*-- rulajele refacute + totalurile de control S4b concordante fata de dinainte de editare
DO CalculeazaTotaluriS4b WITH lnCodDupa, tnAn, tnLuna, tcEtapa + ' [dupa]', tcLog
DO asserteaza WITH tcEtapa + ': totalurile de control S4b calculabile pe nota noua', glS4bOk, TRANSFORM(glS4bOk)
DO asserteaza WITH tcEtapa + ': rulajele au fost refacute pe nota noua (Reccount(trul)>0)', gnS4bRulReccount > 0, TRANSFORM(gnS4bRulReccount)
*-- RUL retine doar miscari pe cont de stoc: un document care nu atinge stocul (factura emisa din
*-- aviz - marfa a iesit deja la aviz) n-are rulaje nici inainte, nici dupa. Se cere doar sa nu se piarda.
DO asserteaza WITH tcEtapa + ': rulajele nu s-au pierdut la editare (Reccount(trul) pe nota noua)', ;
gnS4bRulReccount >= tnNrRulBaseline, TRANSFORM(tnNrRulBaseline) + ' -> ' + TRANSFORM(gnS4bRulReccount)
DO asserteaza WITH tcEtapa + ': Total ACT ramane concordant fata de inainte de editare (fara modificari de linii)', ;
ABS(gnS4bAct - tnActBaseline) < 0.01, TRANSFORM(tnActBaseline) + ' -> ' + TRANSFORM(gnS4bAct)
DO asserteaza WITH tcEtapa + ': Total RUL ramane concordant fata de inainte de editare (fara modificari de linii)', ;
@@ -323,7 +329,7 @@ PROCEDURE EditeazaDinRoafacturare
PRIVATE pnAn, pnLuna, lnCod, lnIdFact
LOCAL lcEtapa, lcSql, lnQ, lnSters, llEProforma, lnIdSet, lnIdFactD, lnSucces, llBlocatReferinte
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk, llGasitRand
LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk, llGasitRand
lcEtapa = tcSursa + ' / intrare ROAFACTURARE (do_editare_factura)'
STRTOFILE(CHR(13) + CHR(10) + '========== ' + lcEtapa + ', id_vanzare=' + TRANSFORM(tnIdVanzare) + ' ==========' + CHR(13) + CHR(10), tcLog, 1)
@@ -379,6 +385,7 @@ PROCEDURE EditeazaDinRoafacturare
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
lnActBaseline = gnS4bAct
lnRulBaseline = gnS4bRul
lnNrRulBaseline = MAX(gnS4bRulReccount, 0)
llS4bBaselineOk = glS4bOk
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
@@ -510,7 +517,7 @@ PROCEDURE EditeazaDinRoafacturare
*-- 7) verificarile de dupa commit, comune ambelor puncte de intrare
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog
ENDPROC
@@ -523,7 +530,7 @@ PROCEDURE EditeazaDinRegistruJurnal
PRIVATE pnAn, pnLuna, lnCod, lnIdFact, lnIdfactd, lnIdSet, pdDataOra
LOCAL lcEtapa, lcSql, lnQ, lnSters, llSters, llGestInvantar, llRul, lnSucces, llBlocExecutat, llGasitTvanz
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk
LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk
llBlocExecutat = .F.
lcEtapa = tcSursa + ' / intrare registru jurnal ROACONT (afisjurcom.do_modifica)'
@@ -597,6 +604,7 @@ PROCEDURE EditeazaDinRegistruJurnal
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
lnActBaseline = gnS4bAct
lnRulBaseline = gnS4bRul
lnNrRulBaseline = MAX(gnS4bRulReccount, 0)
llS4bBaselineOk = glS4bOk
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
@@ -742,7 +750,7 @@ PROCEDURE EditeazaDinRegistruJurnal
*-- 8) verificarile de dupa commit, comune ambelor puncte de intrare
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog
ENDPROC