Expresia diferentei scade jtva_ti din jtotctva pentru facturile primite. Sonda pe user_tab_columns
inainte de construirea SELECT-ului, ca borderoul sa se deschida si daca migrarea DB nu a ajuns inca
la client. lcSchema (schema pozitionala) neatinsa.
SVN r17913; script DB in DATABASE r17912.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
L1: perioada de TVA (inceput, sfarsit, anulare din oficiu) si mesajul ANAF integral propagate din
cursor pana in banda si in dialogul F4. Banda arata data doar la discordanta, anulare sau perioada
incheiata; F4 o arata intotdeauna.
L2: clasele de esec CNP si COD_INVALID au text propriu in F4, in loc de mesajul fals
'ANAF nu a raspuns'. Garda Vartype pe parametrul nou tnTipPersoana pentru apelantii cu vechea
semnatura (fisier partajat de ROACONT/ROAGEST/ROAFACTURARE).
SVN r17910.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
Serviciul ANAF intoarce HTTP 404 cu corp complet pentru codurile inexistente
({"found":[],"notFound":[...]}), iar wrapper-ul citea corpul doar pe 200 - deci
verdictul "cod inexistent" nu aparea niciodata. Corpul se citeste acum la orice
status, iar verdictul se da doar cand notFound contine chiar codul interogat;
orice alt corp neinteles inseamna "nu a raspuns", nu acuzatie.
Timeout-uri reale pe apelurile web (2/2/3/3): garda Pemstatus din jurul lui
SetTimeouts intoarce .F. pe obiectul COM legat tarziu, deci timeout-urile nu se
aplicau, iar o gazda care inghite pachetele bloca interfata ~21 s per rand.
Aceleasi timeout-uri si pe drumul batch. Fallback-ul Microsoft.XMLHTTP, fara
timeout, a fost scos de pe calea single.
Cand serviciul nu raspunde, verificarile se opresc 10 minute si banda arata ca
au fost sarite, in loc sa taca. La deschiderea formularului pleaca o sonda
asincrona de disponibilitate, cu termen de viata, guard de reintrare si Abort()
la inchidere; randul care asteapta verdictul nu face apel propriu. Cache doar pe
rezultate pozitive. Codul fiscal nenumeric primeste mesaj propriu, in banda si
in detaliile F4.
ParseJsonANAFv8 restaureaza formatul datei si pe calea de eroare (o exceptie
lasa toata sesiunea pe YMD).
Teste: suita headless 70/70, cu sonda si clasele de esec mock-uite (fara retea)
si fixture peste corpurile 404 masurate pe serviciul real.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
Punctul 1: dupa commit se sterg patch-urile de review si backup-urile de lucru.
Punctul 5: versiunile `.??2` sunt instantanee si pot ramane in urma binarului.
Concret, un `.pj2` vechi de doua saptamani a dus la concluzia gresita ca proiectul
refera `clase\orapoarte.vcx`, cand `.PJX`-ul real refera `comun\clase\orapoarte.vcx`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1J6WjsQn7i7c9uF7VweGc
ct_selectie.Init si ct_selectie_sql.Init apelau do_adauga cu 4 argumente, desi
metoda e declarata cu 6. lcCampId ajungea .F., iar Nvl(.F.,lcCamp) dadea Error 11
la deschiderea oricarui formular de raport generic, urmata de o cascada in
ct_ordonare1._scrollcontainer1.do_adaugaobiect.
ccoloanesuma si cnumecoloanesuma erau stocate cu virgula in formulare, dar codul
le citeste cu "|" (contract documentat in ct_selectie.Init: o coloana poate fi o
expresie de forma round(...,...)). Rezulta SUM(cantitate,valoare_ftva,valoare) si
ORA-00909. Migrate cele 12 valori pe "|"; clistacoloaneordine ramane pe virgula,
asa cum o citeste codul.
Scos SET STEP ON din ct_selectie.do_instructiune_sql si din
frm_date_rapoarte_articole_v.do_cauta - in EXE nu au efect, dar la rularea din
sursa opreau executia in debugger.
Adaugata coloana "Cont" in rapoartele de articole: contul de venit preluat din
nota contabila a politicii de preturi (primul rand dupa ORDINE), cu regula
debit/credit dupa structura notei.
Verificat headless: cele 6 formulare de raport se deschid cu 0 erori (inainte
10/10/14/9/1/9), do_instructiune_sql intoarce .T., iar SQL-ul generat se executa
pe Oracle si returneaza 31 de randuri grupate pe cont.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1J6WjsQn7i7c9uF7VweGc
Sync-ul de sesiune se distribuie de-acum cu COMUN (svn update / comun.git).
Fata de versiunea veche: dupa commit-ul local de sync reconciliaza cu origin
(fetch + ff-only sau rebase --empty=drop; sync-urile byte-identice cu origin
dispar singure) si face push automat DOAR cand tot ahead-ul e din commit-uri
de sync; conflict real -> abort + exit nenul. Switch -GitOnly pentru
reconciliere rapida / teste. Doc inrolare actualizat (tooling + pasul 6).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AvccPZXr4A9ihcTtExNoJT
ocautare.prg - miezul functionalitatii:
- anaf_verif_cautare: verdictul ANAF pe randul curent din formularul de cautare
(label sub grid), la data documentului; discordantele si codurile fiscale invalide
cu rosu; F4 sau click deschide detaliile.
- ANAF_StarePartener, cu cache pe sesiune, excludere parteneri externi si persoane
fizice; ANAF_ValidareCod pentru CIF/CNP.
- ANAF_NivelVerificare: cascada RC_ANAF_VERIF_SELECTIE (kill-switch settings.ini >
optiuni utilizator > optiuni firma > implicit 1), cu cache invalidat la schimbarea
firmei sau utilizatorului; ANAF_ComutaVerificare pentru punctul de meniu.
- Detalii: alegerea variantei corecte de partener din perechea RO / fara RO, cu
discriminator "are documente in perioada"; dupa Da sau Nu se inchide cautarea si
se revine in formular cu partenerul ales (AplicaInlocuirePartenerANAF).
- ANAF_CaData: data documentului poate veni si ca DateTime (tact.dataact).
- Banda proprie sub grid pentru label: formularul creste cu 54, gridul isi pierde
ancorarea de jos si primeste inaltimea din AjusteazaBanda, legata de Resize si
Activate - formularul isi reaseaza gridul dupa Show, deci Activate e momentul util.
validare.prg: ANAF_VerificaCuiSingle, wrapper single-CUI peste serviciul ANAF, cu
data verificarii si o singura eroare logata pe sesiune.
cauta_alfa.prg: hook generic - ataseaza poVerifAlegere pe formularul de cautare
inainte de Show si il detaseaza dupa.
Apelanti opt-in (lVerificaANAF): baza.vc2 (lookup-ul generic de partener din
formularele actbaza/actbaza2007 lansate din meniuri), onote_contabile.vc2 (partener
debit/credit), omodificari.vc2 (do_cauta din cele trei clase de modificare, cu data
notei), ofacturare.vc2 (client, furnizor). Casa/banca ramane in afara: acolo partenerul
se alege pentru imperecherea facturilor.
cauta_alfa_forms.vc2: F4 deschide detaliile, iar terminarea cautarii trece prin
VerificaAlegere.
Teste: suita headless pentru fluxul de verificare (utile/Teste/partener_anaf/), cu
mock pentru apelul ANAF si pentru dialoguri.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019H3r66sVojGhgaKq5niu1u
Debifat = exclus complet din pretul articolului (lei si valuta); procent_lei
ramane 100 pe import, diferenta e absorbita de randul D (recalc_diferente).
Procentele afisate pe randurile neparticipante raman goale. Test nou pe
fluxul real: test_secundara_debifata_pret (15/15 PASS); regresie curata
(test_valuta_dvi_usd 22/22, test_debifare_invaluta 68/68, scenariu complet PASS).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXsyJZBek1e9RvyLAQkoCx
cCurs.Text1.Valid armeaza sincronizarea amanata (repretare articole +
recalc diferente) si propaga cursul principalei in antet (oact.curs,
doar pe randuri in valuta). Teste: pas nou de schimbare curs pe DVI
secundar in test_valuta_dvi_usd (22/22 PASS), regresie
test_debifare_invaluta (68/68) si test_scenariu_dvi_complet PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXsyJZBek1e9RvyLAQkoCx
Rundele 1-7: golire campuri valuta la debifare in_valuta (cu suma_doc_val),
recalcul din curs pe tot documentul (cu refacere suma_doc/suma_doc_val),
spargere document principal in valuta (suma_val doar pe randuri in valuta),
TVA repartizat din baza in valuta pe import, iar la recalculeaza()/procente
per rand sumele in valuta ale documentelor participante aflate in alta
valuta decat a principalei se convertesc prin lei (suma/curs principal),
nu se mai aduna direct la baza in valuta (100 USD nu mai devine 100 EUR).
Teste UI: test_valuta_dvi_usd (scenariu mixt EUR+USD, 8/8 PASS),
test_debifare_invaluta (64/64 PASS), test_repro_valuta_dblclick,
mock_caut_valuta; regresie test_scenariu_dvi_complet PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXsyJZBek1e9RvyLAQkoCx
Conflictul era doar pe 7 valori Column*.Width din frm_rulaje.grdrulaje - doua
regenerari FoxBin2Prg ale aceleiasi forme. Rezolvat prin regenerare din
clase/rulaje.vcx (SVN = sursa de adevar), rezultat identic cu HEAD.
wincrypt.h a venit identic pe ambele parti.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
depanare_testare_vfp.md 226->118 linii, testare-ui-vfp.md 133->90.
- regula SAFETY/dialog modal si -A -T erau enuntate de 3 ori -> o data
- cele 3 capcane "proces agatat" -> un singur algoritm de diagnostic in 3 pasi
- studiul de caz CNRCRT si detaliile ROAGEST (jtva_coloane2, achizitie_import)
reduse la regula generala + pointer catre scriptul de test
- reguli_lucru pct.4 ramane doar pointer, fara detaliile duplicate de mediu
- sters docs/bash.exe.stackdump (fisier de gunoi, negitat)
Masuratorile si datele concrete pastrate integral.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
Nu sunt modificari locale: rulaje.vc2 reflecta binarul actualizat din SVN
(coloane cValoare* + butoane modifica_* pe Page2), iar wincrypt.h e un header
nou versionat in SVN care lipsea din git.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
AnafeFacturaServer.ImportZipLocal (programe/anaf_efactura.prg): dezarhiveaza
arhiva aleasa de utilizator, ia xml-ul facturii (ignora semnatura MFinante),
ParseEFactura, decide FACTURA PRIMITA/TRIMISA dupa codul fiscal al firmei
curente, copiaza arhiva in directorul local de raspunsuri si scrie in Oracle
prin acelasi lant ca descarcarea din SPV (cursor temporar canaf_efactura_temp
+ cUpdateFactura + UpdateDb -> pack_anaf.AdaugaRaspunsFactura si
anaf_efactura_detalii). Fara SQL scris de mana si fara duplicarea maparii de
campuri.
clase/anaf_efactura.vcx (clasa anaf_efactura, metoda citesteraspunsuri):
optiunea 8 in meniul butonului "Raspunsuri" - "Import arhiva zip de pe disc...".
Necesar cand mesajul nu mai e in lista de raspunsuri ANAF (expira dupa 60 zile)
si factura primita nu a ajuns in borderou.
Testare (CENTRAL/MARIUSM_AUTO, ianuarie 2026, 12 PASS / 0 FAIL):
utile/Teste/efactura_import/ - garda pe cod fiscal, import complet cu verificarea
campurilor si a liniilor in anaf_efactura_detalii, factura vizibila in grila reala
"Facturi primite in SPV".
utile/Teste/test_init_env_auto.prg: adauga goFirma.codfiscalfro ca in start_firma
(ostartfirma.prg) - proprietatea nu e coloana in v_firme, iar fara ea orice cod
care o citeste nepazit crapa in mediul headless.
docs/depanare_testare_vfp.md: verificarea de sintaxa prin compilare headless
(config.fpw cu SAFETY=OFF, copie in scratchpad) si capcana literalelor string
mai lungi de 255 de caractere (eroare de compilare, nu de runtime).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
Permite editarea celor 3 explicatii pe fiecare rand in grila apelantului
(ROACONT frm_introd_compact2007). Strict aditiv: 3 campuri in plus in
cursor, restul comportamentului neschimbat pentru celelalte produse ROA.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015DQoCUF3QSCgQCwCBK1qbz