#13: formular de facturare unificat - etapa curenta

Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
This commit is contained in:
2026-09-09 21:38:25 +03:00
parent d1d0d7c37f
commit 8e022d332e
259 changed files with 57305 additions and 1576 deletions

View File

@@ -1262,6 +1262,10 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="grid_facturi.cInstitutiePublica._checkbox1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cCodFiscal.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cCodFiscal.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cUtilm.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cUtilm.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cDataoram.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_facturi.cDataoram.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_detalii" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_detalii.cNume_lista_preturi.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grid_detalii.cNume_lista_preturi.Text1" UniqueID="" Timestamp="" />
@@ -1337,6 +1341,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
*<DefinedPropArrayMethod>
*m: do_editare_factura
*m: do_editare_unificata
*m: do_listare_cc
*m: do_listare_centr
*m: do_listare_document
@@ -2225,7 +2230,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
ADD OBJECT 'grid_facturi' AS _grdrow WITH ;
Anchor = 15, ;
ColumnCount = 44, ;
ColumnCount = 46, ;
DeleteMark = .F., ;
FontSize = 10, ;
HeaderHeight = 36, ;
@@ -2543,7 +2548,21 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
Column44.FontSize = 10, ;
Column44.Name = "cCodFiscal", ;
Column44.ReadOnly = .T., ;
Column44.Width = 103
Column44.Width = 103, ;
Column45.ColumnOrder = 45, ;
Column45.ControlSource = "utilm", ;
Column45.FontName = "Arial", ;
Column45.FontSize = 10, ;
Column45.Name = "cUtilm", ;
Column45.ReadOnly = .T., ;
Column45.Width = 107, ;
Column46.ColumnOrder = 46, ;
Column46.ControlSource = "dataoram", ;
Column46.FontName = "Arial", ;
Column46.FontSize = 10, ;
Column46.Name = "cDataoram", ;
Column46.ReadOnly = .T., ;
Column46.Width = 99
*< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" />
ADD OBJECT 'grid_facturi.cAdresaFacturare.Header1' AS header WITH ;
@@ -2759,6 +2778,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
SelectedBackColor = 0,0,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grid_facturi.cDataoram.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Dataora modificarii", ;
FontName = "Arial", ;
FontSize = 10, ;
Name = "Header1"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'grid_facturi.cDataoram.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
SelectedBackColor = 0,0,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grid_facturi.cDataoras.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Dataora stergerii", ;
@@ -3381,6 +3420,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
SelectedBackColor = 0,0,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grid_facturi.cUtilm.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Operator modificare", ;
FontName = "Arial", ;
FontSize = 10, ;
Name = "Header1"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'grid_facturi.cUtilm.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T., ;
SelectedBackColor = 0,0,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grid_facturi.cUtils.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Operator stergere", ;
@@ -3679,11 +3738,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
#DEFINE T41 41 && 'RETUR TRANSFER'
#DEFINE T_6 -6 && 'RETUR TRANSFER DIN GESTIUNE VALORICA'
LOCAL loFactura
LOCAL loFactura, lcSql, lnFacturi
IF !This.IsCopy(crsFacturi.tip)
RETURN
ENDIF
* proforma deja facturata: se avertizeaza, nu se blocheaza
IF Nvl(crsFacturi.eproforma,0) = 1
lcSql = [SELECT COUNT(*) AS nr FROM vanzari_coresp WHERE sters = 0 AND tip = 4 ] + ;
[AND id_vanzare_aviz = ] + Alltrim(Str(crsFacturi.id_vanzare,20,0))
IF goExecutor.oExecute(lcSql,[crsprofact]) >= 0 AND Used('crsprofact')
lnFacturi = crsprofact.nr
Use In (Select('crsprofact'))
IF lnFacturi > 0
IF amessagebox("Din aceasta proforma s-au emis deja " + Alltrim(Str(lnFacturi)) + ;
" facturi. Doriti sa continuati?",4+32,"Confirmare") <> 6
RETURN
ENDIF
ENDIF
ENDIF
ENDIF
* Copiez orice document, dar il tratez ca pe un caz simplu (factura din lista de preturi, aviz din lista de preturi, transfer simplu)
* De exemplu, factura din contract sau din comanda, nu are sens sa fie copiata, dar o tratez ca pe o factura din lista de preturi
@@ -3871,6 +3945,96 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
ENDPROC
PROCEDURE do_editare_unificata
If !This.lactiv3
Return
Endif
If Reccount('crsfacturi') = 0
amessagebox("Nu exista inregistrari pentru editare!",0+48,"Atentie")
Return
Endif
If glLunaInchisa
Return
Endif
Local lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare, poDate, poSnapshotEditare
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare
Select crsfacturi
lnIdVanzare = id_vanzare
lnCod = cod
pnAn = Year(data_act)
pnLuna = Month(data_act)
lnSters = sters
lnIdFact = id_fact
llEProforma = (eproforma = 1)
lnTipDoc = tip
If lnSters = 1
amessagebox("Acest document este deja sters!",0+48,"Atentie")
Return
Endif
If llEProforma
amessagebox("Proformele nu pot fi editate pe aceasta cale!",0+48,"Atentie")
Return
Endif
If Inlist(lnTipDoc, 44, 45, 46, 51)
amessagebox("Documentele acestui modul nu pot fi editate pe aceasta cale!",0+48,"Atentie")
Return
Endif
If (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
amessagebox('Nu puteti edita decat inregistrari din luna curenta!',0,'Atentie!')
Return
Endif
If ReferinteDocumenteNota(pnAn, pnLuna, lnCod) && odocumente.prg
amessagebox("Documentul are referinte (incasari/plati). Nu poate fi editat.", 0+48,"Editare")
Return
Endif
If EsteInEFactura(lnIdFact) && ofacturare_editare.prg
amessagebox("Documentul a fost trimis in eFactura. Nu poate fi editat.", 0+48,"Editare")
Return
Endif
If DocumentAreUrmasi(lnIdVanzare) && ofacturare_editare.prg
amessagebox("Documentul are facturi sau avize emise pe lantul lui. Nu poate fi editat.", 0+48,"Editare")
Return
Endif
poDate = IncarcaAntetFacturaEditare(lnIdVanzare, @pnDiscountRon, @pnDiscountValuta) && ofacturare_editare.prg
If Vartype(poDate) <> 'O'
Return
Endif
IncarcaLiniiFacturaEditare(poDate, lnIdVanzare) && ofacturare_editare.prg
update_jtva_coloane([JV], [jtva_coloane_temp]) && updateserver.prg
update_saft_taxtable() && updateserver.prg
If Used('jtva_coloane')
Use In jtva_coloane
Endif
If poDate.tva_incasare = 0
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
Else
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
Endif
loForm = Createobject('frm_facturare_articole2')
loForm.ndiscfactron = pnDiscountRon
loForm.ndiscfactval = pnDiscountValuta
loForm.do_calculeaza_totaluri()
*!* S8b: instantaneul se ia AICI - primul punct unde discountul e deja corect si formularul
*!* inca nu a fost aratat; ramane in viata cat formularul e deschis (Show() e modal)
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, lnIdVanzare, lnIdFact, lnCod, pnAn, pnLuna)
loForm.Show()
ENDPROC
PROCEDURE do_listare
*!* 26.11.2019
*!* marius.mutu
@@ -4929,12 +5093,14 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
PROCEDURE inainte_de_do_modifica
Local lnOptiune
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (note, rulaje, articole)')
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (note, rulaje, articole);Editare \<unificata (articole)')
Do Case
Case lnOptiune = 1
This.do_modifica()
Case lnOptiune = 2
This.do_editare_factura()
Case lnOptiune = 3
This.do_editare_unificata()
Endcase
ENDPROC