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
3.9 KiB
Cercetare: de unde se citesc id_set / id_fact / id_factd in do_editare_factura
Context: decizia 24 din docs\progres.md cere scoaterea completa a garzii pe id_set adaugata in
runda 3, cu avertismentul ca pozitionarea din care se citesc id_fact/id_factd nu are voie sa cada
pe un rand de discount. Nota de fata verifica premisa pe date si stabileste pozitionarea corecta.
Sursa: MARIUSM_AUTO@ROA_CENTRAL, 08.08.2026, interogari directe pe ACT si VANZARI.
1. Premisa "randurile de discount au ID_FACT = -1" nu se confirma in ACT
Distributia ACT.ID_FACT pe toata tabela:
| valoare | randuri | ani |
|---|---|---|
| pozitiv | 66360 | 0-2026 |
| negativ | 32 | 2008-2019 |
| NULL | 0 | — |
| zero | 0 | — |
Zero randuri cu id_fact <= 0 din 2020 incoace. ACT.ID_FACTD nu e niciodata NULL (65849 de zerouri,
541 pozitive, 2 negative in 2006).
Pe cele 27 de note cu randuri DISCOUNT / TVA DISCOUNT: randurile de discount au acelasi
id_fact si acelasi id_set ca restul notei, si id_factd = 0. Coerent cu decizia 24 —
cumuleaza_note_act_temp normalizeaza inainte de ACT; -1 din scrie_discount nu ajunge acolo.
Concluzie: randul de discount nu e periculos. Constatarea din rec_garda_idset.md pct. 1 era
corecta pe sursa PL/SQL, dar valorile nu supravietuiesc pana in ACT.
2. Randul periculos e INCASAREA, si problema e reala
Note legate de VANZARI cu mai multe id_fact distincte: 78. Tiparul, verificat pe exemple:
primul rand dupa id_act este INCASARE / INCASARE NUMERAR, cu id_fact = id_fact-ul facturii
minus 1 (chitanta isi are propriul id_fact, alocat inaintea facturii).
COD TIP AN LUNA VANZARI.ID_FACT primul rand ACT explicatia
1137874 44 2009 8 5040267 5040266 INCASARE
1138549 1 2014 1 8001118 8001117 INCASARE NUMERAR
39 de facturi in schema de dev pe care un Go Top orb pe actactan (ordonat dupa id_act)
preia id_fact-ul chitantei, nu al facturii. E comportamentul codului din runda 1/2, nu ceva
introdus de runda 3.
Pe 38 din cele 39, VANZARI.ID_FACT exista ca id_fact pe cel putin un rand al notei, deci o
pozitionare Locate For id_fact = <id_fact-ul din crsfacturi> il gaseste. Al 39-lea e un rand vechi
fara corespondent.
3. Cat conteaza fiecare valoare, la destinatie
PACK_CONTAFIN.finalizeaza_modificare_nota (COMUN\docs\PACK_CONTAFIN.pck:8601-8651):
tnIdSet— conduceCASE-ul; pentru facturi (25xxx) cade peELSE, deci nu face nimic in plus fata deactualizeaza_vanzari;tnIdFact— folosit doar pe ramuratnIdSet IN (31003, 31004, 31005, 31011):UPDATE NOM_LUCRARI SET ID_FACT = tnIdFact ... WHERE ID_FACT IS NULL. Ramura e vie si pentru documente dinVANZARI: 35 de note cuid_set = 31011, 5 cu31003, 1 cu31005. Semantic trebuie sa fieid_fact-ul facturii, adica exactVANZARI.ID_FACT;tnIdFactD— apare doar in cod comentat (ramurile 90011/90013). Azi e complet nefolosit.
4. id_set unic pe nota — confirmat
Note legate de VANZARI, dupa numarul de id_set distincte: 558 cu unul singur, 1 cu doua — si
aceea e randul-gunoi cod = 0, an = 0, luna = 0 (id_set 46 si 10208), nu o factura. Decizia 24 se
confirma pe date; garda din runda 3 poate iesi fara inlocuitor.
5. Pozitionarea corecta
lnIdFact e deja citit corect din crsfacturi (VANZARI.ID_FACT) la inceputul metodei si folosit
pentru garda eFactura. Nu trebuie rescris din actactan — poate doar sa se strice. Deci:
- se cauta in
actactanrandul cuid_fact = lnIdFact; daca se gaseste, de acolo se iauid_setsiid_factd; - daca
lnIdFactnu e utilizabil (0/NULL — 283 de randuriVANZARIauID_FACTNULL, in principal avize si transferuri) sau nu are corespondent in nota, se cade peGo Topsi se iaid_factde acolo, ca inainte.
Fara garda, fara mesaj de refuz.