From 117f2fb88a132cb61cae07ee47a3cc97369458f4 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Fri, 7 Aug 2026 00:00:21 +0300 Subject: [PATCH] eFactura, verificare partener, istoric CF: numar pe bife, TVA la incasare, explicatii pe cota - borderou si import eFactura: bifele de cautare arata numarul de documente in eticheta, inca de la deschiderea ferestrei. Numararea se face local din cursorul deja adus cand nicio bifa nu e bifata (cursorul e chiar setul de baza) si prin interogare doar cand o bifa e bifata, ca sa nu apara interogari inutile. Latimile bifelor au fost marite: erau croite exact pe textul original, iar " (N)" era taiat de marginea controlului. - verificare cod fiscal: starea partenerului include "TVA la incasare", cu perioada in detalii; sursa e ANAF live sau cache-ul ISTORIC_CODURI_FISCALE (ocautare.prg, validare.prg). - modificare nota: lista de explicatii TVA se filtreaza dupa cota TVA a liniei curente (omodificari.vc2, caut_explicatie_tva din oproceduri_comune.prg). - istoric coduri fiscale: coloane nefolosite ascunse, adaugate cele venite de la ANAF (TVA la incasare, split TVA, inactiv si perioadele aferente) - overificari.vc2. - docs/scripturi-migrare-db.md: regulile de rulare manuala pe schema tinta si un pachet per script. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01D8Ham1HJ8BB2v9nbtWgdZq --- clase/anaf_efactura.vc2 | 286 +++++++++++++++++++++++++++++---- clase/omodificari.vc2 | 7 +- clase/overificari.vc2 | 283 +++++++++++++++++++++++++++++++- docs/scripturi-migrare-db.md | 9 ++ docs/todos.txt | 8 +- programe/ocautare.prg | 19 ++- programe/oproceduri_comune.prg | 4 +- programe/validare.prg | 11 +- 8 files changed, 583 insertions(+), 44 deletions(-) diff --git a/clase/anaf_efactura.vc2 b/clase/anaf_efactura.vc2 index 1c6ed42..139a47b 100644 --- a/clase/anaf_efactura.vc2 +++ b/clase/anaf_efactura.vc2 @@ -609,12 +609,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" BackStyle = 1, ; Caption = "Trimise (cu diferente Reg. Vz.)", ; Height = 25, ; - Left = 522, ; + Left = 687, ; Name = "chkDiferente", ; Style = 0, ; Top = 151, ; Value = .F., ; - Width = 197 + Width = 238 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'pgfeFactura.Page1.chkErori' AS _checkbox WITH ; @@ -625,12 +625,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" BackStyle = 1, ; Caption = "Trimise (cu raspuns Erori)", ; Height = 25, ; - Left = 346, ; + Left = 470, ; Name = "chkErori", ; Style = 0, ; Top = 151, ; Value = .F., ; - Width = 170 + Width = 211 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'pgfeFactura.Page1.chkFortareRaspunsuri' AS _checkbox WITH ; @@ -655,12 +655,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" BackStyle = 1, ; Caption = "Netrimise", ; Height = 25, ; - Left = 112, ; + Left = 154, ; Name = "chkNetrimise", ; Style = 0, ; Top = 151, ; Value = .F., ; - Width = 79 + Width = 117 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'pgfeFactura.Page1.chkPersFizice' AS _checkbox WITH ; @@ -690,7 +690,7 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" Style = 0, ; Top = 151, ; Value = .F., ; - Width = 98 + Width = 141 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'pgfeFactura.Page1.chkTrimis' AS _checkbox WITH ; @@ -716,12 +716,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" BackStyle = 1, ; Caption = "Trimise (fara raspuns)", ; Height = 25, ; - Left = 195, ; + Left = 277, ; Name = "chkTrimise", ; Style = 0, ; Top = 151, ; Value = .F., ; - Width = 147 + Width = 187 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'pgfeFactura.Page1.chkValidareOnline' AS _checkbox WITH ; @@ -5363,7 +5363,7 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" PROCEDURE do_cauta LOCAL lcfiltru, lcFiltru2, lcFiltru3, lcval1, lcColoana, ldData1, ldData2 - Local lcData1, lcData2, llErori, llNetrimise, llPJ, llTrimise, llDiferente, lnActivePage, lcCond, lcDif2, lcDif3, lcLipsa + Local lcData1, lcData2, llErori, llNetrimise, llPJ, llTrimise, llDiferente, lnActivePage, lcCond, lcDif1, lcDif2, lcDif3, lcLipsa, lcFiltruBaza1, lcFiltruBaza2, lcFiltruBaza3, lcPJ, lcNetrimise, lcTrimise, lcErori WAIT WINDOW 'Selectie inregistrari...' NOWAIT @@ -5411,19 +5411,25 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" lcFiltru3 = m.lcFiltru3 + " and (" + ALLTRIM(THISFORM.filtru_pretty) + ")" ENDIF + * Filtrul de baza (fara bifele paginii 1), pentru numarul independent din caption (NumaraDiferente) + lcFiltruBaza1 = m.lcFiltru + + lcPJ = [(tip_persoana=1)] + lcNetrimise = [(NVL(trimis,0) = 0)] + lcTrimise = [(trimis = 1 and data_raspuns IS NULL)] + lcErori = [(trimis = 1 and tip_mesaj_raspuns = 'ERORI FACTURA')] + IF m.llPJ - lcFiltru = m.lcfiltru + " and (tip_persoana=1)" + lcFiltru = m.lcfiltru + " and " + m.lcPJ ENDIF - IF m.llDiferente - lcFiltru = m.lcFiltru + " and (jtotctva is null or ABS(decode(creditnote,0,1,-1) * ROUND(NVL(xtotal_cu_tva , 0.00) * decode(in_valuta,1,curs,1), 2)-NVL(jtotctva, 0.00)) > 0.15)" - ENDIF - - * Bifele Diferente / Lipsa din registrul de TVA de pe paginile Primite si Trimise + * Bifele Diferente / Lipsa din registrul de TVA, folosite si de NumaraDiferente pentru numarul din caption lcLipsa = [(jtotctva is null)] + lcDif1 = [(jtotctva is null or ABS(decode(creditnote,0,1,-1) * ROUND(NVL(xtotal_cu_tva , 0.00) * decode(in_valuta,1,curs,1), 2)-NVL(jtotctva, 0.00)) > 0.15)] lcDif2 = [(jtotctva is not null and (NVL(nume_valuta,'RON') <> 'RON' or ABS(decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-(NVL(jtotctva, 0.00)-NVL(jtva_ti, 0.00))) > 0.15))] lcDif3 = [(jtotctva is not null and (NVL(nume_valuta,'RON') <> 'RON' or ABS(decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00)) > 0.15))] + lcFiltruBaza2 = m.lcFiltru2 lcCond = [] WITH this.pgfeFactura.page2 IF .chkDiferente.Value @@ -5437,6 +5443,7 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" lcFiltru2 = m.lcFiltru2 + [ and (] + m.lcCond + [)] ENDIF + lcFiltruBaza3 = m.lcFiltru3 lcCond = [] WITH this.pgfeFactura.page3 IF .chkDiferente.Value @@ -5455,14 +5462,18 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" IF m.llErori lcFiltru = m.lcfiltru + " and (NVL(trimis,0) = 0 or tip_mesaj_raspuns = 'ERORI FACTURA')" ELSE - lcFiltru = m.lcfiltru + " and (NVL(trimis,0) = 0)" + lcFiltru = m.lcfiltru + " and " + m.lcNetrimise ENDIF CASE m.llTrimise - lcFiltru = m.lcfiltru + " and (trimis = 1 and data_raspuns IS NULL)" + lcFiltru = m.lcfiltru + " and " + m.lcTrimise CASE m.llErori - lcFiltru = m.lcfiltru + " and (trimis = 1 and tip_mesaj_raspuns = 'ERORI FACTURA')" + lcFiltru = m.lcfiltru + " and " + m.lcErori ENDCASE + IF m.llDiferente + lcFiltru = m.lcFiltru + " and (" + m.lcDif1 + ")" + ENDIF + If Empty(m.lcFiltru) aMessagebox("Alegeti un criteriu!",0+48,"Atentie") Return @@ -5512,6 +5523,8 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" This.pgfeFactura.page2._grdfooter1.calctotal() This.pgfeFactura.page3._grdfooter1.calctotal() + This.NumaraDiferente(m.lcFiltruBaza1, m.lcFiltruBaza2, m.lcFiltruBaza3, m.lcDif1, m.lcDif2, m.lcDif3, m.lcLipsa, m.lcNetrimise, m.lcTrimise, m.lcErori, m.lcPJ) + WAIT CLEAR Return m.lcFiltru @@ -6032,6 +6045,16 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" * Mesajul era trunchiat la 41 de caractere This.cMesajFurnizor = SPACE(200) + * Caption de baza pentru bifele Diferente/Lipsa, refolosit de NumaraDiferente/SeteazaCaptionDiferente + This.pgfeFactura.page1.chkPJ.Tag = This.pgfeFactura.page1.chkPJ.Caption + This.pgfeFactura.page1.chkNetrimise.Tag = This.pgfeFactura.page1.chkNetrimise.Caption + This.pgfeFactura.page1.chkTrimise.Tag = This.pgfeFactura.page1.chkTrimise.Caption + This.pgfeFactura.page1.chkErori.Tag = This.pgfeFactura.page1.chkErori.Caption + This.pgfeFactura.page1.chkDiferente.Tag = This.pgfeFactura.page1.chkDiferente.Caption + This.pgfeFactura.page2.chkDiferente.Tag = This.pgfeFactura.page2.chkDiferente.Caption + This.pgfeFactura.page2.chkLipsaRegistru.Tag = This.pgfeFactura.page2.chkLipsaRegistru.Caption + This.pgfeFactura.page3.chkDiferente.Tag = This.pgfeFactura.page3.chkDiferente.Caption + This.pgfeFactura.page3.chkLipsaRegistru.Tag = This.pgfeFactura.page3.chkLipsaRegistru.Caption DODEFAULT() ENDPROC @@ -6044,6 +6067,147 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" Thisform.oAnaf.AnafeFacturaServer.lTest = m.tlTest ENDPROC + PROCEDURE NumaraDiferente + LPARAMETERS tcFiltruBaza1, tcFiltruBaza2, tcFiltruBaza3, tcDif1, tcDif2, tcDif3, tcLipsa, tcNetrimise, tcTrimise, tcErori, tcPJ + LOCAL lnActivePage, lcView, lcFiltruBaza, lcDif, llLipsa, lcSql, llSucces, lnDif, lnLipsa, lnNetrimise, lnTrimise, lnErori, lnPJ, lcCursor, llFaraBife, lnSelect, lnRec + lnActivePage = This.pgfeFactura.ActivePage + lnDif = 0 + lnLipsa = 0 + + *!* fara nicio bifa, cursorul afisat e chiar setul de baza: numaram local, fara interogare + DO CASE + CASE m.lnActivePage = 1 + lcCursor = 'crsFacturiEmise' + llFaraBife = EMPTY(This.pgfeFactura.page1.chkPJ.Value) AND EMPTY(This.pgfeFactura.page1.chkNetrimise.Value) ; + AND EMPTY(This.pgfeFactura.page1.chkTrimise.Value) AND EMPTY(This.pgfeFactura.page1.chkErori.Value) ; + AND EMPTY(This.pgfeFactura.page1.chkDiferente.Value) + CASE m.lnActivePage = 2 + lcCursor = 'crsFacturiTrimise' + llFaraBife = EMPTY(This.pgfeFactura.page3.chkDiferente.Value) AND EMPTY(This.pgfeFactura.page3.chkLipsaRegistru.Value) + CASE m.lnActivePage = 3 + lcCursor = 'crsFacturiPrimite' + llFaraBife = EMPTY(This.pgfeFactura.page2.chkDiferente.Value) AND EMPTY(This.pgfeFactura.page2.chkLipsaRegistru.Value) + OTHERWISE + RETURN + ENDCASE + + IF m.llFaraBife AND USED(m.lcCursor) + lnSelect = SELECT() + lnRec = RECNO(m.lcCursor) + IF m.lnActivePage = 1 + SELECT SUM(IIF(NVL(tip_persoana,1) = 1, 1, 0)) as npj, ; + SUM(IIF(NVL(trimis,0) = 0, 1, 0)) as nnetrimise, ; + SUM(IIF(NVL(trimis,0) = 1 AND EMPTY(NVL(data_raspuns, {})), 1, 0)) as ntrimise, ; + SUM(IIF(NVL(trimis,0) = 1 AND ALLTRIM(NVL(tip_mesaj_raspuns,'')) == 'ERORI FACTURA', 1, 0)) as nerori, ; + SUM(IIF(ISNULL(jtotctva) OR ABS(NVL(diferenta,0)) > 0.15, 1, 0)) as ndif ; + FROM crsFacturiEmise INTO CURSOR crsNumarBifeLocal NOFILTER + lnPJ = NVL(crsNumarBifeLocal.npj,0) + lnNetrimise = NVL(crsNumarBifeLocal.nnetrimise,0) + lnTrimise = NVL(crsNumarBifeLocal.ntrimise,0) + lnErori = NVL(crsNumarBifeLocal.nerori,0) + lnDif = NVL(crsNumarBifeLocal.ndif,0) + USE IN (SELECT('crsNumarBifeLocal')) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkNetrimise, m.lnNetrimise) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkTrimise, m.lnTrimise) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkErori, m.lnErori) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkPJ, m.lnPJ) + ELSE + SELECT SUM(IIF(!ISNULL(jtotctva) AND (ALLTRIM(NVL(nume_valuta,'RON')) <> 'RON' OR ABS(NVL(diferenta,0)) > 0.15), 1, 0)) as ndif, ; + SUM(IIF(ISNULL(jtotctva), 1, 0)) as nlipsa ; + FROM (m.lcCursor) INTO CURSOR crsNumarBifeLocal NOFILTER + lnDif = NVL(crsNumarBifeLocal.ndif,0) + lnLipsa = NVL(crsNumarBifeLocal.nlipsa,0) + USE IN (SELECT('crsNumarBifeLocal')) + IF m.lnActivePage = 2 + This.SeteazaCaptionDiferente(This.pgfeFactura.page3.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page3.chkLipsaRegistru, m.lnLipsa) + ELSE + This.SeteazaCaptionDiferente(This.pgfeFactura.page2.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page2.chkLipsaRegistru, m.lnLipsa) + ENDIF + ENDIF + SELECT (m.lcCursor) + IF m.lnRec > 0 AND m.lnRec <= RECCOUNT() + GO m.lnRec + ENDIF + SELECT (m.lnSelect) + RETURN + ENDIF + + * Pagina 1: fiecare bifa se numara independent pe filtrul de baza, indiferent de celelalte bife + IF m.lnActivePage = 1 + lnNetrimise = 0 + lnTrimise = 0 + lnErori = 0 + lnPJ = 0 + + IF !EMPTY(NVL(m.tcFiltruBaza1,'')) + lcSql = "select count(case when " + m.tcDif1 + " then 1 end) as ndif" + ; + ", count(case when " + m.tcNetrimise + " then 1 end) as nnetrimise" + ; + ", count(case when " + m.tcTrimise + " then 1 end) as ntrimise" + ; + ", count(case when " + m.tcErori + " then 1 end) as nerori" + ; + ", count(case when " + m.tcPJ + " then 1 end) as npj" + ; + " from anaf_vefactura_emis where 1=1 " + m.tcFiltruBaza1 + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsNumarDiferente') + IF m.llSucces + lnDif = NVL(crsNumarDiferente.ndif,0) + lnNetrimise = NVL(crsNumarDiferente.nnetrimise,0) + lnTrimise = NVL(crsNumarDiferente.ntrimise,0) + lnErori = NVL(crsNumarDiferente.nerori,0) + lnPJ = NVL(crsNumarDiferente.npj,0) + ENDIF + ENDIF + + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkNetrimise, m.lnNetrimise) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkTrimise, m.lnTrimise) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkErori, m.lnErori) + This.SeteazaCaptionDiferente(This.pgfeFactura.page1.chkPJ, m.lnPJ) + RETURN + ENDIF + + DO CASE + CASE m.lnActivePage = 2 + lcView = 'anaf_vefactura_trimis' + lcFiltruBaza = m.tcFiltruBaza3 + lcDif = m.tcDif3 + llLipsa = .T. + CASE m.lnActivePage = 3 + lcView = 'anaf_vefactura_primit' + lcFiltruBaza = m.tcFiltruBaza2 + lcDif = m.tcDif2 + llLipsa = .T. + OTHERWISE + RETURN + ENDCASE + + * Numarul se reseteaza pe 0 (caption fara paranteza) cand filtrul e gol sau interogarea esueaza + IF !EMPTY(NVL(m.lcFiltruBaza,'')) AND !EMPTY(NVL(m.lcDif,'')) + lcSql = "select count(case when " + m.lcDif + " then 1 end) as ndif" + ; + IIF(m.llLipsa, ", count(case when " + m.tcLipsa + " then 1 end) as nlipsa", "") + ; + " from " + m.lcView + " where 1=1 " + m.lcFiltruBaza + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsNumarDiferente') + IF m.llSucces + lnDif = NVL(crsNumarDiferente.ndif,0) + IF m.llLipsa + lnLipsa = NVL(crsNumarDiferente.nlipsa,0) + ENDIF + ENDIF + ENDIF + + DO CASE + CASE m.lnActivePage = 2 + This.SeteazaCaptionDiferente(This.pgfeFactura.page3.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page3.chkLipsaRegistru, m.lnLipsa) + CASE m.lnActivePage = 3 + This.SeteazaCaptionDiferente(This.pgfeFactura.page2.chkDiferente, m.lnDif) + This.SeteazaCaptionDiferente(This.pgfeFactura.page2.chkLipsaRegistru, m.lnLipsa) + ENDCASE + ENDPROC + PROCEDURE refreshdetaliifacturi Lparameters tcTip * tcTip: EMISE/TRIMISE/PRIMITE @@ -6119,6 +6283,13 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC + PROCEDURE SeteazaCaptionDiferente + LPARAMETERS toCheck, tnNumar + LOCAL lcBaza + lcBaza = IIF(EMPTY(NVL(toCheck.Tag,'')), toCheck.Caption, toCheck.Tag) + toCheck.Caption = ALLTRIM(lcBaza) + IIF(NVL(tnNumar,0) > 0, ' (' + ALLTRIM(STR(tnNumar)) + ')', '') + ENDPROC + PROCEDURE Show LPARAMETERS nStyle DODEFAULT(nStyle) @@ -6165,6 +6336,8 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" this.pgfeFactura.page2.grdFacturiPrimite.HeaderHeight = 35 this.pgfeFactura.page3.grdFacturiTrimise.HeaderHeight = 35 + *!* numerele de pe bife apar de la deschidere, numarate local din cursorul deja adus + This.NumaraDiferente() ENDPROC @@ -8884,6 +9057,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" *m: importmodifica *m: listarenir *m: modificanote + *m: numaradiferenteimport *m: scrienote *p: lprimite *p: nidborderou @@ -9098,12 +9272,12 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" BackStyle = 1, ; Caption = "Cu diferente Reg. TVA", ; Height = 18, ; - Left = 180, ; + Left = 190, ; Name = "chkDiferente", ; Style = 0, ; Top = 35, ; Value = .F., ; - Width = 159 + Width = 191 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkDistribuieDiscount' AS _checkbox WITH ; @@ -9136,7 +9310,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" Style = 0, ; Top = 35, ; Value = .F., ; - Width = 159 + Width = 174 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkTVAIncasare' AS _checkbox WITH ; @@ -11531,7 +11705,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE do_cauta - Local lcCond, lcDif, lcLipsa + Local lcCond, lcDif, lcLipsa, lcFiltruBaza lcFiltru = '' && filtru facturi primite * DACA FILTRUL NU CONTINE DATA_ACT, SELECTEZ DOAR INREGISTRARILE DIN LUNA CURENTA PANA LA ZI @@ -11547,6 +11721,14 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" 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 + IF LEN(THISFORM.filtru_pretty)>0 + lcFiltru = m.lcFiltru + " and (" + ALLTRIM(THISFORM.filtru_pretty) + ")" + ENDIF + + * Filtrul de baza (fara chkDiferente/chkLipsaRegistru), pentru numarul independent din caption + lcFiltruBaza = m.lcFiltru + * Bifele Diferente / Lipsa din registrul de TVA lcLipsa = [(jtotctva is null)] lcDif = [(jtotctva is not null and (NVL(nume_valuta,'RON') <> 'RON' or ABS(decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00))) > 0.15))] @@ -11561,11 +11743,6 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" lcFiltru = m.lcFiltru + [ and (] + m.lcCond + [)] ENDIF - * Filtre buton cautare - IF LEN(THISFORM.filtru_pretty)>0 - lcFiltru = m.lcFiltru + " and (" + ALLTRIM(THISFORM.filtru_pretty) + ")" - ENDIF - If Empty(m.lcFiltru) aMessagebox("Alegeti un criteriu!",0+48,"Atentie") Return @@ -11584,6 +11761,8 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" ENDIF + This.NumaraDiferenteImport(m.lcFiltruBaza, m.lcDif, m.lcLipsa) + Return m.lcFiltru ENDPROC @@ -12988,6 +13167,10 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" this.grdFacturi.SetAll("DynamicForeColor","IIF(creditnote = 1, RGB(225,0,0), RGB(0,0,0))", "Column") this.gridextra1.setup() this.gridextra2.setup() + + * Caption de baza pentru bifele Diferente/Lipsa, refolosit de NumaraDiferenteImport + This.chkDiferente.Tag = This.chkDiferente.Caption + This.chkLipsaRegistru.Tag = This.chkLipsaRegistru.Caption ENDPROC PROCEDURE KeyPress @@ -13179,6 +13362,51 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC + PROCEDURE NumaraDiferenteImport + LPARAMETERS tcFiltruBaza, tcDif, tcLipsa + LOCAL lcView, lcSql, llSucces, lnDif, lnLipsa, lnSelect, lnRec + lnDif = 0 + lnLipsa = 0 + + *!* fara nicio bifa, cursorul afisat e chiar setul de baza: numaram local, fara interogare + IF EMPTY(This.chkDiferente.Value) AND EMPTY(This.chkLipsaRegistru.Value) AND USED('crsFacturi') + lnSelect = SELECT() + lnRec = RECNO('crsFacturi') + SELECT SUM(IIF(!ISNULL(jtotctva) AND (ALLTRIM(NVL(nume_valuta,'RON')) <> 'RON' OR ABS(NVL(diferenta,0)) > 0.15), 1, 0)) as ndif, ; + SUM(IIF(ISNULL(jtotctva), 1, 0)) as nlipsa ; + FROM crsFacturi INTO CURSOR crsNumarBifeLocal NOFILTER + lnDif = NVL(crsNumarBifeLocal.ndif,0) + lnLipsa = NVL(crsNumarBifeLocal.nlipsa,0) + USE IN (SELECT('crsNumarBifeLocal')) + This.chkDiferente.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkDiferente.Tag,'')), This.chkDiferente.Caption, This.chkDiferente.Tag)) + IIF(m.lnDif > 0, ' (' + ALLTRIM(STR(m.lnDif)) + ')', '') + This.chkLipsaRegistru.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkLipsaRegistru.Tag,'')), This.chkLipsaRegistru.Caption, This.chkLipsaRegistru.Tag)) + IIF(m.lnLipsa > 0, ' (' + ALLTRIM(STR(m.lnLipsa)) + ')', '') + SELECT crsFacturi + IF m.lnRec > 0 AND m.lnRec <= RECCOUNT() + GO m.lnRec + ENDIF + SELECT (m.lnSelect) + RETURN + ENDIF + + lcView = IIF(This.lPrimite, 'anaf_vefactura_primit', 'anaf_vefactura_trimis') + + * Numarul se reseteaza pe 0 (caption fara paranteza) cand filtrul e gol sau interogarea esueaza + IF !EMPTY(NVL(m.tcFiltruBaza,'')) AND !EMPTY(NVL(m.tcDif,'')) + lcSql = "select count(case when " + m.tcDif + " then 1 end) as ndif" + ; + ", count(case when " + m.tcLipsa + " then 1 end) as nlipsa" + ; + " from " + m.lcView + " where 1=1 " + m.tcFiltruBaza + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsNumarDiferenteImport') + IF m.llSucces + lnDif = NVL(crsNumarDiferenteImport.ndif,0) + lnLipsa = NVL(crsNumarDiferenteImport.nlipsa,0) + ENDIF + ENDIF + + This.chkDiferente.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkDiferente.Tag,'')), This.chkDiferente.Caption, This.chkDiferente.Tag)) + IIF(m.lnDif > 0, ' (' + ALLTRIM(STR(m.lnDif)) + ')', '') + This.chkLipsaRegistru.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkLipsaRegistru.Tag,'')), This.chkLipsaRegistru.Caption, This.chkLipsaRegistru.Tag)) + IIF(m.lnLipsa > 0, ' (' + ALLTRIM(STR(m.lnLipsa)) + ')', '') + ENDPROC + PROCEDURE scrienote ENDPROC @@ -13194,6 +13422,8 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" Thisform.CompleteazaFactura() && cap factura Thisform.actualizeaza_grid2() Thisform.CompleteazaDetaliiFactura() && detalii factura + *!* numerele de pe bife apar de la deschidere, numarate local din cursorul deja adus + This.NumaraDiferenteImport() ENDPROC diff --git a/clase/omodificari.vc2 b/clase/omodificari.vc2 index 1f09ead..a6efe21 100644 --- a/clase/omodificari.vc2 +++ b/clase/omodificari.vc2 @@ -13065,13 +13065,16 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE do_modifica_explicatie_tva + LOCAL lnCotaFiltru If tact.cu_tva = 1 *!* modificare ROACONT v 2.4.4 + *!* filtreaza explicatiile dupa cota TVA a liniei curente; proc_tva e in forma 1.19, cota 0/gol = fara filtru + lnCotaFiltru = Round((Nvl(tact.proc_tva,0) - 1) * 100, 2) If TYPE('tact.tipnota') = 'N' AND tact.tipnota = 1 *!* explicatii TVA exigibile din JC ( 1 ), JV ( 3 ) sau toate ( 5 ) - locauta = caut_explicatie_tva(Nvl(tact.id_jtva_coloana,-1),,,iif(tact.scc=[4428],1,iif(tact.scd=[4428],3,5))) + locauta = caut_explicatie_tva(Nvl(tact.id_jtva_coloana,-1),,,iif(tact.scc=[4428],1,iif(tact.scd=[4428],3,5)),lnCotaFiltru) Else - locauta = caut_explicatie_tva(Nvl(tact.id_jtva_coloana,-1)) + locauta = caut_explicatie_tva(Nvl(tact.id_jtva_coloana,-1),,,,lnCotaFiltru) Endif *!* locauta = caut_explicatie_tva(Nvl(tact.id_jtva_coloana,-1)) *!* modificare ROACONT v 2.4.4 ^ diff --git a/clase/overificari.vc2 b/clase/overificari.vc2 index 96c5bb6..2aa71bc 100644 --- a/clase/overificari.vc2 +++ b/clase/overificari.vc2 @@ -3063,6 +3063,31 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="_grdbase1.cDataOraV.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_grdbase1.cUtilV.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_grdbase1.cUtilV.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataOravAnaf.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataOravAnaf.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cTvaIncasare.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cTvaIncasare.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cTvaIncasare._checkbox1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cSplitTva.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cSplitTva.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cSplitTva._checkbox1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cInactiv.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cInactiv.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cInactiv._checkbox1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInceputScpTva.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInceputScpTva.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitScpTva.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitScpTva.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataAnulImpScpTva.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataAnulImpScpTva.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInceputTvaInc.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInceputTvaInc.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitTvaInc.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitTvaInc.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInactivare.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataInactivare.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataReactivare.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_grdbase1.cDataReactivare.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="Gridextra1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblInfo" UniqueID="" Timestamp="" /> @@ -3112,7 +3137,7 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" ADD OBJECT '_grdbase1' AS _grdbase WITH ; Anchor = 15, ; - ColumnCount = 16, ; + ColumnCount = 27, ; DeleteMark = .F., ; HeaderHeight = 32, ; Height = 190, ; @@ -3157,19 +3182,19 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Column6.ControlSource = "codpostal", ; Column6.Name = "cCodPostal", ; Column6.ReadOnly = .T., ; - Column6.Visible = .T., ; + Column6.Visible = .F., ; Column6.Width = 75, ; Column7.ColumnOrder = 11, ; Column7.ControlSource = "telefon", ; Column7.Name = "cTelefon", ; Column7.ReadOnly = .T., ; - Column7.Visible = .T., ; + Column7.Visible = .F., ; Column7.Width = 75, ; Column8.ColumnOrder = 12, ; Column8.ControlSource = "fax", ; Column8.Name = "cFax", ; Column8.ReadOnly = .T., ; - Column8.Visible = .T., ; + Column8.Visible = .F., ; Column8.Width = 75, ; Column9.ColumnOrder = 6, ; Column9.ControlSource = "platitortvavies", ; @@ -3177,7 +3202,7 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Column9.Name = "cPlatitorTVAVies", ; Column9.ReadOnly = .T., ; Column9.Sparse = .F., ; - Column9.Visible = .T., ; + Column9.Visible = .F., ; Column9.Width = 54, ; Column10.ColumnOrder = 5, ; Column10.ControlSource = "datatvamfin", ; @@ -3210,7 +3235,57 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Column16.ControlSource = "utilv", ; Column16.Name = "cUtilV", ; Column16.ReadOnly = .T., ; - Column16.Width = 114 + Column16.Width = 114, ; + Column17.ControlSource = "dataorav_anaf", ; + Column17.Name = "cDataOravAnaf", ; + Column17.ReadOnly = .T., ; + Column17.Width = 85, ; + Column18.ControlSource = "tvaincasare", ; + Column18.CurrentControl = "_checkbox1", ; + Column18.Name = "cTvaIncasare", ; + Column18.ReadOnly = .T., ; + Column18.Sparse = .F., ; + Column18.Width = 54, ; + Column19.ControlSource = "splittva", ; + Column19.CurrentControl = "_checkbox1", ; + Column19.Name = "cSplitTva", ; + Column19.ReadOnly = .T., ; + Column19.Sparse = .F., ; + Column19.Width = 54, ; + Column20.ControlSource = "inactiv", ; + Column20.CurrentControl = "_checkbox1", ; + Column20.Name = "cInactiv", ; + Column20.ReadOnly = .T., ; + Column20.Sparse = .F., ; + Column20.Width = 54, ; + Column21.ControlSource = "data_inceput_scptva", ; + Column21.Name = "cDataInceputScpTva", ; + Column21.ReadOnly = .T., ; + Column21.Width = 85, ; + Column22.ControlSource = "data_sfarsit_scptva", ; + Column22.Name = "cDataSfarsitScpTva", ; + Column22.ReadOnly = .T., ; + Column22.Width = 85, ; + Column23.ControlSource = "data_anul_imp_scptva", ; + Column23.Name = "cDataAnulImpScpTva", ; + Column23.ReadOnly = .T., ; + Column23.Width = 85, ; + Column24.ControlSource = "data_inceput_tvainc", ; + Column24.Name = "cDataInceputTvaInc", ; + Column24.ReadOnly = .T., ; + Column24.Width = 85, ; + Column25.ControlSource = "data_sfarsit_tvainc", ; + Column25.Name = "cDataSfarsitTvaInc", ; + Column25.ReadOnly = .T., ; + Column25.Width = 85, ; + Column26.ControlSource = "data_inactivare", ; + Column26.Name = "cDataInactivare", ; + Column26.ReadOnly = .T., ; + Column26.Width = 85, ; + Column27.ControlSource = "data_reactivare", ; + Column27.Name = "cDataReactivare", ; + Column27.ReadOnly = .T., ; + Column27.Width = 85 *< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" /> ADD OBJECT '_grdbase1.cAdresa.Header1' AS header WITH ; @@ -3261,6 +3336,70 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Visible = .T. *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cDataAnulImpScpTva.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Anulare scutire TVA", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataAnulImpScpTva.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataInactivare.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Data inactivare", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataInactivare.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataInceputScpTva.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Inceput scutire TVA", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataInceputScpTva.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataInceputTvaInc.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Inceput TVA incasare", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataInceputTvaInc.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cDataOra.Header1' AS header WITH ; Alignment = 2, ; Caption = "Creat la", ; @@ -3289,6 +3428,69 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Name = "Text1" *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cDataOravAnaf.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Data ANAF", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataOravAnaf.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataReactivare.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Data reactivare", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataReactivare.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Sfarsit scutire TVA", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT '_grdbase1.cDataSfarsitTvaInc.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Sfarsit TVA incasare", ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cDataSfarsitTvaInc.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .T. + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cDataTVAMfin.Header1' AS header WITH ; Alignment = 2, ; Caption = "Data TVA MFIN", ; @@ -3337,6 +3539,29 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Visible = .T. *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cInactiv._checkbox1' AS _checkbox WITH ; + Alignment = 2, ; + Caption = "", ; + Left = 19, ; + Name = "_checkbox1", ; + ReadOnly = .T., ; + Top = 96 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> + + ADD OBJECT '_grdbase1.cInactiv.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Inactiv", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cInactiv.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1" + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cJudet.Header1' AS header WITH ; Alignment = 2, ; Caption = "Judet", ; @@ -3418,6 +3643,29 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Visible = .T. *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cSplitTva._checkbox1' AS _checkbox WITH ; + Alignment = 2, ; + Caption = "", ; + Left = 19, ; + Name = "_checkbox1", ; + ReadOnly = .T., ; + Top = 120 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> + + ADD OBJECT '_grdbase1.cSplitTva.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "Split TVA", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cSplitTva.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1" + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cStare.Header1' AS header WITH ; Alignment = 2, ; Caption = "Stare", ; @@ -3448,6 +3696,29 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" Visible = .T. *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cTvaIncasare._checkbox1' AS _checkbox WITH ; + Alignment = 2, ; + Caption = "", ; + Left = 19, ; + Name = "_checkbox1", ; + ReadOnly = .T., ; + Top = 144 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> + + ADD OBJECT '_grdbase1.cTvaIncasare.Header1' AS header WITH ; + Alignment = 2, ; + Caption = "TVA incasare", ; + Name = "Header1" + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT '_grdbase1.cTvaIncasare.Text1' AS textbox WITH ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1" + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_grdbase1.cUtil.Header1' AS header WITH ; Alignment = 2, ; Caption = "Creat de", ; diff --git a/docs/scripturi-migrare-db.md b/docs/scripturi-migrare-db.md index ee070df..8c2b955 100644 --- a/docs/scripturi-migrare-db.md +++ b/docs/scripturi-migrare-db.md @@ -16,6 +16,13 @@ Reguli confirmate de Marius (24.07.2026): final (conventia existenta). - Aplicarea prin ODBC/`goExecutor`: sintaxa SQL*Plus `exec pachet.procedura(...)` nu functioneaza — foloseste `begin pachet.procedura(...); end;`. +- **Rularea manuala se face conectat pe schema tinta** (`CONTAFIN_ORACLE` pentru `co_`, schema firmei + pentru `ff_`), niciodata cu un user de lucru. DDL-ul neprefixat (`create or replace package ...`) + merge pe schema conexiunii: pe alt user iese `PLS-00304` si ramane un obiect orfan, iar pachetul + tinta ramane neschimbat. In acelasi script, DML-ul pe tabele cu sinonim public nimereste tabela + reala si pare ca totul a mers — verifica intotdeauna iesirea sqlplus si `all_objects`. + `PACK_UPDATE` face `CONNECT /@ROA` real per schema (`UpdateSchemaSQLPLUS`, parola + din `SERVER_INFO`), deci scriptul neprefixat e corect pentru livrare. ## Continutul unui script @@ -24,6 +31,8 @@ Reguli confirmate de Marius (24.07.2026): - **Fara `select` de raportare in script** — nu-l citeste nimeni la aplicare si poate da eroare. Verificarile se fac inainte, separat, pe schema de lucru. - **Idempotent**: rulat de doua ori nu mai schimba nimic (`merge`, `where is null`). +- **Un pachet sta singur in scriptul lui**, fara alt DDL sau DML alaturi: modificarile de tabele si + curateniile de date merg in scripturi separate, cu numar propriu. ## Compatibilitate cu serverele clientilor diff --git a/docs/todos.txt b/docs/todos.txt index fdbd728..9fb78d3 100644 --- a/docs/todos.txt +++ b/docs/todos.txt @@ -32,4 +32,10 @@ Ca sa vand un articol, trebuie sa il introduc in nomenclatorul de articole oblig Am vazut la SAGA (alt ERP popular) ca in nomenclatorul de articole au cateva coloane de multe preturi, probabil pentru mai multe liste de preturi (todos-articole-preturi-saga.png) -Ideea este sa se poata face configurarea mult mai repede, eficient, dintr-un singur loc, ca sa se poata face factura mai rapid. Acum este nevoie de mult suport tehnic/instructaj si configurari pana se ajunge la facturare, si daca apare un articol diferit (ex: vanzare auto, in loc de marfa in mod normal), trebuie creata o politica noua de preturi, ca sa ii spun ce nota contabila de vanzare (4111 = 7xx) sa aiba aiba articolul respectiv. \ No newline at end of file +Ideea este sa se poata face configurarea mult mai repede, eficient, dintr-un singur loc, ca sa se poata face factura mai rapid. Acum este nevoie de mult suport tehnic/instructaj si configurari pana se ajunge la facturare, si daca apare un articol diferit (ex: vanzare auto, in loc de marfa in mod normal), trebuie creata o politica noua de preturi, ca sa ii spun ce nota contabila de vanzare (4111 = 7xx) sa aiba aiba articolul respectiv. + +13. ROAFACTURARE - FORMULARUL DE FACTURARE SA INCLUDA SI FORMULARUL DATE_FACTURA/DATE_AVIZ ETC. SI SA NU MAI INCARCE DE PE SERVER TOATE ARTICOLELE DIN TOATE POLITICELE DE PRETURI - INTRUCAT ESTE POSIBIL SA FIE SI MII DE ARTICOLE SI DUREAZA MULT SA LE ADUCA DE PE SERVER. AM INCEPUT DEJA MAI DEMULT UN FORMULAR UNIFICAT, DAR ERA MULT DE INTEGRAT DIN FORMULARUL VECHI. +FRONTEND SIMILAR PE CARE IL DORESC ESTE IN ROAACPRO > FACTURA, SAU IN IMPORTUL DE EFACTURA, IN CARE AM INTEGRAT DATELE FACTURI, DOAR CA FACTURAREA DIN ROAFACTURARE ESTE MAI COMPLEXA - ESTE FOLOSITA SI PENTRU POLITICI DE PRETURI SI PENTRU CONTRACT/COMANDA/AVIZ/RETUR ETC. +INTERESUL MEU ESTE SA SIMPLIFIC INTERFATA, SA FIE MAI EFICIENTA, SA NU FIE 2 FORMULARE PENTRU FACTURA, SA FAC MAI RAPID. + +14. ROACONT - efactura se salveaza xml detaliat si xml zip efactura si ocupa mult spatiu. vreau sa stiu cand nu mai este nevoie de xml detaliat si daca se poate curata tabelul ca sa nu mai ocupe spatiu, cel putin pentru facturi mai vechi. este important zip pentru ca este factura originala anaf. \ No newline at end of file diff --git a/programe/ocautare.prg b/programe/ocautare.prg index 855c9ff..bdf796d 100644 --- a/programe/ocautare.prg +++ b/programe/ocautare.prg @@ -197,6 +197,9 @@ Procedure ANAF_StarePartener Addproperty(loOut, "dSfarsitScpTVA", Iif(Pemstatus(loRezANAF, 'dSfarsitScpTVA', 5), Nvl(loRezANAF.dSfarsitScpTVA, {}), {})) Addproperty(loOut, "dAnulareScpTVA", Iif(Pemstatus(loRezANAF, 'dAnulareScpTVA', 5), Nvl(loRezANAF.dAnulareScpTVA, {}), {})) Addproperty(loOut, "cMesajScpTVA", Iif(Pemstatus(loRezANAF, 'cMesajScpTVA', 5), Alltrim(Nvl(loRezANAF.cMesajScpTVA, '')), '')) + Addproperty(loOut, "lTvaIncasareANAF", Iif(Pemstatus(loRezANAF, 'lTvaIncasare', 5), Nvl(loRezANAF.lTvaIncasare, .F.), .F.)) + Addproperty(loOut, "dInceputTvaInc", Iif(Pemstatus(loRezANAF, 'dInceputTvaInc', 5), Nvl(loRezANAF.dInceputTvaInc, {}), {})) + Addproperty(loOut, "dSfarsitTvaInc", Iif(Pemstatus(loRezANAF, 'dSfarsitTvaInc', 5), Nvl(loRezANAF.dSfarsitTvaInc, {}), {})) Addproperty(loOut, "dData", m.ldData) Addproperty(loOut, "cSursa", Iif(Pemstatus(loRezANAF, 'cSursa', 5), loRezANAF.cSursa, 'ANAF')) Addproperty(loOut, "dDataSursa", Iif(Pemstatus(loRezANAF, 'dDataSursa', 5), Nvl(loRezANAF.dDataSursa, {}), {})) @@ -233,6 +236,9 @@ Procedure ANAF_CitesteDinIstoric Addproperty(loRez, "dSfarsitScpTVA", Nvl(data_sfarsit_ScpTVA, {})) Addproperty(loRez, "dAnulareScpTVA", Nvl(data_anul_imp_ScpTVA, {})) Addproperty(loRez, "cMesajScpTVA", Nvl(mesaj_ScpTVA, "")) + Addproperty(loRez, "lTvaIncasare", Nvl(statusTvaIncasare, .F.)) + Addproperty(loRez, "dInceputTvaInc", Nvl(dataInceputTvaInc, {})) + Addproperty(loRez, "dSfarsitTvaInc", Nvl(dataSfarsitTvaInc, {})) Addproperty(loRez, "cSursa", m.tcSursa) Addproperty(loRez, "dDataSursa", Nvl(data_sursa, {})) Endif @@ -844,7 +850,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom PROCEDURE TextStare Lparameters toStare, tcPerioada - Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '') + Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '') + Iif(toStare.lTvaIncasareANAF, ', TVA la incasare', '') ENDPROC PROCEDURE SufixPerioadaTVA @@ -913,6 +919,11 @@ DEFINE CLASS anaf_verif_cautare AS Custom If !Empty(toStare.cMesajScpTVA) lcTxt = m.lcTxt + 'Mesaj ANAF: ' + Alltrim(toStare.cMesajScpTVA) + Chr(13) Endif + If toStare.lTvaIncasareANAF + lcTxt = m.lcTxt + 'TVA la incasare' + ; + Iif(!Empty(toStare.dInceputTvaInc), ' din ' + Dtoc(toStare.dInceputTvaInc), '') + ; + Iif(!Empty(toStare.dSfarsitTvaInc), ' pana la ' + Dtoc(toStare.dSfarsitTvaInc), '') + Chr(13) + Endif If !Empty(m.lcTxt) lcTxt = m.lcTxt + Chr(13) Endif @@ -3161,7 +3172,7 @@ Endproc && caut_politici_curente_util ************************************** SFARSIT: caut_politici_curente_util ************************************** ***************************************** INCEPUT:caut_explicatie_tva ******************************************* Function caut_explicatie_tva - Parameters tnIdJtva, tnPornire, tlDesktop, tlTipEx + Parameters tnIdJtva, tnPornire, tlDesktop, tlTipEx, tnCotaTva *!* tlTipEx = 0 - toate *!* = 1 - doar TVA exigibil din JC *!* = 2 - doar TVA neexigibil din JC @@ -3207,6 +3218,10 @@ Function caut_explicatie_tva lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; [id_jtva_ex is not null)] Endcase + *** filtru suplimentar pe cota TVA a liniei curente; fara procent (0/gol) se pastreaza lista completa + If Vartype(tnCotaTva) = 'N' And tnCotaTva > 0 + lcFiltruOriginal = lcFiltruOriginal + [ and cota_tva = ] + Alltrim(Str(tnCotaTva, 10, 2)) + Endif *!* *!* If tnIdJtva > 0 *!* *!* lcFiltruOriginal = [jc * 4 + jv * 2 + decode(afisat,0,0,1) in ] + ; *!* *!* [(select jc * 4 + jv * 2 + decode(afisat,0,0,1) from ] + gcS + [.vjtva_coloane ] + ; diff --git a/programe/oproceduri_comune.prg b/programe/oproceduri_comune.prg index 1aca5c5..1f00c2d 100644 --- a/programe/oproceduri_comune.prg +++ b/programe/oproceduri_comune.prg @@ -4618,7 +4618,9 @@ Procedure verificare_parteneri_istoric Endif Text To lcSql Noshow - select id, dataora, id_util, dataorav, id_utilv, cod_fiscal, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, stare, platitortvavies, util, utilv + select id, dataora, id_util, dataorav, id_utilv, cod_fiscal, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, stare, platitortvavies, + dataorav_anaf, tvaincasare, splittva, inactiv, data_inceput_scptva, data_sfarsit_scptva, data_anul_imp_scptva, data_inceput_tvainc, data_sfarsit_tvainc, data_inactivare, data_reactivare, + util, utilv from vistoric_coduri_fiscale where cod_fiscal = ?pcCodFiscal Endtext diff --git a/programe/validare.prg b/programe/validare.prg index 99d1d84..1e29af0 100644 --- a/programe/validare.prg +++ b/programe/validare.prg @@ -1741,6 +1741,9 @@ Function ANAF_VerdictDinCursor Addproperty(loResult, "dSfarsitScpTVA", Nvl(data_sfarsit_ScpTVA, {})) Addproperty(loResult, "dAnulareScpTVA", Nvl(data_anul_imp_ScpTVA, {})) Addproperty(loResult, "cMesajScpTVA", Nvl(mesaj_ScpTVA, "")) + Addproperty(loResult, "lTvaIncasare", Nvl(tvaincasare, .F.)) + Addproperty(loResult, "dInceputTvaInc", Nvl(dataInceputTvaInc, {})) + Addproperty(loResult, "dSfarsitTvaInc", Nvl(dataSfarsitTvaInc, {})) Else If m.lnReccountTemp = 1 And Empty(denumire) And Nvl(cui, 0) = m.tnCuiCautat tlNegasit = .T. @@ -2669,10 +2672,10 @@ Define Class VerificareANAF As Custom lnRecnoInit = Recno() Scan For cui <> 0 And Left(Nvl(sursa, ''), 5) <> 'CACHE' pcCodFiscal = Transform(cui) - pcFirma = Nvl(firma, '') - pcAdresa = Nvl(adresa, '') - pcJudet = Nvl(judet, '') - pcRegCom = Nvl(nrRegCom, '') + pcFirma = Alltrim(Nvl(firma, '')) + pcAdresa = Alltrim(Nvl(adresa, '')) + pcJudet = Alltrim(Nvl(judet, '')) + pcRegCom = Alltrim(Nvl(nrRegCom, '')) pcCodPostal = '' pcTelefon = '' pcFax = ''