Import eFactura in lot: borderou cu ce lipseste, coada de contabilizare, alegerea contului
Borderoul tine per factura ce mai are de completat si daca are articole de gestiune (camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi. Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
This commit is contained in:
@@ -52,8 +52,10 @@
|
||||
*!* 03.09.2024
|
||||
*!* ProcentTva2IdJtva - tratare procent TVA 0 si taxare inversa (eFactura)
|
||||
|
||||
*!* 05.12.2024
|
||||
*!* GetArticolEFByPartDenumire - caut si articolele fara id_articol, in caz ca sunt servicii, nu articole gestionabile ROA
|
||||
*!* 03.09.2026
|
||||
*!* marius.mutu
|
||||
*!* GetArticolEFByPartDenumire - invelis peste RecunoastereArticolEF: cascada text exact ->
|
||||
*!* cheie normalizata in istoricul furnizorului, plus parametrul de iesire tcSursa (EXACT/APROX)
|
||||
|
||||
*!* 15.01.2025
|
||||
*!* GetDocumentByContPartenerAct - se cauta comanda si in IREG_PARTENERI.EXPLICATIA
|
||||
@@ -7335,61 +7337,46 @@ ENDPROC && GetArticolById
|
||||
|
||||
**************************************
|
||||
*** Intoarce un obiect din ANAF_VEFACTURA_DETALII/id_articol dupa cod fiscal furnizor/client si denumire
|
||||
*** Cauta in articolele furnizorului/clientului, ultima aparitie a articolului respectiv
|
||||
*** Cauta in istoricul furnizorului/clientului cascada RecunoastereArticolEF.PotrivesteArticol
|
||||
*** (text exact, apoi cheie normalizata), ultima aparitie a articolului respectiv
|
||||
*** lnIdArticol = GetArticolEFByPartDenumire("cod fiscal", "articol", .T.)
|
||||
*** loArticol = GetArticolByCodDenumire("articol", "cod bare", "cod furnizor", "cod client", IdPart, .F.)
|
||||
**************************************
|
||||
Procedure GetArticolEFByPartDenumire
|
||||
lParameters tcCodFiscal, tlPrimite, tcDenumire, tlReturnId, tnIdEfactura
|
||||
lParameters tcCodFiscal, tlPrimite, tcDenumire, tlReturnId, tnIdEfactura, tcSursa
|
||||
* tcCodFiscal : cod fiscal client/furnizor
|
||||
* tlPrimite: facturi primite / emise
|
||||
* tcDenumire: denumire articol
|
||||
* tlReturnId: .T. = intoarce id_articol, .F. = intoarce obiect
|
||||
* tlReturnId: .T. = intoarce id_articol, .F. = intoarce obiect
|
||||
* tnIdEfactura: id_efactura curenta. sa nu caut articolul in factura curenta, ci in facturile anterioare
|
||||
|
||||
Private pcDenumire, pcCodBare, pcCodFurnizor, pcCodCLient, pnIdPart, pnIdEfactura
|
||||
Local lcSql, lnSucces, lcSelect, loArticol, loReturn, lcColoanaCodFiscal
|
||||
* tcSursa: parametru de iesire optional (@tcSursa) - 'EXACT'/'APROX' la gasire, '' cand nu s-a gasit nimic
|
||||
|
||||
Local lcSelect, loArticol, loReturn, loRecunoastere, lcSursa
|
||||
lcSelect = SELECT()
|
||||
loArticol = null
|
||||
loReturn = Null
|
||||
|
||||
pcDenumire = UPPER(Alltrim(NVL(m.tcDenumire, '')))
|
||||
pcCodFiscal = UPPER(ALLTRIM(NVL(m.tcCodFiscal, '')))
|
||||
pnIdArticol = 0
|
||||
pnIdEfactura = IIF(!EMPTY(NVL(tnIdEfactura, 0)), m.tnIdEfactura, 0)
|
||||
lcColoanaCodFiscal = IIF(m.tlPrimite, "e.cod_fiscal_emitent", "e.cod_fiscal_beneficiar")
|
||||
|
||||
TEXT TO lcSql TEXTMERGE NOSHOW
|
||||
SELECT * FROM (SELECT d.* FROM ANAF_VEFACTURA_DETALII d LEFT JOIN ANAF_EFACTURA e ON (e.id = d.id_efactura)
|
||||
WHERE <<m.lcColoanaCodFiscal>> = ?pcCodFiscal AND TRIM(UPPER(d.articol)) = ?pcDenumire and id_articol is not null ORDER BY d.id desc) WHERE rownum = 1
|
||||
ENDTEXT
|
||||
loReturn = Null
|
||||
|
||||
llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol)
|
||||
loRecunoastere = Createobject('RecunoastereArticolEF')
|
||||
loArticol = loRecunoastere.PotrivesteArticol(m.tcCodFiscal, m.tlPrimite, m.tcDenumire, m.tnIdEfactura, @lcSursa)
|
||||
tcSursa = m.lcSursa
|
||||
|
||||
If m.llSucces
|
||||
* Daca nu am gasit factura cu articol ROA (este posibil sa fie de servicii, fara articole gestionabile)
|
||||
* Caut articolelele anterioare, fara id_articol
|
||||
IF EMPTY(NVL(loArticol.id_articol,0)) AND !EMPTY(NVL(m.tnIdEfactura,0))
|
||||
TEXT TO lcSql TEXTMERGE NOSHOW
|
||||
SELECT * FROM (SELECT d.* FROM ANAF_VEFACTURA_DETALII d LEFT JOIN ANAF_EFACTURA e ON (e.id = d.id_efactura)
|
||||
WHERE <<m.lcColoanaCodFiscal>> = ?pcCodFiscal AND TRIM(UPPER(d.articol)) = ?pcDenumire and e.id <> ?pnIdEFactura ORDER BY d.id desc) WHERE rownum = 1
|
||||
ENDTEXT
|
||||
IF ISNULL(m.loArticol)
|
||||
* obiect cu proprietatile ANAF_VEFACTURA_DETALII la valoarea implicita a tipului, nu NULL, cand cascada nu gaseste nimic
|
||||
loArticol = loRecunoastere.oGol
|
||||
IF ISNULL(m.loArticol)
|
||||
* cascada s-a oprit pe eroare de date, fara sa aduca structura
|
||||
goExecutor.oSelecteaza2Object("SELECT * FROM ANAF_VEFACTURA_DETALII WHERE 1 = 0", @loArticol)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF m.llSucces
|
||||
IF m.tlReturnId
|
||||
loReturn = loArticol.id_articol
|
||||
ELSE
|
||||
loReturn = loArticol
|
||||
ENDIF
|
||||
IF m.tlReturnId
|
||||
loReturn = loArticol.id_articol
|
||||
ELSE
|
||||
loReturn = loArticol
|
||||
ENDIF
|
||||
|
||||
SELECT (m.lcSelect)
|
||||
Return loReturn
|
||||
|
||||
|
||||
ENDPROC && GetArticolEFByPartDenumire
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user