# Diff - conturi 667/709 + analitice pe articol (COMUN) Data: 2026-09-17. Fisiere SVN de comis: `programe/ofacturare_comun.prg`, `clase/onom_articole.vcx` + `.vct` (regenerate din `.vc2` prin txt2vcx; write-back verificat byte-identic CRLF-normalizat). ```diff diff --git a/clase/onom_articole.vc2 b/clase/onom_articole.vc2 index 613f562..a263fd3 100644 --- a/clase/onom_articole.vc2 +++ b/clase/onom_articole.vc2 @@ -712,7 +712,9 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_proc_tvav" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_venit" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scd" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scd.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scc" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scc.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_cont_dedus" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_pageframe1.Page3.Lb_info_conturi" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="Cus_odata_parteneri_articole_coduri" UniqueID="" Timestamp="" /> @@ -1586,6 +1588,18 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" Lb_simplu1.Name = "Lb_simplu1" *< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" /> + ADD OBJECT '_pageframe1.Page3.Clb_tx_scc.Text1' AS textbox WITH ; + Format = "!k", ; + Height = 23, ; + Left = 302, ; + MaxLength = 4, ; + Name = "Text1", ; + TabIndex = 2, ; + ToolTipText = "Cont analitic (optional)", ; + Top = 3, ; + Width = 74 + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_pageframe1.Page3.Clb_tx_scd' AS clb_tx_simplu WITH ; Height = 29, ; Left = 9, ; @@ -1604,6 +1618,18 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" Lb_simplu1.Name = "Lb_simplu1" *< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" /> + ADD OBJECT '_pageframe1.Page3.Clb_tx_scd.Text1' AS textbox WITH ; + Format = "!k", ; + Height = 23, ; + Left = 302, ; + MaxLength = 4, ; + Name = "Text1", ; + TabIndex = 2, ; + ToolTipText = "Cont analitic (optional)", ; + Top = 3, ; + Width = 74 + *< END OBJECT: BaseClass="textbox" /> + ADD OBJECT '_pageframe1.Page3.Lb_info_conturi' AS _label WITH ; Caption = "Necompletate: debit 4111, credit contul de venit al articolului", ; Left = 9, ; @@ -1934,6 +1960,8 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" This._pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.ControlSource = "Thisform.oPretNom.nPretCtva" This._pageframe1.Page3.Clb_tx_scd.Text_simplu1.ControlSource = "Thisform.oPretNom.cScd" This._pageframe1.Page3.Clb_tx_scc.Text_simplu1.ControlSource = "Thisform.oPretNom.cScc" + This._pageframe1.Page3.Clb_tx_scd.Text1.ControlSource = "Thisform.oPretNom.cAscd" + This._pageframe1.Page3.Clb_tx_scc.Text1.ControlSource = "Thisform.oPretNom.cAscc" This._pageframe1.Page3.Clb_tx_cont_dedus.Text_simplu1.ControlSource = "Thisform.oPretNom.cContDedus" If Used('crsvenchelt') Use In crsvenchelt diff --git a/programe/ofacturare_comun.prg b/programe/ofacturare_comun.prg index 7b6b46b..efd2002 100644 --- a/programe/ofacturare_comun.prg +++ b/programe/ofacturare_comun.prg @@ -74,6 +74,10 @@ *!* marius.mutu *!* + verifica_cont_venit_linie - verificare prietenoasa a contului de venit rezolvat pentru o linie *!* de factura, la adaugarea articolului +*!* 17.09.2026 +*!* agent +*!* cus_pret_nomenclator: conturi analitice (cAscd/cAscc) in nota de vanzare a articolului; +*!* apelul RPC devine pack_preturi.gaseste_creeaza_nota_vanzare (overload 6 arg cu analitice) *************************************************************************************************************** **** Clase: @@ -2375,6 +2379,8 @@ Define Class cus_pret_nomenclator As Custom nIdNota = .NULL. cScd = [] cScc = [] + cAscd = [] + cAscc = [] cContDedus = [] cEroare = [] @@ -2410,6 +2416,8 @@ Define Class cus_pret_nomenclator As Custom This.nIdNota = .NULL. This.cScd = [] This.cScc = [] + This.cAscd = [] + This.cAscc = [] This.cContDedus = [] If This.asigura_politica() <= 0 Return .F. @@ -2450,7 +2458,7 @@ Define Class cus_pret_nomenclator As Custom Use In crspolart Endif If !Isnull(This.nIdNota) - lcSql = [select n.scd, n.scc from crm_note_vanzari v, note_contabile n ] + ; + lcSql = [select n.scd, n.ascd, n.scc, n.ascc from crm_note_vanzari v, note_contabile n ] + ; [where v.id_nota = ] + Alltrim(Str(This.nIdNota)) + [ and n.id_set = v.id_set] If Used('crsnotapol') Use In crsnotapol @@ -2459,6 +2467,8 @@ Define Class cus_pret_nomenclator As Custom If lnSucces >= 0 And Reccount('crsnotapol') > 0 This.cScd = Alltrim(Nvl(crsnotapol.scd,[])) This.cScc = Alltrim(Nvl(crsnotapol.scc,[])) + This.cAscd = Alltrim(Nvl(crsnotapol.ascd,[])) + This.cAscc = Alltrim(Nvl(crsnotapol.ascc,[])) Endif If Used('crsnotapol') Use In crsnotapol @@ -2482,11 +2492,20 @@ Define Class cus_pret_nomenclator As Custom * valideaza conturile si pretul curente; mesaj + .F. la refuz Procedure valideaza This.cEroare = [] - If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc)) - This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] + If !Empty(This.cAscd) And Empty(This.cScd) + This.cEroare = [Contul analitic debitor nu poate fi completat fara contul sintetic debitor.] Else - If This.nPretFtva < 0 Or This.nPretCtva < 0 - This.cEroare = [Pretul nu poate fi negativ.] + If !Empty(This.cAscc) And Empty(This.cScc) + This.cEroare = [Contul analitic creditor nu poate fi completat fara contul sintetic creditor.] + Endif + Endif + If Empty(This.cEroare) + If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc)) + This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] + Else + If This.nPretFtva < 0 Or This.nPretCtva < 0 + This.cEroare = [Pretul nu poate fi negativ.] + Endif Endif Endif If !Empty(This.cEroare) @@ -2505,14 +2524,16 @@ Define Class cus_pret_nomenclator As Custom Return .F. Endif If !Empty(This.cScd) And !Empty(This.cScc) - Private pcScd, pcScc, pnIdUtil + Private pcScd, pcScc, pcAscd, pcAscc, pnIdUtil pcScd = This.cScd pcScc = This.cScc + pcAscd = This.cAscd + pcAscc = This.cAscc pnIdUtil = gnIdUtil pnIdNota = 0 - lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] + lcSql = [begin pack_preturi.gaseste_creeaza_nota_vanzare(?pcScd,?pcAscd,?pcScc,?pcAscc,?pnIdUtil,?@pnIdNota); end;] lnSucces = goExecutor.oExecute(lcSql) - Release pcScd, pcScc, pnIdUtil + Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota @@ -2555,7 +2576,9 @@ Define Class cus_pret_nomenclator As Custom Local lcSql, lnSucces This.cScd = [] This.cScc = [] - lcSql = [select n.scd, n.scc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ; + This.cAscd = [] + This.cAscc = [] + lcSql = [select n.scd, n.ascd, n.scc, n.ascc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ; [where p.id_pol = ] + Alltrim(Str(tnIdPol)) + [ and v.id_nota = p.id_nota and n.id_set = v.id_set] If Used('crsnotapolstoc') Use In crsnotapolstoc @@ -2564,6 +2587,8 @@ Define Class cus_pret_nomenclator As Custom If lnSucces >= 0 And Reccount('crsnotapolstoc') > 0 This.cScd = Alltrim(Nvl(crsnotapolstoc.scd,[])) This.cScc = Alltrim(Nvl(crsnotapolstoc.scc,[])) + This.cAscd = Alltrim(Nvl(crsnotapolstoc.ascd,[])) + This.cAscc = Alltrim(Nvl(crsnotapolstoc.ascc,[])) Endif If Used('crsnotapolstoc') Use In crsnotapolstoc @@ -2573,8 +2598,10 @@ Define Class cus_pret_nomenclator As Custom * valideaza (ambele conturi sau niciunul) si scrie nota implicita a politicii date Procedure salveaza_nota_politica - Lparameters tnIdPol, tcScd, tcScc + Lparameters tnIdPol, tcScd, tcScc, tcAscd, tcAscc Local lcSql, lnSucces + tcAscd = Iif(Type('tcAscd')='C', tcAscd, []) + tcAscc = Iif(Type('tcAscc')='C', tcAscc, []) If (!Empty(tcScd) And Empty(tcScc)) Or (Empty(tcScd) And !Empty(tcScc)) This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] AMESSAGEBOX(This.cEroare,0+48,"Atentie") @@ -2583,16 +2610,18 @@ Define Class cus_pret_nomenclator As Custom If Empty(tcScd) And Empty(tcScc) Return .T. Endif - Private pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol + Private pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol pcScd = tcScd pcScc = tcScc + pcAscd = tcAscd + pcAscc = tcAscc pnIdUtil = gnIdUtil pnIdNota = 0 - lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] + lcSql = [begin pack_preturi.gaseste_creeaza_nota_vanzare(?pcScd,?pcAscd,?pcScc,?pcAscc,?pnIdUtil,?@pnIdNota); end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") - Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol + Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol Return .F. Endif pnIdPol = tnIdPol @@ -2601,7 +2630,7 @@ Define Class cus_pret_nomenclator As Custom If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Endif - Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol + Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol Return (lnSucces >= 0) Endproc && salveaza_nota_politica Enddefine ```