#6 editare factura emisa: S4 runda 3 completa (pagina de articole editabila)

frm_modific2024, pgfArticole.PAGE3 - editare in memorie, fara scriere in Oracle
(aceea ramane S5).

- sub-blocul A: cantitate/pret/pret_cu_tva editabile inline, marcaj lmodificat
  pe linie, coloana valoare pe linie
- sub-blocul B: stergere logica de linii (sters/DynamicForeColor gri) si adaugare
  de linii prin frm_articol_factura, cu alegerea articolului prin caut_articol()
- sub-blocul C: bara de totaluri sub grid (total linii convertit RON la cursul
  documentului, discount de antet editabil, total net), ascunsa pe
  transfer/custodie; verdict de corelatie ACT/RUL informativ, cu 3 stari
- suma ACT: sold net debit-credit, cont pe tip de document (4111 / 418 / 461,
  iar pe rate/contract 4111, 411 sau 461)
- suma RUL: doar ID_TIP_RULAJ = 0, adica miscarile reale; perechile
  ID_TIP_RULAJ = 3 sunt virtuale (tin locul procesului verbal de schimbare de
  pret) si nu intra in suma. Corectie cu liniile nestocate, marcata "ajustat"
- adaugarea de linii pe document in valuta: dialogul primeste tip_valuta si
  cursul documentului de pe tvanz, deci pretul se introduce direct in valuta;
  ofacturare.vc2 ramane neatins
- cei 5 apelanti frm_modific2024 (afisjurcom, anaf_efactura, cele doua .sc2 de
  import) pregatesc cursorul de articole inainte de Createobject, gardat pe
  SET PROCEDURE - registrul jurnal din ROACONT/ROAGEST ramane neschimbat

Teste headless pe MARIUSM_AUTO, suite care isi descopera singure documentele:
test_page3_articole 14/2 (cele 2 = artefact de grid nematerializat headless,
acoperit pe ecran), test_incarca_vanzare_din_nota 5/0,
test_adauga_linie_articol 20/0, test_adauga_linie_valuta 16/0,
test_ui_sterge_linie 8/0, test_verdict_act_rul 26/0.

docs/todos.txt: punctele 13 si 20, scrise de Marius.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
2026-08-09 20:48:42 +03:00
parent 13b4f65723
commit b9eba29ebe
26 changed files with 3310 additions and 172 deletions

View File

@@ -13081,6 +13081,9 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
Select trul
Go Top
IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure"))
PregatesteArticoleFacturaEditare('tact')
ENDIF
Omodif = Createobject([frm_modific2024], m.lnIdSet)
*!* DO FORM frm_modific2024 NAME omodif LINKED WITH m.lnIdSet NOSHOW
Omodif.Show()
@@ -13134,6 +13137,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
Use In (Select('rul_temp'))
Use In (Select('trul_obinv'))
Use In (Select('rul_temp_obinv'))
Use In (Select('crsArticoleFactura'))
USE IN (SELECT('crsJtvaTemp'))
ENDPROC

View File

@@ -2432,6 +2432,9 @@ DEFINE CLASS afisjurcom AS _frmbase OF "_frm_base.vcx"
*Select a.*,Iif(Isnull(id_jtva_coloana),0,1) As cu_Tva From tact a Into Cursor tact Readwrite
Select a.*,Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
*!* modificare ROACONT v 2.0.78 ^
IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure"))
PregatesteArticoleFacturaEditare('tact')
ENDIF
* Omodif = Createobject([frm_modific2007],lnIdSet)
Omodif = Createobject([frm_modific2024],lnIdSet)
* DO FORM frm_modific2024 NAME omodif LINKED WITH m.lnIdSet NOSHOW
@@ -2558,6 +2561,9 @@ DEFINE CLASS afisjurcom AS _frmbase OF "_frm_base.vcx"
If Used('trul_obinv')
Use In trul_obinv
Endif
If Used('crsArticoleFactura')
Use In crsArticoleFactura
Endif
ENDPROC

View File

@@ -150,7 +150,7 @@ DEFINE CLASS frm_borderou_facturi AS _frmbase OF "_frm_base.vcx"
ADD OBJECT 'Cmd_executa1' AS cmd_executa WITH ;
Anchor = 6, ;
Caption = "Marcheaz<61> \<trimis", ;
Caption = "Marcheaz<61> \<trimis", ;
ForeColor = 0,128,0, ;
Height = 27, ;
Left = 140, ;
@@ -1334,7 +1334,6 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="But_attach1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_listare1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_verifica1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_editare1" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*m: do_editare_factura
@@ -1352,7 +1351,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
*<PropValue>
BorderStyle = 1
cbuton2 = but_listare1;but_listare2;But_listare3
cbuton3 = but_modifica1;but_modifica2;But_editare1
cbuton3 = but_modifica1;but_modifica2
cfiltru_initial =
cgridsortlist = grid_facturi,grid_detalii
DoCreate = .T.
@@ -1412,17 +1411,6 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_editare1' AS but_modifica WITH ;
Anchor = 12, ;
caction = do_editare_factura, ;
Caption = "", ;
Left = 650, ;
Name = "But_editare1", ;
TabIndex = 29, ;
ToolTipText = "Editare factura (articole, cantitati, preturi)", ;
Top = 341
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_listare1' AS but_listare WITH ;
Anchor = 8, ;
Left = 698, ;
@@ -3484,7 +3472,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
Anchor = 12, ;
AutoSize = .T., ;
BackStyle = 0, ;
Caption = "Total <20>n valuta", ;
Caption = "Total <20>n valuta", ;
FontSize = 10, ;
Height = 18, ;
Left = 311, ;
@@ -3798,6 +3786,12 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
update_jtva_coloane("", "crsJtvaTemp", 0)
*!* articolele se incarca ACUM, inainte de Createobject - grid-ul din pagina 3
*!* se leaga o singura data, la construire, pe cursorul deja plin
IncarcaArticoleFactura(m.lnIdVanzare, 'crsArticoleFactura')
Select tact
Omodif = Createobject([frm_modific2024], lnIdSet)
Omodif.Show()
@@ -3858,6 +3852,12 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
If Used('trul_obinv')
Use In trul_obinv
Endif
If Used('crsJtvaTemp')
Use In crsJtvaTemp
Endif
If Used('crsArticoleFactura')
Use In crsArticoleFactura
Endif
Endif
Select crsfacturi
@@ -4919,7 +4919,18 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
Do verificare_parteneri With m.lcXMLParteneri, m.llValidare, m.llMFIN, m.llVerificarePlatitorTVA, m.llAutoVerificare, m.llDontCloseCursor, m.llExperimental, m.llServiciuWebANAF
USE IN (SELECT('crsCoduriFiscale'))
USE IN (SELECT('crsCoduriFiscale'))
ENDPROC
PROCEDURE inainte_de_do_modifica
Local lnOptiune
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (articole, cantitati, preturi)')
Do Case
Case lnOptiune = 1
This.do_modifica()
Case lnOptiune = 2
This.do_editare_factura()
Endcase
ENDPROC
PROCEDURE Init
@@ -5145,7 +5156,7 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc
_shape2.Top = 0
_shape2.Width = 64
_shape2.ZOrderSet = 2
Lb_titlu_alb_b121.Caption = "Modific<69> explica<63>ie articol"
Lb_titlu_alb_b121.Caption = "Modific<69> explica<63>ie articol"
Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121"
Lb_titlu_alb_b121.TabIndex = 5
Lb_titlu_alb_b121.ZOrderSet = 3
@@ -5203,7 +5214,7 @@ DEFINE CLASS frm_modifica_articol_factura AS frm_termin_renunt OF "_frm_child.vc
_edbase1.Name = "_edbase1", ;
_edbase1.Top = 23, ;
_edbase1.Width = 325, ;
_lbbase1.Caption = "Explica<63>ie", ;
_lbbase1.Caption = "Explica<63>ie", ;
_lbbase1.Name = "_lbbase1"
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
@@ -5437,7 +5448,7 @@ DEFINE CLASS frm_modifica_factura AS frm_termin_renunt OF "_frm_child.vcx"
Text_simplu1.Name = "Text_simplu1", ;
Text_simplu1.Top = 3, ;
Text_simplu1.Width = 177, ;
Lb_simplu1.Caption = "Data <20>i ora expedierii", ;
Lb_simplu1.Caption = "Data <20>i ora expedierii", ;
Lb_simplu1.Name = "Lb_simplu1"
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
@@ -5487,7 +5498,7 @@ DEFINE CLASS frm_modifica_factura AS frm_termin_renunt OF "_frm_child.vcx"
Top = 128, ;
ZOrderSet = 9, ;
img_cautare.Name = "img_cautare", ;
clb_tx_cautare.Lb_simplu1.Caption = "Ma<4D>ina", ;
clb_tx_cautare.Lb_simplu1.Caption = "Ma<4D>ina", ;
clb_tx_cautare.Lb_simplu1.Name = "Lb_simplu1", ;
clb_tx_cautare.Name = "clb_tx_cautare", ;
clb_tx_cautare.Text_simplu1.Left = 133, ;
@@ -6977,7 +6988,7 @@ DEFINE CLASS frm_proforme AS _frmbase OF "_frm_base.vcx"
Anchor = 12, ;
AutoSize = .T., ;
BackStyle = 0, ;
Caption = "Total <20>n valuta", ;
Caption = "Total <20>n valuta", ;
FontSize = 10, ;
Height = 18, ;
Left = 311, ;
@@ -7009,7 +7020,7 @@ DEFINE CLASS frm_proforme AS _frmbase OF "_frm_base.vcx"
OPTION1.Top = 5, ;
OPTION1.Value = 1, ;
OPTION2.AutoSize = .T., ;
OPTION2.Caption = "<22>n valuta", ;
OPTION2.Caption = "<22>n valuta", ;
OPTION2.FontCharSet = 238, ;
OPTION2.FontSize = 10, ;
OPTION2.Left = 55, ;
@@ -7017,7 +7028,7 @@ DEFINE CLASS frm_proforme AS _frmbase OF "_frm_base.vcx"
OPTION2.Top = 5, ;
Option3.AutoSize = .T., ;
Option3.BackStyle = 0, ;
Option3.Caption = "<22>n RON", ;
Option3.Caption = "<22>n RON", ;
Option3.FontCharSet = 238, ;
Option3.FontSize = 10, ;
Option3.Height = 18, ;
@@ -7048,7 +7059,7 @@ DEFINE CLASS frm_proforme AS _frmbase OF "_frm_base.vcx"
OPTION1.Top = 5, ;
OPTION1.Value = 0, ;
OPTION2.AutoSize = .T., ;
OPTION2.Caption = "<22>terse", ;
OPTION2.Caption = "<22>terse", ;
OPTION2.FontCharSet = 238, ;
OPTION2.FontSize = 10, ;
OPTION2.ForeColor = 255,0,0, ;
@@ -7057,7 +7068,7 @@ DEFINE CLASS frm_proforme AS _frmbase OF "_frm_base.vcx"
OPTION2.Top = 5, ;
Option3.AutoSize = .T., ;
Option3.BackStyle = 0, ;
Option3.Caption = "Ne<4E>terse", ;
Option3.Caption = "Ne<4E>terse", ;
Option3.FontCharSet = 238, ;
Option3.FontSize = 10, ;
Option3.Height = 18, ;

View File

@@ -6642,7 +6642,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cPretArt.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cPretArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt._checkbox1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cProcTvavArt.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cProcTvavArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cDiscountUnitarArt.Header1" UniqueID="" Timestamp="" />
@@ -6655,6 +6655,23 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cExplicatieArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.cmdStergeArticol" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.cmdAdaugaArticol" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalLiniiArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalLiniiArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblDiscountArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtDiscountArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalNetArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalNetArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalSalvatArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalSalvatArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalActArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalActArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalRulArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalRulArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblVerdictArt" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE2.grdRulajeObinv.cvaloarevcTVA.cvaloarevcTVA" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="pgfArticole.PAGE2.grdRulajeObinv.cvaloarevcTVA.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Grid1" UniqueID="" Timestamp="" />
@@ -6775,6 +6792,8 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="But_copiazaR" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*m: actualizeazabaratotaluri
*m: actualizeazaverdictactrul
*m: afiseaza_rulaje
*m: alege_partener
*m: aleg_document_pereche
@@ -6806,6 +6825,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*p: leditare
*p: lmodificare
*p: lnotanoua
*p: lrulajustat
*p: lverificare
*p: lvizualizare
*p: nidvanzare
@@ -6816,6 +6836,10 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*p: nsuma && Total suma inregistrari
*p: ntaxcode
*p: ntipvanzare
*p: ntotalactron
*p: ntotalliniiron
*p: ntotalnetron
*p: ntotalrulron
*p: obackupxml
*p: oldvalue
*p: oset
@@ -6834,12 +6858,13 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
cpaymentcode =
DoCreate = .T.
FontCharSet = 238
Height = 508
Height = 530
larearticolevanzari = .F.
lavertizatexigibilizare = .F.
leditare = .F.
lmodificare = .F.
lnotanoua = .F.
lrulajustat = .F.
lverificare = .F.
lvizualizare = .F.
Name = "frm_modific2024"
@@ -6851,6 +6876,10 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
nsuma = 0
ntaxcode = 0
ntipvanzare = 0
ntotalactron = 0
ntotalliniiron = 0
ntotalnetron = 0
ntotalrulron = 0
obackupxml = NULL
oldvalue =
oset = NULL
@@ -6908,7 +6937,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
caction = afiseaza_rulaje, ;
Left = 773, ;
Name = "but_afiseaza_rulaje", ;
Top = 471
Top = 493
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_copiaza1' AS but_copiaza WITH ;
@@ -6929,7 +6958,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
Name = "But_copiazaR", ;
TabIndex = 15, ;
ToolTipText = "Copiere - Se copiaza toate campurile din inregistrarea curenta", ;
Top = 368, ;
Top = 390, ;
ZOrderSet = 30
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
@@ -6937,7 +6966,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
Anchor = 12, ;
Left = 773, ;
Name = "But_modificaR", ;
Top = 396, ;
Top = 418, ;
Visible = .T., ;
ZOrderSet = 31
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
@@ -6999,7 +7028,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
Left = 773, ;
Name = "But_stergeR", ;
TabIndex = 14, ;
Top = 424, ;
Top = 446, ;
Visible = .T., ;
ZOrderSet = 29
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
@@ -8660,7 +8689,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
ADD OBJECT 'pgfArticole' AS _pageframe WITH ;
Anchor = 15, ;
ErasePage = .T., ;
Height = 142, ;
Height = 164, ;
Left = 5, ;
Name = "pgfArticole", ;
PageCount = 3, ;
@@ -12254,99 +12283,167 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.cmdAdaugaArticol' AS commandbutton WITH ;
Anchor = 8, ;
AutoSize = .F., ;
Caption = "Adauga articol", ;
FontCharSet = 238, ;
FontSize = 9, ;
ForeColor = 0,0,64, ;
Height = 22, ;
Left = 175, ;
Name = "cmdAdaugaArticol", ;
TabIndex = 5, ;
Top = 0, ;
Width = 170, ;
ZOrderSet = 0
*< END OBJECT: BaseClass="commandbutton" />
ADD OBJECT 'pgfArticole.PAGE3.cmdStergeArticol' AS commandbutton WITH ;
Anchor = 8, ;
AutoSize = .F., ;
Caption = "Sterge / Restaureaza linie", ;
FontCharSet = 238, ;
FontSize = 9, ;
ForeColor = 0,0,64, ;
Height = 22, ;
Left = 0, ;
Name = "cmdStergeArticol", ;
TabIndex = 3, ;
Top = 0, ;
Width = 170, ;
ZOrderSet = 0
*< END OBJECT: BaseClass="commandbutton" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura' AS _grdrow WITH ;
Anchor = 15, ;
ColumnCount = 13, ;
ColumnCount = 14, ;
DeleteMark = .F., ;
FontSize = 10, ;
GridLineColor = 128,128,128, ;
HeaderHeight = 35, ;
Height = 107, ;
Height = 81, ;
lcamptextneeditabil = .F., ;
Left = 0, ;
Name = "grdArticoleFactura", ;
ReadOnly = .T., ;
nrgbrow = 0, ;
ReadOnly = .F., ;
RecordSource = "tvd", ;
RowHeight = 19, ;
TabIndex = 4, ;
Tag = "RESIZABLE", ;
Top = 0, ;
Top = 26, ;
Width = 759, ;
ZOrderSet = 1, ;
Column1.ControlSource = "tvd.denumire", ;
Column1.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column1.FontName = "Arial", ;
Column1.FontSize = 10, ;
Column1.Name = "cDenumireArt", ;
Column1.ReadOnly = .T., ;
Column1.Width = 170, ;
Column2.ControlSource = "tvd.codmat", ;
Column2.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column2.FontName = "Arial", ;
Column2.FontSize = 10, ;
Column2.Name = "cCodmatArt", ;
Column2.ReadOnly = .T., ;
Column2.Width = 90, ;
Column3.ControlSource = "tvd.serie", ;
Column3.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column3.FontName = "Arial", ;
Column3.FontSize = 10, ;
Column3.Name = "cSerieArt", ;
Column3.ReadOnly = .T., ;
Column3.Width = 70, ;
Column4.ControlSource = "tvd.lot", ;
Column4.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column4.FontName = "Arial", ;
Column4.FontSize = 10, ;
Column4.Name = "cLotArt", ;
Column4.ReadOnly = .T., ;
Column4.Width = 60, ;
Column5.ControlSource = "tvd.cantitate", ;
Column5.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column5.FontName = "Arial", ;
Column5.FontSize = 10, ;
Column5.Format = "R", ;
Column5.InputMask = (get_mask(12,gnPCANT)), ;
Column5.Name = "cCantitateArt", ;
Column5.ReadOnly = .F., ;
Column5.Width = 70, ;
Column6.ControlSource = "tvd.pret", ;
Column6.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column6.FontName = "Arial", ;
Column6.FontSize = 10, ;
Column6.Format = "R", ;
Column6.InputMask = (get_mask(12,gnPPRET)), ;
Column6.Name = "cPretArt", ;
Column6.ReadOnly = .F., ;
Column6.Width = 70, ;
Column7.ControlSource = "tvd.pret_cu_tva", ;
Column7.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column7.FontName = "Arial", ;
Column7.FontSize = 10, ;
Column7.Format = "R", ;
Column7.InputMask = (get_mask(12,gnPPRET)), ;
Column7.Name = "cPretCuTvaArt", ;
Column7.ReadOnly = .F., ;
Column7.Sparse = .F., ;
Column7.Width = 80, ;
Column8.ControlSource = "tvd.proc_tvav", ;
Column8.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column8.FontName = "Arial", ;
Column8.FontSize = 10, ;
Column8.Format = "R", ;
Column8.InputMask = "9.99", ;
Column8.Name = "cProcTvavArt", ;
Column8.ReadOnly = .T., ;
Column8.Width = 55, ;
Column9.ControlSource = "tvd.discount_unitar", ;
Column9.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column9.FontName = "Arial", ;
Column9.FontSize = 10, ;
Column9.Format = "R", ;
Column9.InputMask = (get_mask(12,gnPPRET)), ;
Column9.Name = "cDiscountUnitarArt", ;
Column9.ReadOnly = .T., ;
Column9.Width = 90, ;
Column10.ControlSource = "tvd.nume_gestiune", ;
Column10.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column10.FontName = "Arial", ;
Column10.FontSize = 10, ;
Column10.Name = "cGestiuneArt", ;
Column10.ReadOnly = .T., ;
Column10.Width = 90, ;
Column11.ControlSource = "tvd.nume_val", ;
Column11.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column11.FontName = "Arial", ;
Column11.FontSize = 10, ;
Column11.Name = "cValutaArt", ;
Column11.ReadOnly = .T., ;
Column11.Width = 60, ;
Column12.ControlSource = "tvd.explicatie", ;
Column12.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column12.FontName = "Arial", ;
Column12.FontSize = 10, ;
Column12.Name = "cExplicatieArt", ;
Column12.ReadOnly = .T., ;
Column12.Width = 150, ;
Column13.ControlSource = "tvd.taxcode", ;
Column13.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column13.FontName = "Arial", ;
Column13.FontSize = 10, ;
Column13.Name = "cTaxcodeArt", ;
Column13.Width = 60
Column13.ReadOnly = .T., ;
Column13.Width = 60, ;
Column14.ControlSource = "tvd.valoare", ;
Column14.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),RGB(0,0,0))", ;
Column14.FontName = "Arial", ;
Column14.FontSize = 10, ;
Column14.Format = "R", ;
Column14.InputMask = (get_mask(14,gnPa)), ;
Column14.Name = "cValoareArt", ;
Column14.ReadOnly = .T., ;
Column14.Width = 90
*< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Header1' AS header WITH ;
@@ -12359,14 +12456,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Text1' AS textbox WITH ;
BackColor = 225,225,225, ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
ReadOnly = .F., ;
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
@@ -12506,17 +12603,27 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cPretArt.Text1' AS textbox WITH ;
BackColor = 225,225,225, ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
ReadOnly = .F., ;
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt._checkbox1' AS _checkbox WITH ;
Alignment = 2, ;
Caption = "", ;
Centered = .T., ;
FontName = "Arial", ;
FontSize = 10, ;
Name = "_checkbox1", ;
ReadOnly = .F.
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Pret cu TVA", ;
@@ -12526,18 +12633,6 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt.Text1' AS textbox WITH ;
BackColor = 225,225,225, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cProcTvavArt.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "TVA %", ;
@@ -12601,6 +12696,27 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Valoare", ;
FontName = "Arial", ;
FontSize = 10, ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Text1' AS textbox WITH ;
BackColor = 225,225,225, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cValutaArt.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Valuta", ;
@@ -12622,6 +12738,174 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.lblDiscountArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Discount:", ;
FontBold = .T., ;
Height = 17, ;
Left = 190, ;
Name = "lblDiscountArt", ;
Top = 114, ;
Width = 65, ;
ZOrderSet = 4
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblTotalActArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Total ACT:", ;
FontBold = .T., ;
Height = 17, ;
Left = 0, ;
Name = "lblTotalActArt", ;
Top = 136, ;
Width = 90, ;
ZOrderSet = 10
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblTotalLiniiArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Total linii:", ;
FontBold = .T., ;
Height = 17, ;
Left = 0, ;
Name = "lblTotalLiniiArt", ;
Top = 114, ;
Width = 90, ;
ZOrderSet = 2
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblTotalNetArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Total net:", ;
FontBold = .T., ;
Height = 17, ;
Left = 340, ;
Name = "lblTotalNetArt", ;
Top = 114, ;
Width = 80, ;
ZOrderSet = 6
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblTotalRulArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Total RUL:", ;
FontBold = .T., ;
Height = 17, ;
Left = 190, ;
Name = "lblTotalRulArt", ;
Top = 136, ;
Width = 90, ;
ZOrderSet = 12
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblTotalSalvatArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "Total salvat:", ;
FontBold = .T., ;
Height = 17, ;
Left = 520, ;
Name = "lblTotalSalvatArt", ;
Top = 114, ;
Width = 85, ;
ZOrderSet = 8
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.lblVerdictArt' AS _label WITH ;
AutoSize = .F., ;
Caption = "", ;
FontBold = .T., ;
Height = 17, ;
Left = 380, ;
Name = "lblVerdictArt", ;
Top = 136, ;
Width = 350, ;
ZOrderSet = 14
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
ADD OBJECT 'pgfArticole.PAGE3.txtDiscountArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "tvanz.discount", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(12,gnPa)), ;
Left = 257, ;
Name = "txtDiscountArt", ;
ReadOnly = .F., ;
Top = 110, ;
Width = 75, ;
ZOrderSet = 5
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.txtTotalActArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "thisform.nTotalActRon", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(14,gnPa)), ;
Left = 92, ;
Name = "txtTotalActArt", ;
ReadOnly = .T., ;
Top = 132, ;
Width = 90, ;
ZOrderSet = 11
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.txtTotalLiniiArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "thisform.nTotalLiniiRon", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(14,gnPa)), ;
Left = 92, ;
Name = "txtTotalLiniiArt", ;
ReadOnly = .T., ;
Top = 110, ;
Width = 90, ;
ZOrderSet = 3
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.txtTotalNetArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "thisform.nTotalNetRon", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(14,gnPa)), ;
Left = 422, ;
Name = "txtTotalNetArt", ;
ReadOnly = .T., ;
Top = 110, ;
Width = 90, ;
ZOrderSet = 7
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.txtTotalRulArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "thisform.nTotalRulRon", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(14,gnPa)), ;
Left = 282, ;
Name = "txtTotalRulArt", ;
ReadOnly = .T., ;
Top = 132, ;
Width = 90, ;
ZOrderSet = 13
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'pgfArticole.PAGE3.txtTotalSalvatArt' AS _textbox WITH ;
Alignment = 1, ;
ControlSource = "tvanz.total_cu_tva", ;
Format = "R", ;
Height = 21, ;
InputMask = (get_mask(14,gnPa)), ;
Left = 607, ;
Name = "txtTotalSalvatArt", ;
ReadOnly = .T., ;
Top = 110, ;
Width = 90, ;
ZOrderSet = 9
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
ADD OBJECT 'txtSuma' AS _textbox WITH ;
Alignment = 3, ;
Anchor = 8, ;
@@ -12647,6 +12931,195 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
ENDIF
ENDPROC
PROCEDURE ActualizeazaBaraTotaluri
*!* recalculeaza totalul liniilor active convertit in RON la cursul documentului (decizia 33) si arata/ascunde bara pe tipurile fara suma comparabila (decizia 22)
LOCAL lnCurs, lnMultiplicator, lnTotal, llAscunde, lnWorkArea, lnRecnoTvd
IF !This.lAreArticoleVanzari OR !Used('tvd') OR !Used('tvanz') OR Reccount('tvanz') = 0
RETURN
ENDIF
lnCurs = Nvl(tvanz.curs, 1)
lnMultiplicator = Nvl(tvanz.multiplicator, 1)
IF m.lnMultiplicator = 0
m.lnMultiplicator = 1
ENDIF
lnTotal = 0
lnWorkArea = Select()
lnRecnoTvd = Recno('tvd')
SELECT tvd
SUM valoare TO lnTotal FOR Nvl(sters,0) <> 1
*!* SUM muta pointerul in tvd - se restaureaza, ca apelantul (ex. calculeaza_valori_articol) sa ramana pe randul editat
IF Between(m.lnRecnoTvd, 1, Reccount('tvd'))
GO (m.lnRecnoTvd) IN tvd
ENDIF
IF m.lnWorkArea > 0
SELECT (m.lnWorkArea)
ENDIF
This.nTotalLiniiRon = ROUND(m.lnTotal * m.lnCurs / m.lnMultiplicator, 2)
This.nTotalNetRon = This.nTotalLiniiRon - Nvl(tvanz.discount, 0)
llAscunde = INLIST(This.nTipVanzare, 23, 25, 27, 30, 41, 42, 47)
WITH This.pgfArticole.PAGE3
.lblTotalLiniiArt.Visible = !m.llAscunde
.txtTotalLiniiArt.Visible = !m.llAscunde
.lblDiscountArt.Visible = !m.llAscunde
.txtDiscountArt.Visible = !m.llAscunde
.lblTotalNetArt.Visible = !m.llAscunde
.txtTotalNetArt.Visible = !m.llAscunde
.lblTotalSalvatArt.Visible = !m.llAscunde
.txtTotalSalvatArt.Visible = !m.llAscunde
ENDWITH
This.ActualizeazaVerdictActRul(m.lnCurs, m.lnMultiplicator, !m.llAscunde)
This.pgfArticole.PAGE3.Refresh()
ENDPROC
PROCEDURE ActualizeazaVerdictActRul
*!* verdict informativ de corelatie ACT/RUL (docs\cercetare\rec_suma_act.md) - niciodata verdict
*!* automat de eroare, pentru ca ACT n-are coloana de origine a randului (un rand adaugat manual
*!* e indistinctibil de unul generat). Contul de referinta se alege pe tipul documentului, suma
*!* ACT e soldul net debit-credit pe cod+an+luna+sters=0, suma RUL se corecteaza cu valoarea
*!* liniilor nestocate (in_stoc=0) convertita in RON la cursul documentului, ca la restul barei
LPARAMETERS tnCurs, tnMultiplicator, tlAplicabil
LOCAL lcCont, lnTotalAct, lnTotalRul, lnCorectieNestocate, lnWorkArea, lnRecnoTact, lnRecnoTrul, lnRecnoTvd
LOCAL llAjustat, llVerdictSigur, lcVerdict, lnForeColor
This.lRulAjustat = .F.
This.nTotalActRon = 0
This.nTotalRulRon = 0
WITH This.pgfArticole.PAGE3
.lblTotalActArt.Visible = m.tlAplicabil
.txtTotalActArt.Visible = m.tlAplicabil
.lblTotalRulArt.Visible = m.tlAplicabil
.txtTotalRulArt.Visible = m.tlAplicabil
.lblVerdictArt.Visible = m.tlAplicabil
ENDWITH
IF !m.tlAplicabil OR !Used('tact') OR !Used('trul') OR !Used('tvd')
RETURN
ENDIF
DO CASE
CASE INLIST(This.nTipVanzare, 28, 29)
lcCont = ',461,'
CASE INLIST(This.nTipVanzare, 21, 22, 24, 26)
lcCont = ',418,'
CASE INLIST(This.nTipVanzare, 2, 6, 52)
lcCont = ',4111,411,461,'
OTHERWISE
lcCont = ',4111,'
ENDCASE
lnTotalAct = 0
lnTotalRul = 0
lnCorectieNestocate = 0
lnWorkArea = Select()
IF Reccount('tact') > 0
lnRecnoTact = Recno('tact')
SELECT tact
SUM (IIF((','+Alltrim(Nvl(scd,''))+',') $ m.lcCont, Nvl(suma,0), ;
IIF((','+Alltrim(Nvl(scc,''))+',') $ m.lcCont AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126'), -Nvl(suma,0), 0))) ;
TO lnTotalAct FOR Nvl(sters,0) = 0
IF Between(m.lnRecnoTact, 1, Reccount('tact'))
GO (m.lnRecnoTact) IN tact
ENDIF
ENDIF
IF Reccount('trul') > 0
lnRecnoTrul = Recno('trul')
SELECT trul
SUM (Nvl(cant,0) + Nvl(cante,0)) * Nvl(pretvtva,0) ;
TO lnTotalRul FOR Nvl(sters,0) = 0 AND Nvl(id_tip_rulaj,0) = 0
IF Between(m.lnRecnoTrul, 1, Reccount('trul'))
GO (m.lnRecnoTrul) IN trul
ENDIF
ENDIF
lnRecnoTvd = Recno('tvd')
SELECT tvd
SUM valoare TO lnCorectieNestocate FOR Nvl(sters,0) <> 1 AND Nvl(in_stoc,1) = 0
IF Between(m.lnRecnoTvd, 1, Reccount('tvd'))
GO (m.lnRecnoTvd) IN tvd
ENDIF
IF m.lnWorkArea > 0
SELECT (m.lnWorkArea)
ENDIF
This.nTotalActRon = Round(Nvl(m.lnTotalAct,0), 2)
llAjustat = (Round(Nvl(m.lnCorectieNestocate,0), 2) <> 0)
This.lRulAjustat = m.llAjustat
This.nTotalRulRon = Round(Nvl(m.lnTotalRul,0) + Nvl(m.lnCorectieNestocate,0) * m.tnCurs / m.tnMultiplicator, 2)
*!* tip=51 (ROAACNPRO): contul e stabil, dar comparatia ramane nesigura pe date de import
*!* denormalizate (docs\cercetare\rec_suma_act.md) - divergenta nu e de formula
llVerdictSigur = (This.nTipVanzare <> 51)
DO CASE
CASE !m.llVerdictSigur
lcVerdict = 'Verdict ACT/RUL: nu se aplica (informativ, date de import)'
lnForeColor = RGB(90,90,90)
CASE Abs(This.nTotalActRon - This.nTotalRulRon) <= 0.02
lcVerdict = 'Verdict ACT/RUL: sincronizat (informativ)'
lnForeColor = RGB(0,128,0)
OTHERWISE
lcVerdict = 'Verdict ACT/RUL: divergent (informativ, nu e eroare)'
lnForeColor = RGB(180,120,0)
ENDCASE
WITH This.pgfArticole.PAGE3
.lblTotalRulArt.Caption = IIF(This.lRulAjustat, 'Total RUL (ajustat):', 'Total RUL:')
.lblVerdictArt.Caption = m.lcVerdict
.lblVerdictArt.ForeColor = m.lnForeColor
ENDWITH
ENDPROC
PROCEDURE AdaugaLinieTvdDinArticol
*!* adauga in tvd o linie noua (id_vanzare_det=0) din obiectul poArticol deja completat de
*!* frm_articol_factura (sau, in test, construit direct) - separata de Click ca sa fie testabila
*!* fara sa deschida dialogul modal. Pe ramura RON (tip_valuta=0) pretul si discountul se
*!* convertesc in valuta documentului (tvanz.curs/multiplicator); pe ramura valuta (tip_valuta=1)
*!* se citesc direct campurile _val, deja exprimate in valuta documentului, fara reconversie
LPARAMETERS toArticol
LOCAL lnCursDoc, lnMultDoc, lnPretRon, lnDiscountRon, lnPret, lnDiscount
lnCursDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.curs, 1), 1)
lnMultDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.multiplicator, 1), 1)
IF m.lnCursDoc = 0
m.lnCursDoc = 1
ENDIF
IF m.lnMultDoc = 0
m.lnMultDoc = 1
ENDIF
IF toArticol.tip_valuta = 1
lnPret = Iif(toArticol.preturi_cu_tva = 0, toArticol.pretftva_val, toArticol.pretctva_val)
lnDiscount = Iif(toArticol.preturi_cu_tva = 0, toArticol.discount_unitar_val, toArticol.discount_unitar_ctva_val)
ELSE
lnPretRon = Iif(toArticol.preturi_cu_tva = 0, toArticol.pretftva, toArticol.pretctva)
lnDiscountRon = Iif(toArticol.preturi_cu_tva = 0, toArticol.discount_unitar, toArticol.discount_unitar_ctva)
lnPret = m.lnPretRon * m.lnMultDoc / m.lnCursDoc
lnDiscount = m.lnDiscountRon * m.lnMultDoc / m.lnCursDoc
ENDIF
SELECT tvd
APPEND BLANK
REPLACE id_vanzare WITH This.nIdVanzare, id_vanzare_det WITH 0, id_articol WITH toArticol.id_articol, ;
cantitate WITH toArticol.cantitate, ;
pret WITH m.lnPret, ;
pret_cu_tva WITH toArticol.preturi_cu_tva, ;
proc_tvav WITH toArticol.proc_tvav, ;
discount_unitar WITH m.lnDiscount, ;
id_gestiune WITH toArticol.id_gestiune, cont WITH toArticol.Cont, ;
id_valuta WITH Iif(Used('tvanz') And Reccount('tvanz') > 0, tvanz.id_valuta, .Null.), ;
id_jtva_coloana WITH toArticol.id_jtva_coloana, serie WITH toArticol.serie, ;
explicatie WITH toArticol.explicatie, taxcode WITH toArticol.taxcode, lot WITH toArticol.lot, ;
sters WITH 0, denumire WITH toArticol.denumire, codmat WITH toArticol.codmat, ;
nume_gestiune WITH '', nume_val WITH Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.nume_val,''), toArticol.nume_val), lmodificat WITH .T.
Thisform.calculeaza_valori_articol()
ENDPROC
PROCEDURE afiseaza_rulaje
* COLAPSEAZA SAU MARESTE PAGEFRAME-UL RULAJE
* Daca butonul are imaginea sus, inseamna ca pageframe-ul cu rulaje este ascuns
@@ -12921,6 +13394,20 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
ENDPROC
PROCEDURE calculeaza_valori_articol
LOCAL lnCantitate, lnPretNet, lnProcTvav, lnValoare
SELECT tvd
lnCantitate = NVL(cantitate, 0)
lnPretNet = NVL(pret, 0) - NVL(discount_unitar, 0)
lnProcTvav = NVL(proc_tvav, 1)
*!* pret_cu_tva e flag (0/1): daca e 0, pretul e fara TVA si valoarea cu TVA se calculeaza cu proc_tvav
lnValoare = ROUND(m.lnCantitate * IIF(NVL(pret_cu_tva, 0) = 0, m.lnPretNet * m.lnProcTvav, m.lnPretNet), m.gnPC)
REPLACE lmodificat WITH .T., valoare WITH m.lnValoare
Thisform.ActualizeazaBaraTotaluri()
ENDPROC
PROCEDURE calculeaza_valori_rul
LPARAMETERS tcControlSource
LOCAL lcRul, lnPagina
@@ -14073,14 +14560,33 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
update_saft_mecanisme_plati()
ENDIF
*!* cursorul tvd, gol - din functia comuna daca ofacturare_editare.prg e incarcat
If !Used('tvd')
IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure"))
CreeazaCursorTvdGol()
ELSE
*!* structura se repeta: in ROACONT/ROAGEST functia comuna nu e incarcata
CREATE CURSOR tvd (id_vanzare I, id_vanzare_det I, id_articol I, cantitate N(12,3), pret N(14,4), pret_cu_tva N(14,4), proc_tvav N(6,4), discount_unitar N(14,4), id_gestiune I, cont C(20), id_valuta I, id_jtva_coloana I, serie C(20), explicatie C(60), taxcode I, lot C(20), sters I, denumire C(100), codmat C(30), nume_gestiune C(60), nume_val C(20))
*!* cursorul tvd - structura canonica, recreat mereu (grid-ul se leaga o singura data, la construire)
IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure"))
CreeazaCursorTvdGol()
ELSE
*!* structura se repeta: in ROACONT/ROAGEST functia comuna nu e incarcata
IF Used('tvd')
Use In tvd
ENDIF
CREATE CURSOR tvd (id_vanzare I NULL, id_vanzare_det I NULL, id_articol I NULL, cantitate N(12,3) NULL, pret N(14,4) NULL, pret_cu_tva N(14,4) NULL, proc_tvav N(6,4) NULL, discount_unitar N(14,4) NULL, id_gestiune I NULL, cont C(20) NULL, id_valuta I NULL, id_jtva_coloana I NULL, serie C(20) NULL, explicatie C(60) NULL, taxcode I NULL, lot C(20) NULL, sters I NULL, denumire C(100) NULL, codmat C(30) NULL, nume_gestiune C(60) NULL, nume_val C(20) NULL, lmodificat L, valoare N(14,2), in_stoc I NULL)
ENDIF
*!* cursorul tvanz - placeholder gol, ca bara de totaluri (ControlSource pe tvanz.discount) sa se lege la construire
IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure"))
CreeazaCursorTvanzGol()
ELSE
IF Used('tvanz')
Use In tvanz
ENDIF
CREATE CURSOR tvanz (id_vanzare I, tip I, discount N(12,2), total_fara_tva N(14,2), total_tva N(14,2), total_cu_tva N(14,2), curs N(10,4), multiplicator N(10,4))
ENDIF
*!* daca apelantul a pregatit deja articolele inainte de Createobject (ex. do_editare_factura) -
*!* grid-ul se leaga la construire pe tvd deja plin, nu se mai recreeaza in Show()
IF Used('crsArticoleFactura')
SELECT tvd
APPEND FROM DBF('crsArticoleFactura')
GO TOP
ENDIF
ENDPROC
@@ -14184,8 +14690,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
ENDIF
IF This.lAreArticoleVanzari
IncarcaArticoleFactura(This.nIdVanzare)
*!* apelantii care pregatesc articolele inainte de Createobject (ex. do_editare_factura)
*!* au deja tvd plin, incarcat de Load() - apelul ramane doar ca fallback pentru restul
IF Reccount('tvd') = 0
IncarcaArticoleFactura(This.nIdVanzare)
ENDIF
This.pgfArticole.PageCount = 3
This.pgfArticole.PAGE3.grdArticoleFactura.Refresh()
This.ActualizeazaBaraTotaluri()
ELSE
This.pgfArticole.PageCount = 2
ENDIF
@@ -14197,13 +14709,13 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
Thisform.but_modificaR.Enabled = .F.
This.WindowState = 2
* Ascund pageframe rulaje daca nu am rulaje
IF RECCOUNT('trul') = 0 AND RECCOUNT('trul_obinv') = 0
* Ascund pageframe rulaje daca nu am rulaje si nici articole
IF RECCOUNT('trul') = 0 AND RECCOUNT('trul_obinv') = 0 AND (!USED('tvd') OR RECCOUNT('tvd') = 0)
* pageframe rulaje este afisat
* daca nu exista inregistrari in trul sau trul_obinv, ascund pageframe-ul rulaje
* daca nu exista inregistrari in trul, trul_obinv sau tvd, ascund pageframe-ul rulaje
* si maresc gridul cu note contabile
This.afiseaza_rulaje()
ENDIF
ENDIF
This.resize_grid1()
@@ -15859,4 +16371,94 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
*Nu sterge
ENDPROC
PROCEDURE pgfArticole.PAGE3.cmdAdaugaArticol.Click
*!* alege un articol din nomenclator (fara stoc, fara politica de preturi - decizia 34) si il
*!* adauga ca linie noua in tvd (id_vanzare_det=0), prin dialogul real frm_articol_factura;
*!* daca documentul e in valuta (tvanz.in_valuta=1), poArticol.tip_valuta/Curs/multiplicator/
*!* nume_val/id_valuta se populeaza cu valorile documentului, ca dialogul sa lucreze in valuta
LOCAL loArticolAles, lnIdArticol, llInValutaDoc, lnCursDoc, lnMultDoc, lcNumeValDoc, lnIdValutaDoc
IF !Used('tvd') OR !This.lAreArticoleVanzari
RETURN
ENDIF
loArticolAles = caut_articol()
lnIdArticol = Nvl(loArticolAles.id_articol, 0)
IF Empty(m.lnIdArticol)
RETURN
ENDIF
llInValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.in_valuta, 0) = 1, .F.)
lnCursDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.curs, 1), 1)
lnMultDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.multiplicator, 1), 1)
lcNumeValDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.nume_val, ''), '')
lnIdValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, tvanz.id_valuta, .Null.)
PRIVATE poArticol, poDate, gnScadereStoc
poArticol = CreeazaPoArticolNouTvd(m.lnIdArticol, loArticolAles.codmat, loArticolAles.denumire, loArticolAles.um, loArticolAles.cont, ;
m.llInValutaDoc, m.lnCursDoc, m.lnMultDoc, m.lcNumeValDoc, m.lnIdValutaDoc)
poDate = Createobject('Empty')
AddProperty(poDate, 'tip', This.nTipVanzare)
AddProperty(poDate, 'in_valuta', 0)
AddProperty(poDate, 'dataact', Iif(Used('tact') And Reccount('tact') > 0, Nvl(tact.dataact, Date()), Date()))
gnScadereStoc = 0
PUBLIC gnButon
gnButon = 2
LOCAL loDlg
loDlg = Createobject('frm_articol_factura', 1, .F.)
loDlg.Show(1)
IF m.gnButon = 1
Thisform.AdaugaLinieTvdDinArticol(poArticol)
Thisform.pgfArticole.PAGE3.grdArticoleFactura.Refresh()
ENDIF
Release loDlg
ENDPROC
PROCEDURE pgfArticole.PAGE3.cmdStergeArticol.Click
*!* comuta flagul sters pe linia curenta din tvd - stergerea e logica, ramane vizibila (grizata) pana la salvare
IF !Used('tvd') OR Reccount('tvd') = 0
RETURN
ENDIF
SELECT tvd
REPLACE sters WITH IIF(Nvl(sters,0) = 1, 0, 1), lmodificat WITH .T.
Thisform.pgfArticole.PAGE3.grdArticoleFactura.Refresh()
Thisform.ActualizeazaBaraTotaluri()
ENDPROC
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Text1.Valid
IF NVL(Thisform.oldvalue, 0) <> NVL(This.Value, 0)
Thisform.calculeaza_valori_articol()
Thisform.oldvalue = This.Value
ENDIF
ENDPROC
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Text1.When
Thisform.oldvalue = This.Value
ENDPROC
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cPretArt.Text1.Valid
IF NVL(Thisform.oldvalue, 0) <> NVL(This.Value, 0)
Thisform.calculeaza_valori_articol()
Thisform.oldvalue = This.Value
ENDIF
ENDPROC
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cPretArt.Text1.When
Thisform.oldvalue = This.Value
ENDPROC
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cPretCuTvaArt._checkbox1.InteractiveChange
LOCAL lnFlag
*!* in InteractiveChange, ControlSource nu e inca actualizat - flagul se ia din control
lnFlag = IIF(Vartype(This.Value) = 'L', IIF(This.Value, 1, 0), Nvl(This.Value, 0))
SELECT tvd
REPLACE pret_cu_tva WITH m.lnFlag
Thisform.calculeaza_valori_articol()
This.Parent.Parent.Refresh()
ENDPROC
PROCEDURE pgfArticole.PAGE3.txtDiscountArt.Valid
Thisform.ActualizeazaBaraTotaluri()
ENDPROC
ENDDEFINE