From 58d4c4a891af9ffd45046f36789927003bddddc4 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Thu, 20 Aug 2026 22:44:54 +0300 Subject: [PATCH] sync SVN r18026 --- clase/ofacturare_comun.vc2 | 129 ++++++++++++++++-- clase/omodificari.vc2 | 11 -- programe/ofacturare_editare.prg | 21 ++- .../editare_factura/test_s4b_sincronizare.prg | 20 ++- 4 files changed, 152 insertions(+), 29 deletions(-) diff --git a/clase/ofacturare_comun.vc2 b/clase/ofacturare_comun.vc2 index 6f7f325..367fd89 100644 --- a/clase/ofacturare_comun.vc2 +++ b/clase/ofacturare_comun.vc2 @@ -4647,6 +4647,8 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx" Select crsDetalii Scatter Name poRec Memo poRec.explicatie = NVL(poRec.explicatie, ' ') + AddProperty(poRec, 'data_act', crsfacturi.data_act) + AddProperty(poRec, 'id_part', Nvl(crsfacturi.id_part, 0)) If poRec.sters = 0 ofrmmodificare = Createobject("frm_modifica_articol_factura") ofrmmodificare.Show() @@ -5135,9 +5137,14 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc *< OBJECTDATA: ObjPath="Ed_tx_simplu1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cbo_saft" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lbSaft" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="_shape4" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="lbExplTva" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="cbo_expl_tva" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="lbExplTvaInfo" UniqueID="" Timestamp="" /> * *p: nid + *p: nidjtvaales *p: ntip_selectie && 0 - cautare in toti delegatii; 1 - cautare in delegatii clientului *p: orec * @@ -5145,9 +5152,10 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc * BorderStyle = 1 DoCreate = .T. - Height = 370 + Height = 431 Name = "frm_modifica_articol_factura" nid = .F. + nidjtvaales = 0 ntip_selectie = 0 orec = .F. Width = 376 @@ -5161,17 +5169,17 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc _shape2.ZOrderSet = 2 Lb_titlu_alb_b121.Caption = "Modifică explicație articol" Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121" - Lb_titlu_alb_b121.TabIndex = 5 + Lb_titlu_alb_b121.TabIndex = 6 Lb_titlu_alb_b121.ZOrderSet = 3 BUT_TERMIN1.Left = 344 BUT_TERMIN1.Name = "BUT_TERMIN1" - BUT_TERMIN1.TabIndex = 3 + BUT_TERMIN1.TabIndex = 4 BUT_TERMIN1.Top = 1 BUT_TERMIN1.ZOrderSet = 4 Gridsort1.Name = "Gridsort1" But_renunt1.Left = 315 But_renunt1.Name = "But_renunt1" - But_renunt1.TabIndex = 4 + But_renunt1.TabIndex = 5 But_renunt1.Top = 1 But_renunt1.ZOrderSet = 6 * @@ -5181,11 +5189,36 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc Height = 37, ; Left = 13, ; Name = "_shape3", ; - Top = 323, ; + Top = 384, ; Width = 348, ; ZOrderSet = 0 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="shape" /> + ADD OBJECT '_shape4' AS _shape WITH ; + BackStyle = 0, ; + Height = 58, ; + Left = 13, ; + Name = "_shape4", ; + Top = 323, ; + Width = 348, ; + ZOrderSet = 10 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="shape" /> + + ADD OBJECT 'cbo_expl_tva' AS _cbbase WITH ; + BoundColumn = 3, ; + BoundTo = .T., ; + ColumnCount = 2, ; + ColumnWidths = "400,60", ; + Height = 24, ; + Left = 110, ; + Name = "cbo_expl_tva", ; + RowSourceType = 3, ; + TabIndex = 2, ; + Top = 329, ; + Width = 238, ; + ZOrderSet = 12 + *< END OBJECT: ClassLib="_cb_base.vcx" BaseClass="combobox" /> + ADD OBJECT 'cbo_saft' AS _cbbase WITH ; BoundColumn = 4, ; BoundTo = .T., ; @@ -5197,8 +5230,8 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc Name = "cbo_saft", ; RowSource = "Select taxname, tip, procent_taxa, taxcode From saft_taxtable where tva = 1 order by taxcode Into Cursor crsTaxTableX", ; RowSourceType = 3, ; - TabIndex = 2, ; - Top = 329, ; + TabIndex = 3, ; + Top = 390, ; Width = 266, ; ZOrderSet = 8 *< END OBJECT: ClassLib="_cb_base.vcx" BaseClass="combobox" /> @@ -5221,20 +5254,54 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc _lbbase1.Name = "_lbbase1" *< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" /> + ADD OBJECT 'lbExplTva' AS _label WITH ; + Caption = "Explicație TVA", ; + Left = 24, ; + Name = "lbExplTva", ; + TabIndex = 8, ; + Top = 332, ; + ZOrderSet = 11 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> + + ADD OBJECT 'lbExplTvaInfo' AS _label WITH ; + Caption = "", ; + ForeColor = RGB(128,0,0), ; + Height = 20, ; + Left = 24, ; + Name = "lbExplTvaInfo", ; + Top = 355, ; + Visible = .F., ; + Width = 324, ; + WordWrap = .T., ; + ZOrderSet = 13 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> + ADD OBJECT 'lbSaft' AS _label WITH ; Caption = "Cod taxa", ; Left = 24, ; Name = "lbSaft", ; - TabIndex = 6, ; - Top = 332, ; + TabIndex = 7, ; + Top = 393, ; ZOrderSet = 9 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> + PROCEDURE Destroy + If Used('crsExplTvaCbo') + Use In crsExplTvaCbo + Endif + If Used('crsExplTvaArt') + Use In crsExplTvaArt + Endif + DoDefault() + ENDPROC + PROCEDURE inainte_de_do_termin - Local llReturn + Local llReturn, lcParamJtva If amessagebox("Doriti sa salvati modificarile?",4+32,"Confirmare salvare explicatie") = 6 + lcParamJtva = Iif(Vartype(Thisform.nidjtvaales) = 'N' And Thisform.nidjtvaales > 0, ; + Alltrim(Str(Thisform.nidjtvaales)), [null]) lcSql = [begin pack_facturare.modifica_explicatie_articol(] + Alltrim(Str(poRec.id_vanzare_det)) + [,] + ; - ['] + Nvl(Alltrim(OracleSpecialCharacters(poRec.explicatie)),'') + [',?gnIdUtil,?poRec.taxcode); end;] + ['] + Nvl(Alltrim(OracleSpecialCharacters(poRec.explicatie)),'') + [',?gnIdUtil,?poRec.taxcode,] + lcParamJtva + [); end;] llReturn = goExecutor.oExecuta(lcSql) Else llReturn = .F. @@ -5258,6 +5325,46 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc Endwith Endif + Local lnCota, lcSqlTva, lcCursorTva + Thisform.nidjtvaales = 0 + + If Isnull(poRec.proc_tvav) Or Nvl(poRec.proc_tvav, 0) = 0 + Thisform.cbo_expl_tva.Enabled = .F. + Thisform.lbExplTvaInfo.Caption = [Cota de TVA a acestei linii nu este cunoscuta; explicatia TVA nu poate fi modificata prin acest buton.] + Thisform.lbExplTvaInfo.Visible = .T. + Return + Endif + + lnCota = Round((poRec.proc_tvav - 1) * 100, 2) + lcCursorTva = [crsExplTvaArt] + *!* afisat > 0 = doar bazele, fara liniile de TVA; jv = 1 = doar jurnalul de vanzari + lcSqlTva = [select id_jtva_coloana, denumire, cota_tva from vjtva_coloane where id_jtva_coloana > 0 ] + ; + [and afisat > 0 and jv = 1 and cota_tva = ] + Alltrim(Str(lnCota, 10, 2)) + [ order by denumire] + If goExecutor.oExecuta(lcSqlTva, lcCursorTva) And Reccount(lcCursorTva) > 0 + Thisform.cbo_expl_tva.RowSource = [select denumire, cota_tva, id_jtva_coloana from ] + lcCursorTva + [ into cursor crsExplTvaCbo] + Thisform.cbo_expl_tva.Requery() + Thisform.cbo_expl_tva.Value = Nvl(poRec.id_jtva_coloana, 0) + Else + Thisform.cbo_expl_tva.Enabled = .F. + Thisform.lbExplTvaInfo.Caption = [Nu exista nicio explicatie TVA activa cu aceeasi cota ca linia facturata (cota: ] + ; + Alltrim(Str(lnCota, 10, 2)) + [ %).] + Thisform.lbExplTvaInfo.Visible = .T. + Endif + + ENDPROC + + PROCEDURE cbo_expl_tva.InteractiveChange + Local lnIdJtva + lnIdJtva = Nvl(This.Value, 0) + If lnIdJtva <= 0 + Return + Endif + Thisform.nidjtvaales = lnIdJtva + poRec.id_jtva_coloana = lnIdJtva + If Type('gl406') = 'L' And m.gl406 + poRec.taxcode = GetTaxCodeIdPart(m.gnAn, m.gnLuna, poRec.data_act, m.lnIdJtva, poRec.id_part) + Thisform.cbo_saft.Refresh() + Endif ENDPROC ENDDEFINE diff --git a/clase/omodificari.vc2 b/clase/omodificari.vc2 index 4e37dbb..31d4283 100644 --- a/clase/omodificari.vc2 +++ b/clase/omodificari.vc2 @@ -14481,17 +14481,6 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ENDIF SELECT (m.lnAreaTvd) ENDIF - *!* al doilea punct de declansare al sincronizarii: enumerarea diferentelor la salvare, cu - *!* continuarea salvarii daca utilizatorul renunta - de aceea llRet nu se schimba aici; - *!* pe document fara linii active nu porneste: propunerea ar marca toata sursa ca "Adaugare" - IF m.llRet AND This.lAreArticoleVanzari AND !This.lArticoleReadOnly AND Used('tvd') AND m.lnLiniiActive > 0 - LOCAL lcSemnaturaAcum - lcSemnaturaAcum = This.SemnaturaDivergenteSincronizare() - *!* doar divergentele aparute in sesiunea curenta deschid dialogul; N-A nu intra in semnatura - IF !Empty(m.lcSemnaturaAcum) AND !(m.lcSemnaturaAcum == This.cSemnaturaSincronizare) - This.AfiseazaDialogSincronizareArticole() - ENDIF - ENDIF RETURN m.llRet diff --git a/programe/ofacturare_editare.prg b/programe/ofacturare_editare.prg index 9bae471..68b7c44 100644 --- a/programe/ofacturare_editare.prg +++ b/programe/ofacturare_editare.prg @@ -789,8 +789,9 @@ ENDFUNC && ConstruiestePropunereSincronizare *!* Modificare/Adaugare pe tvd nu se aplica, doar cele pe trul, care nu au nevoie de metode de formular) *!* reconstruieste propunerea (ConstruiestePropunereSincronizare) si aplica tot ce nu e N-A/Semnalare, *!* DOAR in cursoarele din memorie (tvd/trul) - niciun INSERT/UPDATE Oracle; RUL_SURSA scrie in tvd -*!* (cantitate/pret, pastrand pret_cu_tva existent pe rand), ARTICOLE_SURSA scrie doar cant/pretvtva pe -*!* randul RUL deja existent (niciodata rand RUL nou - lipsesc contul/gestiunea sigure din articol) +*!* (cantitate/pret, pastrand pret_cu_tva existent pe rand), ARTICOLE_SURSA scrie cant/pretvtva si +*!* recalculeaza pretv/tvav pe randul RUL deja existent (niciodata rand RUL nou - lipsesc contul/ +*!* gestiunea sigure din articol) *!* retur numeric: cate linii au fost efectiv aplicate (ca apelantul sa poata reface bara de totaluri) FUNCTION AplicaSincronizareArticole LPARAMETERS tcDirectie, toForm @@ -919,12 +920,15 @@ ENDFUNC && AplicaAdaugareTvd *!* parametri: id_articol, cantitate/pret noi (pret_nou cu TVA) *!* scrie in trul (singurul rand activ gasit pe articol - garantat unic, altfel propunerea a marcat N-A) -*!* doar cant/cante (dupa care din ele era deja folosit pe rand) si pretvtva; nu atinge id_tip_rulaj, -*!* conturi (scd/scc) sau alte campuri derivate (valoare/tva/etc.) - raman de recalculat de apelant daca e nevoie +*!* cant/cante (dupa care din ele era deja folosit pe rand), apoi recalculeaza pretv/tvav/pretvtva cu +*!* formula din calculeaza_valori_rul (ramura pretvtva); nu atinge valorile (valoarev/valtvav/ +*!* valoarevcTVA), id_tip_rulaj, conturi (scd/scc) sau valoare/tva (pretul de achizitie) - raman de +*!* recalculat de apelant daca e nevoie FUNCTION AplicaModificareTrul LPARAMETERS tnIdArticol, tnCantitateNoua, tnPretNouCuTva LOCAL lnAreaOrigine, llAplicat, lcCampCant + LOCAL lnPretvtva, lnProcTvav, lnTvav, lnPretv lnAreaOrigine = Select() llAplicat = .F. @@ -933,7 +937,14 @@ FUNCTION AplicaModificareTrul LOCATE FOR id_articol = m.tnIdArticol AND Nvl(sters,0) <> 1 IF Found() lcCampCant = IIF(Nvl(cant,0) <> 0, 'cant', 'cante') - REPLACE (m.lcCampCant) WITH m.tnCantitateNoua, pretvtva WITH m.tnPretNouCuTva IN trul + REPLACE (m.lcCampCant) WITH m.tnCantitateNoua IN trul + + lnPretvtva = ROUND(m.tnPretNouCuTva, m.gnPPretv) + lnProcTvav = IIF(Empty(proc_tvav), 1, proc_tvav) - 1 && 1.19 -> 0.19 + lnTvav = ROUND(m.lnPretvtva * m.lnProcTvav / (1 + m.lnProcTvav), m.gnPPretv) + lnPretv = m.lnPretvtva - m.lnTvav + + REPLACE pretv WITH m.lnPretv, pretvtva WITH m.lnPretvtva, tvav WITH m.lnTvav IN trul llAplicat = .T. ENDIF ENDIF diff --git a/utile/Teste/editare_factura/test_s4b_sincronizare.prg b/utile/Teste/editare_factura/test_s4b_sincronizare.prg index 8d5a119..60ee0e5 100644 --- a/utile/Teste/editare_factura/test_s4b_sincronizare.prg +++ b/utile/Teste/editare_factura/test_s4b_sincronizare.prg @@ -38,6 +38,11 @@ IF Type('gnPC') <> 'N' gnPC = 2 ENDIF +IF Type('gnPPretV') <> 'N' + PUBLIC gnPPretV + gnPPretV = 4 +ENDIF + SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE @@ -348,22 +353,32 @@ AdaugaTvd(1400, 5, 12, 1, 1, 'ARTICOL 1400', 'COD1400', 60) AdaugaTrul(1400, 0, 3, 9, 0, 1, '371', 1) *!* 1500: adaugare in ARTICOLE_SURSA (doar in tvd) - nu se aplica niciodata, trul nu primeste rand nou AdaugaTvd(1500, 1, 1, 1, 1, 'ARTICOL 1500', 'COD1500', 1) +*!* 1600: modificare cu TVA 19% - defalcarea pretvtva -> pretv/tvav (238/2 = 119 -> 100 + 19) +AdaugaTvd(1600, 2, 119, 1, 1, 'ARTICOL 1600', 'COD1600', 238) +AdaugaTrul(1600, 1, 0, 100, 0, 1, '371', 1.19) LOCAL lnReccountTrulInainte, lnAplicateC1 lnReccountTrulInainte = Reccount('trul') lnAplicateC1 = AplicaSincronizareArticole('ARTICOLE_SURSA') -DO asserteaza WITH 'C1 ARTICOLE_SURSA: 2 linii aplicate (modificarile 1300 si 1400; adaugarea 1500 sarita)', lnAplicateC1 == 2, TRANSFORM(lnAplicateC1) +DO asserteaza WITH 'C1 ARTICOLE_SURSA: 3 linii aplicate (modificarile 1300, 1400 si 1600; adaugarea 1500 sarita)', lnAplicateC1 == 3, TRANSFORM(lnAplicateC1) DO asserteaza WITH 'C1: trul nu a crescut (adaugarea 1500 nu creeaza rand RUL nou)', Reccount('trul') == m.lnReccountTrulInainte, TRANSFORM(Reccount('trul')) SELECT trul LOCATE FOR id_articol = 1300 DO asserteaza WITH 'C1 1300: cant (campul folosit initial) actualizat la 5, pretvtva la 12, id_tip_rulaj neatins', ; Found() AND cant == 5 AND cante == 0 AND pretvtva == 12 AND id_tip_rulaj == 0, TRANSFORM(cant) + '/' + TRANSFORM(cante) +DO asserteaza WITH 'C1 1300: pretv/tvav recalculate (proc_tvav = 1, deci TVA 0 si pretv = pretvtva)', ; + pretv == 12 AND tvav == 0, TRANSFORM(pretv) + '/' + TRANSFORM(tvav) LOCATE FOR id_articol = 1400 DO asserteaza WITH 'C1 1400: cante (campul folosit initial) actualizat la 5, cant ramane 0', ; Found() AND cante == 5 AND cant == 0 AND pretvtva == 12, TRANSFORM(cant) + '/' + TRANSFORM(cante) +LOCATE FOR id_articol = 1600 +DO asserteaza WITH 'C1 1600: pretvtva 119 defalcat in pretv 100 + tvav 19, cant actualizat la 2', ; + Found() AND cant == 2 AND pretvtva == 119 AND pretv == 100 AND tvav == 19, ; + TRANSFORM(pretv) + '/' + TRANSFORM(tvav) + '/' + TRANSFORM(cant) + STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), lcLog, 1) @@ -395,7 +410,8 @@ PROCEDURE CreeazaTrulTest Use In trul ENDIF CREATE CURSOR trul (id_articol N(20), denumire C(100), codmat C(30), um C(10), cant N(12,3), cante N(12,3), ; - pretvtva N(14,4), id_tip_rulaj I, sters I, id_gestiune I, cont C(20), proc_tvav N(6,4)) + pretv N(14,4), pretvtva N(14,4), tvav N(14,4), id_tip_rulaj I, sters I, id_gestiune I, cont C(20), ; + proc_tvav N(6,4)) ENDPROC