Verificare ANAF la alegerea partenerului: opt-in pe introducerea de documente

Cablarea din ROACONT pentru verificarea ANAF implementata in COMUN (ocautare.prg):

- ointroduceri_cont.vc2: 6 apeluri de cautare partener trec lVerificaANAF=1
  (frm_introd_compact, frm_introd_compact2007, frm_note, frm_note2007), plus
  frm_plati_impozite prin caut_parteneri. Raman fara verificare cautarile de
  responsabili, achizitor, casa si creditor.
- cont2000.mn2: punct de meniu Initializari > Optiuni utilizator >
  "Verificare ANAF la alegerea partenerului" (DO ANAF_ComutaVerificare IN ocautare.prg).
- roacont.prg: incarcarea procedurilor necesare verificarii.
- oproceduri_import.prg: la importul cu cod fiscal discordant se cere confirmare
  in loc sa se aleaga tacit.
- changelog 2.11.65 si documentul de design al functionalitatii.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019H3r66sVojGhgaKq5niu1u
This commit is contained in:
2026-07-27 01:29:20 +03:00
parent a284dd3530
commit 5b0a3321db
9 changed files with 1014 additions and 22 deletions

View File

@@ -47,6 +47,10 @@
*!* 09.06.2026
*!* Import csvBT - elimin CRLF din interiorul descrierii care rupe linia de tranzactie pe 2 linii
*!* 25.07.2026
*!* marius.mutu
*!* CreeazaNote/CompleteazaParteneriROA - la CUI-uri duplicate aleg partenerul cu facturi in perioada curenta, nu ultimul creat
*************************************
* Clasa ImportNote este fabrica de clase tip Export
*************************************
@@ -316,6 +320,7 @@ Define Class ExtrasBanca As Custom
Local lcRecc, lcRecno, lnRecno
Local lcComanda, lcDenumire2, lcPartenerCasa, lcTip2, lnVariante, llExcludeOriginal
Local lnDenumire, lnDocument, lnIdPartenerCasa, lnVariante, loPartener
Local lcGrupIdLista, lcSqlGrup, lnIdPartAlternativ, lcPartAlternativ
PRIVATE pcContBanca, pnIdPartBanca
@@ -426,6 +431,7 @@ Define Class ExtrasBanca As Custom
Append From Dbf('C_IMPORT_TEMP')
* Caut/creez parteneri
Create Cursor cGrupParteneriCui (id_part_ales N(9), id_part N(9), denumire C(100))
SELECT distinct cod_fiscal, denumire, iban FROM cActTemp INTO CURSOR cParteneriTemp READWRITE
SELECT cParteneriTemp
lcRecc = Transform(Reccount())
@@ -450,6 +456,34 @@ Define Class ExtrasBanca As Custom
If !Isnull(loPartener)
lnIdPartener = Nvl(loPartener.id_part, 0)
lcPartener = Alltrim(Nvl(loPartener.denumire, ""))
If GetParteneriByCuiNormalizat(m.lcCodFiscal, "cGrupCuiTemp") And Reccount("cGrupCuiTemp") > 1
lcGrupIdLista = ""
Select cGrupCuiTemp
Scan
lcGrupIdLista = m.lcGrupIdLista + Iif(Empty(m.lcGrupIdLista), "", ",") + Transform(id_part)
Endscan
lcSqlGrup = [select id_part, count(*) as nr, sum(precdeb + debit - preccred - credit) as sold from ireg_parteneri ] + ;
[where an = ?gnAn and luna = ?gnLuna and id_part in (] + m.lcGrupIdLista + [) group by id_part ] + ;
[order by count(*) desc, abs(sum(precdeb + debit - preccred - credit)) desc]
If goExecutor.oExecuta(m.lcSqlGrup, "cGrupCuiDoc") And Reccount("cGrupCuiDoc") > 0
Select cGrupCuiTemp
Locate For id_part = cGrupCuiDoc.id_part
If Found()
lnIdPartener = cGrupCuiTemp.id_part
lcPartener = Alltrim(Nvl(cGrupCuiTemp.denumire, ""))
Endif
Endif
If Used("cGrupCuiDoc")
Use In (Select("cGrupCuiDoc"))
Endif
Select cGrupCuiTemp
Scan
Insert Into cGrupParteneriCui (id_part_ales, id_part, denumire) Values (m.lnIdPartener, cGrupCuiTemp.id_part, Alltrim(Nvl(cGrupCuiTemp.denumire, "")))
Endscan
Endif
If Used("cGrupCuiTemp")
Use In (Select("cGrupCuiTemp"))
Endif
Endif
Endif
* Caut partener dupa denumire
@@ -699,7 +733,31 @@ Define Class ExtrasBanca As Custom
Endif
ENDIF
* Daca am gasit un document, ies din bucla
EXIT
EXIT
Else
lnIdPartAlternativ = 0
If Used("cGrupParteneriCui")
Select cGrupParteneriCui
Scan For id_part_ales = m.lnIdPartener And id_part <> m.lnIdPartener
lcPartAlternativ = Alltrim(denumire)
loAct = GetDocumentByContPartenerAct(m.lcContPartener, id_part, m.lnNrAct, .F.)
If !Empty(m.loAct.id_fact) And ((m.lcTip = "D" And m.lnSuma <= - m.loAct.solddeb) Or (m.lcTip = "C" And m.lnSuma <= m.loAct.solddeb))
lnIdPartAlternativ = id_part
Exit
Endif
Select cGrupParteneriCui
Endscan
Endif
Select cActTemp
If !Empty(m.lnIdPartAlternativ)
Select cActTemp
If m.lcTip = "D"
Replace id_factd With m.loAct.id_fact, pereched With m.loAct.nract, scd With m.loAct.Cont, ascd With m.loAct.acont, id_partd With m.lnIdPartAlternativ, partd With m.lcPartAlternativ
Else
Replace id_factc With m.loAct.id_fact, perechec With m.loAct.nract, scc With m.loAct.Cont, ascc With m.loAct.acont, id_partc With m.lnIdPartAlternativ, partc With m.lcPartAlternativ
Endif
EXIT
Endif
ENDIF && !Empty(m.loAct.id_fact)
ENDFOR && lnDocument
ENDIF && !Empty(m.lnIdPartener) And m.lnDocumente > 0
@@ -728,7 +786,31 @@ Define Class ExtrasBanca As Custom
Endif
ENDIF
* Daca am gasit un document, ies din bucla
EXIT
EXIT
Else
lnIdPartAlternativ = 0
If Used("cGrupParteneriCui")
Select cGrupParteneriCui
Scan For id_part_ales = m.lnIdPartener And id_part <> m.lnIdPartener
lcPartAlternativ = Alltrim(denumire)
loAct = GetDocumentByContPartenerAct(m.lcContPartener, id_part, m.lcComanda, .T.)
If !Empty(m.loAct.id_fact) And ((m.lcTip = "D" And m.lnSuma <= - m.loAct.solddeb) Or (m.lcTip = "C" And m.lnSuma <= m.loAct.solddeb))
lnIdPartAlternativ = id_part
Exit
Endif
Select cGrupParteneriCui
Endscan
Endif
Select cActTemp
If !Empty(m.lnIdPartAlternativ)
Select cActTemp
If m.lcTip = "D"
Replace id_factd With m.loAct.id_fact, pereched With m.loAct.nract, scd With m.loAct.Cont, ascd With m.loAct.acont, id_partd With m.lnIdPartAlternativ, partd With m.lcPartAlternativ
Else
Replace id_factc With m.loAct.id_fact, perechec With m.loAct.nract, scc With m.loAct.Cont, ascc With m.loAct.acont, id_partc With m.lnIdPartAlternativ, partc With m.lcPartAlternativ
Endif
EXIT
Endif
ENDIF && !Empty(m.loAct.id_fact)
ENDFOR && lnDocument
ENDIF && !Empty(m.lnIdPartener) And m.lnDocumente > 0
@@ -836,6 +918,10 @@ Define Class ExtrasBanca As Custom
Select (m.lcSelect)
ENDIF && llSucces
If Used("cGrupParteneriCui")
Use In (Select("cGrupParteneriCui"))
Endif
Return m.llSucces
Endproc && CreeazaNote
@@ -4423,6 +4509,22 @@ Function GetRegExpAllNumbers
Return lnResults
Endfunc
* --------------------------------------------------------------------
* Deschide tcCursor cu id_part, denumire, cod_fiscal pentru toti parteneri cu acelasi CUI normalizat
* --------------------------------------------------------------------
Function GetParteneriByCuiNormalizat
Lparameters tcCodFiscal, tcCursor
Private pcCui
Local lcSql, llSucces
pcCui = Alltrim(Strtran(Strtran(Upper(Alltrim(m.tcCodFiscal)), ' ', ''), 'RO', ''))
lcSql = [select id_part, denumire, cod_fiscal from nom_parteneri where sters = 0 and inactiv = 0 ] + ;
[and replace(replace(upper(cod_fiscal),' ',''),'RO','') = ?pcCui order by id_part]
llSucces = goExecutor.oExecuta(m.lcSql, m.tcCursor)
Return m.llSucces
Endfunc
* --------------------------------------------------------------------
* Creeaza/Actualizeaza Parteneri in ROA pentru fiecare cod_fiscal din tcCursorParteneri
* Verific dupa cod_fiscal, apoi dupa denumire
@@ -4444,6 +4546,7 @@ Procedure CompleteazaParteneriROA
Local lcSqlInsert, lcSqlPart, lcStrada, lcSufix, lcTara, lcTelefon1, lcTelefon2, lcTip_persoana
Local lcWeb, lcinactiv, llCallBack, llSucces, lnIdJudet, lnIdJudetBucuresti, lnIdLocalitateBucuresti
Local lnIdTaraRO, lnItem, lnItems, lnSucces
Local lcCuiNorm
Private pnIdAdresa, pcCodFiscal, pcDenumire, pnIdPart, pnNrAdrese, pnIdJudet
llCallBack = Type('toCallBackForm') = 'O' And Pemstatus(m.toCallBackForm, 'trace', 5)
@@ -4463,6 +4566,9 @@ Procedure CompleteazaParteneriROA
Return m.llSucces
Endif
Select id_part, cod_fiscal, denumire, NormalizeazaCUI(cod_fiscal) As cui_norm From cParteneriROA Into Cursor cParteneriROA Readwrite
Index On cui_norm Tag cuinorm
lcAdreseParteneri = [select id_adresa, id_part, localitate, id_loc, judet, id_judet, tara, id_tara from vadrese_parteneri]
llSucces = goExecutor.oExecuta(m.lcAdreseParteneri, 'cAdreseROA')
@@ -4494,6 +4600,12 @@ Procedure CompleteazaParteneriROA
If !Empty(m.pcCodFiscal)
Locate For Alltrim(Strtran(cod_fiscal, ' ', '')) = m.pcCodFiscal
*!* lnSucces = goExecutor.oSelect2Value(m.lcSqlCod, @pnIdPart)
If !Found()
lcCuiNorm = NormalizeazaCUI(m.pcCodFiscal)
If !Empty(m.lcCuiNorm)
Seek m.lcCuiNorm Order cuinorm
Endif
Endif
Else
Locate For Alltrim(Upper(denumire)) = m.pcDenumire
*!* lnSucces = goExecutor.oSelect2Value(m.lcSqlDenumire, @pnIdPart)

View File

@@ -576,6 +576,10 @@ If Type('laparametri',1)="A"
Endif
Endif
If Type('goCacheANAF_Sesiune') = 'O'
Release goCacheANAF_Sesiune
Endif
Private gcCopyRight
gcCopyRight = '<27> ROA Romfast SRL'