D406 SAF-T: verificare coduri fiscale pe toata declaratia + erori validator ANAF
Stergere CNP-uri invalide: - bucla de update nu rula niciodata (export2xlsx lasa pointerul pe EOF, iar SCAN WHILE are scope implicit REST) - GO TOP + SCAN, cu Exit la eroare - candidatii se iau din cursoarele declaratiei, cu criteriile verificarii, nu dintr-un query separat pe balanta_parteneri Verificare coduri fiscale (do_verifica_cui): - acopera toti partenerii exportati in XML, nu doar cei cu is_activ = 1 - CodFiscalValidSaft: regulile de format ale validatorului ANAF (numai cifre, fara zero la inceput, 13 cifre la CNP, 2-10 la CUI) peste cifra de control; VALIDARE_CIF accepta litere la inceput si VALIDARE_CNP accepta prima cifra 0 - lista codurilor invalide in cursor + export xlsx (rand, partener, cod, CNP/CUI), mesaj cu defalcare CNP/CUI - corectat "Variable 'LCTEXT' is not found" (m.lcText inexistent in procedura) do_erori_partener_saft: extrage din fisierul de raspuns al validatorului codurile de partener respinse (pagina Customers/Suppliers, randul, codul, partenerul) si le afiseaza la finalul validarii, cu export xlsx optional. changelog 2.11.65 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013dL9LNnmeY8nELjTLYiGJH
This commit is contained in:
@@ -256,7 +256,7 @@ Define Class d406 As Custom
|
||||
Local lcAssetTransactions, lcAssets, lcCaleFisier, lcComunPath, lcConfigDir, lcFileName
|
||||
Local lcFisierRaspuns, lcMovementofGoods, lcNumeFisier, lcOwners, lcParams, lcPhysicalStock
|
||||
Local lcProducts, lcUOMTable, lcValidator, lcXMLTemp, lnFileHandle, lnSec, lcSufixCale, lcSufixFisier
|
||||
LOCAL lcMessage, loChatBot
|
||||
LOCAL lcMessage, loChatBot, lcMesajErori
|
||||
LOCAL lnAn1, lnAn2, lnLuna1, lnLuna2
|
||||
|
||||
lnAn1 = This.oUnitate.an1
|
||||
@@ -555,7 +555,15 @@ Define Class d406 As Custom
|
||||
lcParams = ' "' + m.lcFileName + '"'
|
||||
OPEN_DEFAULT_APP(m.lcValidator, m.lcParams)
|
||||
|
||||
ELSE
|
||||
ELSE
|
||||
*!* 26.07.2026 scot din fisierul de erori codurile de partener respinse de validator
|
||||
lcMesajErori = This.do_erori_partener_saft(m.lcFisierRaspuns)
|
||||
IF !EMPTY(m.lcMesajErori)
|
||||
IF AMESSAGEBOX(m.lcMesajErori + CHR(13) + CHR(10) + CHR(13) + CHR(10) + 'Doriti exportul listei in Excel?',0+4+48,_screen.Caption) = 6
|
||||
goExport.export2xlsx('cEroriPartSaft', 'erori_cod_partener_saft_' + ALLTRIM(STR(m.lnAn2)) + PADL(m.lnLuna2, 2, '0'))
|
||||
ENDIF
|
||||
USE IN (SELECT('cEroriPartSaft'))
|
||||
ENDIF
|
||||
IF AMESSAGEBOX('Validare cu erori fisier: ' + m.lcFileName + CHR(13) + CHR(10) + 'Doriti sa interogati chatbot-ul de suport tehnic?',0+4+48,_screen.Caption) = 6
|
||||
lcMessage = FILETOSTR(m.lcFisierRaspuns)
|
||||
loChatBot = CREATEOBJECT("oChatBotLaunch", m.lcMessage)
|
||||
@@ -918,7 +926,8 @@ select 1 as tip,
|
||||
#Define CRLF Chr(13) + Chr(10)
|
||||
|
||||
LOCAL llSilent, lcMesaj, lcListaGol
|
||||
LOCAL lcCod, lcListaInvalid, lcTextInvalid, llCnp, lnInvalid, loVerif
|
||||
LOCAL lcCod, lcListaInvalid, lcTextInvalid, llCnp, lnInvalid, lnInvalidCnp, loVerif
|
||||
LOCAL lcContInv, lcDenumireInv, lnIdPartInv, lnRandInv, lnTipPersInv
|
||||
|
||||
lcMesaj = ''
|
||||
lcTextInvalid = ''
|
||||
@@ -1031,25 +1040,44 @@ and b1.cont = b2.cont
|
||||
ENDSCAN
|
||||
GO TOP
|
||||
|
||||
*!* 24.07.2026 verific validitatea codurilor fiscale (CNP/CUI) la partenerii cu activitate in perioada
|
||||
*!* 24.07.2026 verific validitatea codurilor fiscale (CNP/CUI) la toti partenerii exportati in declaratie (nu doar cei activi in perioada)
|
||||
lcListaInvalid = ''
|
||||
lnInvalid = 0
|
||||
lnInvalidCnp = 0
|
||||
loVerif = CREATEOBJECT('VerificareCod')
|
||||
SCAN FOR !EMPTY(NVL(id_part,0)) AND !EMPTY(NVL(cod_fiscal, '')) AND NVL(is_activ, 0) = 1 ;
|
||||
*!* 26.07.2026 retin codurile invalide intr-un cursor, ca sa poata fi exportate si corectate in nomenclator
|
||||
CREATE CURSOR cCodInvalid (rand N(7), id_part N(10), denumire C(150), cod_fiscal C(30), tip_cod C(3), tip_persoana N(1), cont C(10))
|
||||
SELECT (m.lcCursor)
|
||||
SCAN FOR !EMPTY(NVL(id_part,0)) AND !EMPTY(NVL(cod_fiscal, '')) ;
|
||||
AND INLIST(ALLTRIM(NVL(cod_tara, 'RO')), 'RO', '')
|
||||
lcCod = ALLTRIM(cod_fiscal)
|
||||
llCnp = (NVL(tip_persoana, 1) = 2) OR (LEN(CHRTRAN(m.lcCod, '0123456789', '')) = 0 AND LEN(m.lcCod) > 10)
|
||||
IF !IIF(m.llCnp, VALIDARE_CNP(m.lcCod, m.loVerif), VALIDARE_CIF(m.lcCod, m.loVerif))
|
||||
IF !This.CodFiscalValidSaft(m.lcCod, m.llCnp, m.loVerif)
|
||||
lnInvalid = m.lnInvalid + 1
|
||||
lnInvalidCnp = m.lnInvalidCnp + IIF(m.llCnp, 1, 0)
|
||||
lcListaInvalid = m.lcListaInvalid + IIF(EMPTY(m.lcListaInvalid), '', ', ') + ALLTRIM(STR(RECNO()))
|
||||
lnRandInv = RECNO()
|
||||
lnIdPartInv = id_part
|
||||
lcDenumireInv = NVL(denumire, '')
|
||||
lnTipPersInv = NVL(tip_persoana, 1)
|
||||
lcContInv = NVL(cont, '')
|
||||
INSERT INTO cCodInvalid (rand, id_part, denumire, cod_fiscal, tip_cod, tip_persoana, cont) ;
|
||||
VALUES (m.lnRandInv, m.lnIdPartInv, m.lcDenumireInv, m.lcCod, IIF(m.llCnp, 'CNP', 'CUI'), m.lnTipPersInv, m.lcContInv)
|
||||
SELECT (m.lcCursor)
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
GO TOP
|
||||
loVerif = .NULL.
|
||||
|
||||
IF m.lnInvalid > 0
|
||||
lcTextInvalid = CRLF + SPACE(10) + 'ATENTIE! Randuri cu cod fiscal invalid (' + ALLTRIM(STR(m.lnInvalid)) + '): ' + ALLTRIM(LEFT(m.lcListaInvalid, 50)) + ;
|
||||
lcTextInvalid = CRLF + SPACE(10) + 'ATENTIE! Randuri cu cod fiscal invalid (' + ALLTRIM(STR(m.lnInvalid)) + ;
|
||||
': CNP ' + ALLTRIM(STR(m.lnInvalidCnp)) + ', CUI ' + ALLTRIM(STR(m.lnInvalid - m.lnInvalidCnp)) + '): ' + ALLTRIM(LEFT(m.lcListaInvalid, 50)) + ;
|
||||
CRLF + SPACE(10) + IIF(m.llSilent, 'Lista completa: apasati butonul "Verificare coduri fiscale" de pe clienti/furnizori', 'Lista completa in fisierul Excel exportat') + ;
|
||||
CRLF + SPACE(10) + 'Stergeti CNP-urile din "Initializari cod taxa/plata" > "Stergere CNP-uri invalide", restul se corecteaza in nomenclatorul de parteneri'
|
||||
IF !m.llSilent
|
||||
goExport.export2xlsx('cCodInvalid', 'coduri_fiscale_invalide' + IIF(m.llClient, '_clienti_', '_furnizori_') + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
||||
SELECT (m.lcCursor)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT('cPartDif') > 0
|
||||
@@ -1067,13 +1095,14 @@ and b1.cont = b2.cont
|
||||
lcMesaj ='Nu sunt diferente fata de balanta parteneri' + ;
|
||||
IIF(EMPTY(m.lcListaGol), '', CHR(13) + CHR(10) + SPACE(10) + 'Randuri cu ' + IIF(m.llClient, 'clienti', 'furnizori') + ' fara cod fiscal: ' + ALLTRIM(LEFT(m.lcListaGol, 50))) + m.lcTextInvalid
|
||||
IF !m.llSilent
|
||||
AMESSAGEBOX(lcMesaj + CHR(13) + CHR(10) + m.lcText,0+64,_screen.Caption)
|
||||
AMESSAGEBOX(m.lcMesaj,0+64,_screen.Caption)
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
ENDIF
|
||||
USE IN (SELECT('cBalPartTemp'))
|
||||
USE IN (SELECT('cPartDif'))
|
||||
USE IN (SELECT('cPartDif'))
|
||||
USE IN (SELECT('cCodInvalid'))
|
||||
Else
|
||||
llDontCloseCursor = .F.
|
||||
llExperimental = .F.
|
||||
@@ -1106,6 +1135,182 @@ and b1.cont = b2.cont
|
||||
RETURN lcMesaj
|
||||
ENDPROC && do_verifica_cui
|
||||
|
||||
*************************************************
|
||||
* Validare cod fiscal dupa regulile validatorului ANAF pentru RegistrationNumber/CustomerID
|
||||
* tlCnp: .T. = cod de persoana fizica (CNP), .F. = cod de persoana juridica (CUI)
|
||||
* toVerif: obiect VerificareCod, optional (ca sa nu se instantieze la fiecare cod)
|
||||
*************************************************
|
||||
PROCEDURE CodFiscalValidSaft
|
||||
LPARAMETERS tcCod, tlCnp, toVerif
|
||||
LOCAL lcCod
|
||||
|
||||
lcCod = ALLTRIM(UPPER(NVL(m.tcCod, '')))
|
||||
*!* la persoana juridica GenCustSupCode scoate atributul fiscal din codul SAF-T, la persoana fizica nu
|
||||
IF !m.tlCnp AND LEFT(m.lcCod, 2) = 'RO'
|
||||
lcCod = ALLTRIM(SUBSTR(m.lcCod, 3))
|
||||
ENDIF
|
||||
|
||||
*!* 26.07.2026 ANAF cere numai cifre, fara zero la inceput, exact 13 la CNP si maxim 10 la CUI - validarea cifrei de control nu prinde asta
|
||||
IF !EMPTY(CHRTRAN(m.lcCod, '0123456789', '')) OR LEFT(m.lcCod, 1) = '0' OR ;
|
||||
IIF(m.tlCnp, LEN(m.lcCod) <> 13, !BETWEEN(LEN(m.lcCod), 2, 10))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
RETURN IIF(m.tlCnp, VALIDARE_CNP(m.lcCod, m.toVerif), VALIDARE_CIF(m.lcCod, m.toVerif))
|
||||
ENDPROC && CodFiscalValidSaft
|
||||
|
||||
*************************************************
|
||||
* Extrage din fisierul de raspuns al validatorului ANAF erorile de cod partener
|
||||
* (RegistrationNumber/CustomerID/SupplierID) si le pune in cursorul cEroriPartSaft
|
||||
* Intoarce textul de afisat, gol daca nu sunt astfel de erori
|
||||
*************************************************
|
||||
PROCEDURE do_erori_partener_saft
|
||||
LPARAMETERS tcFisierRaspuns
|
||||
|
||||
LOCAL lcCod, lcCursor, lcDenumire, lcId, lcLinie, lcLocatie, lcMesaj, lcPagina, lcRest, lcSelect, lcTag, lcTipCod, lcTipPart
|
||||
LOCAL lnFile, lnI, lnIdPart, lnJ, lnNrErori, lnParteneri, lnPoz, lnRand
|
||||
|
||||
lcMesaj = ''
|
||||
lcSelect = Select()
|
||||
|
||||
IF !FILE(m.tcFisierRaspuns)
|
||||
RETURN m.lcMesaj
|
||||
ENDIF
|
||||
|
||||
*!* fiecare eroare are 2 linii: localizarea "E: MasterFiles (1) sectiune Customers (1) sectiune Customer (162) ..."
|
||||
*!* si regula " eroare regula: CustomerID: Pentru CustomerID 00I14770212 formatul este invalid"
|
||||
CREATE CURSOR cErrTemp (saftpartid C(30), pagina C(10), rand N(7))
|
||||
lnFile = FOPEN(m.tcFisierRaspuns, 0)
|
||||
IF m.lnFile < 0
|
||||
USE IN (SELECT('cErrTemp'))
|
||||
SELECT (m.lcSelect)
|
||||
RETURN m.lcMesaj
|
||||
ENDIF
|
||||
lcLocatie = ''
|
||||
DO WHILE !FEOF(m.lnFile)
|
||||
lcLinie = FGETS(m.lnFile, 8192)
|
||||
IF LEFT(LTRIM(m.lcLinie), 2) == 'E:'
|
||||
lcLocatie = m.lcLinie
|
||||
LOOP
|
||||
ENDIF
|
||||
lnPoz = ATC('Pentru ', m.lcLinie)
|
||||
IF m.lnPoz = 0
|
||||
LOOP
|
||||
ENDIF
|
||||
lcRest = ALLTRIM(SUBSTR(m.lcLinie, m.lnPoz + 7))
|
||||
lcTag = GETWORDNUM(m.lcRest, 1)
|
||||
IF !INLIST(m.lcTag, 'RegistrationNumber', 'CustomerID', 'SupplierID')
|
||||
LOOP
|
||||
ENDIF
|
||||
lcId = GETWORDNUM(m.lcRest, 2)
|
||||
IF EMPTY(m.lcId)
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
*!* pagina si randul din grid = sectiunea si indexul partenerului din MasterFiles ("sectiune Customer (162)")
|
||||
lcPagina = ''
|
||||
lnRand = 0
|
||||
lnPoz = ATC('sectiune Customer (', m.lcLocatie)
|
||||
IF m.lnPoz > 0
|
||||
lcPagina = 'Customers'
|
||||
ELSE
|
||||
lnPoz = ATC('sectiune Supplier (', m.lcLocatie)
|
||||
IF m.lnPoz > 0
|
||||
lcPagina = 'Suppliers'
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF m.lnPoz > 0
|
||||
lnRand = INT(VAL(SUBSTR(m.lcLocatie, m.lnPoz + 19)))
|
||||
ENDIF
|
||||
|
||||
INSERT INTO cErrTemp (saftpartid, pagina, rand) VALUES (m.lcId, m.lcPagina, m.lnRand)
|
||||
ENDDO
|
||||
= FCLOSE(m.lnFile)
|
||||
|
||||
* Un cod poate aparea pe mai multe randuri (parteneri diferiti cu acelasi cod) si in sectiunile de documente
|
||||
SELECT saftpartid, COUNT(*) AS nr_erori, MAX(rand) AS max_rand FROM cErrTemp GROUP BY 1 INTO CURSOR cErrCod
|
||||
SELECT DISTINCT saftpartid, pagina, rand FROM cErrTemp WHERE rand > 0 ORDER BY 2, 3 INTO CURSOR cErrGrup
|
||||
USE IN (SELECT('cErrTemp'))
|
||||
|
||||
* Identific partenerul dupa codul SAF-T, in cursoarele declaratiei
|
||||
CREATE CURSOR cEroriPartSaft (pagina C(10), rand N(7), saftpartid C(30), tip_cod C(3), id_part N(10), denumire C(150), cod_fiscal C(30), tip_part C(9), nr_erori N(6))
|
||||
SELECT cErrGrup
|
||||
SCAN
|
||||
lcId = ALLTRIM(cErrGrup.saftpartid)
|
||||
lcPagina = cErrGrup.pagina
|
||||
lnRand = cErrGrup.rand
|
||||
lnNrErori = 0
|
||||
SELECT cErrCod
|
||||
LOCATE FOR ALLTRIM(cErrCod.saftpartid) == m.lcId
|
||||
IF FOUND()
|
||||
lnNrErori = cErrCod.nr_erori
|
||||
ENDIF
|
||||
lcTipPart = ''
|
||||
lnIdPart = 0
|
||||
lcDenumire = ''
|
||||
lcCod = ''
|
||||
FOR lnJ = 1 TO 2
|
||||
lcCursor = IIF(m.lnJ = 1, 'cCustomers', 'cSuppliers')
|
||||
IF !USED(m.lcCursor)
|
||||
LOOP
|
||||
ENDIF
|
||||
SELECT (m.lcCursor)
|
||||
LOCATE FOR ALLTRIM(NVL(saftpartid, '')) == m.lcId
|
||||
IF FOUND()
|
||||
lcTipPart = IIF(m.lnJ = 1, 'Client', 'Furnizor')
|
||||
lnIdPart = NVL(id_part, 0)
|
||||
lcDenumire = NVL(denumire, '')
|
||||
lcCod = ALLTRIM(NVL(cod_fiscal, ''))
|
||||
ENDIF
|
||||
GO TOP
|
||||
IF !EMPTY(m.lcTipPart)
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
lcTipCod = IIF(LEFT(m.lcId, 2) = '03', 'CNP', IIF(INLIST(LEFT(m.lcId, 2), '00', '01', '02'), 'CUI', ''))
|
||||
INSERT INTO cEroriPartSaft (pagina, rand, saftpartid, tip_cod, id_part, denumire, cod_fiscal, tip_part, nr_erori) ;
|
||||
VALUES (m.lcPagina, m.lnRand, m.lcId, m.lcTipCod, m.lnIdPart, m.lcDenumire, m.lcCod, m.lcTipPart, m.lnNrErori)
|
||||
SELECT cErrGrup
|
||||
ENDSCAN
|
||||
USE IN (SELECT('cErrGrup'))
|
||||
|
||||
* Codurile semnalate numai in sectiunile de documente, fara rand in Customers/Suppliers
|
||||
SELECT cErrCod
|
||||
SCAN FOR cErrCod.max_rand = 0
|
||||
lcId = ALLTRIM(cErrCod.saftpartid)
|
||||
lcTipCod = IIF(LEFT(m.lcId, 2) = '03', 'CNP', IIF(INLIST(LEFT(m.lcId, 2), '00', '01', '02'), 'CUI', ''))
|
||||
INSERT INTO cEroriPartSaft (pagina, rand, saftpartid, tip_cod, nr_erori) ;
|
||||
VALUES ('', 0, m.lcId, m.lcTipCod, cErrCod.nr_erori)
|
||||
SELECT cErrCod
|
||||
ENDSCAN
|
||||
USE IN (SELECT('cErrCod'))
|
||||
|
||||
lnParteneri = RECCOUNT('cEroriPartSaft')
|
||||
IF m.lnParteneri = 0
|
||||
USE IN (SELECT('cEroriPartSaft'))
|
||||
SELECT (m.lcSelect)
|
||||
RETURN m.lcMesaj
|
||||
ENDIF
|
||||
|
||||
lcMesaj = 'Coduri de partener respinse de validatorul ANAF: ' + ALLTRIM(STR(m.lnParteneri))
|
||||
lnI = 0
|
||||
SELECT cEroriPartSaft
|
||||
SCAN
|
||||
lnI = m.lnI + 1
|
||||
IF m.lnI > 10
|
||||
lcMesaj = m.lcMesaj + CHR(13) + CHR(10) + SPACE(3) + '...'
|
||||
EXIT
|
||||
ENDIF
|
||||
lcMesaj = m.lcMesaj + CHR(13) + CHR(10) + SPACE(3) + PADR(ALLTRIM(cEroriPartSaft.pagina), 11) + ;
|
||||
PADL(IIF(cEroriPartSaft.rand > 0, ALLTRIM(STR(cEroriPartSaft.rand)), '-'), 5) + SPACE(2) + ;
|
||||
PADR(ALLTRIM(cEroriPartSaft.saftpartid), 18) + PADR(ALLTRIM(cEroriPartSaft.tip_cod), 4) + ALLTRIM(cEroriPartSaft.denumire)
|
||||
ENDSCAN
|
||||
GO TOP
|
||||
SELECT (m.lcSelect)
|
||||
|
||||
RETURN m.lcMesaj
|
||||
ENDPROC && do_erori_partener_saft
|
||||
|
||||
&& IAU SOLDURILE DIN BALANTA DE VERIFICARE PENTRU CONTURILE DE IMOBLIZARI SI AMORTIZARI
|
||||
&& SI LE COMPAR CU VALOAREA DE INVENTAR SI AMORTIZAREA TOTALA DIN IMOBILIZARI CORPORALE/NECORPORALE CONTABIL
|
||||
Procedure do_verifica_imobilizari
|
||||
@@ -2077,48 +2282,59 @@ select a.id_articol, a.denumire, SUM(r.cant) as cant, SUM(r.cante) as cante, SUM
|
||||
ENDPROC && CompletareCodTaxaPlata
|
||||
|
||||
*************************************
|
||||
* Stergere cod fiscal la persoanele cu CNP invalid, din partenerii cu rulaje in perioada declaratiei
|
||||
* Stergere cod fiscal la persoanele cu CNP invalid, din clientii/furnizorii declaratiei
|
||||
* Aceleasi randuri pe care le semnaleaza verificarea codurilor fiscale (do_verifica_cui)
|
||||
PROCEDURE StergereCnpInvalid
|
||||
Local lcCod, lcLista, lcMesaj, lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnNr, lnRand
|
||||
Local lcCod, lcCursor, lcLista, lcMesaj, lcSelect, lcSql, llCnp, llSucces, lnAn2, lnI, lnLuna2, lnNr, lnRand, loVerif
|
||||
Local lcCodInv, lcDenumireInv, lnIdPartInv, lnTipPersInv
|
||||
|
||||
lcSelect = Select()
|
||||
lnAn1 = This.oUnitate.an1
|
||||
lnLuna1 = This.oUnitate.luna1
|
||||
lnAn2 = This.oUnitate.an2
|
||||
lnLuna2 = This.oUnitate.luna2
|
||||
|
||||
* Candidati: cod fiscal numeric, persoana fizica sau cod mai lung de 10 cifre (nu poate fi CUI), cu rulaje in perioada
|
||||
Text To m.lcSql Noshow Textmerge
|
||||
select p.id_part, p.denumire, p.cod_fiscal, p.tip_persoana
|
||||
from nom_parteneri p
|
||||
where nvl(p.sters, 0) = 0
|
||||
and regexp_like(trim(p.cod_fiscal), '^[0-9]+$')
|
||||
and (p.tip_persoana = 2 or length(trim(p.cod_fiscal)) > 10)
|
||||
and exists (select 1
|
||||
from balanta_parteneri b
|
||||
where b.id_part = p.id_part
|
||||
and b.an * 12 + b.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
||||
and (nvl(b.debit, 0) <> 0 or nvl(b.credit, 0) <> 0)
|
||||
and b.cont in ('4111','4118','461','418','419','401','404','462','408','409'))
|
||||
order by p.denumire
|
||||
Endtext
|
||||
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, 'cCnpTemp')
|
||||
If !m.llSucces
|
||||
If !Used('cCustomers') And !Used('cSuppliers')
|
||||
Amessagebox('Apasati intai pe 1. Citeste date!', 0+64, _Screen.Caption)
|
||||
Select (m.lcSelect)
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
* Retin doar codurile care nu trec de validarea CNP (lungime + cifra de control)
|
||||
Select id_part, denumire, cod_fiscal, tip_persoana ;
|
||||
*!* 26.07.2026 candidatii se iau din cursoarele declaratiei, cu aceleasi criterii ca verificarea codurilor fiscale
|
||||
Create Cursor cCnpTemp (id_part N(10), denumire C(150), cod_fiscal C(30), tip_persoana N(1))
|
||||
loVerif = Createobject('VerificareCod')
|
||||
For lnI = 1 To 2
|
||||
lcCursor = Iif(m.lnI = 1, 'cCustomers', 'cSuppliers')
|
||||
If !Used(m.lcCursor)
|
||||
Loop
|
||||
Endif
|
||||
Select (m.lcCursor)
|
||||
Scan For !Empty(Nvl(id_part, 0)) And !Empty(Nvl(cod_fiscal, '')) ;
|
||||
And Inlist(Alltrim(Nvl(cod_tara, 'RO')), 'RO', '')
|
||||
lcCod = Alltrim(cod_fiscal)
|
||||
llCnp = (Nvl(tip_persoana, 1) = 2) Or (Len(Chrtran(m.lcCod, '0123456789', '')) = 0 And Len(m.lcCod) > 10)
|
||||
If m.llCnp And !This.CodFiscalValidSaft(m.lcCod, .T., m.loVerif)
|
||||
lnIdPartInv = id_part
|
||||
lcDenumireInv = Nvl(denumire, '')
|
||||
lcCodInv = m.lcCod
|
||||
lnTipPersInv = Nvl(tip_persoana, 1)
|
||||
Insert Into cCnpTemp (id_part, denumire, cod_fiscal, tip_persoana) ;
|
||||
Values (m.lnIdPartInv, m.lcDenumireInv, m.lcCodInv, m.lnTipPersInv)
|
||||
Select (m.lcCursor)
|
||||
Endif
|
||||
Endscan
|
||||
Go Top
|
||||
Endfor
|
||||
loVerif = .NULL.
|
||||
|
||||
* Un partener apare pe cate un rand pentru fiecare cont, deci elimin dublurile
|
||||
Select Distinct id_part, denumire, cod_fiscal, tip_persoana ;
|
||||
From cCnpTemp ;
|
||||
Where !ValidCNP(Alltrim(Nvl(cod_fiscal, ''))) ;
|
||||
Order By denumire ;
|
||||
Into Cursor cCnpInvalid
|
||||
Use In (Select('cCnpTemp'))
|
||||
|
||||
lnNr = Reccount('cCnpInvalid')
|
||||
If m.lnNr = 0
|
||||
Amessagebox('Nu sunt parteneri cu CNP invalid in perioada declaratiei!', 0+64, _Screen.Caption)
|
||||
Amessagebox('Nu sunt parteneri cu CNP invalid in declaratie!', 0+64, _Screen.Caption)
|
||||
Use In (Select('cCnpInvalid'))
|
||||
Select (m.lcSelect)
|
||||
Return .T.
|
||||
@@ -2126,7 +2342,7 @@ select p.id_part, p.denumire, p.cod_fiscal, p.tip_persoana
|
||||
|
||||
goExport.export2xlsx('cCnpInvalid', 'cnp_invalide_saft_' + Alltrim(Str(m.lnAn2)) + Padl(m.lnLuna2, 2, '0'))
|
||||
|
||||
lcMesaj = 'S-au gasit ' + Alltrim(Str(m.lnNr)) + ' parteneri cu CNP invalid in perioada declaratiei.' + Chr(13) + Chr(10) + ;
|
||||
lcMesaj = 'S-au gasit ' + Alltrim(Str(m.lnNr)) + ' parteneri cu CNP invalid in declaratie.' + Chr(13) + Chr(10) + ;
|
||||
'Doriti stergerea codului fiscal eronat si trecerea lor pe persoana fizica?' + Chr(13) + Chr(10) + ;
|
||||
'(la SAF-T persoanele fizice nu sunt obligate sa aiba CNP)'
|
||||
If Amessagebox(m.lcMesaj, 4+32, _Screen.Caption) <> 6
|
||||
@@ -2140,7 +2356,9 @@ select p.id_part, p.denumire, p.cod_fiscal, p.tip_persoana
|
||||
lnRand = 0
|
||||
llSucces = .T.
|
||||
Select cCnpInvalid
|
||||
Scan While m.llSucces
|
||||
*!* 26.07.2026 exportul lasa pointerul pe EOF, deci pozitionez pe primul rand inainte de parcurgere
|
||||
Go Top
|
||||
Scan
|
||||
lcLista = m.lcLista + Iif(Empty(m.lcLista), '', ',') + Alltrim(Str(cCnpInvalid.id_part))
|
||||
lnRand = m.lnRand + 1
|
||||
If m.lnRand = 1000 Or Recno() = m.lnNr
|
||||
@@ -2149,11 +2367,15 @@ select p.id_part, p.denumire, p.cod_fiscal, p.tip_persoana
|
||||
lcLista = ''
|
||||
lnRand = 0
|
||||
Endif
|
||||
If !m.llSucces
|
||||
Exit
|
||||
Endif
|
||||
Endscan
|
||||
|
||||
If m.llSucces
|
||||
Amessagebox('Stergere efectuata cu succes!' + Chr(13) + Chr(10) + ;
|
||||
'Apasati pe 1. Citeste date pentru a actualiza datele din declaratie', 0+64, _Screen.Caption)
|
||||
Amessagebox('Stergere efectuata cu succes (' + Alltrim(Str(m.lnNr)) + ' parteneri)!' + Chr(13) + Chr(10) + ;
|
||||
'Apasati pe 1. Citeste date pentru a actualiza datele din declaratie' + Chr(13) + Chr(10) + ;
|
||||
'(pana la re-citire, verificarile arata tot codurile vechi)', 0+64, _Screen.Caption)
|
||||
Endif
|
||||
|
||||
Use In (Select('cCnpInvalid'))
|
||||
|
||||
Reference in New Issue
Block a user