Borderou eFactura: potrivire cu registrul de TVA rapida si corecta

Potrivirea pe numar compara nract cu grupurile de cifre extrase din xnumar_act,
in loc sa aplice un regex peste nract. Predicatul devine sargabil, deci foloseste
IDX_JC2007_003/IDX_JV2007_003 in loc sa scaneze toata luna din jurnal pentru
fiecare factura: borderoul de facturi trimise trece de la 97 de secunde la sub una
(masurat pe o firma cu 6006 facturi si 6466 randuri in jurnal).

Rezerva pe suma egala se pastreaza, dar in view se leaga prin COALESCE, nu prin OR:
se evalueaza doar pentru facturile pe care numarul nu le-a gasit. Legata prin OR,
potrivea nediferentiat orice document cu aceeasi suma la acelasi partener in aceeasi
zi - pana la 49 de documente pentru o factura - si afisa o "Diferenta" gresita.

jcnt si coloana "Pot." se elimina: dupa corectarea potrivirii numarul de documente
potrivite e practic intotdeauna 1, iar starea "nu e in registru" se citeste din
jtotctva IS NULL. jtotctva se declara nullable in cursor, altfel NULL-ul devine 0 si
randurile fara potrivire nu s-ar mai colora.

Pragul de la care un rand devine galben urca de la 0.01 la 0.15 lei: la 0.01 ieseau
841 de randuri galbene din 6006, toate diferente de rotunjire sub 0.11 lei.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FW7zDopcHo2fHq5L53MjMM
This commit is contained in:
2026-07-28 23:31:04 +03:00
parent 31a157cb55
commit 0df20461e2
2 changed files with 17 additions and 12 deletions

View File

@@ -5295,7 +5295,7 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
PROCEDURE do_cauta
LOCAL lcfiltru, lcFiltru2, lcFiltru3, lcval1, lcColoana, ldData1, ldData2
Local lcData1, llErori, llNetrimise, llPJ, llTrimise, llDiferente, lnActivePage
Local lcData1, lcData2, llErori, llNetrimise, llPJ, llTrimise, llDiferente, lnActivePage
WAIT WINDOW 'Selectie inregistrari...' NOWAIT
@@ -5322,9 +5322,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
IF !('DATA_ACT'$upper(THISFORM.filtru_pretty) OR 'DATA_TRIMIS'$upper(THISFORM.filtru_pretty) )
lcData1 = '01' + PADL(INT(m.gnLuna),2,'0') + ALLTRIM(STR(m.gnAn))
*!* data_act pe interval (nu extract(year/month...)) ca sa poata folosi IDX_ANAF_EFACTURA_1(FACTURA_EMISA,XDATA_ACT,DATA_RASPUNS)
ldData1 = GOMONTH(m.ldData1, 1)
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
lcFiltru = m.lcFiltru + [ and ((extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) OR (trimis = 1 and tip_mesaj_raspuns is null and extract(year from data_act) >=2023))]
lcFiltru2 = m.lcFiltru2 + [ and ((extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
lcFiltru3 = m.lcFiltru3 + [ and ((extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
lcFiltru2 = m.lcFiltru2 + [ and ((data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
lcFiltru3 = m.lcFiltru3 + [ and ((data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
ENDIF
@@ -6031,12 +6034,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
ENDWITH
WITH this.pgfeFactura.page3.grdFacturiTrimise
.SetAll("DynamicBackColor","IIF(diferenta <> 0, RGB(225,225,225), RGB(255,255,255))", "Column")
.SetAll("DynamicBackColor","IIF(ISNULL(jtotctva), RGB(225,225,225), IIF(ISNULL(diferenta) OR ABS(NVL(diferenta,0)) > 0.15, RGB(255,235,180), RGB(255,255,255)))", "Column")
.SetAll("DynamicForeColor","IIF(creditnote = 1, RGB(225,0,0), RGB(0,0,0))", "Column")
ENDWITH
WITH this.pgfeFactura.page2.grdFacturiPrimite
.SetAll("DynamicBackColor","IIF(diferenta <> 0, RGB(225,225,225), RGB(255,255,255))", "Column")
.SetAll("DynamicBackColor","IIF(ISNULL(jtotctva), RGB(225,225,225), IIF(ISNULL(diferenta) OR ABS(NVL(diferenta,0)) > 0.15, RGB(255,235,180), RGB(255,255,255)))", "Column")
.SetAll("DynamicForeColor","IIF(creditnote = 1, RGB(225,0,0), RGB(0,0,0))", "Column")
ENDWITH
@@ -11385,8 +11388,10 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
IF !('DATA_ACT'$upper(THISFORM.filtru_pretty) OR 'DATA_TRIMIS'$upper(THISFORM.filtru_pretty) )
lcData1 = '01' + PADL(INT(m.gnLuna),2,'0') + ALLTRIM(STR(m.gnAn))
lcFiltru = m.lcFiltru + [ and ((extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
*!* data_act pe interval (nu extract(year/month...)) ca sa poata folosi IDX_ANAF_EFACTURA_1(FACTURA_EMISA,XDATA_ACT,DATA_RASPUNS)
ldData1 = GOMONTH(m.ldData1, 1)
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
lcFiltru = m.lcFiltru + [ and ((data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy')))]
ENDIF
* Filtre buton cautare

View File

@@ -32,7 +32,7 @@
*!* 28.07.2026
*!* marius.mutu
*!* vizeFactura, facturi primite: diferenta ignora TVA-ul de taxare inversa (jtva_ti)
*!* vizeFactura: potrivirea cu registrul se face dupa numarul facturii ca grup complet de cifre din xnumar_act (comparat cu nract prin apartenenta, ca sa poata folosi indexul), cu rezerva pe suma egala doar pentru facturile in RON, codul fiscal normalizat pe ambele parti; diferenta ramane goala cand factura nu e in registru sau e in valuta
*********************************
* Se apeleaza din ROACONT > Borderou eFactura
@@ -2871,10 +2871,10 @@ Define Class ANAFeFactura As Custom
* FACTURI PRIMITE
lcData1 = '01' + PADL(INT(m.gnLuna),2,'0') + ALLTRIM(STR(m.gnAn))
Text To lcSchema Noshow
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
Endtext
Text To lcSelect Noshow
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-(NVL(jtotctva, 0.00)-NVL(jtva_ti, 0.00)) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_primit
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-(NVL(jtotctva, 0.00)-NVL(jtva_ti, 0.00)) end as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_primit
Endtext
lcOrder = [data_act,numar_act,data_raspuns]
lcgroup = []
@@ -2891,10 +2891,10 @@ SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclien
* FACTURI TRIMISE
Text To lcSchema Noshow
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, mesaj_trimis C(250) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, mesaj_trimis C(250) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
Endtext
Text To lcSelect Noshow
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, mesaj_trimis, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_trimis
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, mesaj_trimis, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) end as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_trimis
Endtext
lcOrder = [data_act,numar_act,data_trimis,data_raspuns]
lcgroup = []