NNIR editabil in Registrul Jurnal (frm_modific2024) + teste
This commit is contained in:
@@ -6720,6 +6720,8 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
*< OBJECTDATA: ObjPath="Grid1.Column43.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Grid1.Column43.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Grid1.Column43._combobox1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Grid1.Column44.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Grid1.Column44.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Command1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Gridextra1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Command2" UniqueID="" Timestamp="" />
|
||||
@@ -6762,6 +6764,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
*m: grid_focus_prima_coloana
|
||||
*m: resize_grid1
|
||||
*m: salveazaxml
|
||||
*m: sincronizeaza_nnir
|
||||
*m: updateexplicatiesaft
|
||||
*m: updateexplicatiesaftrul
|
||||
*m: valideaza_data
|
||||
@@ -6778,6 +6781,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
*p: lverificare
|
||||
*p: lvizualizare
|
||||
*p: nid_set
|
||||
*p: nnnirvechi
|
||||
*p: noldsuma && Valoarea la intrarea in campul "Suma"
|
||||
*p: nprimadata
|
||||
*p: nsuma && Total suma inregistrari
|
||||
@@ -6809,6 +6813,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
lvizualizare = .F.
|
||||
Name = "frm_modific2024"
|
||||
nid_set = 0
|
||||
nnnirvechi = 0
|
||||
noldsuma = 0
|
||||
nprimadata = 0
|
||||
nsuma = 0
|
||||
@@ -7143,7 +7148,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
ADD OBJECT 'Grid1' AS grid WITH ;
|
||||
Anchor = 10, ;
|
||||
BackColor = 244,250,255, ;
|
||||
ColumnCount = 43, ;
|
||||
ColumnCount = 44, ;
|
||||
DeleteMark = .F., ;
|
||||
FontCharSet = 238, ;
|
||||
FontSize = 10, ;
|
||||
@@ -7185,7 +7190,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column2.Width = 71, ;
|
||||
Column3.Alignment = 0, ;
|
||||
Column3.BackColor = 244,250,255, ;
|
||||
Column3.ColumnOrder = 15, ;
|
||||
Column3.ColumnOrder = 16, ;
|
||||
Column3.ControlSource = "fdoc", ;
|
||||
Column3.FontCharSet = 238, ;
|
||||
Column3.FontName = "Arial", ;
|
||||
@@ -7215,7 +7220,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column5.Width = 53, ;
|
||||
Column6.Alignment = 0, ;
|
||||
Column6.BackColor = 244,250,255, ;
|
||||
Column6.ColumnOrder = 7, ;
|
||||
Column6.ColumnOrder = 8, ;
|
||||
Column6.ControlSource = "partd", ;
|
||||
Column6.FontCharSet = 238, ;
|
||||
Column6.FontName = "Arial", ;
|
||||
@@ -7225,7 +7230,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column6.Width = 114, ;
|
||||
Column7.Alignment = 1, ;
|
||||
Column7.BackColor = 244,250,255, ;
|
||||
Column7.ColumnOrder = 10, ;
|
||||
Column7.ColumnOrder = 11, ;
|
||||
Column7.ControlSource = "scd", ;
|
||||
Column7.FontCharSet = 238, ;
|
||||
Column7.FontName = "Arial", ;
|
||||
@@ -7235,7 +7240,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column7.Width = 57, ;
|
||||
Column8.Alignment = 1, ;
|
||||
Column8.BackColor = 244,250,255, ;
|
||||
Column8.ColumnOrder = 12, ;
|
||||
Column8.ColumnOrder = 13, ;
|
||||
Column8.ControlSource = "scc", ;
|
||||
Column8.FontCharSet = 238, ;
|
||||
Column8.FontName = "Arial", ;
|
||||
@@ -7245,7 +7250,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column8.Width = 62, ;
|
||||
Column9.Alignment = 1, ;
|
||||
Column9.BackColor = 244,250,255, ;
|
||||
Column9.ColumnOrder = 14, ;
|
||||
Column9.ColumnOrder = 15, ;
|
||||
Column9.ControlSource = "suma", ;
|
||||
Column9.DynamicForeColor = "IIF(SUMA>=0, RGB(0,0,0), RGB(255,0,0))", ;
|
||||
Column9.FontCharSet = 238, ;
|
||||
@@ -7258,7 +7263,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column9.Width = 93, ;
|
||||
Column10.Alignment = 0, ;
|
||||
Column10.BackColor = 244,250,255, ;
|
||||
Column10.ColumnOrder = 8, ;
|
||||
Column10.ColumnOrder = 9, ;
|
||||
Column10.ControlSource = "partc", ;
|
||||
Column10.FontCharSet = 238, ;
|
||||
Column10.FontName = "Arial", ;
|
||||
@@ -7268,7 +7273,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column10.Width = 100, ;
|
||||
Column11.Alignment = 0, ;
|
||||
Column11.BackColor = 244,250,255, ;
|
||||
Column11.ColumnOrder = 9, ;
|
||||
Column11.ColumnOrder = 10, ;
|
||||
Column11.ControlSource = "explicatia", ;
|
||||
Column11.FontCharSet = 238, ;
|
||||
Column11.FontName = "Arial", ;
|
||||
@@ -7277,7 +7282,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column11.ReadOnly = .F., ;
|
||||
Column11.Width = 77, ;
|
||||
Column12.BackColor = 244,250,255, ;
|
||||
Column12.ColumnOrder = 37, ;
|
||||
Column12.ColumnOrder = 38, ;
|
||||
Column12.ControlSource = "cod", ;
|
||||
Column12.FontCharSet = 238, ;
|
||||
Column12.FontName = "Arial", ;
|
||||
@@ -7286,7 +7291,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column12.ReadOnly = .T., ;
|
||||
Column12.Width = 52, ;
|
||||
Column13.BackColor = 244,250,255, ;
|
||||
Column13.ColumnOrder = 16, ;
|
||||
Column13.ColumnOrder = 17, ;
|
||||
Column13.ControlSource = "pereched", ;
|
||||
Column13.FontCharSet = 238, ;
|
||||
Column13.FontName = "Arial", ;
|
||||
@@ -7295,7 +7300,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column13.ReadOnly = .F., ;
|
||||
Column13.Width = 106, ;
|
||||
Column14.BackColor = 244,250,255, ;
|
||||
Column14.ColumnOrder = 31, ;
|
||||
Column14.ColumnOrder = 32, ;
|
||||
Column14.ControlSource = "explicatia4", ;
|
||||
Column14.FontCharSet = 238, ;
|
||||
Column14.FontName = "Arial", ;
|
||||
@@ -7304,7 +7309,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column14.ReadOnly = .F., ;
|
||||
Column14.Width = 120, ;
|
||||
Column15.BackColor = 244,250,255, ;
|
||||
Column15.ColumnOrder = 24, ;
|
||||
Column15.ColumnOrder = 25, ;
|
||||
Column15.ControlSource = "nrord", ;
|
||||
Column15.FontCharSet = 238, ;
|
||||
Column15.FontName = "Arial", ;
|
||||
@@ -7312,7 +7317,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column15.Name = "Column15", ;
|
||||
Column15.ReadOnly = .F., ;
|
||||
Column16.BackColor = 244,250,255, ;
|
||||
Column16.ColumnOrder = 26, ;
|
||||
Column16.ColumnOrder = 27, ;
|
||||
Column16.ControlSource = "nresp", ;
|
||||
Column16.FontCharSet = 238, ;
|
||||
Column16.FontName = "Arial", ;
|
||||
@@ -7322,7 +7327,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column16.Name = "Column16", ;
|
||||
Column16.ReadOnly = .F., ;
|
||||
Column17.BackColor = 244,250,255, ;
|
||||
Column17.ColumnOrder = 27, ;
|
||||
Column17.ColumnOrder = 28, ;
|
||||
Column17.ControlSource = "dst_chlt", ;
|
||||
Column17.FontCharSet = 238, ;
|
||||
Column17.FontName = "Arial", ;
|
||||
@@ -7332,7 +7337,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column17.Name = "Column17", ;
|
||||
Column17.ReadOnly = .F., ;
|
||||
Column18.BackColor = 244,250,255, ;
|
||||
Column18.ColumnOrder = 32, ;
|
||||
Column18.ColumnOrder = 33, ;
|
||||
Column18.ControlSource = "explicatia5", ;
|
||||
Column18.FontCharSet = 238, ;
|
||||
Column18.FontName = "Arial", ;
|
||||
@@ -7341,7 +7346,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column18.ReadOnly = .F., ;
|
||||
Column18.Width = 119, ;
|
||||
Column19.BackColor = 244,250,255, ;
|
||||
Column19.ColumnOrder = 23, ;
|
||||
Column19.ColumnOrder = 24, ;
|
||||
Column19.ControlSource = "datascad", ;
|
||||
Column19.FontCharSet = 238, ;
|
||||
Column19.FontName = "Arial", ;
|
||||
@@ -7351,7 +7356,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column19.Visible = .T., ;
|
||||
Column19.Width = 87, ;
|
||||
Column20.BackColor = 244,250,255, ;
|
||||
Column20.ColumnOrder = 28, ;
|
||||
Column20.ColumnOrder = 29, ;
|
||||
Column20.ControlSource = "suma_val", ;
|
||||
Column20.FontCharSet = 238, ;
|
||||
Column20.FontName = "Arial", ;
|
||||
@@ -7361,7 +7366,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column20.ReadOnly = .F., ;
|
||||
Column20.Width = 89, ;
|
||||
Column21.BackColor = 244,250,255, ;
|
||||
Column21.ColumnOrder = 30, ;
|
||||
Column21.ColumnOrder = 31, ;
|
||||
Column21.ControlSource = "curs", ;
|
||||
Column21.FontCharSet = 238, ;
|
||||
Column21.FontName = "Arial", ;
|
||||
@@ -7371,7 +7376,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column21.ReadOnly = .F., ;
|
||||
Column21.Width = 72, ;
|
||||
Column22.BackColor = 244,250,255, ;
|
||||
Column22.ColumnOrder = 33, ;
|
||||
Column22.ColumnOrder = 34, ;
|
||||
Column22.ControlSource = "gestin", ;
|
||||
Column22.FontCharSet = 238, ;
|
||||
Column22.FontName = "Arial", ;
|
||||
@@ -7380,7 +7385,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column22.ReadOnly = .F., ;
|
||||
Column22.Width = 116, ;
|
||||
Column23.BackColor = 244,250,255, ;
|
||||
Column23.ColumnOrder = 11, ;
|
||||
Column23.ColumnOrder = 12, ;
|
||||
Column23.ControlSource = "ascd", ;
|
||||
Column23.FontCharSet = 238, ;
|
||||
Column23.FontName = "Arial", ;
|
||||
@@ -7389,7 +7394,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column23.ReadOnly = .F., ;
|
||||
Column23.Width = 46, ;
|
||||
Column24.BackColor = 244,250,255, ;
|
||||
Column24.ColumnOrder = 13, ;
|
||||
Column24.ColumnOrder = 14, ;
|
||||
Column24.ControlSource = "ascc", ;
|
||||
Column24.FontCharSet = 238, ;
|
||||
Column24.FontName = "Arial", ;
|
||||
@@ -7398,7 +7403,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column24.ReadOnly = .F., ;
|
||||
Column24.Width = 48, ;
|
||||
Column25.BackColor = 244,250,255, ;
|
||||
Column25.ColumnOrder = 38, ;
|
||||
Column25.ColumnOrder = 39, ;
|
||||
Column25.ControlSource = "id_set", ;
|
||||
Column25.FontCharSet = 238, ;
|
||||
Column25.FontName = "Arial", ;
|
||||
@@ -7407,7 +7412,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column25.ReadOnly = .T., ;
|
||||
Column25.Width = 71, ;
|
||||
Column26.BackColor = 244,250,255, ;
|
||||
Column26.ColumnOrder = 19, ;
|
||||
Column26.ColumnOrder = 20, ;
|
||||
Column26.ControlSource = "proc_tva", ;
|
||||
Column26.FontCharSet = 238, ;
|
||||
Column26.FontName = "Arial", ;
|
||||
@@ -7416,7 +7421,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column26.ReadOnly = .T., ;
|
||||
Column26.Width = 54, ;
|
||||
Column27.BackColor = 244,250,255, ;
|
||||
Column27.ColumnOrder = 17, ;
|
||||
Column27.ColumnOrder = 18, ;
|
||||
Column27.ControlSource = "perechec", ;
|
||||
Column27.FontCharSet = 238, ;
|
||||
Column27.FontName = "Arial", ;
|
||||
@@ -7425,7 +7430,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column27.ReadOnly = .F., ;
|
||||
Column27.Width = 104, ;
|
||||
Column28.BackColor = 244,250,255, ;
|
||||
Column28.ColumnOrder = 35, ;
|
||||
Column28.ColumnOrder = 36, ;
|
||||
Column28.ControlSource = "sectie", ;
|
||||
Column28.FontCharSet = 238, ;
|
||||
Column28.FontName = "Arial", ;
|
||||
@@ -7434,7 +7439,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column28.ReadOnly = .F., ;
|
||||
Column28.Width = 88, ;
|
||||
Column29.BackColor = 244,250,255, ;
|
||||
Column29.ColumnOrder = 29, ;
|
||||
Column29.ColumnOrder = 30, ;
|
||||
Column29.ControlSource = "nume_val", ;
|
||||
Column29.FontCharSet = 238, ;
|
||||
Column29.FontName = "Arial", ;
|
||||
@@ -7443,7 +7448,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column29.ReadOnly = .F., ;
|
||||
Column29.Width = 79, ;
|
||||
Column30.BackColor = 244,250,255, ;
|
||||
Column30.ColumnOrder = 39, ;
|
||||
Column30.ColumnOrder = 40, ;
|
||||
Column30.ControlSource = "id_partd", ;
|
||||
Column30.FontCharSet = 238, ;
|
||||
Column30.FontName = "Arial", ;
|
||||
@@ -7452,7 +7457,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column30.ReadOnly = .T., ;
|
||||
Column30.Width = 55, ;
|
||||
Column31.BackColor = 244,250,255, ;
|
||||
Column31.ColumnOrder = 40, ;
|
||||
Column31.ColumnOrder = 41, ;
|
||||
Column31.ControlSource = "id_partc", ;
|
||||
Column31.FontCharSet = 238, ;
|
||||
Column31.FontName = "Arial", ;
|
||||
@@ -7461,7 +7466,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column31.ReadOnly = .T., ;
|
||||
Column31.Width = 55, ;
|
||||
Column32.BackColor = 244,250,255, ;
|
||||
Column32.ColumnOrder = 34, ;
|
||||
Column32.ColumnOrder = 35, ;
|
||||
Column32.ControlSource = "gestout", ;
|
||||
Column32.FontCharSet = 238, ;
|
||||
Column32.FontName = "Arial", ;
|
||||
@@ -7470,7 +7475,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column32.ReadOnly = .F., ;
|
||||
Column32.Width = 92, ;
|
||||
Column33.BackColor = 244,250,255, ;
|
||||
Column33.ColumnOrder = 36, ;
|
||||
Column33.ColumnOrder = 37, ;
|
||||
Column33.ControlSource = "sucursala", ;
|
||||
Column33.FontCharSet = 238, ;
|
||||
Column33.FontName = "Arial", ;
|
||||
@@ -7479,7 +7484,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column33.ReadOnly = .F., ;
|
||||
Column33.Width = 121, ;
|
||||
Column34.BackColor = 244,250,255, ;
|
||||
Column34.ColumnOrder = 25, ;
|
||||
Column34.ColumnOrder = 26, ;
|
||||
Column34.ControlSource = "contract", ;
|
||||
Column34.FontCharSet = 238, ;
|
||||
Column34.FontName = "Arial", ;
|
||||
@@ -7488,7 +7493,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column34.ReadOnly = .T., ;
|
||||
Column34.Width = 65, ;
|
||||
Column35.BackColor = 244,250,255, ;
|
||||
Column35.ColumnOrder = 20, ;
|
||||
Column35.ColumnOrder = 21, ;
|
||||
Column35.ControlSource = "explicatie_tva", ;
|
||||
Column35.FontCharSet = 238, ;
|
||||
Column35.FontName = "Arial", ;
|
||||
@@ -7497,7 +7502,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column35.ReadOnly = .F., ;
|
||||
Column35.Width = 136, ;
|
||||
Column36.BackColor = 244,250,255, ;
|
||||
Column36.ColumnOrder = 18, ;
|
||||
Column36.ColumnOrder = 19, ;
|
||||
Column36.ControlSource = "cu_tva", ;
|
||||
Column36.FontCharSet = 238, ;
|
||||
Column36.FontName = "Arial", ;
|
||||
@@ -7517,7 +7522,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column37.ReadOnly = .F., ;
|
||||
Column37.Width = 58, ;
|
||||
Column38.BackColor = 244,250,255, ;
|
||||
Column38.ColumnOrder = 41, ;
|
||||
Column38.ColumnOrder = 42, ;
|
||||
Column38.ControlSource = "id_fact", ;
|
||||
Column38.FontCharSet = 238, ;
|
||||
Column38.FontName = "Arial", ;
|
||||
@@ -7526,7 +7531,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column38.ReadOnly = .T., ;
|
||||
Column38.Width = 94, ;
|
||||
Column39.BackColor = 244,250,255, ;
|
||||
Column39.ColumnOrder = 42, ;
|
||||
Column39.ColumnOrder = 43, ;
|
||||
Column39.ControlSource = "id_factd", ;
|
||||
Column39.FontCharSet = 238, ;
|
||||
Column39.FontName = "Arial", ;
|
||||
@@ -7535,7 +7540,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column39.ReadOnly = .T., ;
|
||||
Column39.Width = 75, ;
|
||||
Column40.BackColor = 244,250,255, ;
|
||||
Column40.ColumnOrder = 43, ;
|
||||
Column40.ColumnOrder = 44, ;
|
||||
Column40.ControlSource = "id_factc", ;
|
||||
Column40.FontCharSet = 238, ;
|
||||
Column40.FontName = "Arial", ;
|
||||
@@ -7555,7 +7560,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column41.Width = 22, ;
|
||||
Column42.BackColor = 244,250,255, ;
|
||||
Column42.Bound = .F., ;
|
||||
Column42.ColumnOrder = 21, ;
|
||||
Column42.ColumnOrder = 22, ;
|
||||
Column42.ControlSource = "Iif(Seek(tAct.taxcode,'saft_taxtable','taxcode'),saft_taxtable.taxname,'')", ;
|
||||
Column42.CurrentControl = "_combobox1", ;
|
||||
Column42.FontCharSet = 238, ;
|
||||
@@ -7566,7 +7571,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column42.Width = 184, ;
|
||||
Column43.BackColor = 244,250,255, ;
|
||||
Column43.Bound = .F., ;
|
||||
Column43.ColumnOrder = 22, ;
|
||||
Column43.ColumnOrder = 23, ;
|
||||
Column43.ControlSource = "Iif(Seek(tAct.paymentcode,'saft_mecanisme_plati','mcode'),saft_mecanisme_plati.paymentname,'')", ;
|
||||
Column43.CurrentControl = "_combobox1", ;
|
||||
Column43.FontCharSet = 238, ;
|
||||
@@ -7574,7 +7579,17 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
Column43.Name = "Column43", ;
|
||||
Column43.ReadOnly = .F., ;
|
||||
Column43.Sparse = .F., ;
|
||||
Column43.Width = 146
|
||||
Column43.Width = 146, ;
|
||||
Column44.Alignment = 1, ;
|
||||
Column44.BackColor = 244,250,255, ;
|
||||
Column44.ColumnOrder = 7, ;
|
||||
Column44.ControlSource = "nnir", ;
|
||||
Column44.FontCharSet = 238, ;
|
||||
Column44.FontName = "Arial", ;
|
||||
Column44.FontSize = 10, ;
|
||||
Column44.Name = "Column44", ;
|
||||
Column44.ReadOnly = .F., ;
|
||||
Column44.Width = 60
|
||||
*< END OBJECT: BaseClass="grid" />
|
||||
|
||||
ADD OBJECT 'Grid1.cAles._CHECKBOX1' AS _checkbox WITH ;
|
||||
@@ -8442,6 +8457,29 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
SelectedBackColor = 49,106,197
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'Grid1.Column44.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Nr. NIR", ;
|
||||
FontCharSet = 238, ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'Grid1.Column44.Text1' AS textbox WITH ;
|
||||
Alignment = 1, ;
|
||||
BackColor = 244,250,255, ;
|
||||
BorderStyle = 0, ;
|
||||
FontCharSet = 238, ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .F., ;
|
||||
SelectedBackColor = 49,106,197
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'Grid1.Column5.Header5' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Nr.Doc.", ;
|
||||
@@ -13613,6 +13651,9 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
This.grid1.Anchor = 11
|
||||
This.but_renunt1.Anchor = 8
|
||||
|
||||
If This.nid_set = 90101
|
||||
This.grid1.Column44.ReadOnly = .T.
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Load
|
||||
@@ -13683,6 +13724,19 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
|
||||
this.gridextra1.setup()
|
||||
LOCAL lcPrefFile, lcPrefFileContents, lcKey, lcPrefs
|
||||
LOCAL ARRAY laNnirPrefs(1)
|
||||
lcPrefFile = This.gridextra1.GetUserApplicationDataPath() + This.gridextra1.GridPreferenceFile
|
||||
lcPrefFileContents = ""
|
||||
IF FILE(m.lcPrefFile)
|
||||
lcPrefFileContents = FILETOSTR(m.lcPrefFile)
|
||||
ENDIF
|
||||
lcKey = SYS(1272, This.grid1) + "("
|
||||
lcPrefs = STREXTRACT(m.lcPrefFileContents, m.lcKey, ")", 1, 1)
|
||||
*!* pozitioneaza coloana la prima deschidere, cat timp preferintele salvate nu o acopera
|
||||
IF EMPTY(m.lcPrefs) OR ALINES(laNnirPrefs, m.lcPrefs, 7, ",") < This.grid1.ColumnCount * 2
|
||||
This.grid1.Column44.ColumnOrder = 7
|
||||
ENDIF
|
||||
this.grid1.SetAll("dynamicbackcolor", "IIF(ALES, RGB(255,255,225), RGB(255,255,255))", "Column")
|
||||
This.CalculeazaTotal()
|
||||
*!* 24.05.2011 ^
|
||||
@@ -13717,6 +13771,37 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE sincronizeaza_nnir
|
||||
*!* propaga NNIR-ul modificat pe toate liniile notei si pe rulajele asociate
|
||||
LPARAMETERS tnNnirVechi, tnNnirNou
|
||||
LOCAL lcSelect, lnRecno
|
||||
IF NVL(m.tnNnirVechi, 0) = NVL(m.tnNnirNou, 0)
|
||||
RETURN
|
||||
ENDIF
|
||||
lcSelect = SELECT()
|
||||
lnRecno = RECNO('tact')
|
||||
UPDATE tact SET nnir = m.tnNnirNou WHERE NVL(nnir, 0) = m.tnNnirVechi
|
||||
IF USED('trul')
|
||||
UPDATE trul SET nnir = m.tnNnirNou WHERE NVL(nnir, 0) = m.tnNnirVechi
|
||||
IF _TALLY > 0
|
||||
Thisform.pgfArticole.page1.grdRulaje.Refresh()
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
UPDATE trul_obinv SET nnir = m.tnNnirNou WHERE NVL(nnir, 0) = m.tnNnirVechi
|
||||
IF _TALLY > 0
|
||||
Thisform.pgfArticole.page2.grdRulajeObinv.Refresh()
|
||||
ENDIF
|
||||
ENDIF
|
||||
SELECT tact
|
||||
IF BETWEEN(m.lnRecno, 1, RECCOUNT('tact'))
|
||||
GO m.lnRecno
|
||||
ELSE
|
||||
GO TOP
|
||||
ENDIF
|
||||
SELECT (m.lcSelect)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE updateexplicatiesaft
|
||||
* Daca nu este activata SAFT 406 nu fac nimic
|
||||
IF !m.gl406
|
||||
@@ -14201,6 +14286,10 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
.Column35.ReadOnly = .T. && cod
|
||||
.Column25.ReadOnly = .T. && id_set
|
||||
ENDWITH
|
||||
*!* pastreaza blocarea NNIR pentru notele de inventar (id_set = 90101)
|
||||
IF Thisform.nid_set = 90101
|
||||
This.Column44.ReadOnly = .T.
|
||||
ENDIF
|
||||
*!* 10.08.2011 ^
|
||||
*!* pot selecta inregistrari din alte sucursale pentru operatiile de copiere, adaugare care
|
||||
This.cAles.ReadOnly = .F.
|
||||
@@ -14674,6 +14763,19 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
thisform.cPaymentCode = ALLTRIM(tAct.paymentcode)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.Column44.Text1.LostFocus
|
||||
Local lnNnirNou, lnNnirVechi
|
||||
lnNnirVechi = thisform.nnnirvechi
|
||||
lnNnirNou = NVL(tAct.nnir, 0)
|
||||
Thisform.sincronizeaza_nnir(m.lnNnirVechi, m.lnNnirNou)
|
||||
Thisform.nnnirvechi = m.lnNnirNou
|
||||
Thisform.Grid1.Refresh()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.Column44.Text1.When
|
||||
Thisform.nnnirvechi = NVL(tAct.nnir, 0)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.Column6.Text1.InteractiveChange
|
||||
ADDPROPERTY(this, 'lInteractiveChange')
|
||||
LOCAL lnIdPart
|
||||
|
||||
17
docs/capcana_grid_preferinte_utilizator.md
Normal file
17
docs/capcana_grid_preferinte_utilizator.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Capcana: coloana noua intr-un grid existent ajunge la coada (preferinte GridExtras)
|
||||
|
||||
`GridExtras` (`COMUN\utile\GridExtras\gridextras.vc2:1051`, `restoregridpreferences` /
|
||||
`savegridpreferences`) salveaza **per utilizator** latimea si ordinea coloanelor fiecarui grid,
|
||||
in `%APPDATA%\...\gridprefs.tmp`, sub cheia `SYS(1272, grid)` (ex. `frm_modific2024.grid1`).
|
||||
Salvarea se face live, la `columnmoved`/`columnresize`, nu la iesirea din formular.
|
||||
|
||||
Consecinta: `ColumnOrder` setat in clasa e neutralizat la runtime pentru orice utilizator care a
|
||||
deschis deja formularul inainte de livrare - `gridextra1.setup()` restaureaza ordinea veche, iar
|
||||
coloana nou adaugata (care nu exista in preferinte) ajunge ultima.
|
||||
|
||||
Solutie: repozitionare la runtime, in `Show()`, **dupa** `gridextra1.setup()`, aplicata o singura
|
||||
data - cat timp preferintele salvate nu acopera toate coloanele (implementat pe
|
||||
`frm_modific2024`, `COMUN\clase\omodificari.vc2`, coloana `nnir`).
|
||||
|
||||
La testare: pozitia coloanei nu e o asertiune stabila intre masini. Se asertesteaza tare
|
||||
`ControlSource` si `ReadOnly`; `ColumnOrder` ramane informativ.
|
||||
@@ -76,6 +76,10 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata:
|
||||
- Metoda noua de clasa cere `*m: nume` in `*<DefinedPropArrayMethod>`; fara ea, prima salvare
|
||||
din IDE o arunca tacut, iar refresh-ul urmator absoarbe pierderea in cache (si in .bak-uri).
|
||||
Override-urile de metode de baza (Init, Show, hook-uri) nu au nevoie de `*m:`.
|
||||
- FoxBin2Prg NU pastreaza pozitia in text a unei metode noi: o regenereaza la pozitia
|
||||
alfabetica din `*<DefinedPropArrayMethod>`. O metoda scrisa in alta parte a fisierului
|
||||
face fidelity-check-ul sa pice. Sursa de adevar pentru relocare e textul regenerat din
|
||||
`<staging>\verify\` - muta metoda unde apare acolo si reia write-back-ul.
|
||||
- Salvarea din VFP IDE peste un binar scris de txt2vcx poate PIERDE si definitii `*m:` deja
|
||||
existente, desi corpurile PROCEDURE raman (patit pe ROAGEST: `import_adauga_factura.recalc_tva`,
|
||||
`import_nota.do_adauga/do_copie/do_reface`); simptom: crash la Createobject cu
|
||||
|
||||
53
docs/flux-modificare-stergere-nota-jurnal.md
Normal file
53
docs/flux-modificare-stergere-nota-jurnal.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Flux: modificare/stergere nota in Registrul Jurnal
|
||||
|
||||
Comportament CORECT (nu bug): la **modificarea** unei note din Registrul Jurnal, documentul
|
||||
original nu se suprascrie. Se marcheaza `sters = 1` pe randurile vechi (`ACT`/`RUL`/`RUL_OBINV`),
|
||||
apoi se scrie un document NOU cu alt `cod`, pastrand acelasi `id_fact`/`id_factd`. Ambele operatii
|
||||
ruleaza intr-o tranzactie manuala unica (commit sau rollback pe amandoua).
|
||||
|
||||
## Unde
|
||||
|
||||
- `afisjurcom.do_modifica` - `COMUN\clase\comun.vc2:2222-2562`. Deschide tranzactia manuala
|
||||
(`Thisform.do_deschide_tranzactie()`, linia 2448), apoi `oscrie_in_fisiere(2,...)` = STERGE
|
||||
(linia 2451), apoi `oscrie_in_fisiere(0,...)` = SCRIE (linia 2479), apoi
|
||||
`pack_contafin.finalizeaza_modificare_nota(...)` (2484-2486), apoi
|
||||
`Thisform.do_inchide_tranzactie(...)` (linia 2535) - commit daca tot ce a rulat inainte a
|
||||
reusit, rollback altfel.
|
||||
- `do_deschide_tranzactie`/`do_inchide_tranzactie` (`_frmbase`, `COMUN\clase\_frm_base.vc2:252,279`;
|
||||
varianta identica ca procedura globala in `COMUN\programe\oproceduri_rulaje.prg:287,303`):
|
||||
`SQLSetProp(gnHandle,'Transactions',2)` la deschidere, `SQLCOMMIT`/`SQLROLLBACK` +
|
||||
`SQLSetProp(...,'Transactions',1)` la inchidere.
|
||||
- `oscrie_in_fisiere.prg` (`COMUN\programe\oscrie_in_fisiere.prg`): `tnScrie_Sterge` 0=scriere,
|
||||
2=stergere. Apeleaza server-side `pack_contafin.init_scriere_act_rul_local` +
|
||||
`final_scriere_act_rul_local` -> `finalizeaza_scriere_act_rul`, care ruleaza `SCRIE_IN_ACT`
|
||||
(scriere) sau `STERGE_DIN_ACT` (stergere) din `PACK_CONTAFIN.pck`.
|
||||
- `PACK_CONTAFIN.STERGE_DIN_ACT` (`COMUN\docs\PACK_CONTAFIN.pck:1815-1859`):
|
||||
`UPDATE ACT SET STERS = 1 ... WHERE COD = tnCod` - marcheaza vechiul document, pe `cod`-ul vechi.
|
||||
- `PACK_CONTAFIN.SCRIE_IN_ACT` (`PACK_CONTAFIN.pck:630-901`): `LN_COD := pack_contafin.GET_COD()`
|
||||
(linia 648) aloca un `cod` nou; `UPDATE ACT_TEMP SET COD = LN_COD, ...` (linia 897) il scrie pe
|
||||
noul document - `ID_FACT` nu e atins, ramane cel din documentul original.
|
||||
- `PACK_CONTAFIN.finalizeaza_modificare_nota` (`PACK_CONTAFIN.pck:8601-8651`): aloca din nou
|
||||
`lnCodNou := pack_contafin.get_cod()` si actualizeaza pe codul nou `vanzari`
|
||||
(`pack_facturare.actualizeaza_vanzari`) si `atasamente_vanzari`. `nom_lucrari` se actualizeaza
|
||||
DOAR pentru `id_set IN (31003,31004,31005,31011)` (repune `id_fact`), nu general. `gest_inventar`
|
||||
NU se leaga de `cod`-ul nou - se identifica dupa `dataora_validat + an + luna` (cazul
|
||||
`id_set = 90101`, note de inventariere).
|
||||
|
||||
## Atentie: nu e valabil la fel pentru stergerea simpla
|
||||
|
||||
`afisjurcom.do_sterge` (`comun.vc2:2565-2724`) ofera doua optiuni (`xmenu`, linia 2625):
|
||||
- **Stergere document** (`lnOptiune = 1`): DOAR `OSCRIE_IN_FISIERE(2,...)` + `finalizeaza_stergere_nota`
|
||||
- marcheaza `sters = 1`, NU se creeaza document nou.
|
||||
- **Anulare document** (`lnOptiune = 2`): STERGE (linia 2698) + SCRIE (linia 2709, cu sumele puse pe
|
||||
0) - creeaza si document nou, la fel ca la modificare - dar aici cele doua apeluri NU sunt
|
||||
invelite intr-o tranzactie manuala comuna (nu apare `do_deschide_tranzactie`/
|
||||
`do_inchide_tranzactie` in `do_sterge`); fiecare `OSCRIE_IN_FISIERE` isi gestioneaza singur
|
||||
commit-ul (vezi `tlModificare`/`llManualTransactions` in `oscrie_in_fisiere.prg:111-165`).
|
||||
|
||||
## Implicatii practice
|
||||
|
||||
- Codul (`cod`) unui document din Registrul Jurnal NU e stabil dupa modificare/anulare - se schimba
|
||||
la fiecare editare. Cod hardcodat sau retinut dintr-o executare anterioara devine invalid.
|
||||
- Regasirea documentului editat se face dupa `id_fact` (sau alt marcaj stabil), niciodata dupa `cod`.
|
||||
- Randurile `sters = 1` ramase in `ACT`/`RUL`/`RUL_OBINV` dupa o modificare sunt normale (istoric),
|
||||
nu date corupte sau duplicate de curatat.
|
||||
@@ -60,6 +60,8 @@
|
||||
`0xBA` strica `a`/`t` cu caciula (`0xE3`, `0xFE`) din alte fisiere;
|
||||
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
||||
- grid needitabil pe formular cu 2+ grid-uri -> `capcana_grid_controlsource.md`;
|
||||
- adaugi o coloana intr-un grid deja livrat (ordinea din clasa e neutralizata de
|
||||
preferintele salvate per utilizator) -> `capcana_grid_preferinte_utilizator.md`;
|
||||
- `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`;
|
||||
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
||||
- testare UI / prin MCP -> `testare-ui-vfp.md`, `testare-vfp-mcp.md`;
|
||||
|
||||
121
utile/Teste/nnir_registru_jurnal/date_test_nnir.md
Normal file
121
utile/Teste/nnir_registru_jurnal/date_test_nnir.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Date de test - NNIR editabil in Registru Jurnal
|
||||
|
||||
Baza: `MARIUSM_AUTO@ROA_CENTRAL` (test, nu productie). Verificare: `verif_nnir_cod.sql` in acest
|
||||
folder (`sqlplus ... @verif_nnir_cod.sql <cod>`).
|
||||
|
||||
| Caz | COD | AN | LUNA | ID_SET | NNIR curent | ACT randuri | RUL randuri | RUL_OBINV randuri |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| NIR/achizitie (principal) | 1140841 | 2026 | 7 | 209 | 3 | 7 (doar 1 cu nnir=3, restul 0) | 1 (nnir=3) | 0 |
|
||||
| Obiecte de inventar | 1140835 | 2026 | 6 | 211 | 2026060001 | 1 | 0 | 2 (nnir=2026060001) |
|
||||
| Fara rulaje | 1140848 | 2026 | 7 | 209 | 124 | 2 (ambele nnir=124) | 0 | 0 |
|
||||
| Nota de inventar (blocare) | 1140716 | 2026 | 3 | 90101 | 2026030004 | 1 | 1 (nnir=2026030004) | 0 |
|
||||
|
||||
Note:
|
||||
- ACT e pe linii (nu pe antet) - la COD 1140841 doar linia efectiv legata de rulaj are NNIR-ul
|
||||
real, restul liniilor documentului au NNIR=0. Sincronizarea (`WHERE Nvl(nnir,0) = vechi`) trebuie
|
||||
sa lase liniile cu 0 neatinse.
|
||||
- Nu exista nicio nota cu `id_set=90101` sau cu rulaje in `RUL_OBINV` in luna curenta de lucru
|
||||
(AN=2026, LUNA=7) - alese din perioade anterioare. Editarea reala prin `afisjurcom.do_modifica`
|
||||
e limitata la luna curenta (`comun.vc2:2265-2268`); testul instantiaza `frm_modific2024` direct
|
||||
(ca `test_repro_cnrcrt_footer.prg`), cu cursoare construite pe AN/LUNA propriu notei, ocolind
|
||||
acel filtru - la fel ca precedentul deja acceptat in `achizitie_import`.
|
||||
|
||||
## Stare implementare (livrata, 03.08.2026)
|
||||
|
||||
`COMUN\clase\omodificari.vc2` (frm_modific2024):
|
||||
- `Grid1.ColumnCount = 44`, `Column44.ControlSource = "nnir"` (la runtime apare calificat automat
|
||||
de VFP cu aliasul cursorului: `tact.nnir`), `ReadOnly = .F.` - confirmat prin instantiere reala
|
||||
(nu doar citire de sursa).
|
||||
- `PROCEDURE sincronizeaza_nnir(tnNnirVechi, tnNnirNou)` (`omodificari.vc2:13762`) - update pe
|
||||
`tact`/`trul`/`trul_obinv` unde `Nvl(nnir,0) = vechi`, cu revenire pe recno. Propaga si valoarea
|
||||
0 (stergerea NNIR) - nu exista garda `EMPTY` pe valoarea noua.
|
||||
- Legare pe coloana: `Grid1.Column44.Text1.When` retine valoarea veche in `thisform.nnnirvechi`;
|
||||
**`Grid1.Column44.Text1.LostFocus`** apeleaza `sincronizeaza_nnir` si `Thisform.Grid1.Refresh()`
|
||||
- `Valid` a fost eliminat (la textbox valoarea nu ajunge in ControlSource decat DUPA ce Valid
|
||||
returneaza .T., deci nu propaga). Testul declanseaza `LostFocus`.
|
||||
- Blocarea pentru `id_set = 90101` (nota de inventar): in `Init` (`omodificari.vc2:13654`) SI
|
||||
reimpusa in `Grid1.AfterRowColChange` (14289-14292), dupa `SetAll("ReadOnly", ...)` - fara a doua,
|
||||
`SetAll` anuleaza blocarea la prima navigare in grid.
|
||||
- `ColumnOrder = 7` in clasa, plus repozitionare la runtime in `Show()`, dupa `gridextra1.setup()`
|
||||
(13729-13738) - preferintele de grid salvate per utilizator impingeau coloana noua la coada
|
||||
(vezi `COMUN\docs\capcana_grid_preferinte_utilizator.md`). Pozitia NU e o asertiune stabila intre
|
||||
masini; asertat tare in test: `ControlSource = "nnir"`, `ReadOnly` (.F. normal / .T. pe
|
||||
id_set 90101), propagarea valorii.
|
||||
|
||||
## Cerinte de mediu descoperite la construirea harness-ului (deja tratate in scripturile livrate)
|
||||
|
||||
- `COMUN\utile\Teste\test_init_env_auto.prg` (generic) e de fapt specific ROACONT (`gcAppPath`,
|
||||
classlib-uri si proceduri hardcodate `D:\ROA\ROACONT\`) - inutilizabil pentru ROAGEST. S-a scris
|
||||
`COMUN\utile\Teste\test_init_env_auto_roagest.prg`, cu SET PATH/CLASSLIB/PROCEDURE reconstruite
|
||||
din `Programe\roagest.prg`.
|
||||
- `gcUserName` trebuie setat explicit inainte de `optiuni_firma` (`oinit_optiuni.prg`) - altfel
|
||||
`SCRIE_OPTIUNI(gcUserName)` da "Operator/operand type mismatch" (PUBLIC nedeclarat ramane
|
||||
logic .F.). **`gcUserName` e schema/userul de conectare Oracle** (`Programe\roagest.prg:560,575`)
|
||||
- `SCRIE_OPTIUNI` il foloseste direct in `from <gcUserName>.optiuni`, deci trebuie
|
||||
`gcUserName = m.gcS`, NU un nume de persoana (ex. 'MARIUS M' da ORA-00907, identificator invalid
|
||||
- incercare gresita initiala). Numele de persoana e `gcUserNameApp` (variabila separata).
|
||||
- `frm_modific2024` face `Seek(..,'crsJtvaTemp','id_jtva')` in ControlSource-ul coloanei de
|
||||
explicatie TVA a rulajelor (Column63) - evaluat la CONSTRUCTIA formularului. Fara cursorul
|
||||
deschis, `CREATEOBJECT('frm_modific2024',...)` pica cu "File 'crsjtvatemp.dbf' does not exist".
|
||||
Fix: `update_jtva_coloane('', 'crsJtvaTemp', 6)` (in `COMUN\programe\updateserver.prg:553`)
|
||||
inainte de instantiere - construieste direct cursorul cu indexul cerut, fara pasii intermediari
|
||||
folositi de exemplul ROACONT (`update_jtva_coloana`/`crsExplicatiiTVATemp`, care oricum nu
|
||||
exista in ROAGEST).
|
||||
- Mock-ul `amessagebox` trebuie incarcat **INAINTE** de `test_init_env_auto_roagest.prg` (nu doar
|
||||
dupa, cum sugereaza exemplele din `achizitie_import`) - `optiuni_firma` poate afisa un dialog
|
||||
real daca `SCRIE_OPTIUNI` raporteaza eroare, inainte sa apuce sa se incarce mock-ul "la coada".
|
||||
- La citirea unei coloane de grid prin ControlSource dintr-un cursor legat ca RecordSource, VFP
|
||||
calificat automat campul simplu cu aliasul (`nnir` -> `tact.nnir`) - comparatiile exacte
|
||||
`== 'NNIR'` trebuie sa accepte si forma calificata.
|
||||
- Coloanele de grid nu sunt garantat numite `Column<N>` - unele au `Name` custom (ex. `cAles` pe
|
||||
pozitia 41 in acest grid); accesul dinamic la coloana trebuie facut prin colectia
|
||||
`Grid1.Columns(i)`, nu prin constructia textuala a numelui `"column" + TRANSFORM(i)`.
|
||||
- `frm_modific2024.Grid1.AfterRowColChange` are propria logica de blocare pe sucursala (SetAll
|
||||
ReadOnly pe toate coloanele daca `Nvl(gnIdSucursala,0) <> Nvl(tAct.id_sucursala,0)`) - independenta
|
||||
de blocarea 90101, se declanseaza automat la pozitionare in grid. COD 1140835 (cazul obiecte de
|
||||
inventar) are `id_sucursala` diferit de sesiunea de test (`gnIdSucursala = NULL`), deci Column44
|
||||
iese `ReadOnly=.T.` in acest scenariu - nu e o eroare, e comportament existent, neplanificat de
|
||||
NNIR; sincronizarea tot functioneaza (apelul e direct, nu prin UI).
|
||||
- **Termin reatribuie COD nou**: `afisjurcom.do_modifica` (comun.vc2:2444-2487) cheama
|
||||
`oscrie_in_fisiere` de DOUA ori - intai `(2,.T.,llRul)` (STERGE, marcheaza `sters=1` pe COD-ul
|
||||
ORIGINAL, din `actactan` neatins de editare), apoi `(0,.T.,llRul)` (SCRIE varianta editata sub
|
||||
COD nou, generat de `pack_contafin`, sub AN/LUNA de sesiune curenta - nu pastreaza COD-ul/AN/LUNA
|
||||
notei editate). Verificarea si curatenia testului se fac dupa NNIR (marcaj distinct), nu dupa
|
||||
COD, si readuc nota originala la `sters=0` dupa test (pasul STERGE o dezactiveaza altfel permanent).
|
||||
- Salvarea reala cere tranzactie manuala explicita: `SQLSetProp(gnHandle,'Transactions',2)` inainte
|
||||
de blocul STERGE+SCRIE+finalizeaza, apoi `SQLCOMMIT(gnHandle)`/`SQLROLLBACK` +
|
||||
`SQLSetProp(...,1)` dupa - echivalentul direct al `thisform.do_deschide_tranzactie()`/
|
||||
`do_inchide_tranzactie()` din `afisjurcom` (`_frm_base.vc2:252-305`, mostenite, apelate pe
|
||||
formularul de jurnal - nu pe `frm_modific2024`, deci invizibile la o privire doar pe clasa notei).
|
||||
Fara acest wrapping, `oscrie_in_fisiere`/`finalizeaza_modificare_nota` raporteaza succes dar nu
|
||||
se vede nimic persistat, nici in aceeasi sesiune.
|
||||
|
||||
## Capcana: dialog modal "Enter the value for <var>" in loc de eroare catchabila
|
||||
|
||||
O variabila memorie lipsa/umbrita folosita ca `?param` intr-un SQL pass-through (SQLEXEC/
|
||||
`goExecutor.oExecuta`) NU da o eroare VFP catchabila (ON ERROR) - deschide dialogul nativ
|
||||
"View Parameter" ("Enter the value for <var>"), MODAL, care blocheaza tot procesul headless la
|
||||
nesfarsit si nu lasa nimic in log (spre deosebire de un `REPLACE`/expresie cu aceeasi variabila
|
||||
lipsa, care DA eroare catchabila - vezi cazul `gnIdUtil` scapat o data ca `PRIVATE` neasignat).
|
||||
Simptom: proces `vfp9.exe` care nu mai raspunde, fara `.ERR`, fara linie noua in log.
|
||||
|
||||
Remediu: **garda explicita inainte de orice rulare care ajunge la cod ce foloseste `?param`** -
|
||||
verifica `TYPE(<nume>) == 'U'` pe toate variabilele relevante (nu doar cele proprii testului, ci
|
||||
si cele din codul apelat: `oscrie_in_fisiere`, `pack_contafin`/`pack_sesiune`, `oinit_optiuni.prg`)
|
||||
si opreste testul cu FAIL clar in log daca lipseste ceva, inainte sa ajunga la SQLEXEC. Implementat
|
||||
in `test_nnir_sincronizare.prg` (`NnirGardaVariabile`, apelata imediat dupa init mediu). `TYPE()`
|
||||
returneaza `'X'` (nu `'U'`) pentru NULL - o valoare NULL e un bind valid, doar variabila absenta
|
||||
e problema.
|
||||
|
||||
## Rezultat test complet (03.08.2026, pe binarul livrat)
|
||||
|
||||
**33 PASS, 0 FAIL** pe cele 6 scenarii: NIR, obiecte de inventar si nota fara rulaje (toate cu
|
||||
salvare reala prin Termin + verificare in Oracle), blocare `id_set=90101`, `NNIR -> 0`, si blocare
|
||||
`id_set=90101` pe sucursala curenta. Baza de test verificata dupa rulare: cele 4 note originale
|
||||
(1140841, 1140835, 1140848, 1140716) raman intacte (NNIR si `sters` la valorile initiale); notele
|
||||
noi create de Termin (COD reatribuit) au fost marcate `sters=1` de curatenia din test.
|
||||
|
||||
Scenariul 6 (`INVENTAR2`) exista pentru ca scenariul 4 ruleaza pe o nota din ALTA sucursala, unde
|
||||
`AfterRowColChange` blocheaza oricum tot gridul - trecea din motivul gresit. Scenariul 6 aliniaza
|
||||
`gnIdSucursala` la nota (`llReadOnly` iese `.F.`) si asertesteaza si ca restul coloanelor raman
|
||||
editabile, altfel blocarea NNIR nu dovedeste nimic.
|
||||
837
utile/Teste/nnir_registru_jurnal/test_nnir_sincronizare.prg
Normal file
837
utile/Teste/nnir_registru_jurnal/test_nnir_sincronizare.prg
Normal file
@@ -0,0 +1,837 @@
|
||||
* test_nnir_sincronizare.prg
|
||||
* Test e2e (fluxul real): NNIR editabil in Registru Jurnal, cu sincronizare in tact/trul/trul_obinv
|
||||
* si in ACT/RUL/RUL_OBINV (Oracle). Vezi cerinta initiala (todos.txt pct. 9) si
|
||||
* date_test_nnir.md (datele de test alese, an/luna/cod, stare implementare la data scrierii).
|
||||
*
|
||||
* Instantiaza frm_modific2024 direct (ca test_repro_cnrcrt_footer.prg din achizitie_import),
|
||||
* cu cursoarele tact/trul/trul_obinv construite exact ca afisjurcom.do_modifica (comun.vc2:2352-
|
||||
* 2434), dar pe AN/LUNA proprii notei - do_modifica limiteaza editarea la luna curenta de lucru
|
||||
* (comun.vc2:2265-2268), iar notele de test nu sunt toate in luna curenta.
|
||||
*
|
||||
* Editarea NNIR se simuleaza ca un utilizator: pozitionare pe rand, declansarea evenimentelor
|
||||
* reale ale coloanei (When la intrare, LostFocus la iesire - textboxul nu comite valoarea in
|
||||
* ControlSource inainte de Valid, de-aia implementarea sincronizeaza pe LostFocus), NU apel
|
||||
* direct al metodei de sincronizare. Salvarea (Termin) replica blocul din
|
||||
* afisjurcom.do_modifica (comun.vc2:2456-2487): oscrie_in_fisiere + pack_contafin.
|
||||
* finalizeaza_modificare_nota. Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune
|
||||
* curenta - nu pastreaza COD-ul original; verificarea si curatenia de dupa salvare se fac dupa
|
||||
* valoarea NNIR marcaj (nu poate coincide cu date reale), marcand sters=1 (conventia aplicatiei)
|
||||
* orice a ajuns sub acea valoare - nota originala (COD/NNIR vechi) ramane intacta.
|
||||
*
|
||||
* Rulare headless (nu tine VFP IDE deschis; nu rula cu roagest.exe pornit):
|
||||
* & "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T ;
|
||||
* "D:\ROA\ROAGEST\COMUN\utile\Teste\nnir_registru_jurnal\test_nnir_sincronizare.prg"
|
||||
* Timeout recomandat: minim 220s. Log: %TEMP%\test_nnir_sincronizare_log.txt (PASS/FAIL pe linie).
|
||||
|
||||
LPARAMETERS tcMode
|
||||
tcMode = IIF(EMPTY(tcMode), 'ALL', UPPER(ALLTRIM(tcMode)))
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcLogFile, gnFail, gnPass
|
||||
gcLogFile = ADDBS(SYS(2023)) + 'test_nnir_sincronizare_log.txt'
|
||||
gnFail = 0
|
||||
gnPass = 0
|
||||
STRTOFILE('START ' + tcMode + ' ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLogFile)
|
||||
|
||||
ON ERROR DO NnirErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
* mock amessagebox incarcat INAINTE de mediul aplicatiei: optiuni_firma (in mediul de test)
|
||||
* poate afisa un dialog real daca SCRIE_OPTIUNI raporteaza eroare
|
||||
SET PROCEDURE TO D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
DO D:\ROA\ROAGEST\COMUN\utile\Teste\test_init_env_auto_roagest.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
DO NnirLog WITH 'EROARE: conectare Oracle esuata'
|
||||
DO NnirLog WITH 'REZULTAT SUITA: NEDETERMINAT'
|
||||
QUIT
|
||||
ENDIF
|
||||
DO NnirLog WITH 'mediu OK, gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
||||
|
||||
* garda anti-blocaj: o variabila lipsa folosita ca ?param intr-un SQL pass-through NU da eroare
|
||||
* catchabila - VFP deschide dialogul modal nativ "Enter the value for <var>", care blocheaza
|
||||
* headless-ul la nesfarsit si nu lasa nimic in log (vezi date_test_nnir.md). Verificare
|
||||
* explicita INAINTE de orice apel care le foloseste, opreste testul cu FAIL clar daca lipseste ceva.
|
||||
IF !NnirGardaVariabile()
|
||||
DO NnirLog WITH 'REZULTAT SUITA: NEDETERMINAT (garda variabile a picat)'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
* mock amessagebox - se incarca ULTIMUL (dupa fisierele aplicatiei), vezi antetul mock-ului
|
||||
SET PROCEDURE TO D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
* Grid1.Column63 (explicatie TVA pe rulaje) face Seek pe alias 'crsJtvaTemp' la CONSTRUCTIA
|
||||
* formularului (inainte de Init) - fara cursorul deschis, CREATEOBJECT('frm_modific2024',...)
|
||||
* pica cu "File 'crsjtvatemp.dbf' does not exist"
|
||||
update_jtva_coloane('', 'crsJtvaTemp', 6)
|
||||
|
||||
LOCAL Omodif, lcCallWhen, lcCallLostFocus, lcCall
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 1: NIR/achizitie, cu rulaje in RUL, cu salvare (Termin) + verificare Oracle
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'NIR')
|
||||
LOCAL lnCod, lnAn, lnLuna, lnIdSet, lnNnirVechi, lnNnirNou
|
||||
LOCAL lnCntTactVechi, lnCntTrulVechi, lnCntTactNou, lnCntTrulNou
|
||||
LOCAL i, llGasit, lnColOrder, llReadOnly, lnColCheck, lcColName
|
||||
|
||||
lnCod = 1140841
|
||||
lnAn = 2026
|
||||
lnLuna = 7
|
||||
lnIdSet = 209
|
||||
lnNnirVechi = 3
|
||||
lnNnirNou = lnNnirVechi + 90000000
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCod, lnAn, lnLuna
|
||||
|
||||
SELECT tact
|
||||
lnCntTactVechi = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechi TO lnCntTactVechi
|
||||
SELECT trul
|
||||
lnCntTrulVechi = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechi TO lnCntTrulVechi
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'NIR', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
llGasit = .F.
|
||||
lnColOrder = 0
|
||||
llReadOnly = .T.
|
||||
lnColCheck = 0
|
||||
FOR i = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColName = 'Omodif.grid1.Columns(' + TRANSFORM(i) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColName + '.ControlSource'))
|
||||
llGasit = .T.
|
||||
lnColOrder = EVALUATE(lcColName + '.ColumnOrder')
|
||||
llReadOnly = EVALUATE(lcColName + '.ReadOnly')
|
||||
lnColCheck = i
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO NnirAssert WITH 'coloana_grid', 'NIR', llGasit, 'ControlSource=nnir gasit=' + ;
|
||||
TRANSFORM(llGasit) + ' ColumnOrder=' + TRANSFORM(lnColOrder) + ' ReadOnly=' + TRANSFORM(llReadOnly)
|
||||
|
||||
IF llGasit
|
||||
DO NnirAssert WITH 'coloana_editabila', 'NIR', !llReadOnly, 'nota normala: ReadOnly asteptat .F.'
|
||||
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = lnNnirVechi
|
||||
IF FOUND()
|
||||
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck) + ').Text1.When'
|
||||
&lcCallWhen
|
||||
REPLACE nnir WITH lnNnirNou
|
||||
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck) + ').Text1.LostFocus'
|
||||
&lcCallLostFocus
|
||||
|
||||
SELECT tact
|
||||
lnCntTactNou = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirNou TO lnCntTactNou
|
||||
DO NnirAssert WITH 'sync_tact', 'NIR', lnCntTactNou = lnCntTactVechi, ;
|
||||
TRANSFORM(lnCntTactNou) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi) + ')'
|
||||
|
||||
* trul = cursorul legat de pgfArticole.page1.grdRulaje (RecordSource) - verificare
|
||||
* explicita ca propagarea se vede in cursorul de rulaje, nu doar in tact
|
||||
SELECT trul
|
||||
lnCntTrulNou = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirNou TO lnCntTrulNou
|
||||
DO NnirAssert WITH 'sync_trul', 'NIR', lnCntTrulNou = lnCntTrulVechi, ;
|
||||
TRANSFORM(lnCntTrulNou) + ' randuri trul (grid rulaje) cu nnir nou (asteptat ' + TRANSFORM(lnCntTrulVechi) + ')'
|
||||
ELSE
|
||||
DO NnirAssert WITH 'locate_rand_vechi', 'NIR', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
DO NnirVerificaOracleNeschimbat WITH lnCod, lnNnirVechi, 'NIR'
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
DO NnirSalveazaSiVerifica WITH lnCod, lnAn, lnLuna, lnIdSet, lnNnirVechi, lnNnirNou, 'NIR'
|
||||
ENDIF
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 2: obiecte de inventar, cu rulaje in RUL_OBINV, cu salvare + verificare Oracle
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'OBINV')
|
||||
LOCAL lnCod2, lnAn2, lnLuna2, lnIdSet2, lnNnirVechi2, lnNnirNou2
|
||||
LOCAL lnCntTactVechi2, lnCntRobinvVechi2, lnCntTactNou2, lnCntRobinvNou2
|
||||
LOCAL i2, llGasit2, lnColOrder2, llReadOnly2, lnColCheck2, lcColName2
|
||||
|
||||
lnCod2 = 1140835
|
||||
lnAn2 = 2026
|
||||
lnLuna2 = 6
|
||||
lnIdSet2 = 211
|
||||
lnNnirVechi2 = 2026060001
|
||||
lnNnirNou2 = lnNnirVechi2 + 90000000
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCod2, lnAn2, lnLuna2
|
||||
|
||||
SELECT tact
|
||||
lnCntTactVechi2 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechi2 TO lnCntTactVechi2
|
||||
SELECT trul_obinv
|
||||
lnCntRobinvVechi2 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechi2 TO lnCntRobinvVechi2
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet2)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'OBINV', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
llGasit2 = .F.
|
||||
lnColOrder2 = 0
|
||||
llReadOnly2 = .T.
|
||||
lnColCheck2 = 0
|
||||
FOR i2 = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColName2 = 'Omodif.grid1.Columns(' + TRANSFORM(i2) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColName2 + '.ControlSource'))
|
||||
llGasit2 = .T.
|
||||
lnColOrder2 = EVALUATE(lcColName2 + '.ColumnOrder')
|
||||
llReadOnly2 = EVALUATE(lcColName2 + '.ReadOnly')
|
||||
lnColCheck2 = i2
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO NnirAssert WITH 'coloana_grid', 'OBINV', llGasit2, 'ControlSource=nnir gasit=' + ;
|
||||
TRANSFORM(llGasit2) + ' ColumnOrder=' + TRANSFORM(lnColOrder2) + ' ReadOnly=' + TRANSFORM(llReadOnly2)
|
||||
|
||||
IF llGasit2
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = lnNnirVechi2
|
||||
IF FOUND()
|
||||
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck2) + ').Text1.When'
|
||||
&lcCallWhen
|
||||
REPLACE nnir WITH lnNnirNou2
|
||||
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck2) + ').Text1.LostFocus'
|
||||
&lcCallLostFocus
|
||||
|
||||
SELECT tact
|
||||
lnCntTactNou2 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirNou2 TO lnCntTactNou2
|
||||
DO NnirAssert WITH 'sync_tact', 'OBINV', lnCntTactNou2 = lnCntTactVechi2, ;
|
||||
TRANSFORM(lnCntTactNou2) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi2) + ')'
|
||||
|
||||
SELECT trul_obinv
|
||||
lnCntRobinvNou2 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirNou2 TO lnCntRobinvNou2
|
||||
DO NnirAssert WITH 'sync_trul_obinv', 'OBINV', lnCntRobinvNou2 = lnCntRobinvVechi2, ;
|
||||
TRANSFORM(lnCntRobinvNou2) + ' randuri trul_obinv cu nnir nou (asteptat ' + TRANSFORM(lnCntRobinvVechi2) + ')'
|
||||
ELSE
|
||||
DO NnirAssert WITH 'locate_rand_vechi', 'OBINV', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
DO NnirSalveazaSiVerificaObinv WITH lnCod2, lnAn2, lnLuna2, lnIdSet2, lnNnirVechi2, lnNnirNou2
|
||||
ENDIF
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 3: nota fara rulaje - regresie (nu crapa), cu salvare + verificare Oracle
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'FARARUL')
|
||||
LOCAL lnCod3, lnAn3, lnLuna3, lnIdSet3, lnNnirVechi3, lnNnirNou3
|
||||
LOCAL lnCntTactVechi3, lnCntTactNou3
|
||||
LOCAL i3, llGasit3, lnColCheck3, lcColName3
|
||||
|
||||
lnCod3 = 1140848
|
||||
lnAn3 = 2026
|
||||
lnLuna3 = 7
|
||||
lnIdSet3 = 209
|
||||
lnNnirVechi3 = 124
|
||||
lnNnirNou3 = lnNnirVechi3 + 90000000
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCod3, lnAn3, lnLuna3
|
||||
|
||||
SELECT tact
|
||||
lnCntTactVechi3 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechi3 TO lnCntTactVechi3
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet3)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'FARARUL', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
llGasit3 = .F.
|
||||
lnColCheck3 = 0
|
||||
FOR i3 = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColName3 = 'Omodif.grid1.Columns(' + TRANSFORM(i3) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColName3 + '.ControlSource'))
|
||||
llGasit3 = .T.
|
||||
lnColCheck3 = i3
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO NnirAssert WITH 'coloana_grid', 'FARARUL', llGasit3, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit3)
|
||||
|
||||
IF llGasit3
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = lnNnirVechi3
|
||||
IF FOUND()
|
||||
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck3) + ').Text1.When'
|
||||
&lcCallWhen
|
||||
REPLACE nnir WITH lnNnirNou3
|
||||
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck3) + ').Text1.LostFocus'
|
||||
&lcCallLostFocus
|
||||
|
||||
SELECT tact
|
||||
lnCntTactNou3 = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirNou3 TO lnCntTactNou3
|
||||
DO NnirAssert WITH 'sync_tact', 'FARARUL', lnCntTactNou3 = lnCntTactVechi3, ;
|
||||
TRANSFORM(lnCntTactNou3) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi3) + ')'
|
||||
DO NnirAssert WITH 'nu_crapa', 'FARARUL', .T., 'editarea pe nota fara rulaje nu a generat eroare'
|
||||
ELSE
|
||||
DO NnirAssert WITH 'locate_rand_vechi', 'FARARUL', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
DO NnirSalveazaSiVerifica WITH lnCod3, lnAn3, lnLuna3, lnIdSet3, lnNnirVechi3, lnNnirNou3, 'FARARUL'
|
||||
ENDIF
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 4: nota de inventar (id_set=90101) - regresie blocare editare NNIR
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'INVENTAR')
|
||||
LOCAL lnCod4, lnAn4, lnLuna4, lnIdSet4
|
||||
LOCAL i4, llGasit4, llReadOnly4, lcColName4
|
||||
|
||||
lnCod4 = 1140716
|
||||
lnAn4 = 2026
|
||||
lnLuna4 = 3
|
||||
lnIdSet4 = 90101
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCod4, lnAn4, lnLuna4
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet4)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'INVENTAR', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
llGasit4 = .F.
|
||||
llReadOnly4 = .F.
|
||||
FOR i4 = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColName4 = 'Omodif.grid1.Columns(' + TRANSFORM(i4) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColName4 + '.ControlSource'))
|
||||
llGasit4 = .T.
|
||||
llReadOnly4 = EVALUATE(lcColName4 + '.ReadOnly')
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO NnirAssert WITH 'coloana_grid', 'INVENTAR', llGasit4, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit4)
|
||||
IF llGasit4
|
||||
* nu se incearca editarea - doar se verifica blocarea, ca sa nu se altereze o nota
|
||||
* reala de inventar cat timp blocarea nu e implementata
|
||||
DO NnirAssert WITH 'coloana_blocata', 'INVENTAR', llReadOnly4, ;
|
||||
'id_set=90101: ReadOnly asteptat .T., gasit ' + TRANSFORM(llReadOnly4)
|
||||
ENDIF
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
ENDIF
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 5: stergere NNIR (-> 0) pe randul unei note cu rulaje - propagare la 0.
|
||||
* Comportament nou (runda 4): garda EMPTY(NVL(tnNnirNou,0)) eliminata din sincronizeaza_nnir,
|
||||
* ramane doar egalitatea - stergerea celulei (0 scris pe rand inainte de LostFocus) trebuie sa
|
||||
* se propage la toate liniile cu valoarea veche, nu doar schimbarile intre doua valori nenule.
|
||||
* Doar la nivel de cursoare (tact/trul) - nu se salveaza in Oracle.
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'ZERO')
|
||||
LOCAL lnCodZ, lnAnZ, lnLunaZ, lnIdSetZ, lnNnirVechiZ
|
||||
LOCAL lnCntTactVechiZ, lnCntTrulVechiZ, lnCntTactRamasVechiZ, lnCntTrulRamasVechiZ
|
||||
LOCAL lnCntTactZeroZ, lnCntTrulZeroZ
|
||||
LOCAL iz, llGasitZ, lnColCheckZ, lcColNameZ
|
||||
|
||||
lnCodZ = 1140841
|
||||
lnAnZ = 2026
|
||||
lnLunaZ = 7
|
||||
lnIdSetZ = 209
|
||||
lnNnirVechiZ = 3
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCodZ, lnAnZ, lnLunaZ
|
||||
|
||||
SELECT tact
|
||||
lnCntTactVechiZ = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTactVechiZ
|
||||
SELECT trul
|
||||
lnCntTrulVechiZ = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTrulVechiZ
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSetZ)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'ZERO', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
llGasitZ = .F.
|
||||
lnColCheckZ = 0
|
||||
FOR iz = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColNameZ = 'Omodif.grid1.Columns(' + TRANSFORM(iz) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColNameZ + '.ControlSource'))
|
||||
llGasitZ = .T.
|
||||
lnColCheckZ = iz
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO NnirAssert WITH 'coloana_grid', 'ZERO', llGasitZ, 'ControlSource=nnir gasit=' + TRANSFORM(llGasitZ)
|
||||
|
||||
IF llGasitZ
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = lnNnirVechiZ
|
||||
IF FOUND()
|
||||
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheckZ) + ').Text1.When'
|
||||
&lcCallWhen
|
||||
* simuleaza stergerea celulei: utilizatorul goleste campul, valoarea ajunge 0
|
||||
REPLACE nnir WITH 0
|
||||
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheckZ) + ').Text1.LostFocus'
|
||||
&lcCallLostFocus
|
||||
|
||||
SELECT tact
|
||||
lnCntTactRamasVechiZ = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTactRamasVechiZ
|
||||
lnCntTactZeroZ = 0
|
||||
COUNT FOR NVL(nnir,0) = 0 TO lnCntTactZeroZ
|
||||
DO NnirAssert WITH 'sync_tact_zero', 'ZERO', lnCntTactRamasVechiZ = 0 AND lnCntTactZeroZ >= lnCntTactVechiZ, ;
|
||||
TRANSFORM(lnCntTactRamasVechiZ) + ' randuri tact au ramas pe valoarea veche (asteptat 0), ' + ;
|
||||
TRANSFORM(lnCntTactZeroZ) + ' au ajuns la 0 (asteptat cel putin ' + TRANSFORM(lnCntTactVechiZ) + ')'
|
||||
|
||||
* verificare explicita in cursorul legat de grid-ul de rulaje (pgfArticole.page1.grdRulaje)
|
||||
SELECT trul
|
||||
lnCntTrulRamasVechiZ = 0
|
||||
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTrulRamasVechiZ
|
||||
lnCntTrulZeroZ = 0
|
||||
COUNT FOR NVL(nnir,0) = 0 TO lnCntTrulZeroZ
|
||||
DO NnirAssert WITH 'sync_trul_zero', 'ZERO', lnCntTrulRamasVechiZ = 0 AND lnCntTrulZeroZ >= lnCntTrulVechiZ, ;
|
||||
TRANSFORM(lnCntTrulRamasVechiZ) + ' randuri trul au ramas pe valoarea veche (asteptat 0), ' + ;
|
||||
TRANSFORM(lnCntTrulZeroZ) + ' au ajuns la 0 (asteptat cel putin ' + TRANSFORM(lnCntTrulVechiZ) + ')'
|
||||
ELSE
|
||||
DO NnirAssert WITH 'locate_rand_vechi', 'ZERO', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
ENDIF
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
*=====================================================================================
|
||||
* Scenariul 6: nota de inventar (id_set=90101) pe sucursala CURENTA - blocarea NNIR trebuie sa
|
||||
* vina din regula 90101, nu din blocarea pe sucursala din AfterRowColChange. Scenariul 4 ruleaza
|
||||
* pe o nota din alta sucursala, unde SetAll("ReadOnly",.T.) blocheaza oricum tot gridul, deci ar
|
||||
* trece si fara implementare. Aici gnIdSucursala se aliniaza la id_sucursala notei (llReadOnly
|
||||
* iese .F.), se declanseaza AfterRowColChange (care face SetAll dupa Init) si se verifica ca
|
||||
* Column44 ramane blocata cat timp restul coloanelor sunt editabile.
|
||||
*=====================================================================================
|
||||
IF INLIST(tcMode, 'ALL', 'INVENTAR2')
|
||||
LOCAL lnCod6, lnAn6, lnLuna6, lnIdSet6
|
||||
LOCAL i6, llGasit6, llReadOnly6, lnEditabile6, lnSucVechi6, llMamaVechi6
|
||||
LOCAL lnIdSucNota6, lcColName6
|
||||
|
||||
lnCod6 = 1140716
|
||||
lnAn6 = 2026
|
||||
lnLuna6 = 3
|
||||
lnIdSet6 = 90101
|
||||
|
||||
DO NnirConstruiesteCursoare WITH lnCod6, lnAn6, lnLuna6
|
||||
|
||||
SELECT tact
|
||||
GO TOP
|
||||
lnIdSucNota6 = NVL(tact.id_sucursala, 0)
|
||||
lnSucVechi6 = gnIdSucursala
|
||||
llMamaVechi6 = glEMama
|
||||
gnIdSucursala = lnIdSucNota6
|
||||
glEMama = .F.
|
||||
|
||||
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet6)
|
||||
IF VARTYPE(Omodif) <> 'O'
|
||||
DO NnirAssert WITH 'instantiere', 'INVENTAR2', .F., 'frm_modific2024 nu s-a instantiat'
|
||||
ELSE
|
||||
SELECT tact
|
||||
GO TOP
|
||||
Omodif.grid1.SetFocus
|
||||
Omodif.gridextra1.setup()
|
||||
Omodif.CalculeazaTotal()
|
||||
|
||||
* AfterRowColChange face SetAll("ReadOnly", llReadOnly) peste blocarea pusa in Init
|
||||
Omodif.grid1.AfterRowColChange(1)
|
||||
|
||||
llGasit6 = .F.
|
||||
llReadOnly6 = .F.
|
||||
lnEditabile6 = 0
|
||||
FOR i6 = 1 TO Omodif.grid1.ColumnCount
|
||||
lcColName6 = 'Omodif.grid1.Columns(' + TRANSFORM(i6) + ')'
|
||||
IF NnirEsteColoanaNnir(EVALUATE(lcColName6 + '.ControlSource'))
|
||||
llGasit6 = .T.
|
||||
llReadOnly6 = EVALUATE(lcColName6 + '.ReadOnly')
|
||||
ELSE
|
||||
IF !EVALUATE(lcColName6 + '.ReadOnly')
|
||||
lnEditabile6 = lnEditabile6 + 1
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
DO NnirAssert WITH 'coloana_grid', 'INVENTAR2', llGasit6, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit6)
|
||||
* control: daca gridul e blocat integral, testul de blocare NNIR nu dovedeste nimic
|
||||
DO NnirAssert WITH 'grid_editabil', 'INVENTAR2', lnEditabile6 > 0, ;
|
||||
'coloane editabile (fara nnir): ' + TRANSFORM(lnEditabile6) + ' (asteptat > 0, ' + ;
|
||||
'gnIdSucursala=' + TRANSFORM(lnIdSucNota6) + ')'
|
||||
IF llGasit6
|
||||
DO NnirAssert WITH 'coloana_blocata', 'INVENTAR2', llReadOnly6, ;
|
||||
'id_set=90101 pe sucursala curenta: ReadOnly asteptat .T., gasit ' + TRANSFORM(llReadOnly6)
|
||||
ENDIF
|
||||
|
||||
Omodif.Release()
|
||||
Omodif = NULL
|
||||
ENDIF
|
||||
|
||||
gnIdSucursala = lnSucVechi6
|
||||
glEMama = llMamaVechi6
|
||||
DO NnirCurataCursoare
|
||||
ENDIF
|
||||
|
||||
DO NnirLog WITH 'REZULTAT SUITA: ' + TRANSFORM(gnPass) + ' PASS, ' + TRANSFORM(gnFail) + ' FAIL'
|
||||
QUIT
|
||||
|
||||
*=====================================================================================
|
||||
* proceduri ajutatoare (fara CREATEOBJECT - vezi depanare_testare_vfp.md / capcana l:
|
||||
* CREATEOBJECT apelat dintr-o procedura se comporta gresit in acest runtime headless)
|
||||
*=====================================================================================
|
||||
|
||||
PROCEDURE NnirLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLogFile, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE NnirAssert
|
||||
LPARAMETERS tcPas, tcCaz, llOk, tcDetaliu
|
||||
LOCAL lcRez
|
||||
lcRez = IIF(llOk, 'PASS', 'FAIL')
|
||||
IF llOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO NnirLog WITH lcRez + ' [' + tcCaz + '/' + tcPas + '] ' + tcDetaliu
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE NnirErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO NnirLog WITH 'ERR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
* verifica ca toate variabilele folosite ca ?param in SQL pass-through pe calea de test (env-init,
|
||||
* optiuni_firma, oscrie_in_fisiere, pack_contafin/pack_sesiune) sunt definite - o variabila
|
||||
* PUBLIC lipsa/umbrita da direct dialogul modal "Enter the value for <var>", nu o eroare catchabila
|
||||
FUNCTION NnirGardaVariabile
|
||||
LOCAL laVar(9), i, llOk
|
||||
laVar(1) = 'gnIdUtil'
|
||||
laVar(2) = 'gnAn'
|
||||
laVar(3) = 'gnLuna'
|
||||
laVar(4) = 'gnIdFirma'
|
||||
laVar(5) = 'gnIdSucursala'
|
||||
laVar(6) = 'gcS'
|
||||
laVar(7) = 'gnIdProgram'
|
||||
laVar(8) = 'gnId_Prg_Owner'
|
||||
laVar(9) = 'gnHandle'
|
||||
llOk = .T.
|
||||
FOR i = 1 TO ALEN(laVar)
|
||||
IF TYPE(laVar(i)) == 'U'
|
||||
DO NnirLog WITH 'FAIL [garda_variabile] ' + laVar(i) + ' nu exista (TYPE U) - ar fi dat dialog modal "Enter the value"'
|
||||
llOk = .F.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
RETURN llOk
|
||||
ENDFUNC
|
||||
|
||||
* VFP calificat automat ControlSource-ul unui camp simplu cu aliasul cursorului (RecordSource) -
|
||||
* "nnir" definit in sursa apare la runtime ca "tact.nnir" - se accepta ambele forme
|
||||
FUNCTION NnirEsteColoanaNnir
|
||||
LPARAMETERS tcControlSource
|
||||
LOCAL lcCs
|
||||
lcCs = UPPER(ALLTRIM(TRANSFORM(tcControlSource)))
|
||||
RETURN lcCs == 'NNIR' OR RIGHT(lcCs, 5) == '.NNIR'
|
||||
ENDFUNC
|
||||
|
||||
* construieste tact/trul/trul_obinv exact ca afisjurcom.do_modifica (comun.vc2:2352-2434),
|
||||
* dar pe AN/LUNA proprii notei (nu gnAn/gnLuna) - vezi antetul fisierului
|
||||
PROCEDURE NnirConstruiesteCursoare
|
||||
LPARAMETERS tnCod, tnAn, tnLuna
|
||||
LOCAL lcSql, lnSucces
|
||||
|
||||
DO NnirCurataCursoare
|
||||
|
||||
lcSql = [select * from vact_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
||||
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_act]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_act')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces < 0
|
||||
DO NnirLog WITH 'EROARE construire tact: ' + goExecutor.cEroare
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
SELECT * FROM v_act INTO CURSOR actactan
|
||||
SELECT .F. AS ales, T.*, CAST(0 AS N(2)) AS tipnota FROM actactan T INTO CURSOR tact READWRITE
|
||||
USE IN v_act
|
||||
|
||||
lcSql = [select * from vrul_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
||||
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_rul]
|
||||
goExecutor.oExecute(lcSql, 'v_rul')
|
||||
goExecutor.oReset()
|
||||
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva ;
|
||||
FROM v_rul INTO CURSOR RUL_TEMP READWRITE
|
||||
SELECT * FROM RUL_TEMP INTO CURSOR trul READWRITE
|
||||
USE IN v_rul
|
||||
|
||||
lcSql = [select * from vrul_obinv_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
||||
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_rul_obinv]
|
||||
goExecutor.oExecute(lcSql, 'v_rul_obinv')
|
||||
goExecutor.oReset()
|
||||
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva ;
|
||||
FROM v_rul_obinv INTO CURSOR RUL_TEMP_OBINV READWRITE
|
||||
SELECT * FROM RUL_TEMP_OBINV INTO CURSOR trul_obinv READWRITE
|
||||
USE IN v_rul_obinv
|
||||
|
||||
SELECT a.*, IIF(NVL(a.id_jtva_coloana,0)=0,0,1) AS cu_tva FROM tact a INTO CURSOR tact READWRITE
|
||||
SELECT tact
|
||||
GO TOP
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE NnirCurataCursoare
|
||||
IF USED('tact')
|
||||
USE IN tact
|
||||
ENDIF
|
||||
IF USED('trul')
|
||||
USE IN trul
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
USE IN trul_obinv
|
||||
ENDIF
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
FUNCTION NnirOraCount
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnVal, llOk
|
||||
lnVal = -1
|
||||
llOk = goExecutor.oExecuta(tcSql, 'cNnirOraCnt')
|
||||
IF llOk AND USED('cNnirOraCnt') AND RECCOUNT('cNnirOraCnt') > 0
|
||||
lnVal = cNnirOraCnt.cnt
|
||||
ENDIF
|
||||
IF USED('cNnirOraCnt')
|
||||
USE IN cNnirOraCnt
|
||||
ENDIF
|
||||
RETURN lnVal
|
||||
ENDFUNC
|
||||
|
||||
* verifica ca in Oracle nu s-a scris nimic dupa editarea DOAR in cursoare (echivalent Renunt)
|
||||
PROCEDURE NnirVerificaOracleNeschimbat
|
||||
LPARAMETERS tnCod, tnNnirVechi, tcCaz
|
||||
LOCAL lnCnt, lcSql
|
||||
lcSql = [select count(*) cnt from act where cod = ] + TRANSFORM(tnCod) + ;
|
||||
[ and nnir = ] + TRANSFORM(tnNnirVechi)
|
||||
lnCnt = NnirOraCount(lcSql)
|
||||
DO NnirAssert WITH 'renunt_neschimbat', tcCaz, lnCnt > 0, ;
|
||||
'ACT.NNIR in Oracle inainte de Termin ramane ' + TRANSFORM(tnNnirVechi) + ' (' + TRANSFORM(lnCnt) + ' randuri)'
|
||||
ENDPROC
|
||||
|
||||
* replica blocul de salvare din afisjurcom.do_modifica (comun.vc2:2456-2487): scrie tact/trul/
|
||||
* trul_obinv in ACT/RUL/RUL_OBINV prin oscrie_in_fisiere + pack_contafin.finalizeaza_modificare_
|
||||
* nota, verifica in Oracle, apoi reface valoarea originala (revert - baza de test ramane
|
||||
* neschimbata pentru rulari repetate)
|
||||
PROCEDURE NnirSalveazaSiVerifica
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tnIdSet, tnNnirVechi, tnNnirNou, tcCaz
|
||||
PRIVATE pnAn, pnLuna, pdDataOra
|
||||
LOCAL lnIdFact, lnIdfactd, llRul, lnSuccesSalvare, lcSqlFin, lnCnt, lcSql
|
||||
|
||||
pnAn = tnAn
|
||||
pnLuna = tnLuna
|
||||
pdDataOra = NULL
|
||||
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = tnNnirNou
|
||||
lnIdFact = NVL(id_fact, 0)
|
||||
lnIdfactd = NVL(id_factd, 0)
|
||||
|
||||
llRul = (RECCOUNT('trul') > 0) OR (RECCOUNT('trul_obinv') > 0)
|
||||
|
||||
* thisform.do_deschide_tranzactie()/do_inchide_tranzactie() din afisjurcom (_frm_base.vc2:252-
|
||||
* 305, mostenite, apelate pe formularul de jurnal, nu pe frm_modific2024) - echivalent direct,
|
||||
* fara instanta de forma: manual pe durata scrierii, apoi commit/rollback + revenire pe auto
|
||||
SQLSetProp(gnHandle, 'Transactions', 2)
|
||||
|
||||
* replica exact secventa din afisjurcom.do_modifica: intai STERGE nota veche (COD-ul
|
||||
* original, din actactan neatins de editare), abia apoi SCRIE varianta editata
|
||||
SELECT actactan
|
||||
lnSuccesSalvare = oscrie_in_fisiere(2, .T., llRul)
|
||||
DO NnirAssert WITH 'oscrie_in_fisiere_sterge', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN actactan
|
||||
|
||||
IF llRul
|
||||
SELECT * FROM trul INTO CURSOR rul_temp READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp
|
||||
SELECT * FROM trul_obinv INTO CURSOR rul_temp_obinv READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp_obinv
|
||||
ENDIF
|
||||
|
||||
lnSuccesSalvare = oscrie_in_fisiere(0, .T., llRul)
|
||||
DO NnirAssert WITH 'oscrie_in_fisiere', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
ENDIF
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
lcSqlFin = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,?pdDataOra,] + ;
|
||||
TRANSFORM(tnIdSet) + [,] + TRANSFORM(tnCod) + [,] + TRANSFORM(lnIdFact) + [,] + ;
|
||||
TRANSFORM(lnIdfactd) + [,?gnIdUtil); end;]
|
||||
lnSuccesSalvare = IIF(goExecutor.oExecuta(lcSqlFin), 1, -1)
|
||||
DO NnirAssert WITH 'finalizeaza_modificare_nota', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
ENDIF
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
SQLCOMMIT(gnHandle)
|
||||
ELSE
|
||||
SQLROLLBACK(gnHandle)
|
||||
ENDIF
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
* Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune curente - nu pastreaza
|
||||
* COD-ul original notei editate. Verificarea si curatenia se fac dupa valoarea NNIR marcaj
|
||||
* (distincta, nu poate coincide cu date reale), nu dupa COD-ul original.
|
||||
lcSql = [select count(*) cnt from act where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
||||
lnCnt = NnirOraCount(lcSql)
|
||||
DO NnirAssert WITH 'oracle_act_final', tcCaz, lnCnt > 0, TRANSFORM(lnCnt) + ' randuri ACT cu nnir nou in Oracle'
|
||||
|
||||
IF RECCOUNT('trul') > 0
|
||||
lcSql = [select count(*) cnt from rul where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
||||
lnCnt = NnirOraCount(lcSql)
|
||||
DO NnirAssert WITH 'oracle_rul_final', tcCaz, lnCnt > 0, TRANSFORM(lnCnt) + ' randuri RUL cu nnir nou in Oracle'
|
||||
ENDIF
|
||||
|
||||
* curatenie: pasul STERGE (oscrie_in_fisiere param 2) marcheaza sters=1 pe COD-ul ORIGINAL -
|
||||
* readuc nota originala activa, apoi marchez sters=1 (conventia aplicatiei) pe orice a ajuns
|
||||
* sub NNIR-ul marcaj (COD nou, atribuit de pack_contafin la scriere)
|
||||
goExecutor.oExecuta([update act set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul_obinv set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update act set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul_obinv set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta('commit')
|
||||
ENDPROC
|
||||
|
||||
* varianta pt. scenariul RUL_OBINV (verifica RUL_OBINV in loc de RUL)
|
||||
PROCEDURE NnirSalveazaSiVerificaObinv
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tnIdSet, tnNnirVechi, tnNnirNou
|
||||
PRIVATE pnAn, pnLuna, pdDataOra
|
||||
LOCAL lnIdFact, lnIdfactd, llRul, lnSuccesSalvare, lcSqlFin, lnCnt, lcSql
|
||||
|
||||
pnAn = tnAn
|
||||
pnLuna = tnLuna
|
||||
pdDataOra = NULL
|
||||
|
||||
SELECT tact
|
||||
LOCATE FOR NVL(nnir,0) = tnNnirNou
|
||||
lnIdFact = NVL(id_fact, 0)
|
||||
lnIdfactd = NVL(id_factd, 0)
|
||||
|
||||
llRul = (RECCOUNT('trul') > 0) OR (RECCOUNT('trul_obinv') > 0)
|
||||
|
||||
* thisform.do_deschide_tranzactie()/do_inchide_tranzactie() din afisjurcom (_frm_base.vc2:252-
|
||||
* 305, mostenite, apelate pe formularul de jurnal, nu pe frm_modific2024) - echivalent direct,
|
||||
* fara instanta de forma: manual pe durata scrierii, apoi commit/rollback + revenire pe auto
|
||||
SQLSetProp(gnHandle, 'Transactions', 2)
|
||||
|
||||
* replica exact secventa din afisjurcom.do_modifica: intai STERGE nota veche (COD-ul
|
||||
* original, din actactan neatins de editare), abia apoi SCRIE varianta editata
|
||||
SELECT actactan
|
||||
lnSuccesSalvare = oscrie_in_fisiere(2, .T., llRul)
|
||||
DO NnirAssert WITH 'oscrie_in_fisiere_sterge', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN actactan
|
||||
|
||||
IF llRul
|
||||
SELECT * FROM trul INTO CURSOR rul_temp READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp
|
||||
SELECT * FROM trul_obinv INTO CURSOR rul_temp_obinv READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp_obinv
|
||||
ENDIF
|
||||
|
||||
lnSuccesSalvare = oscrie_in_fisiere(0, .T., llRul)
|
||||
DO NnirAssert WITH 'oscrie_in_fisiere', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
ENDIF
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
lcSqlFin = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,?pdDataOra,] + ;
|
||||
TRANSFORM(tnIdSet) + [,] + TRANSFORM(tnCod) + [,] + TRANSFORM(lnIdFact) + [,] + ;
|
||||
TRANSFORM(lnIdfactd) + [,?gnIdUtil); end;]
|
||||
lnSuccesSalvare = IIF(goExecutor.oExecuta(lcSqlFin), 1, -1)
|
||||
DO NnirAssert WITH 'finalizeaza_modificare_nota', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
||||
ENDIF
|
||||
|
||||
IF lnSuccesSalvare > 0
|
||||
SQLCOMMIT(gnHandle)
|
||||
ELSE
|
||||
SQLROLLBACK(gnHandle)
|
||||
ENDIF
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
* Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune curente - nu pastreaza
|
||||
* COD-ul original notei editate. Verificarea si curatenia se fac dupa valoarea NNIR marcaj
|
||||
* (distincta, nu poate coincide cu date reale), nu dupa COD-ul original.
|
||||
lcSql = [select count(*) cnt from act where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
||||
lnCnt = NnirOraCount(lcSql)
|
||||
DO NnirAssert WITH 'oracle_act_final', 'OBINV', lnCnt > 0, TRANSFORM(lnCnt) + ' randuri ACT cu nnir nou in Oracle'
|
||||
|
||||
lcSql = [select count(*) cnt from rul_obinv where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
||||
lnCnt = NnirOraCount(lcSql)
|
||||
DO NnirAssert WITH 'oracle_rul_obinv_final', 'OBINV', lnCnt > 0, TRANSFORM(lnCnt) + ' randuri RUL_OBINV cu nnir nou in Oracle'
|
||||
|
||||
* curatenie: pasul STERGE (oscrie_in_fisiere param 2) marcheaza sters=1 pe COD-ul ORIGINAL -
|
||||
* readuc nota originala activa, apoi marchez sters=1 (conventia aplicatiei) pe orice a ajuns
|
||||
* sub NNIR-ul marcaj (COD nou, atribuit de pack_contafin la scriere)
|
||||
goExecutor.oExecuta([update act set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul_obinv set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update act set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta([update rul_obinv set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
||||
goExecutor.oExecuta('commit')
|
||||
ENDPROC
|
||||
11
utile/Teste/nnir_registru_jurnal/verif_nnir_cod.sql
Normal file
11
utile/Teste/nnir_registru_jurnal/verif_nnir_cod.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- verif_nnir_cod.sql - NNIR distinct pe ACT/RUL/RUL_OBINV pentru un COD dat
|
||||
-- Rulare: sqlplus -L -S MARIUSM_AUTO/<parola>@ROA_CENTRAL @verif_nnir_cod.sql <cod>
|
||||
set pagesize 200 linesize 200 trimspool on feedback off
|
||||
define v_cod = &1
|
||||
prompt ==ACT==
|
||||
select cod, an, luna, id_set, nnir from act where cod = &v_cod;
|
||||
prompt ==RUL_NNIR_DISTINCT==
|
||||
select an, luna, nnir, count(*) cnt from rul where cod = &v_cod group by an, luna, nnir;
|
||||
prompt ==RUL_OBINV_NNIR_DISTINCT==
|
||||
select an, luna, nnir, count(*) cnt from rul_obinv where cod = &v_cod group by an, luna, nnir;
|
||||
exit;
|
||||
302
utile/Teste/test_init_env_auto_roagest.prg
Normal file
302
utile/Teste/test_init_env_auto_roagest.prg
Normal file
@@ -0,0 +1,302 @@
|
||||
* test_init_env_auto_roagest.prg
|
||||
* Varianta ROAGEST a test_init_env_auto.prg (acel fisier e specializat pe ROACONT -
|
||||
* gcAppPath/clase/proceduri hardcodate D:\ROA\ROACONT\ - nu poate initializa mediul ROAGEST).
|
||||
* Initializare completa de mediu FARA interactiune, pentru vfp9.exe -A -T.
|
||||
*
|
||||
* Utilizare:
|
||||
* DO test_init_env_auto_roagest WITH 'CENTRAL', 'MARIUSM_AUTO', 'parola'
|
||||
* IF gnHandle <= 0 ... eroare conectare
|
||||
*
|
||||
* Dupa apel sunt disponibile: goConn/goExecutor/goApp/goLog/goApi, goFirma/goCalendar,
|
||||
* gnAn/gnLuna/gcS/gnIdFirma etc., SET PATH/CLASSLIB/PROCEDURE ca in roagest.prg,
|
||||
* pachetele Oracle de sesiune setate (pack_sesiune/pack_contafin).
|
||||
* ATENTIE: mentine lista de SET CLASSLIB/PROCEDURE sincronizata cu Programe\roagest.prg.
|
||||
|
||||
LPARAMETERS tcHost, tcSchema, tcPassword, tnAn, tnLuna
|
||||
|
||||
tcHost = IIF(EMPTY(tcHost), 'CENTRAL', tcHost)
|
||||
tcSchema = IIF(EMPTY(tcSchema), 'MARIUSM_AUTO', tcSchema)
|
||||
tcPassword = IIF(EMPTY(tcPassword), 'ROMFASTSOFT', tcPassword)
|
||||
|
||||
SET DELETED ON
|
||||
SET ANSI ON
|
||||
SET EXACT ON
|
||||
SET SAFETY OFF
|
||||
CLOSE DATABASES
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET NULLDISPLAY TO ''
|
||||
SET DECIMALS TO 4
|
||||
SET POINT TO '.'
|
||||
|
||||
PUBLIC CT_SUCCES, CT_INSUCCES, crlf, gnAn, gnLuna, gnIdUtil, glEMama, gnIdFirma, gcCondSucursala, ;
|
||||
gnIdSucursala, gcS, gcFirma, gcUserName, gcUserNameApp, gcNumeProgram, gcAppName, glLunaInchisa, ;
|
||||
buton, gnButon, pnButon, gl406, gcAcces, gnIdProgram, gnId_Prg_Owner
|
||||
CT_SUCCES = 1
|
||||
CT_INSUCCES = -1
|
||||
crlf = CHR(13) + CHR(10)
|
||||
gnAn = IIF(EMPTY(tnAn), YEAR(DATE()), tnAn)
|
||||
gnLuna = IIF(EMPTY(tnLuna), MONTH(DATE()), tnLuna)
|
||||
gnIdUtil = -3
|
||||
gnIdProgram = 0
|
||||
gnId_Prg_Owner = 0
|
||||
gnIdFirma = 110
|
||||
gcCondSucursala = []
|
||||
gnIdSucursala = m.gnIdFirma
|
||||
gcS = UPPER(ALLTRIM(tcSchema))
|
||||
gcFirma = m.gcS
|
||||
gcUserName = m.gcS
|
||||
gcUserNameApp = [MARIUS M]
|
||||
gcNumeProgram = [ROAGEST]
|
||||
gcAppName = [ROAGEST]
|
||||
glLunaInchisa = .F.
|
||||
glEMama = .F.
|
||||
gl406 = .F.
|
||||
* PUBLIC, nu Declare: nrcrt() (oproceduri_comune.prg) citeste NROR din ControlSource-uri
|
||||
* de grid mult dupa ce acest program s-a terminat (Declare ar muri la RETURN)
|
||||
PUBLIC nror(65000)
|
||||
buton = 1
|
||||
gnButon = 1
|
||||
pnButon = 1
|
||||
|
||||
LOCAL lcPath
|
||||
PUBLIC gcAppPath, DIRGEN, gcDirMare, gcBasePath, gcTempPath, gcGeneralIniFile, gcSettingsFile, ;
|
||||
gcSecurityPath, gcSecurityFile
|
||||
gcAppPath = [D:\ROA\ROAGEST\]
|
||||
Set Default To (gcAppPath)
|
||||
lcPath = gcAppPath + 'Date;' + ;
|
||||
gcAppPath + 'Include;' + ;
|
||||
gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + ;
|
||||
gcAppPath + 'CLASE;' + ;
|
||||
gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + ;
|
||||
gcAppPath + 'RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + ;
|
||||
gcAppPath + 'COMUN\FERESTRE;' + ;
|
||||
gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + ;
|
||||
gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\NFJSON;' + ;
|
||||
Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
|
||||
Local lcMainClassLib
|
||||
lcMainClassLib = gcAppPath + "comun\clase\appwiz"
|
||||
SET CLASSLIB TO (lcMainClassLib) ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
Set Classlib To oinventar ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx additive
|
||||
SET CLASSLIB TO ctl32_common.vcx additive
|
||||
SET CLASSLIB TO ctl32_structs.vcx additive
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx additive
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx additive
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
Set Classlib To oschimbare_pret.vcx additive
|
||||
SET CLASSLIB TO wwdialogs.vcx additive
|
||||
SET CLASSLIB TO oimportxml.vcx additive
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
SET CLASSLIB TO locale ADDITIVE
|
||||
|
||||
SET PROCEDURE TO PROCEDURI ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg additive
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
Set procedure to orapoarte_dinamice.prg additive
|
||||
SET PROCEDURE TO validare.prg additive
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje additive
|
||||
SET PROCEDURE TO oproceduri_stocuri additive
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
Set procedure to oschimbare_pret.prg additive
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg additive
|
||||
SET PROCEDURE TO procese.prg additive
|
||||
SET PROCEDURE TO version.prg additive
|
||||
SET PROCEDURE TO xmlaccess.prg additive
|
||||
SET PROCEDURE TO xmlparser.prg additive
|
||||
SET PROCEDURE TO filebringer.prg additive
|
||||
SET PROCEDURE TO wwcodeupdate.prg additive
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
Set Procedure To wwApi.prg Additive
|
||||
SET PROCEDURE TO xdate.prg Additive
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
|
||||
Declare Integer GetPrivateProfileString In WIN32API ;
|
||||
string, String, String, String @, Integer, String
|
||||
Declare Integer WritePrivateProfileString In Win32Api ;
|
||||
string, String, String, String
|
||||
Declare Integer CopyFile In WIN32API ;
|
||||
STRING lpExistingFileName, STRING lpNewFileName, INTEGER bFailIfExists
|
||||
Declare Integer PathFileExists In shlwapi STRING pszPath
|
||||
|
||||
If Type('goApi') = 'U'
|
||||
Public goApi
|
||||
goApi = Newobject("wwAPI", "wwAPI.prg")
|
||||
ENDIF
|
||||
|
||||
PUBLIC gnHandle, goExecutor, goConn, goFirma, goCalendar, poLog, goLog, goApp
|
||||
DIRGEN = [D:\ROA\]
|
||||
gcDirMare = DIRGEN
|
||||
gcBasePath = dirgen
|
||||
gcSecurityPath = DIRGEN + 'Security\'
|
||||
gcSecurityFile = gcSecurityPath + 'ROA_SECURITY.TXT'
|
||||
gcGeneralIniFile = DIRGEN + "settings.ini"
|
||||
gcSettingsFile = m.gcGeneralIniFile
|
||||
gcTempPath = Addbs(shortpath(goApi.GetTempPath())) + gcS + [\]
|
||||
If !Directory(gcTempPath)
|
||||
Md (gcTempPath)
|
||||
Endif
|
||||
gcAcces = [1;2;3;4;5;6;7;8;]
|
||||
|
||||
poLog = Newobject("Log_Mesaje","Log_Mesaje.prg")
|
||||
goLog = poLog
|
||||
goApp = Createobject("wzApplication")
|
||||
gnHandle = 0
|
||||
goExecutor = createobject("oExecutor")
|
||||
goConn = createobject("oConn")
|
||||
goConn.Connect(m.tcHost, m.tcSchema, m.tcPassword)
|
||||
IF m.gnHandle <= 0
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
LOCAL llSucces, lcSql
|
||||
goFirma = null
|
||||
llSucces = goExecutor.oExecuta("select * from syn_v_nom_firme where schema = ?gcS", "cFirma")
|
||||
IF m.llSucces
|
||||
SELECT cFirma
|
||||
gnIdFirma = id_firma
|
||||
gnIdSucursala = null
|
||||
gcFirma = ALLTRIM(firma)
|
||||
SCATTER NAME goFirma
|
||||
IF TYPE('goFirma.codfiscalfro') = 'U'
|
||||
ADDPROPERTY(goFirma, 'codfiscalfro', ALLTRIM(STRTRAN(ALLTRIM(NVL(goFirma.cod_fiscal, '')), 'RO', '')))
|
||||
ENDIF
|
||||
ELSE
|
||||
goFirma = CREATEOBJECT('custom')
|
||||
goFirma.addproperty('cod_fiscal', '')
|
||||
goFirma.addproperty('schema', m.gcS)
|
||||
goFirma.addproperty('firma', m.gcS)
|
||||
goFirma.addproperty('codfiscalfro', '')
|
||||
ENDIF
|
||||
USE IN (SELECT('cFirma'))
|
||||
|
||||
goCalendar = null
|
||||
llSucces = goExecutor.oExecuta('SELECT anul, luna, tva_incasare FROM calendar WHERE an*12+luna = (select MAX(an*12+luna) FROM calendar)', 'cCalendar')
|
||||
IF m.llSucces
|
||||
SELECT cCalendar
|
||||
GO TOP
|
||||
IF EMPTY(m.tnAn)
|
||||
gnAn = anul
|
||||
gnLuna = luna
|
||||
ENDIF
|
||||
SCATTER NAME goCalendar
|
||||
ENDIF
|
||||
USE IN (SELECT('cCalendar'))
|
||||
|
||||
CREATE CURSOR dual (dummy c(10))
|
||||
INSERT INTO dual (dummy) VALUES ("")
|
||||
|
||||
actualizeaza_optiuni()
|
||||
Do optiuni_firma IN oinit_optiuni.prg
|
||||
|
||||
lcSql = [begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_sesiune.setlunabal(?gnLuna); pack_sesiune.setanbal(?gnAn); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_contafin.SET_DATA_RON(?gcS); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_sesiune.set_data_ron(?gcS); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
lcSql = [begin pack_contafin.set_id_firma(?gnIdFirma); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
|
||||
RETURN .T.
|
||||
Reference in New Issue
Block a user