#13: formular de facturare unificat - etapa curenta

Squash al branch-ului de lucru plan13-s2.

Cod: clasa noua ofacturare_util (geometrie si utilitare de formular), inrolata in
roafacturare.prg; meniul "Facturare (nou)" plat, cu reparatia literalului peste
limita VFP de 255 de caractere care impiedica compilarea metodei.

Livrare: changelog 2.11.19, marcajul de versiune DB pentru scripturile finale din
SCRIPTURI_CLAR\2026\09, inventarul livrarii in docs/livrare_13.md si registrul de
erori deschise. Documentatia de lucru a etapei (cercetare, rapoarte, handoff-uri,
snapshot-uri de scripturi si backup-uri de rollback) a fost scoasa din arbore.

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:30:51 +03:00
parent 87063b06a8
commit 104c24ec20
80 changed files with 5585 additions and 27852 deletions

136
Clase/ofacturare_util.vc2 Normal file
View File

@@ -0,0 +1,136 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.21" SourceFile="ofacturare_util.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*
DEFINE CLASS frm_cursuri_valutare AS _frmbase OF "_frm_base.vcx"
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="grd_cursuri" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cCurs.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cCurs.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cNume_val.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cNume_val.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cMultiplicator.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="grd_cursuri.cMultiplicator.Text1" UniqueID="" Timestamp="" />
*<PropValue>
AutoCenter = .T.
Caption = "Cursuri valutare"
DoCreate = .T.
Height = 224
Name = "frm_cursuri_valutare"
Width = 420
WindowType = 1
_shape1.Name = "_shape1"
_shape1.Width = 422
_shape2.Left = 370
_shape2.Name = "_shape2"
Lb_titlu_alb_b121.Caption = "Curs valutar"
Lb_titlu_alb_b121.FontBold = .T.
Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121"
BUT_TERMIN1.Left = 390
BUT_TERMIN1.Name = "BUT_TERMIN1"
*</PropValue>
ADD OBJECT 'grd_cursuri' AS _grdrow WITH ;
ColumnCount = 3, ;
DeleteMark = .F., ;
FontName = "Arial Narrow", ;
Height = 180, ;
Left = 12, ;
Name = "grd_cursuri", ;
ScrollBars = 2, ;
TabIndex = 1, ;
Top = 32, ;
Width = 396, ;
Column1.ColumnOrder = 3, ;
Column1.ControlSource = "curs", ;
Column1.FontName = "Arial Narrow", ;
Column1.InputMask = (get_mask(14,gnPCurs)), ;
Column1.Name = "cCurs", ;
Column1.Width = 102, ;
Column2.ColumnOrder = 2, ;
Column2.ControlSource = "nume_val", ;
Column2.FontName = "Arial Narrow", ;
Column2.Name = "cNume_val", ;
Column2.Width = 130, ;
Column3.ColumnOrder = 1, ;
Column3.ControlSource = "multiplicator", ;
Column3.FontName = "Arial Narrow", ;
Column3.InputMask = (get_mask(10,0)), ;
Column3.Name = "cMultiplicator", ;
Column3.Width = 130
*< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" />
ADD OBJECT 'grd_cursuri.cCurs.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Curs", ;
FontName = "Arial Narrow", ;
Name = "Header1"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'grd_cursuri.cCurs.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial Narrow", ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
SelectedBackColor = 0,64,128
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grd_cursuri.cMultiplicator.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Multiplicator", ;
FontName = "Arial Narrow", ;
Name = "Header1"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'grd_cursuri.cMultiplicator.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial Narrow", ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
SelectedBackColor = 100,185,255
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT 'grd_cursuri.cNume_val.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Valuta", ;
FontName = "Arial Narrow", ;
Name = "Header1"
*< END OBJECT: BaseClass="header" />
ADD OBJECT 'grd_cursuri.cNume_val.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
FontName = "Arial Narrow", ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
SelectedBackColor = 0,64,128
*< END OBJECT: BaseClass="textbox" />
PROCEDURE Init
Lparameters tcCursor, tdZiCurs, tnTip
Local lcCursor
DoDefault()
lcCursor = Iif(Empty(tcCursor), 'crscursuri', tcCursor)
If !Used(m.lcCursor) Or Reccount(m.lcCursor) = 0
This.Release()
Return .F.
Endif
This.grd_cursuri.RecordSource = m.lcCursor
If !Empty(Nvl(m.tdZiCurs, {}))
This.Lb_titlu_alb_b121.Caption = "Curs valutar (" + Dtoc(m.tdZiCurs) + ")"
Else
This.Lb_titlu_alb_b121.Caption = "Curs valutar"
Endif
ENDPROC
ENDDEFINE

View File

@@ -32,11 +32,14 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
*< OBJECTDATA: ObjPath="Page2.Cw8" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page2.Pict_liniuta2" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page2.Cw9" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page2.Cw10" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page2.Pict_liniuta1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Pict_meniu1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Cw1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Cw4" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Cw3" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Cw2" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page3.Cw5" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page4.Pict_meniu1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page4.Cw1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Page4.Cw4" UniqueID="" Timestamp="" />
@@ -244,6 +247,16 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
Label_item1.WordWrap = .T.
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="container" />
ADD OBJECT 'Page2.Cw10' AS cw WITH ;
Left = 5, ;
Name = "Cw10", ;
nid_cw = 10, ;
TabIndex = 10, ;
Top = 250, ;
Label_item1.Caption = "Facturare (nou)", ;
Label_item1.Name = "Label_item1"
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="container" />
ADD OBJECT 'Page2.Cw2' AS cw WITH ;
Left = 5, ;
Name = "Cw2", ;
@@ -348,6 +361,13 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
LABEL_ITEM1.WordWrap = .T.
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="container" />
ADD OBJECT 'Page2.Pict_liniuta1' AS pict_liniuta WITH ;
Left = 6, ;
Name = "Pict_liniuta1", ;
Picture = ..\comun\grafice\f3.jpg, ;
Top = 239
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="image" />
ADD OBJECT 'Page2.Pict_liniuta2' AS pict_liniuta WITH ;
Left = 6, ;
Name = "Pict_liniuta2", ;
@@ -411,6 +431,16 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
Label_item1.WordWrap = .T.
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="container" />
ADD OBJECT 'Page3.Cw5' AS cw WITH ;
Left = 5, ;
Name = "Cw5", ;
nid_cw = 5, ;
TabIndex = 5, ;
Top = 106, ;
Label_item1.Caption = "Avize (nou)", ;
Label_item1.Name = "Label_item1"
*< END OBJECT: ClassLib="..\comun\clase\ofundal.vcx" BaseClass="container" />
ADD OBJECT 'Page3.Pict_meniu1' AS pict_meniu WITH ;
Height = 473, ;
Left = 2, ;
@@ -619,6 +649,9 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
_grdrow1.cAgent.Header1.Name = "Header1", ;
_grdrow1.cAgent.Name = "cAgent", ;
_grdrow1.cAgent.Text1.Name = "Text1", ;
_grdrow1.cCodFiscal.Header1.Name = "Header1", ;
_grdrow1.cCodFiscal.Name = "cCodFiscal", ;
_grdrow1.cCodFiscal.Text1.Name = "Text1", ;
_grdrow1.cComanda_externa.Header1.Name = "Header1", ;
_grdrow1.cComanda_externa.Name = "cComanda_externa", ;
_grdrow1.cComanda_externa.Text1.Name = "Text1", ;
@@ -641,6 +674,9 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
_grdrow1.cFacturat.Name = "cFacturat", ;
_grdrow1.cFacturat._checkbox1.Alignment = 2, ;
_grdrow1.cFacturat._checkbox1.Name = "_checkbox1", ;
_grdrow1.cIdPart.Header1.Name = "Header1", ;
_grdrow1.cIdPart.Name = "cIdPart", ;
_grdrow1.cIdPart.Text1.Name = "Text1", ;
_grdrow1.cLucrare.Header1.Name = "Header1", ;
_grdrow1.cLucrare.Name = "cLucrare", ;
_grdrow1.cLucrare.Text1.Name = "Text1", ;
@@ -690,6 +726,9 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
_grdrow2.cNrCrt.Header1.Name = "Header1", ;
_grdrow2.cNrCrt.Name = "cNrCrt", ;
_grdrow2.cNrCrt.Text1.Name = "Text1", ;
_grdrow2.cNumeListaPreturi.Header1.Name = "Header1", ;
_grdrow2.cNumeListaPreturi.Name = "cNumeListaPreturi", ;
_grdrow2.cNumeListaPreturi.Text1.Name = "Text1", ;
_grdrow2.cPret.Header1.Name = "Header1", ;
_grdrow2.cPret.Name = "cPret", ;
_grdrow2.cPret.Text1.Name = "Text1", ;
@@ -697,6 +736,9 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
_grdrow2.cPret_cu_tva.Name = "cPret_cu_tva", ;
_grdrow2.cPret_cu_tva._checkbox1.Alignment = 2, ;
_grdrow2.cPret_cu_tva._checkbox1.Name = "_checkbox1", ;
_grdrow2.cPTVA.Header1.Name = "Header1", ;
_grdrow2.cPTVA.Name = "cPTVA", ;
_grdrow2.cPTVA.Text1.Name = "Text1", ;
_grdrow2.Height = 367, ;
_grdrow2.Left = 173, ;
_grdrow2.Name = "_grdrow2", ;
@@ -734,7 +776,8 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
Cmd_executa4.Top = 425, ;
But_factura1.Name = "But_factura1", ;
BUT_START_CRITERII1.Name = "BUT_START_CRITERII1", ;
BUT_RESET_CRITERII1.Name = "BUT_RESET_CRITERII1"
BUT_RESET_CRITERII1.Name = "BUT_RESET_CRITERII1", ;
But_attach1.Name = "But_attach1"
*< END OBJECT: ClassLib="..\comun\clase\ocomenzi.vcx" BaseClass="container" />
ADD OBJECT 'Page6.Ct_lucrari_detalii1' AS ct_lucrari_detalii WITH ;
@@ -883,6 +926,45 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
DO facturare_lista_de_preturi IN oproceduri_facturare.prg
ENDPROC
PROCEDURE Page2.Cw10.do_actiune
Private plFacturareNoua
plFacturareNoua = .T.
lcOptiuni = 'In lei;Retur factura in lei;Restaurant;Marfa in custodie - fara descarcare K;Marfa in custodie - cu descarcare K;\-;Invoice;Credit note;Factura fiscala in valuta;Retur factura in valuta'
lcOptiuni = m.lcOptiuni + ';\-;Contract: Factura lei;Contract: Invoice;Contract: Factura fiscala in valuta;\-;Pe baza de comanda;Din aviz'
lnOptiune = xmenu(m.lcOptiuni)
DO CASE
CASE m.lnOptiune = 1
factureaza(1)
CASE m.lnOptiune = 2
factureaza(8)
CASE m.lnOptiune = 3
factureaza(45)
CASE m.lnOptiune = 4
factureaza(49)
CASE m.lnOptiune = 5
factureaza(48)
CASE m.lnOptiune = 7
factureaza(5)
CASE m.lnOptiune = 8
factureaza(7)
CASE m.lnOptiune = 9
factureaza(10)
CASE m.lnOptiune = 10
factureaza(9)
CASE m.lnOptiune = 12
DO facturare_contracte WITH 'FACTURA LEI' IN oproceduri_facturare.prg
CASE m.lnOptiune = 13
DO facturare_contracte WITH 'INVOICE' IN oproceduri_facturare.prg
CASE m.lnOptiune = 14
DO facturare_contracte WITH 'FACTURA VALUTA' IN oproceduri_facturare.prg
CASE m.lnOptiune = 16
goComanda = ''
DO facturare_comenzi IN oproceduri_facturare.prg
CASE m.lnOptiune = 17
DO facturare_avize IN oproceduri_facturare.prg
ENDCASE
ENDPROC
PROCEDURE Page2.Cw2.do_actiune
lnOptiune = xmenu('Factura lei;Invoice;Factura fiscala in valuta')
DO CASE
@@ -941,6 +1023,22 @@ DEFINE CLASS pg_meniu_princ AS pg_meniu OF "..\comun\clase\ofundal.vcx"
DO aviz_subunitati.mpr
ENDPROC
PROCEDURE Page3.Cw5.do_actiune
Private plFacturareNoua
plFacturareNoua = .T.
lnOptiune = xmenu('C<>tre clien<65>i;C<>tre clien<65>i <20>n custodie;C<>tre clien<65>i debitori;Transfer <20>ntre subunit<69><74>i')
DO CASE
CASE m.lnOptiune = 1
This.Parent.Cw1.do_actiune()
CASE m.lnOptiune = 2
This.Parent.Cw2.do_actiune()
CASE m.lnOptiune = 3
This.Parent.Cw3.do_actiune()
CASE m.lnOptiune = 4
This.Parent.Cw4.do_actiune()
ENDCASE
ENDPROC
PROCEDURE Page4.Cw1.do_actiune
lnOptiune = xmenu('Vizualizare \<standard;Vizualizare \<experimentala (mai rapida)')
If Empty(m.lnOptiune)