sync SVN r18224
This commit is contained in:
@@ -9591,6 +9591,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
*< OBJECTDATA: ObjPath="chkDeCompletat" UniqueID="" Timestamp="" />
|
*< OBJECTDATA: ObjPath="chkDeCompletat" UniqueID="" Timestamp="" />
|
||||||
*< OBJECTDATA: ObjPath="lblCoadaAntet" UniqueID="" Timestamp="" />
|
*< OBJECTDATA: ObjPath="lblCoadaAntet" UniqueID="" Timestamp="" />
|
||||||
*< OBJECTDATA: ObjPath="Lb_shortcuts2" UniqueID="" Timestamp="" />
|
*< OBJECTDATA: ObjPath="Lb_shortcuts2" UniqueID="" Timestamp="" />
|
||||||
|
*< OBJECTDATA: ObjPath="Sfsplitterv1" UniqueID="" Timestamp="" />
|
||||||
|
|
||||||
*<DefinedPropArrayMethod>
|
*<DefinedPropArrayMethod>
|
||||||
*m: actualizeazacontoare
|
*m: actualizeazacontoare
|
||||||
@@ -10813,7 +10814,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
FontSize = 10, ;
|
FontSize = 10, ;
|
||||||
GridLineColor = 192,192,192, ;
|
GridLineColor = 192,192,192, ;
|
||||||
HeaderHeight = 35, ;
|
HeaderHeight = 35, ;
|
||||||
Height = 294, ;
|
Height = 292, ;
|
||||||
lcamptextneeditabil = .F., ;
|
lcamptextneeditabil = .F., ;
|
||||||
Left = 7, ;
|
Left = 7, ;
|
||||||
Name = "grdFacturi", ;
|
Name = "grdFacturi", ;
|
||||||
@@ -11818,6 +11819,22 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
ZOrderSet = 21
|
ZOrderSet = 21
|
||||||
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
|
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
|
||||||
|
|
||||||
|
ADD OBJECT 'Sfsplitterv1' AS sfsplitterv_panou WITH ;
|
||||||
|
Anchor = 10, ;
|
||||||
|
cinicheie = import_splitter_top, ;
|
||||||
|
cinisectiune = efactura, ;
|
||||||
|
cobject1name = grdFacturi, ;
|
||||||
|
cobject2name = grdDetaliiFacturi, ;
|
||||||
|
Height = 5, ;
|
||||||
|
Left = 7, ;
|
||||||
|
Name = "Sfsplitterv1", ;
|
||||||
|
nobject1minsize = 100, ;
|
||||||
|
nobject2minsize = 60, ;
|
||||||
|
Top = 364, ;
|
||||||
|
Width = 884, ;
|
||||||
|
gripper.Name = "gripper"
|
||||||
|
*< END OBJECT: ClassLib="sfsplitter.vcx" BaseClass="control" />
|
||||||
|
|
||||||
ADD OBJECT 'txtAcont' AS _textbox WITH ;
|
ADD OBJECT 'txtAcont' AS _textbox WITH ;
|
||||||
Anchor = 0, ;
|
Anchor = 0, ;
|
||||||
ControlSource = "crsFacturi.Acont", ;
|
ControlSource = "crsFacturi.Acont", ;
|
||||||
@@ -12550,6 +12567,13 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
loRecunoastere = Createobject('RecunoastereArticolEF')
|
loRecunoastere = Createobject('RecunoastereArticolEF')
|
||||||
llSuccesPotrivire = loRecunoastere.PotrivesteFactura(m.lnIdEFactura, m.lcCodFiscal, m.llPrimite, m.lnIdPart)
|
llSuccesPotrivire = loRecunoastere.PotrivesteFactura(m.lnIdEFactura, m.lcCodFiscal, m.llPrimite, m.lnIdPart)
|
||||||
|
|
||||||
|
* achizitii: linia de discount/reducere se conteaza pe 767, nu pe contul articolului sau al furnizorului
|
||||||
|
IF m.llPrimite
|
||||||
|
Update crsDetaliiFacturi Set cont = '767', acont = '' ;
|
||||||
|
Where id_efactura = m.lnIdEFactura And Empty(Nvl(cont,'')) And Nvl(valoarefaratva,0) < 0 ;
|
||||||
|
And ('DISCOUNT' $ Upper(articol) Or 'REDUCER' $ Upper(articol))
|
||||||
|
ENDIF
|
||||||
|
|
||||||
IF m.llSuccesPotrivire
|
IF m.llSuccesPotrivire
|
||||||
Select crsDetaliiFacturi
|
Select crsDetaliiFacturi
|
||||||
Scan For Empty(Nvl(id_articol,0)) OR m.llCompleteazaCont OR m.llCompleteazaGestiune
|
Scan For Empty(Nvl(id_articol,0)) OR m.llCompleteazaCont OR m.llCompleteazaGestiune
|
||||||
@@ -12797,6 +12821,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
IF Used('cAnaliticCerut')
|
IF Used('cAnaliticCerut')
|
||||||
Use In cAnaliticCerut
|
Use In cAnaliticCerut
|
||||||
ENDIF
|
ENDIF
|
||||||
|
This.Sfsplitterv1.SavePosition()
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE do_anulare_lot
|
PROCEDURE do_anulare_lot
|
||||||
@@ -14903,6 +14928,12 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
|
|||||||
Return Iif(Thisform.WindowState = 2, 0, Thisform.Top) + Thisform.grdFacturi.Top + Thisform.grdFacturi.HeaderHeight + 6 * Thisform.grdFacturi.RowHeight
|
Return Iif(Thisform.WindowState = 2, 0, Thisform.Top) + Thisform.grdFacturi.Top + Thisform.grdFacturi.HeaderHeight + 6 * Thisform.grdFacturi.RowHeight
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE Resize
|
||||||
|
DODEFAULT()
|
||||||
|
*!* restaureaza pozitia splitterului o singura data, dupa ce maximizarea a adus grdDetaliiFacturi la inaltimea reala
|
||||||
|
This.Sfsplitterv1.RestorePosition()
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE scrienote
|
PROCEDURE scrienote
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|||||||
@@ -674,6 +674,172 @@ DEFINE CLASS sfsplitterh AS sfsplitter OF "sfsplitter.vcx"
|
|||||||
|
|
||||||
ENDDEFINE
|
ENDDEFINE
|
||||||
|
|
||||||
|
DEFINE CLASS sfsplitterh_panou AS sfsplitterh OF "sfsplitter.vcx"
|
||||||
|
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||||||
|
|
||||||
|
*<DefinedPropArrayMethod>
|
||||||
|
*m: aliniazaobject1 && Lipeste Object 1 de splitter dupa Resize-ul lui Object 1
|
||||||
|
*m: legaobject1 && Leaga Resize-ul lui Object 1 de aliniazaobject1 (repetarea nu dubleaza legatura)
|
||||||
|
*m: mouseenter && Coloreaza splitterul la mouse over
|
||||||
|
*m: mouseleave && Readuce culoarea de dinainte de mouse over
|
||||||
|
*m: restoreposition && Restores the splitter position saved in the ini file (once)
|
||||||
|
*m: saveposition && Saves the splitter position in the ini file if it was changed
|
||||||
|
*p: cinicheie && Ini key for the saved position (empty = no persistence)
|
||||||
|
*p: cinisectiune && Ini section for the saved position (empty = no persistence)
|
||||||
|
*p: lhover && .T. cat timp splitterul e colorat la mouse over
|
||||||
|
*p: lrestaurat && .T. after RestorePosition() ran
|
||||||
|
*p: nbackcolorvechi && BackColor de dinainte de mouse over
|
||||||
|
*p: nbackstylevechi && BackStyle de dinainte de mouse over
|
||||||
|
*</DefinedPropArrayMethod>
|
||||||
|
|
||||||
|
*<PropValue>
|
||||||
|
BackColor = 200,215,230
|
||||||
|
BackStyle = 1
|
||||||
|
cinicheie =
|
||||||
|
cinisectiune =
|
||||||
|
lhover = .F.
|
||||||
|
lrestaurat = .F.
|
||||||
|
Name = "sfsplitterh_panou"
|
||||||
|
nbackcolorvechi = 0
|
||||||
|
nbackstylevechi = 0
|
||||||
|
gripper.Gripperdot1.Name = "Gripperdot1"
|
||||||
|
gripper.Gripperdot1.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot1.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot1.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot2.Name = "Gripperdot2"
|
||||||
|
gripper.Gripperdot2.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot2.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot2.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot3.Name = "Gripperdot3"
|
||||||
|
gripper.Gripperdot3.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot3.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot3.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot4.Name = "Gripperdot4"
|
||||||
|
gripper.Gripperdot4.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot4.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot4.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot5.Name = "Gripperdot5"
|
||||||
|
gripper.Gripperdot5.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot5.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot5.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Name = "gripper"
|
||||||
|
*</PropValue>
|
||||||
|
|
||||||
|
PROCEDURE aliniazaobject1 && Lipeste Object 1 de splitter dupa Resize-ul lui Object 1
|
||||||
|
Local lcObj1, loObj1
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
If m.loObj1.Left + m.loObj1.Width # This.Left
|
||||||
|
m.loObj1.Width = Max(This.Left - m.loObj1.Left, 1)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE Init
|
||||||
|
DoDefault()
|
||||||
|
This.LegaObject1()
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE legaobject1 && Leaga Resize-ul lui Object 1 de aliniazaobject1 (repetarea nu dubleaza legatura)
|
||||||
|
Local lcObj1, loObj1
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
If Pemstatus(This.Parent, m.lcObj1, 5)
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
BindEvent(m.loObj1, 'Resize', This, 'aliniazaobject1', 1)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE MouseEnter && Coloreaza splitterul la mouse over
|
||||||
|
LPARAMETERS nButton, nShift, nXCoord, nYCoord
|
||||||
|
DoDefault(m.nButton, m.nShift, m.nXCoord, m.nYCoord)
|
||||||
|
If !This.lHover
|
||||||
|
This.nBackColorVechi = This.BackColor
|
||||||
|
This.nBackStyleVechi = This.BackStyle
|
||||||
|
This.lHover = .T.
|
||||||
|
This.BackStyle = 1
|
||||||
|
This.BackColor = RGB(0,120,215)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE MouseLeave && Readuce culoarea de dinainte de mouse over
|
||||||
|
LPARAMETERS nButton, nShift, nXCoord, nYCoord
|
||||||
|
Local loObj
|
||||||
|
DoDefault(m.nButton, m.nShift, m.nXCoord, m.nYCoord)
|
||||||
|
* mouse-ul a intrat pe gripper (copil al splitterului): ramane colorat
|
||||||
|
loObj = Sys(1270)
|
||||||
|
Try
|
||||||
|
Do While Vartype(m.loObj) = 'O'
|
||||||
|
If Compobj(m.loObj.Parent, This)
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
loObj = m.loObj.Parent
|
||||||
|
Enddo
|
||||||
|
Catch
|
||||||
|
Endtry
|
||||||
|
If This.lHover
|
||||||
|
This.lHover = .F.
|
||||||
|
This.BackColor = This.nBackColorVechi
|
||||||
|
This.BackStyle = This.nBackStyleVechi
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE movesplittertoposition
|
||||||
|
LPARAMETERS tnPosition
|
||||||
|
Local lnDelta, lnPrag, lnAnchor, loCtl, loObj1, loObj2, lcObj1, lcObj2
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
lcObj2 = This.cObject2Name
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
loObj2 = This.Parent.&lcObj2
|
||||||
|
tnPosition = Max(m.tnPosition, m.loObj1.Left + This.nObject1MinSize)
|
||||||
|
tnPosition = Min(m.tnPosition, This.Left + m.loObj2.Width - This.nObject2MinSize)
|
||||||
|
lnDelta = m.tnPosition - This.Left
|
||||||
|
If m.lnDelta = 0
|
||||||
|
m.loObj1.Width = m.tnPosition - m.loObj1.Left
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
lnPrag = This.Left + This.Width
|
||||||
|
For Each loCtl In This.Parent.Objects
|
||||||
|
If Pemstatus(m.loCtl, 'Anchor', 5) And m.loCtl.Left >= m.lnPrag
|
||||||
|
lnAnchor = m.loCtl.Anchor
|
||||||
|
m.loCtl.Anchor = 0
|
||||||
|
If m.loCtl.Name == m.loObj2.Name
|
||||||
|
m.loCtl.Move(m.loCtl.Left + m.lnDelta, m.loCtl.Top, m.loCtl.Width - m.lnDelta, m.loCtl.Height)
|
||||||
|
Else
|
||||||
|
m.loCtl.Left = m.loCtl.Left + m.lnDelta
|
||||||
|
Endif
|
||||||
|
m.loCtl.Anchor = m.lnAnchor
|
||||||
|
Endif
|
||||||
|
Endfor
|
||||||
|
* splitterul si Object 1 se muta direct, fara a atinge Anchor (altfel tragerea pierde mouse-ul); Object 1 se dimensioneaza din pozitie
|
||||||
|
This.Left = m.tnPosition
|
||||||
|
m.loObj1.Width = m.tnPosition - m.loObj1.Left
|
||||||
|
This.SplitterMoved()
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE restoreposition && Restores the splitter position saved in the ini file (once)
|
||||||
|
Local lnPoz
|
||||||
|
This.LegaObject1()
|
||||||
|
If This.lRestaurat Or Empty(This.cIniSectiune) Or Empty(This.cIniCheie)
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
This.lRestaurat = .T.
|
||||||
|
lnPoz = Val(Nvl(getini(m.gcGeneralIniFile, This.cIniSectiune, This.cIniCheie), ''))
|
||||||
|
If m.lnPoz > 0
|
||||||
|
This.MoveSplitterToPosition(m.lnPoz)
|
||||||
|
Endif
|
||||||
|
This.Tag = Transform(This.Left)
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE saveposition && Saves the splitter position in the ini file if it was changed
|
||||||
|
If This.lRestaurat And Transform(This.Left) != This.Tag
|
||||||
|
setini(m.gcGeneralIniFile, This.cIniSectiune, This.cIniCheie, Transform(This.Left))
|
||||||
|
Endif
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
ENDDEFINE
|
||||||
|
|
||||||
DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
|
DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
|
||||||
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
|
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||||||
|
|
||||||
@@ -706,26 +872,26 @@ DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
|
|||||||
gripper.Name = "gripper"
|
gripper.Name = "gripper"
|
||||||
*</PropValue>
|
*</PropValue>
|
||||||
|
|
||||||
PROCEDURE getobject1size && Gets the size for Object 1
|
PROCEDURE getobject1size
|
||||||
lparameters toObject
|
lparameters toObject
|
||||||
return toObject.Top + This.nObject1MinSize
|
return toObject.Top + This.nObject1MinSize
|
||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE getobject2size && Gets the size for Object 2
|
PROCEDURE getobject2size
|
||||||
lparameters toObject
|
lparameters toObject
|
||||||
return toObject.Top + toObject.Height - This.nObject2MinSize - This.Height
|
return toObject.Top + toObject.Height - This.nObject2MinSize - This.Height
|
||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE getposition && Returns the new position: X for a horizontal splitter and Y for a vertical splitter
|
PROCEDURE getposition
|
||||||
lparameters tnXCoord, ;
|
lparameters tnXCoord, ;
|
||||||
tnYCoord
|
tnYCoord
|
||||||
return tnYCoord + This.Top - Objtoclient(this,1)
|
return tnYCoord + This.Top - Objtoclient(this,1)
|
||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE moveobject1 && Moves Object 1 to the new position
|
PROCEDURE moveobject1
|
||||||
lparameters toObject
|
lparameters toObject
|
||||||
with toObject
|
with toObject
|
||||||
.Move(.Left, .Top, .Width, This.Top - .Top)
|
.Move(.Left, .Top, .Width, This.Top - .Top)
|
||||||
@@ -733,7 +899,7 @@ DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
|
|||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE moveobject2 && Moves Object 2 to the new position
|
PROCEDURE moveobject2
|
||||||
lparameters toObject
|
lparameters toObject
|
||||||
with toObject
|
with toObject
|
||||||
.Move(.Left, This.Top + This.Height, .Width, max(.Height + .Top - This.Top - ;
|
.Move(.Left, This.Top + This.Height, .Width, max(.Height + .Top - This.Top - ;
|
||||||
@@ -742,10 +908,176 @@ DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
|
|||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE setposition && Sets the new position for the splitter
|
PROCEDURE setposition
|
||||||
lparameters tnPosition
|
lparameters tnPosition
|
||||||
This.Top = tnPosition
|
This.Top = tnPosition
|
||||||
|
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
ENDDEFINE
|
ENDDEFINE
|
||||||
|
|
||||||
|
DEFINE CLASS sfsplitterv_panou AS sfsplitterv OF "sfsplitter.vcx"
|
||||||
|
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
|
||||||
|
|
||||||
|
*<DefinedPropArrayMethod>
|
||||||
|
*m: aliniazaobject1 && Lipeste Object 1 de splitter dupa Resize-ul lui Object 1
|
||||||
|
*m: legaobject1 && Leaga Resize-ul lui Object 1 de aliniazaobject1 (repetarea nu dubleaza legatura)
|
||||||
|
*m: mouseenter && Coloreaza splitterul la mouse over
|
||||||
|
*m: mouseleave && Readuce culoarea de dinainte de mouse over
|
||||||
|
*m: restoreposition && Restores the splitter position saved in the ini file (once)
|
||||||
|
*m: saveposition && Saves the splitter position in the ini file if it was changed
|
||||||
|
*p: cinicheie && Ini key for the saved position (empty = no persistence)
|
||||||
|
*p: cinisectiune && Ini section for the saved position (empty = no persistence)
|
||||||
|
*p: lhover && .T. cat timp splitterul e colorat la mouse over
|
||||||
|
*p: lrestaurat && .T. after RestorePosition() ran
|
||||||
|
*p: nbackcolorvechi && BackColor de dinainte de mouse over
|
||||||
|
*p: nbackstylevechi && BackStyle de dinainte de mouse over
|
||||||
|
*</DefinedPropArrayMethod>
|
||||||
|
|
||||||
|
*<PropValue>
|
||||||
|
BackColor = 200,215,230
|
||||||
|
BackStyle = 1
|
||||||
|
cinicheie =
|
||||||
|
cinisectiune =
|
||||||
|
lhover = .F.
|
||||||
|
lrestaurat = .F.
|
||||||
|
Name = "sfsplitterv_panou"
|
||||||
|
nbackcolorvechi = 0
|
||||||
|
nbackstylevechi = 0
|
||||||
|
gripper.Gripperdot1.Name = "Gripperdot1"
|
||||||
|
gripper.Gripperdot1.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot1.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot1.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot2.Name = "Gripperdot2"
|
||||||
|
gripper.Gripperdot2.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot2.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot2.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot3.Name = "Gripperdot3"
|
||||||
|
gripper.Gripperdot3.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot3.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot3.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot4.Name = "Gripperdot4"
|
||||||
|
gripper.Gripperdot4.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot4.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot4.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Gripperdot5.Name = "Gripperdot5"
|
||||||
|
gripper.Gripperdot5.ShapeDark.Name = "ShapeDark"
|
||||||
|
gripper.Gripperdot5.ShapeLight.Name = "ShapeLight"
|
||||||
|
gripper.Gripperdot5.ShapeMiddle.Name = "ShapeMiddle"
|
||||||
|
gripper.Name = "gripper"
|
||||||
|
*</PropValue>
|
||||||
|
|
||||||
|
PROCEDURE aliniazaobject1 && Lipeste Object 1 de splitter dupa Resize-ul lui Object 1
|
||||||
|
Local lcObj1, loObj1
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
If m.loObj1.Top + m.loObj1.Height # This.Top
|
||||||
|
m.loObj1.Height = Max(This.Top - m.loObj1.Top, 1)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE Init
|
||||||
|
DoDefault()
|
||||||
|
This.LegaObject1()
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE legaobject1 && Leaga Resize-ul lui Object 1 de aliniazaobject1 (repetarea nu dubleaza legatura)
|
||||||
|
Local lcObj1, loObj1
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
If Pemstatus(This.Parent, m.lcObj1, 5)
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
BindEvent(m.loObj1, 'Resize', This, 'aliniazaobject1', 1)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE MouseEnter && Coloreaza splitterul la mouse over
|
||||||
|
LPARAMETERS nButton, nShift, nXCoord, nYCoord
|
||||||
|
DoDefault(m.nButton, m.nShift, m.nXCoord, m.nYCoord)
|
||||||
|
If !This.lHover
|
||||||
|
This.nBackColorVechi = This.BackColor
|
||||||
|
This.nBackStyleVechi = This.BackStyle
|
||||||
|
This.lHover = .T.
|
||||||
|
This.BackStyle = 1
|
||||||
|
This.BackColor = RGB(0,120,215)
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE MouseLeave && Readuce culoarea de dinainte de mouse over
|
||||||
|
LPARAMETERS nButton, nShift, nXCoord, nYCoord
|
||||||
|
Local loObj
|
||||||
|
DoDefault(m.nButton, m.nShift, m.nXCoord, m.nYCoord)
|
||||||
|
* mouse-ul a intrat pe gripper (copil al splitterului): ramane colorat
|
||||||
|
loObj = Sys(1270)
|
||||||
|
Try
|
||||||
|
Do While Vartype(m.loObj) = 'O'
|
||||||
|
If Compobj(m.loObj.Parent, This)
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
loObj = m.loObj.Parent
|
||||||
|
Enddo
|
||||||
|
Catch
|
||||||
|
Endtry
|
||||||
|
If This.lHover
|
||||||
|
This.lHover = .F.
|
||||||
|
This.BackColor = This.nBackColorVechi
|
||||||
|
This.BackStyle = This.nBackStyleVechi
|
||||||
|
Endif
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE movesplittertoposition
|
||||||
|
LPARAMETERS tnPosition
|
||||||
|
Local lnDelta, lnPrag, lnAnchor, loCtl, loObj1, loObj2, lcObj1, lcObj2
|
||||||
|
lcObj1 = This.cObject1Name
|
||||||
|
lcObj2 = This.cObject2Name
|
||||||
|
loObj1 = This.Parent.&lcObj1
|
||||||
|
loObj2 = This.Parent.&lcObj2
|
||||||
|
tnPosition = Max(m.tnPosition, m.loObj1.Top + This.nObject1MinSize)
|
||||||
|
tnPosition = Min(m.tnPosition, This.Top + m.loObj2.Height - This.nObject2MinSize)
|
||||||
|
lnDelta = m.tnPosition - This.Top
|
||||||
|
If m.lnDelta = 0
|
||||||
|
m.loObj1.Height = m.tnPosition - m.loObj1.Top
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
lnPrag = This.Top + This.Height
|
||||||
|
For Each loCtl In This.Parent.Objects
|
||||||
|
If Pemstatus(m.loCtl, 'Anchor', 5) And m.loCtl.Top >= m.lnPrag
|
||||||
|
lnAnchor = m.loCtl.Anchor
|
||||||
|
m.loCtl.Anchor = 0
|
||||||
|
If m.loCtl.Name == m.loObj2.Name
|
||||||
|
m.loCtl.Move(m.loCtl.Left, m.loCtl.Top + m.lnDelta, m.loCtl.Width, m.loCtl.Height - m.lnDelta)
|
||||||
|
Else
|
||||||
|
m.loCtl.Top = m.loCtl.Top + m.lnDelta
|
||||||
|
Endif
|
||||||
|
m.loCtl.Anchor = m.lnAnchor
|
||||||
|
Endif
|
||||||
|
Endfor
|
||||||
|
* splitterul si Object 1 se muta direct, fara a atinge Anchor (altfel tragerea pierde mouse-ul); Object 1 se dimensioneaza din pozitie
|
||||||
|
This.Top = m.tnPosition
|
||||||
|
m.loObj1.Height = m.tnPosition - m.loObj1.Top
|
||||||
|
This.SplitterMoved()
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE restoreposition && Restores the splitter position saved in the ini file (once)
|
||||||
|
Local lnPoz
|
||||||
|
This.LegaObject1()
|
||||||
|
If This.lRestaurat Or Empty(This.cIniSectiune) Or Empty(This.cIniCheie)
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
This.lRestaurat = .T.
|
||||||
|
lnPoz = Val(Nvl(getini(m.gcGeneralIniFile, This.cIniSectiune, This.cIniCheie), ''))
|
||||||
|
If m.lnPoz > 0
|
||||||
|
This.MoveSplitterToPosition(m.lnPoz)
|
||||||
|
Endif
|
||||||
|
This.Tag = Transform(This.Top)
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE saveposition && Saves the splitter position in the ini file if it was changed
|
||||||
|
If This.lRestaurat And Transform(This.Top) != This.Tag
|
||||||
|
setini(m.gcGeneralIniFile, This.cIniSectiune, This.cIniCheie, Transform(This.Top))
|
||||||
|
Endif
|
||||||
|
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
ENDDEFINE
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ atingi zona X, citeste fisierul Y"). Restul se deschid doar la declansator.
|
|||||||
| `machete-note-xrequest-explicatii.md` | schimbi ce campuri cere o operatie la introducere (`XREQUEST`/`XITEMS`/`XNOTE`); explicatie, explicatia4, explicatia5 |
|
| `machete-note-xrequest-explicatii.md` | schimbi ce campuri cere o operatie la introducere (`XREQUEST`/`XITEMS`/`XNOTE`); explicatie, explicatia4, explicatia5 |
|
||||||
| `incasari-plati-valuta-diferita.md` | incasare/plata in alta valuta decat a facturii (seturile 10600-10603); ce se pune la valute si cursuri |
|
| `incasari-plati-valuta-diferita.md` | incasare/plata in alta valuta decat a facturii (seturile 10600-10603); ce se pune la valute si cursuri |
|
||||||
| `email-thunderbird.md` | citirea mailurilor de pe conturile romfast |
|
| `email-thunderbird.md` | citirea mailurilor de pe conturile romfast |
|
||||||
|
| `http_romfast_user_agent.md` | scrii/depanezi o cerere HTTP din VFP catre romfast.ro (User-Agent obligatoriu, altfel IP blocat) |
|
||||||
|
|
||||||
`onboarding\` — proceduri rulate o singura data per proiect (inrolare in fluxul git-text,
|
`onboarding\` — proceduri rulate o singura data per proiect (inrolare in fluxul git-text,
|
||||||
prompturi de configurare) -> skill `roa-onboarding` pentru executie. Nu se citesc in sesiunile de lucru.
|
prompturi de configurare) -> skill `roa-onboarding` pentru executie. Nu se citesc in sesiunile de lucru.
|
||||||
|
|||||||
18
docs/http_romfast_user_agent.md
Normal file
18
docs/http_romfast_user_agent.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Cereri HTTP catre romfast.ro: User-Agent obligatoriu
|
||||||
|
|
||||||
|
`romfast.ro` / `www.romfast.ro` (hosting romarg, 89.42.218.17): firewall-ul taie cererile cu
|
||||||
|
User-Agent-ul implicit WinHTTP (`Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)`) si
|
||||||
|
apoi blocheaza IP-ul clientului cateva minute (ERR_CONNECTION_RESET pe 80/443, si din browser).
|
||||||
|
`roa.romfast.ro` e alt server (188.26.14.103) - neafectat.
|
||||||
|
|
||||||
|
- Afectate: `WinHttp.WinHttpRequest.5.1` si `MSXML2.ServerXMLHTTP` (foloseste WinHTTP dedesubt).
|
||||||
|
Neafectate: `MSXML2.XMLHTTP` (WinInet) si browserul.
|
||||||
|
- Regula: orice cerere catre romfast.ro primeste, dupa `.Open(...)`:
|
||||||
|
`loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')`
|
||||||
|
- Simptom in VFP: "OLE IDispatch exception code 0 from msxml6.dll: The download of the specified
|
||||||
|
resource has failed." - vine din fallback-ul MSXML, dupa ce WinHTTP a blocat deja IP-ul.
|
||||||
|
- Testare: niciodata cu User-Agent-ul implicit WinHTTP (blocheaza IP-ul biroului). Inainte si dupa:
|
||||||
|
`(Invoke-WebRequest https://romfast.ro/ -UseBasicParsing -TimeoutSec 8).StatusCode` -> 200.
|
||||||
|
- Corectate deja (COMUN\programe): `anaf_efactura.prg` (newToken, refreshToken),
|
||||||
|
`xmlefactura-preview.prg` (editare in browser), `oproceduri_comune.prg` (HTTPDownloadFile),
|
||||||
|
`actualizare_aplicatie.prg`.
|
||||||
@@ -138,6 +138,7 @@
|
|||||||
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> skill roa-oracle-diagnostic (acopera si spatiul plin; criteriile lui blocheaza "gata");
|
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> skill roa-oracle-diagnostic (acopera si spatiul plin; criteriile lui blocheaza "gata");
|
||||||
- modifici schema Oracle (tabele/view-uri/pachete) -> skill roa-oracle-migration (scriere + publicare scripturi; criteriile lui blocheaza "gata");
|
- modifici schema Oracle (tabele/view-uri/pachete) -> skill roa-oracle-migration (scriere + publicare scripturi; criteriile lui blocheaza "gata");
|
||||||
- rulezi sau depanezi workflow-ul Archon `roa-fix` -> `archon_capcane.md`;
|
- rulezi sau depanezi workflow-ul Archon `roa-fix` -> `archon_capcane.md`;
|
||||||
|
- cerere HTTP din VFP catre romfast.ro (WinHTTP/ServerXMLHTTP) -> `http_romfast_user_agent.md`;
|
||||||
- inrolezi un calculator nou sau un proiect nou in fluxul git-text, expui skill-urile pe masina sau aplici backstop-ul de rutare -> skill roa-onboarding (el detine procedura; criteriile lui blocheaza "gata").
|
- inrolezi un calculator nou sau un proiect nou in fluxul git-text, expui skill-urile pe masina sau aplici backstop-ul de rutare -> skill roa-onboarding (el detine procedura; criteriile lui blocheaza "gata").
|
||||||
8. Eroare raportata de utilizator: nu analiza statica indelungata — scrie intai un test care o
|
8. Eroare raportata de utilizator: nu analiza statica indelungata — scrie intai un test care o
|
||||||
reproduce pe fluxul real; el da cauza si confirma remedierea. Analiza statica doar cat sa stii
|
reproduce pe fluxul real; el da cauza si confirma remedierea. Analiza statica doar cat sa stii
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ IF m.llSucces
|
|||||||
TRY
|
TRY
|
||||||
This.Log(m.lcServer)
|
This.Log(m.lcServer)
|
||||||
loHTTP.Open('GET', lcServer, .F.)
|
loHTTP.Open('GET', lcServer, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.setRequestHeader("Content-Type", "application/xml")
|
loHTTP.setRequestHeader("Content-Type", "application/xml")
|
||||||
loHTTP.Send()
|
loHTTP.Send()
|
||||||
llSucces = .T.
|
llSucces = .T.
|
||||||
@@ -69,6 +70,7 @@ If m.llSucces AND m.lcVersiuneServer <> m.lcVersiuneClient AND !EMPTY(m.lcServer
|
|||||||
TRY
|
TRY
|
||||||
This.Log(m.lcServer)
|
This.Log(m.lcServer)
|
||||||
loHTTP.Open('GET', lcServer, .F.)
|
loHTTP.Open('GET', lcServer, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.setRequestHeader("Content-Type", "application/vnd.microsoft.portable-executable")
|
loHTTP.setRequestHeader("Content-Type", "application/vnd.microsoft.portable-executable")
|
||||||
loHTTP.Send()
|
loHTTP.Send()
|
||||||
llSucces = .T.
|
llSucces = .T.
|
||||||
|
|||||||
@@ -624,6 +624,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
|
|||||||
loHTTP = CREATEOBJECT('WinHttp.WinHttpRequest.5.1')
|
loHTTP = CREATEOBJECT('WinHttp.WinHttpRequest.5.1')
|
||||||
loHTTP.SetTimeouts(5000, 5000, 5000, 5000)
|
loHTTP.SetTimeouts(5000, 5000, 5000, 5000)
|
||||||
loHTTP.Open('POST', lcPickUrl, .F.)
|
loHTTP.Open('POST', lcPickUrl, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
|
loHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
|
||||||
loHTTP.Send('state=' + lcState)
|
loHTTP.Send('state=' + lcState)
|
||||||
lnStatus = loHTTP.Status
|
lnStatus = loHTTP.Status
|
||||||
@@ -714,7 +715,6 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
|
|||||||
llSucces = .T.
|
llSucces = .T.
|
||||||
lcRefreshToken = Alltrim(This.cRefreshToken)
|
lcRefreshToken = Alltrim(This.cRefreshToken)
|
||||||
tcMesaj = ''
|
tcMesaj = ''
|
||||||
SET STEP ON
|
|
||||||
If Empty(m.lcRefreshToken)
|
If Empty(m.lcRefreshToken)
|
||||||
tcMesaj = 'Completati Refresh Token'
|
tcMesaj = 'Completati Refresh Token'
|
||||||
This.Log(m.tcMesaj)
|
This.Log(m.tcMesaj)
|
||||||
@@ -724,6 +724,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
|
|||||||
TRY
|
TRY
|
||||||
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
||||||
loHTTP.Open('POST', lcURL, .F.)
|
loHTTP.Open('POST', lcURL, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||||
loHTTP.Send([refresh_token=] + m.lcRefreshToken)
|
loHTTP.Send([refresh_token=] + m.lcRefreshToken)
|
||||||
|
|
||||||
@@ -735,6 +736,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
|
|||||||
TRY
|
TRY
|
||||||
loHTTP = Createobject('MSXML2.XMLHTTP.6.0')
|
loHTTP = Createobject('MSXML2.XMLHTTP.6.0')
|
||||||
loHTTP.Open('POST', lcURL, .F.)
|
loHTTP.Open('POST', lcURL, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||||
loHTTP.Send([refresh_token=] + m.lcRefreshToken)
|
loHTTP.Send([refresh_token=] + m.lcRefreshToken)
|
||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
|
|||||||
@@ -8353,6 +8353,7 @@ PROCEDURE HTTPDownloadFile
|
|||||||
|
|
||||||
loHTTP = Createobject("winhttp.winhttprequest.5.1")
|
loHTTP = Createobject("winhttp.winhttprequest.5.1")
|
||||||
loHTTP.Open("GET", m.lcURL, .F.)
|
loHTTP.Open("GET", m.lcURL, .F.)
|
||||||
|
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
loHTTP.Send()
|
loHTTP.Send()
|
||||||
lnStatus = loHTTP.Status
|
lnStatus = loHTTP.Status
|
||||||
lnBytes = 0
|
lnBytes = 0
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ Define Class eFacturaXmlPreview As Custom
|
|||||||
|
|
||||||
* Deschide conexiunea
|
* Deschide conexiunea
|
||||||
loXMLHTTP.Open("POST", This.webURL + "receiver.php", .F.)
|
loXMLHTTP.Open("POST", This.webURL + "receiver.php", .F.)
|
||||||
|
loXMLHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
|
||||||
|
|
||||||
* Seteaza headere
|
* Seteaza headere
|
||||||
loXMLHTTP.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
loXMLHTTP.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
||||||
|
|||||||
@@ -647,6 +647,67 @@ select id from (select id, decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) -
|
|||||||
DO TVerdict WITH .F., 'T EXCEPTIE la garzile ActualizeazaRandImportat', loErrT.Message
|
DO TVerdict WITH .F., 'T EXCEPTIE la garzile ActualizeazaRandImportat', loErrT.Message
|
||||||
ENDTRY
|
ENDTRY
|
||||||
|
|
||||||
|
* ---------- U: achizitie - linie negativa DISCOUNT/REDUCER primeste 767; linie negativa fara acel cuvant si vanzarea raman neschimbate ----------
|
||||||
|
TRY
|
||||||
|
SELECT crsFacturi
|
||||||
|
APPEND BLANK
|
||||||
|
REPLACE id WITH -205, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 0, motiv_lot WITH '', de_completat WITH '', ;
|
||||||
|
numar_act WITH 'ZZT-U1-C', xfurnizor WITH 'TEST U FURNIZOR', cod_fiscal WITH 'RO9992000001', ;
|
||||||
|
completat WITH 0, completatdet WITH 0, total_cu_tva WITH 0 IN crsFacturi
|
||||||
|
lnRecnoU1 = RECNO('crsFacturi')
|
||||||
|
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
SET FILTER TO id_efactura = -205
|
||||||
|
APPEND BLANK
|
||||||
|
REPLACE id_efactura WITH -205, nr WITH 1, articol WITH 'DISCOUNT 5%', cont WITH '', valoarefaratva WITH -100, in_stoc WITH 0 IN crsDetaliiFacturi
|
||||||
|
APPEND BLANK
|
||||||
|
REPLACE id_efactura WITH -205, nr WITH 2, articol WITH 'CAPAC GRATAR RETUR', cont WITH '', valoarefaratva WITH -50, in_stoc WITH 0 IN crsDetaliiFacturi
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
SET FILTER TO
|
||||||
|
|
||||||
|
loFormB.lPrimite = .T.
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO m.lnRecnoU1
|
||||||
|
loFormB.completeazadetaliifactura()
|
||||||
|
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
LOCATE FOR id_efactura = -205 AND nr = 1
|
||||||
|
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) == '767', 'U1 achizitie: linie negativa DISCOUNT primeste 767', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
|
||||||
|
LOCATE FOR id_efactura = -205 AND nr = 2
|
||||||
|
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) != '767', 'U2 achizitie: linie negativa fara DISCOUNT/REDUCER nu primeste 767', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
|
||||||
|
SET FILTER TO
|
||||||
|
|
||||||
|
SELECT crsFacturi
|
||||||
|
APPEND BLANK
|
||||||
|
REPLACE id WITH -206, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 0, motiv_lot WITH '', de_completat WITH '', ;
|
||||||
|
numar_act WITH 'ZZT-U3-V', xclient WITH 'TEST U CLIENT', cod_fiscal WITH 'RO9992000001', ;
|
||||||
|
completat WITH 0, completatdet WITH 0, total_cu_tva WITH 0 IN crsFacturi
|
||||||
|
lnRecnoU2 = RECNO('crsFacturi')
|
||||||
|
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
SET FILTER TO id_efactura = -206
|
||||||
|
APPEND BLANK
|
||||||
|
REPLACE id_efactura WITH -206, nr WITH 1, articol WITH 'DISCOUNT 5%', cont WITH '', valoarefaratva WITH -100, in_stoc WITH 0 IN crsDetaliiFacturi
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
SET FILTER TO
|
||||||
|
|
||||||
|
loFormB.lPrimite = .F.
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO m.lnRecnoU2
|
||||||
|
loFormB.completeazadetaliifactura()
|
||||||
|
|
||||||
|
SELECT crsDetaliiFacturi
|
||||||
|
LOCATE FOR id_efactura = -206 AND nr = 1
|
||||||
|
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) != '767', 'U3 vanzare: linie negativa DISCOUNT nu primeste 767 (ramane neschimbata)', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
|
||||||
|
SET FILTER TO
|
||||||
|
|
||||||
|
loFormB.lPrimite = .T.
|
||||||
|
CATCH TO loErrU
|
||||||
|
loFormB.lPrimite = .T.
|
||||||
|
DO TLog WITH 'EXCEPTIE U (discount 767 la achizitie): ' + loErrU.Message + ' | ' + loErrU.Procedure + ' linia ' + TRANSFORM(loErrU.LineNo)
|
||||||
|
DO TVerdict WITH .F., 'U EXCEPTIE la testul discount 767', loErrU.Message
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
loFormB.Release()
|
loFormB.Release()
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
|||||||
@@ -128,13 +128,17 @@ TRY
|
|||||||
LOCATE FOR id = 5
|
LOCATE FOR id = 5
|
||||||
DO PrTest WITH 'randul 5 (numar fara cifre) BLOCAT', eligibil_lot = 0 AND ales = 0 AND 'numarul documentului' $ motiv_lot
|
DO PrTest WITH 'randul 5 (numar fara cifre) BLOCAT', eligibil_lot = 0 AND ales = 0 AND 'numarul documentului' $ motiv_lot
|
||||||
|
|
||||||
DO PrLogLocal WITH '=== NrActDinNumarAct: primul grup de cifre de la dreapta ==='
|
DO PrLogLocal WITH '=== NrActDinNumarAct: primul grup de cifre de la dreapta, ultimele 12 ==='
|
||||||
DO PrTest WITH 'ZZT-A1-C -> 1', loCoada.NrActDinNumarAct('ZZT-A1-C') = 1
|
DO PrTest WITH 'ZZT-A1-C -> 1', loCoada.NrActDinNumarAct('ZZT-A1-C') = 1
|
||||||
DO PrTest WITH 'ZZT-A10-C -> 10', loCoada.NrActDinNumarAct('ZZT-A10-C') = 10
|
DO PrTest WITH 'ZZT-A10-C -> 10', loCoada.NrActDinNumarAct('ZZT-A10-C') = 10
|
||||||
DO PrTest WITH 'F1234 -> 1234 (neschimbat fata de regula veche)', loCoada.NrActDinNumarAct('F1234') = 1234
|
DO PrTest WITH 'F1234 -> 1234 (neschimbat fata de regula veche)', loCoada.NrActDinNumarAct('F1234') = 1234
|
||||||
DO PrTest WITH '2026-000123 -> 123 (neschimbat)', loCoada.NrActDinNumarAct('2026-000123') = 123
|
DO PrTest WITH '2026-000123 -> 123 (neschimbat)', loCoada.NrActDinNumarAct('2026-000123') = 123
|
||||||
DO PrTest WITH 'FACTURA (fara cifre) -> 0', loCoada.NrActDinNumarAct('FACTURA') = 0
|
DO PrTest WITH 'FACTURA (fara cifre) -> 0', loCoada.NrActDinNumarAct('FACTURA') = 0
|
||||||
DO PrTest WITH 'gol -> 0', loCoada.NrActDinNumarAct('') = 0
|
DO PrTest WITH 'gol -> 0', loCoada.NrActDinNumarAct('') = 0
|
||||||
|
DO PrTest WITH 'RO20709900053983 -> 709900053983 (14 cifre, ultimele 12)', loCoada.NrActDinNumarAct('RO20709900053983') = 709900053983
|
||||||
|
DO PrTest WITH '017524993734246 -> 524993734246 (15 cifre, ultimele 12)', loCoada.NrActDinNumarAct('017524993734246') = 524993734246
|
||||||
|
DO PrTest WITH '1021024019453 -> 21024019453 (13 cifre, ultimele 12, zeroul din fata cade)', loCoada.NrActDinNumarAct('1021024019453') = 21024019453
|
||||||
|
DO PrTest WITH '259105268697 -> 259105268697 (12 cifre, neschimbat)', loCoada.NrActDinNumarAct('259105268697') = 259105268697
|
||||||
|
|
||||||
USE IN crsFactTest
|
USE IN crsFactTest
|
||||||
|
|
||||||
|
|||||||
327
utile/Teste/efactura_import/test_splitter_ef.prg
Normal file
327
utile/Teste/efactura_import/test_splitter_ef.prg
Normal file
@@ -0,0 +1,327 @@
|
|||||||
|
* test_splitter_ef.prg
|
||||||
|
* Splitter sub grila de facturi la importul eFactura (frm_import_efactura, COMUN\clase\anaf_efactura.vc2):
|
||||||
|
* Sfsplitterv1 = sfsplitterv_panou (sfsplitter.vcx), T7 tragere simulata cu MouseMove.
|
||||||
|
* Sfsplitterv1 intre grdFacturi si _shape3, pozitia salvata in settings.ini [efactura] import_splitter_top.
|
||||||
|
* T1 fara cheie in ini: layout de design neschimbat. T2 MoveSplitterToPosition muta panoul si grila de
|
||||||
|
* linii, fara sa schimbe marginea de jos a grilei de linii. T3 clamp la limitele 100px/60px. T4 persistenta
|
||||||
|
* (Destroy scrie doar daca s-a schimbat, Show restaureaza, forma neschimbata nu rescrie fisierul). T5
|
||||||
|
* compatibilitate cu pozitioneazalistasubimport() dupa mutare. T6 calea REALA a meniului
|
||||||
|
* (CREATEOBJECT + Show(1) modal, ca in import_efactura.prg) - la deschidere, restaurarea rula in Show()
|
||||||
|
* inainte ca maximizarea sa aduca grdDetaliiFacturi la inaltimea reala, deci clamp-ul MoveSplitterToPosition
|
||||||
|
* o taia prematur; muta acum in Resize (o singura data, dupa maximizare).
|
||||||
|
* gcGeneralIniFile redirectat pe un .ini temporar - nu atinge settings.ini real.
|
||||||
|
*
|
||||||
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef.prg"
|
||||||
|
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
SET DELETED ON
|
||||||
|
SET EXACT ON
|
||||||
|
SET CENTURY ON
|
||||||
|
SET DATE DMY
|
||||||
|
SET NULLDISPLAY TO ''
|
||||||
|
CLOSE DATABASES
|
||||||
|
|
||||||
|
PUBLIC gcUILog, gnPass, gnFail, gcTempIni
|
||||||
|
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt"
|
||||||
|
gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_temp.ini"
|
||||||
|
gnPass = 0
|
||||||
|
gnFail = 0
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
|
||||||
|
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||||
|
ON SHUTDOWN QUIT
|
||||||
|
|
||||||
|
TRY
|
||||||
|
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE
|
||||||
|
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||||
|
IF gnHandle <= 0
|
||||||
|
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
|
||||||
|
gcGeneralIniFile = m.gcTempIni
|
||||||
|
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcGeneralIniFile=' + m.gcGeneralIniFile
|
||||||
|
|
||||||
|
*-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din test_pozitie_lista_ef.prg
|
||||||
|
TEXT TO lcSchemaFacturi NOSHOW
|
||||||
|
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, explicatia4ROA V(100) null, explicatia5ROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(80), gest c(1), part_inactiv N(1)
|
||||||
|
ENDTEXT
|
||||||
|
|
||||||
|
IF USED('crsFacturi')
|
||||||
|
USE IN crsFacturi
|
||||||
|
ENDIF
|
||||||
|
CREATE CURSOR crsFacturi (&lcSchemaFacturi)
|
||||||
|
INSERT INTO crsFacturi (ales, id, id_fact, data_act, numar_act, xfurnizor, partener, cod_fiscal, ;
|
||||||
|
total_cu_tva, nume_valuta, procesat, completat, completatdet, creditnote, detalii, ;
|
||||||
|
eligibil_lot, motiv_lot, eroare_lot, de_completat, gest) ;
|
||||||
|
VALUES (0, 1, 0, DATE(), 'TEST-SPL-1', 'FIXTURA SPLITTER 1', 'FIXTURA SPLITTER 1', 'RO99970001', ;
|
||||||
|
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '')
|
||||||
|
|
||||||
|
TEXT TO lcSchemaDetalii NOSHOW
|
||||||
|
distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6), explicatia V(100), explicatia4 V(100), explicatia5 V(100)
|
||||||
|
ENDTEXT
|
||||||
|
IF USED('crsDetaliiFacturi')
|
||||||
|
USE IN crsDetaliiFacturi
|
||||||
|
ENDIF
|
||||||
|
CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii)
|
||||||
|
* rand mut pe id_efactura=1, ca actualizeaza_grid2 sa gaseasca detaliile deja in cursor (fara poFacturiDetalii/Oracle)
|
||||||
|
INSERT INTO crsDetaliiFacturi (id, id_efactura, nr, articol) VALUES (100, 1, 1, 'FIXTURA')
|
||||||
|
|
||||||
|
CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
||||||
|
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
||||||
|
SELECT cTipArticoleP
|
||||||
|
GO TOP IN cTipArticoleP
|
||||||
|
INDEX ON ordine TAG ordine
|
||||||
|
|
||||||
|
CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
||||||
|
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
||||||
|
SELECT cTipArticoleE
|
||||||
|
GO TOP IN cTipArticoleE
|
||||||
|
INDEX ON ordine TAG ordine
|
||||||
|
|
||||||
|
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
|
||||||
|
SELECT cTip
|
||||||
|
INDEX ON id TAG id
|
||||||
|
|
||||||
|
goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni')
|
||||||
|
SELECT cGestiuni
|
||||||
|
APPEND BLANK
|
||||||
|
INDEX ON id_gestiune TAG id_gest
|
||||||
|
SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2
|
||||||
|
|
||||||
|
goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO')
|
||||||
|
SELECT cUMISO
|
||||||
|
INDEX ON cod_um_iso TAG cod_um_iso
|
||||||
|
|
||||||
|
goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
||||||
|
SELECT cUM
|
||||||
|
INDEX ON id TAG id
|
||||||
|
|
||||||
|
LOCAL loForm, lnTopInitial, lnTopMutat
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO TOP
|
||||||
|
|
||||||
|
*=== T1: fara cheie in ini -> layout de design neschimbat dupa Show ===
|
||||||
|
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||||
|
loForm.WindowType = 0
|
||||||
|
DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O'
|
||||||
|
loForm.Show()
|
||||||
|
lnTopInitial = loForm.Sfsplitterv1.Top
|
||||||
|
DO PrTest WITH 'T1 grdFacturi.Height = 292 (design)', loForm.grdFacturi.Height = 292, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
|
||||||
|
DO PrTest WITH 'T1 _shape3.Top = 369 (design)', loForm._shape3.Top = 369, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
|
||||||
|
DO PrTest WITH 'T1 splitter.Top = 364 (design)', lnTopInitial = 364, 'obtinut=' + TRANSFORM(lnTopInitial)
|
||||||
|
|
||||||
|
*=== T2: MoveSplitterToPosition(Top+100) -> muta panoul, pastreaza marginea de jos a grilei de linii ===
|
||||||
|
LOCAL lnShapeTop0, lnPartTop0, lnDetTop0, lnDetBottom0
|
||||||
|
lnShapeTop0 = loForm._shape3.Top
|
||||||
|
lnPartTop0 = loForm.txtPartener.Top
|
||||||
|
lnDetTop0 = loForm.grdDetaliiFacturi.Top
|
||||||
|
lnDetBottom0 = lnDetTop0 + loForm.grdDetaliiFacturi.Height
|
||||||
|
loForm.Sfsplitterv1.MoveSplitterToPosition(lnTopInitial + 100)
|
||||||
|
DO PrTest WITH 'T2 grdFacturi.Height +100', loForm.grdFacturi.Height = 392, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
|
||||||
|
DO PrTest WITH 'T2 _shape3.Top +100', loForm._shape3.Top = lnShapeTop0 + 100, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
|
||||||
|
DO PrTest WITH 'T2 txtPartener.Top +100', loForm.txtPartener.Top = lnPartTop0 + 100, 'obtinut=' + TRANSFORM(loForm.txtPartener.Top)
|
||||||
|
DO PrTest WITH 'T2 grdDetaliiFacturi.Top +100', loForm.grdDetaliiFacturi.Top = lnDetTop0 + 100, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top)
|
||||||
|
DO PrTest WITH 'T2 marginea de jos a grdDetaliiFacturi neschimbata', loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height = lnDetBottom0, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height)
|
||||||
|
|
||||||
|
*=== T7: tragere simulata cu MouseMove (coordonate relative la forma, ca in VFP), fara sa atinga Anchor ===
|
||||||
|
LOCAL lnAnchorSpl, lnTopSpl
|
||||||
|
lnAnchorSpl = loForm.Sfsplitterv1.Anchor
|
||||||
|
lnTopSpl = loForm.Sfsplitterv1.Top
|
||||||
|
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl - 30)
|
||||||
|
DO PrTest WITH 'T7 MouseMove sus 30: splitter.Top -30', loForm.Sfsplitterv1.Top = m.lnTopSpl - 30, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
|
||||||
|
DO PrTest WITH 'T7 grdFacturi.Height -30', loForm.grdFacturi.Height = 362, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
|
||||||
|
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl)
|
||||||
|
DO PrTest WITH 'T7 MouseMove jos 30: revine', loForm.Sfsplitterv1.Top = m.lnTopSpl, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
|
||||||
|
DO PrTest WITH 'T7 Anchor splitter neschimbat', loForm.Sfsplitterv1.Anchor = m.lnAnchorSpl
|
||||||
|
DO PrTest WITH 'T7 subclasa sfsplitterv_panou, nu override pe forma', LOWER(loForm.Sfsplitterv1.Class) == 'sfsplitterv_panou' AND !PEMSTATUS(loForm, 'lSplitterRestaurat', 5)
|
||||||
|
|
||||||
|
*=== T3: clamp la limite ===
|
||||||
|
loForm.Sfsplitterv1.MoveSplitterToPosition(9999)
|
||||||
|
DO PrTest WITH 'T3 clamp sus: grdDetaliiFacturi.Height = 60', loForm.grdDetaliiFacturi.Height = 60, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Height)
|
||||||
|
loForm.Sfsplitterv1.MoveSplitterToPosition(0)
|
||||||
|
DO PrTest WITH 'T3 clamp jos: grdFacturi.Height = 100', loForm.grdFacturi.Height = 100, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
|
||||||
|
|
||||||
|
*=== T5: pozitioneazalistasubimport() dupa mutare -> grdFacturi.Height revine la valoarea mutata ===
|
||||||
|
LOCAL lnHeightMutat
|
||||||
|
lnHeightMutat = loForm.grdFacturi.Height
|
||||||
|
loForm.pozitioneazalistasubimport()
|
||||||
|
DO PrTest WITH 'T5 grdFacturi.Height revine la valoarea mutata', loForm.grdFacturi.Height = lnHeightMutat, 'asteptat=' + TRANSFORM(lnHeightMutat) + ' obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
|
||||||
|
|
||||||
|
*=== T4: persistenta ===
|
||||||
|
lnTopMutat = loForm.Sfsplitterv1.Top
|
||||||
|
loForm.Release()
|
||||||
|
DO PrTest WITH 'T4 fisierul ini a fost creat la Release (pozitie schimbata)', FILE(gcTempIni)
|
||||||
|
LOCAL lnCitit
|
||||||
|
lnCitit = VAL(NVL(getini(m.gcTempIni, 'efactura', 'import_splitter_top'), ''))
|
||||||
|
DO PrTest WITH 'T4 cheia import_splitter_top scrisa cu pozitia mutata', m.lnCitit = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' citit=' + TRANSFORM(lnCitit)
|
||||||
|
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO TOP
|
||||||
|
LOCAL loForm2
|
||||||
|
loForm2 = CREATEOBJECT('frm_import_efactura', .T.)
|
||||||
|
loForm2.WindowType = 0
|
||||||
|
loForm2.Show()
|
||||||
|
DO PrTest WITH 'T4 forma noua reia pozitia salvata', loForm2.Sfsplitterv1.Top = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' obtinut=' + TRANSFORM(loForm2.Sfsplitterv1.Top)
|
||||||
|
|
||||||
|
LOCAL lcIniDupaRestaurare
|
||||||
|
lcIniDupaRestaurare = FILETOSTR(m.gcTempIni)
|
||||||
|
loForm2.Release()
|
||||||
|
DO PrTest WITH 'T4 forma deschisa/inchisa fara mutare nu rescrie ini-ul', FILETOSTR(m.gcTempIni) == m.lcIniDupaRestaurare
|
||||||
|
|
||||||
|
*=== T6: calea reala (CREATEOBJECT + Show(1) modal) - pica pe codul vechi (clamp calculat pe inaltimea dinainte de maximizare) ===
|
||||||
|
LOCAL lnPozT6
|
||||||
|
lnPozT6 = 480
|
||||||
|
=setini(m.gcTempIni, "efactura", "import_splitter_top", TRANSFORM(m.lnPozT6))
|
||||||
|
PUBLIC goFormT6, gnPozCapturataT6
|
||||||
|
gnPozCapturataT6 = -1
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO TOP
|
||||||
|
goFormT6 = CREATEOBJECT('frm_import_efactura', .T.)
|
||||||
|
LOCAL loTmrT6
|
||||||
|
loTmrT6 = CREATEOBJECT('tmrCaptureazaT6')
|
||||||
|
loTmrT6.Enabled = .T.
|
||||||
|
goFormT6.Show(1)
|
||||||
|
DO PrTest WITH 'T6 calea reala: Sfsplitterv1.Top restaurat dupa Show(1) modal', gnPozCapturataT6 = m.lnPozT6, 'asteptat=' + TRANSFORM(lnPozT6) + ' obtinut=' + TRANSFORM(gnPozCapturataT6)
|
||||||
|
RELEASE goFormT6, gnPozCapturataT6
|
||||||
|
|
||||||
|
*=== T8: dupa deschiderea maximizata cu pozitie salvata, grila de sus ajunge exact la splitter; mutare in sus pana aproape de minim nu da eroare ===
|
||||||
|
=setini(m.gcTempIni, "efactura", "import_splitter_top", "670")
|
||||||
|
PUBLIC goFormT8, gcRezT8
|
||||||
|
gcRezT8 = ""
|
||||||
|
SELECT crsFacturi
|
||||||
|
GO TOP
|
||||||
|
goFormT8 = CREATEOBJECT("frm_import_efactura", .T.)
|
||||||
|
LOCAL loTmrT8
|
||||||
|
loTmrT8 = CREATEOBJECT("tmrCaptureazaT8")
|
||||||
|
loTmrT8.Enabled = .T.
|
||||||
|
goFormT8.Show(1)
|
||||||
|
DO PrLogLocal WITH " T8 geometrie: " + gcRezT8
|
||||||
|
DO PrTest WITH "T8 grdFacturi.Top+Height = Sfsplitterv1.Top", LEFT(gcRezT8, 6) == "GAP=0 ", gcRezT8
|
||||||
|
DO PrTest WITH "T8 mutare in sus pana aproape de minim fara eroare", "ERR=0" $ gcRezT8, gcRezT8
|
||||||
|
RELEASE goFormT8, gcRezT8
|
||||||
|
|
||||||
|
IF USED('crsFacturi')
|
||||||
|
USE IN crsFacturi
|
||||||
|
ENDIF
|
||||||
|
IF USED('crsDetaliiFacturi')
|
||||||
|
USE IN crsDetaliiFacturi
|
||||||
|
ENDIF
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
DO PrTest WITH 'cleanup: crsFacturi/crsDetaliiFacturi inchise, ini temporar sters', !USED('crsFacturi') AND !USED('crsDetaliiFacturi') AND !FILE(gcTempIni)
|
||||||
|
|
||||||
|
LOCAL loFH, lnCol0, lnSty0
|
||||||
|
loFH = CREATEOBJECT('Form')
|
||||||
|
loFH.NewObject('splH', 'sfsplitterv_panou', 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx')
|
||||||
|
lnCol0 = loFH.splH.BackColor
|
||||||
|
lnSty0 = loFH.splH.BackStyle
|
||||||
|
DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1
|
||||||
|
loFH.splH.MouseEnter()
|
||||||
|
DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1
|
||||||
|
loFH.splH.MouseLeave()
|
||||||
|
DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0
|
||||||
|
loFH.Release()
|
||||||
|
|
||||||
|
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||||
|
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||||
|
CATCH TO loEx
|
||||||
|
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||||
|
TRY
|
||||||
|
IF USED('crsFacturi')
|
||||||
|
USE IN crsFacturi
|
||||||
|
ENDIF
|
||||||
|
IF USED('crsDetaliiFacturi')
|
||||||
|
USE IN crsDetaliiFacturi
|
||||||
|
ENDIF
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
CATCH
|
||||||
|
ENDTRY
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
QUIT
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrTest
|
||||||
|
LPARAMETERS tcEticheta, tlOk, tcDetalii
|
||||||
|
IF tlOk
|
||||||
|
gnPass = gnPass + 1
|
||||||
|
ELSE
|
||||||
|
gnFail = gnFail + 1
|
||||||
|
ENDIF
|
||||||
|
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')')
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrLogLocal
|
||||||
|
LPARAMETERS tcMsg
|
||||||
|
LOCAL lcL
|
||||||
|
SET SAFETY OFF
|
||||||
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||||
|
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
* mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici)
|
||||||
|
PROCEDURE HarnessLog
|
||||||
|
LPARAMETERS tcMsg
|
||||||
|
DO PrLogLocal WITH tcMsg
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrErrLocal
|
||||||
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||||
|
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
* T6: goFormT6.Show(1) e modal (blocheaza pana la Release) - captureaza Sfsplitterv1.Top dupa
|
||||||
|
* ce maximizarea reala s-a aplicat, apoi inchide forma ca testul sa poata continua.
|
||||||
|
DEFINE CLASS tmrCaptureazaT6 AS Timer
|
||||||
|
Interval = 300
|
||||||
|
Enabled = .F.
|
||||||
|
PROCEDURE Timer
|
||||||
|
This.Enabled = .F.
|
||||||
|
IF TYPE('goFormT6') = 'O'
|
||||||
|
gnPozCapturataT6 = goFormT6.Sfsplitterv1.Top
|
||||||
|
goFormT6.Release()
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
ENDDEFINE
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
* T8: captureaza geometria dupa maximizare si incearca o mutare in sus (MouseMove) pana aproape de minim
|
||||||
|
DEFINE CLASS tmrCaptureazaT8 AS Timer
|
||||||
|
Interval = 300
|
||||||
|
Enabled = .F.
|
||||||
|
PROCEDURE Timer
|
||||||
|
This.Enabled = .F.
|
||||||
|
LOCAL lnErr, lnGap, lnTop
|
||||||
|
IF TYPE('goFormT8') = 'O'
|
||||||
|
WITH goFormT8
|
||||||
|
lnGap = .Sfsplitterv1.Top - (.grdFacturi.Top + .grdFacturi.Height)
|
||||||
|
gcRezT8 = "GAP=" + TRANSFORM(lnGap) + " grdF.Top=" + TRANSFORM(.grdFacturi.Top) + " grdF.H=" + TRANSFORM(.grdFacturi.Height) + ;
|
||||||
|
" spl.Top=" + TRANSFORM(.Sfsplitterv1.Top) + " det.Top=" + TRANSFORM(.grdDetaliiFacturi.Top) + " det.H=" + TRANSFORM(.grdDetaliiFacturi.Height) + " "
|
||||||
|
lnErr = 0
|
||||||
|
TRY
|
||||||
|
lnTop = .grdFacturi.Top + 100 + 5
|
||||||
|
.Sfsplitterv1.MouseMove(1, 0, 50, lnTop)
|
||||||
|
CATCH
|
||||||
|
lnErr = 1
|
||||||
|
ENDTRY
|
||||||
|
gcRezT8 = gcRezT8 + "ERR=" + TRANSFORM(lnErr) + " spl.Top dupa=" + TRANSFORM(.Sfsplitterv1.Top) + " grdF.H dupa=" + TRANSFORM(.grdFacturi.Height)
|
||||||
|
.Release()
|
||||||
|
ENDWITH
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
ENDDEFINE
|
||||||
186
utile/Teste/efactura_import/test_splitter_h.prg
Normal file
186
utile/Teste/efactura_import/test_splitter_h.prg
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
* test_splitter_h.prg
|
||||||
|
* sfsplitterh_panou (sfsplitter.vcx), splitter orizontal (vertical ca linie) intre Object1 (stanga) si Object2 (dreapta).
|
||||||
|
* Forma sintetica fara DB: edtStanga (Left < splitter, neatins), edt1 = Object1, spl, edt2 = Object2, edtDreapta (Left >= marginea dreapta a splitterului).
|
||||||
|
* T1 MoveSplitterToPosition(+delta): splitter, Object1.Width, Object2.Left cu marginea dreapta neschimbata, control din dreapta mutat, cel din stanga neatins.
|
||||||
|
* T2 clamp la nObject1MinSize / nObject2MinSize. T3 Save/RestorePosition prin .ini temporar (gcGeneralIniFile).
|
||||||
|
*
|
||||||
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h.prg"
|
||||||
|
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_log.txt
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
SET DELETED ON
|
||||||
|
SET EXACT ON
|
||||||
|
CLOSE DATABASES
|
||||||
|
|
||||||
|
PUBLIC gcUILog, gnPass, gnFail, gcTempIni, gcGeneralIniFile
|
||||||
|
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_log.txt"
|
||||||
|
gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_temp.ini"
|
||||||
|
gnPass = 0
|
||||||
|
gnFail = 0
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
|
||||||
|
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||||
|
ON SHUTDOWN QUIT
|
||||||
|
|
||||||
|
TRY
|
||||||
|
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\programe\ini.prg' ADDITIVE
|
||||||
|
SET CLASSLIB TO 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx' ADDITIVE
|
||||||
|
gcGeneralIniFile = m.gcTempIni
|
||||||
|
|
||||||
|
LOCAL loF, loF2, lnLeft0, lnDreaptaMargine0, lnRight0, lnStang0, lnW10, lnPoz
|
||||||
|
|
||||||
|
*=== T1: MoveSplitterToPosition(+40) ===
|
||||||
|
loF = PrMkForm()
|
||||||
|
DO PrTest WITH 'formular instantiat, clasa sfsplitterh_panou', TYPE('loF') == 'O' AND LOWER(loF.spl.Class) == 'sfsplitterh_panou'
|
||||||
|
lnLeft0 = loF.spl.Left
|
||||||
|
lnW10 = loF.edt1.Width
|
||||||
|
lnDreaptaMargine0 = loF.edt2.Left + loF.edt2.Width
|
||||||
|
lnRight0 = loF.edtDreapta.Left
|
||||||
|
lnStang0 = loF.edtStanga.Left
|
||||||
|
loF.spl.MoveSplitterToPosition(lnLeft0 + 40)
|
||||||
|
DO PrTest WITH 'T1 splitter.Left +40', loF.spl.Left = lnLeft0 + 40, 'obtinut=' + TRANSFORM(loF.spl.Left)
|
||||||
|
DO PrTest WITH 'T1 Object1.Width +40', loF.edt1.Width = lnW10 + 40, 'obtinut=' + TRANSFORM(loF.edt1.Width)
|
||||||
|
DO PrTest WITH 'T1 Object1.Left neschimbat', loF.edt1.Left = 100, 'obtinut=' + TRANSFORM(loF.edt1.Left)
|
||||||
|
DO PrTest WITH 'T1 Object2.Left +40', loF.edt2.Left = 405 + 40, 'obtinut=' + TRANSFORM(loF.edt2.Left)
|
||||||
|
DO PrTest WITH 'T1 marginea dreapta Object2 neschimbata', loF.edt2.Left + loF.edt2.Width = lnDreaptaMargine0, 'obtinut=' + TRANSFORM(loF.edt2.Left + loF.edt2.Width)
|
||||||
|
DO PrTest WITH 'T1 control din dreapta mutat +40', loF.edtDreapta.Left = lnRight0 + 40, 'obtinut=' + TRANSFORM(loF.edtDreapta.Left)
|
||||||
|
DO PrTest WITH 'T1 control din stanga neatins', loF.edtStanga.Left = lnStang0, 'obtinut=' + TRANSFORM(loF.edtStanga.Left)
|
||||||
|
DO PrTest WITH 'T1 Anchor-urile restaurate', loF.edt2.Anchor = 13 AND loF.edtDreapta.Anchor = 13 AND loF.spl.Anchor = 13, ;
|
||||||
|
'edt2=' + TRANSFORM(loF.edt2.Anchor) + ' dreapta=' + TRANSFORM(loF.edtDreapta.Anchor) + ' spl=' + TRANSFORM(loF.spl.Anchor)
|
||||||
|
|
||||||
|
*=== T1b: mutare inapoi (-40) readuce layout-ul ===
|
||||||
|
loF.spl.MoveSplitterToPosition(lnLeft0)
|
||||||
|
DO PrTest WITH 'T1b revenire: splitter, Object1.Width, Object2.Left', loF.spl.Left = lnLeft0 AND loF.edt1.Width = lnW10 AND loF.edt2.Left = 405
|
||||||
|
|
||||||
|
*=== T2: clamp ===
|
||||||
|
loF.spl.MoveSplitterToPosition(9999)
|
||||||
|
DO PrTest WITH 'T2 clamp dreapta: Object2.Width = nObject2MinSize', loF.edt2.Width = loF.spl.nObject2MinSize, 'obtinut=' + TRANSFORM(loF.edt2.Width)
|
||||||
|
DO PrTest WITH 'T2 clamp dreapta: marginea Object2 neschimbata', loF.edt2.Left + loF.edt2.Width = lnDreaptaMargine0
|
||||||
|
loF.spl.MoveSplitterToPosition(0)
|
||||||
|
DO PrTest WITH 'T2 clamp stanga: Object1.Width = nObject1MinSize', loF.edt1.Width = loF.spl.nObject1MinSize, 'obtinut=' + TRANSFORM(loF.edt1.Width)
|
||||||
|
*=== T4: Resize pe Object1 il realiniaza la splitter
|
||||||
|
loF.spl.RestorePosition()
|
||||||
|
loF.edt1.Width = 30
|
||||||
|
DO PrTest WITH 'T4 Resize Object1 -> lipit de splitter', loF.edt1.Left + loF.edt1.Width = loF.spl.Left, 'obtinut=' + TRANSFORM(loF.edt1.Left + loF.edt1.Width) + ' spl=' + TRANSFORM(loF.spl.Left)
|
||||||
|
loF.Release()
|
||||||
|
|
||||||
|
*=== T3: persistenta ===
|
||||||
|
loF = PrMkForm()
|
||||||
|
loF.spl.cIniSectiune = 'test'
|
||||||
|
loF.spl.cIniCheie = 'poz'
|
||||||
|
loF.spl.SavePosition()
|
||||||
|
DO PrTest WITH 'T3 SavePosition inainte de RestorePosition nu scrie', !FILE(gcTempIni)
|
||||||
|
loF.spl.RestorePosition()
|
||||||
|
DO PrTest WITH 'T3 fara cheie in ini: pozitia de design neschimbata', loF.spl.Left = 400 AND loF.spl.lRestaurat, 'obtinut=' + TRANSFORM(loF.spl.Left)
|
||||||
|
loF.spl.SavePosition()
|
||||||
|
DO PrTest WITH 'T3 forma nemutata nu scrie in ini', !FILE(gcTempIni)
|
||||||
|
loF.spl.MoveSplitterToPosition(loF.spl.Left + 40)
|
||||||
|
loF.spl.SavePosition()
|
||||||
|
lnPoz = VAL(NVL(getini(gcTempIni, 'test', 'poz'), ''))
|
||||||
|
DO PrTest WITH 'T3 dupa mutare SavePosition scrie 440', lnPoz = 440, 'obtinut=' + TRANSFORM(lnPoz)
|
||||||
|
loF.Release()
|
||||||
|
|
||||||
|
loF2 = PrMkForm()
|
||||||
|
loF2.spl.cIniSectiune = 'test'
|
||||||
|
loF2.spl.cIniCheie = 'poz'
|
||||||
|
loF2.spl.RestorePosition()
|
||||||
|
DO PrTest WITH 'T3 forma noua restaureaza 440', loF2.spl.Left = 440, 'obtinut=' + TRANSFORM(loF2.spl.Left)
|
||||||
|
DO PrTest WITH 'T3 Object1.Width si Object2.Left urmeaza', loF2.edt1.Width = 340 AND loF2.edt2.Left = 445
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
loF2.spl.SavePosition()
|
||||||
|
DO PrTest WITH 'T3 forma restaurata si nemutata nu rescrie ini', !FILE(gcTempIni)
|
||||||
|
loF2.Release()
|
||||||
|
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
LOCAL loFH, lnCol0, lnSty0
|
||||||
|
loFH = CREATEOBJECT('Form')
|
||||||
|
loFH.AddObject('splH', 'sfsplitterh_panou')
|
||||||
|
lnCol0 = loFH.splH.BackColor
|
||||||
|
lnSty0 = loFH.splH.BackStyle
|
||||||
|
DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1
|
||||||
|
loFH.splH.MouseEnter()
|
||||||
|
DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1
|
||||||
|
loFH.splH.MouseLeave()
|
||||||
|
DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0
|
||||||
|
loFH.Release()
|
||||||
|
|
||||||
|
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||||
|
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||||
|
CATCH TO loEx
|
||||||
|
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||||
|
TRY
|
||||||
|
IF FILE(gcTempIni)
|
||||||
|
DELETE FILE (gcTempIni)
|
||||||
|
ENDIF
|
||||||
|
CATCH
|
||||||
|
ENDTRY
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
QUIT
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
* Object1 = edt1 (100..400), splitter 400..405, Object2 = edt2 (405..705), edtDreapta la 720, edtStanga la 10
|
||||||
|
FUNCTION PrMkForm
|
||||||
|
LOCAL loF
|
||||||
|
loF = CREATEOBJECT('Form')
|
||||||
|
loF.WindowType = 0
|
||||||
|
loF.Width = 800
|
||||||
|
loF.Height = 300
|
||||||
|
loF.AddObject('edtStanga', 'EditBox')
|
||||||
|
loF.AddObject('edt1', 'Container')
|
||||||
|
loF.AddObject('spl', 'sfsplitterh_panou')
|
||||||
|
loF.AddObject('edt2', 'EditBox')
|
||||||
|
loF.AddObject('edtDreapta', 'EditBox')
|
||||||
|
loF.edtStanga.Move(10, 10, 60, 100)
|
||||||
|
loF.edt1.Move(100, 10, 300, 100)
|
||||||
|
loF.spl.Move(400, 10, 5, 100)
|
||||||
|
loF.edt2.Move(405, 10, 300, 100)
|
||||||
|
loF.edtDreapta.Move(720, 10, 50, 100)
|
||||||
|
loF.edtStanga.Visible = .T.
|
||||||
|
loF.edt1.Visible = .T.
|
||||||
|
loF.spl.Visible = .T.
|
||||||
|
loF.edt2.Visible = .T.
|
||||||
|
loF.edtDreapta.Visible = .T.
|
||||||
|
loF.edtStanga.Anchor = 13
|
||||||
|
loF.edt1.Anchor = 13
|
||||||
|
loF.edt2.Anchor = 13
|
||||||
|
loF.edtDreapta.Anchor = 13
|
||||||
|
loF.spl.Anchor = 13
|
||||||
|
loF.spl.cObject1Name = 'edt1'
|
||||||
|
loF.spl.cObject2Name = 'edt2'
|
||||||
|
loF.spl.nObject1MinSize = 100
|
||||||
|
loF.spl.nObject2MinSize = 80
|
||||||
|
RETURN loF
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrTest
|
||||||
|
LPARAMETERS tcEticheta, tlOk, tcDetalii
|
||||||
|
IF tlOk
|
||||||
|
gnPass = gnPass + 1
|
||||||
|
ELSE
|
||||||
|
gnFail = gnFail + 1
|
||||||
|
ENDIF
|
||||||
|
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')')
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrLogLocal
|
||||||
|
LPARAMETERS tcMsg
|
||||||
|
LOCAL lcL
|
||||||
|
SET SAFETY OFF
|
||||||
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||||
|
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
PROCEDURE PrErrLocal
|
||||||
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||||
|
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||||
|
ENDPROC
|
||||||
116
utile/Teste/valuta581/test_valuta581.prg
Normal file
116
utile/Teste/valuta581/test_valuta581.prg
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
LPARAMETERS tcHost, tcSchema, tcPassword
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
LOCAL lcLog, lnPass, lnFail, lcMsg
|
||||||
|
lcLog = 'D:\ROA\ROACONT\COMUN\utile\Teste\valuta581\test_valuta581_log.txt'
|
||||||
|
STRTOFILE('start ' + TTOC(DATETIME()) + CHR(13)+CHR(10), lcLog)
|
||||||
|
lnPass = 0
|
||||||
|
lnFail = 0
|
||||||
|
|
||||||
|
ON ERROR STRTOFILE('ERROR: ' + MESSAGE() + ' | ' + PROGRAM() + ' | line ' + TRANSFORM(LINENO()) + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
|
||||||
|
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH (tcHost), (tcSchema), (tcPassword)
|
||||||
|
IF gnHandle <= 0
|
||||||
|
STRTOFILE('FAIL init_env: conectare esuata' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE('SAFETY=' + SET('SAFETY') + ' RESOURCE=' + SET('RESOURCE') + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
|
||||||
|
LOCAL lcCampLista, lcFisLista, lcIdFisier
|
||||||
|
lcCampLista = ''
|
||||||
|
lcFisLista = ''
|
||||||
|
lcIdFisier = ''
|
||||||
|
IF goExecutor.oExecuta("select camp_lista, fis_lista, id_fisier from xitems where id_item = 81", "cXItem81")
|
||||||
|
SELECT cXItem81
|
||||||
|
IF RECCOUNT() = 1
|
||||||
|
lcCampLista = ALLTRIM(camp_lista)
|
||||||
|
lcFisLista = LOWER(ALLTRIM(fis_lista))
|
||||||
|
lcIdFisier = ALLTRIM(id_fisier)
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS xitems81 lookup: camp_lista=' + lcCampLista + ' fis_lista=' + lcFisLista + ' id_fisier=' + lcIdFisier + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL xitems81 lookup: ' + TRANSFORM(RECCOUNT()) + ' randuri' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
USE IN (SELECT('cXItem81'))
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL xitems81 query esuata' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* reproduce exact codul corectat din baza.vc2:10159 (item.Text_item1.GotFocus), cu valorile reale din xitems 81
|
||||||
|
LOCAL F, C, lcIdFis, pcselect
|
||||||
|
F = lcFisLista
|
||||||
|
C = lcCampLista
|
||||||
|
lcIdFis = lcIdFisier
|
||||||
|
pcselect = ['select ] + C + [,] + Iif(F == 'vnom_valute' And Lower(lcIdFis) == 'id_valuta2', [id_valuta3 as id_valuta2], lcIdFis) + [ from ] + F + [ where 2=2']
|
||||||
|
STRTOFILE('pcselect=' + pcselect + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
|
||||||
|
* pcselect pastreaza apostroful santinela de la inceput/sfarsit (contract cauta_alfa.prg:87-93,
|
||||||
|
* Left(lcSelect,1) in ['],["],"["), neatins de aceasta corectie - nu se modifica
|
||||||
|
IF pcselect == ['select nume_val2,id_valuta3 as id_valuta2 from vnom_valute where 2=2']
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS pcselect text corect (id_valuta3 as id_valuta2)' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL pcselect text neasteptat' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* executa efectiv select-ul corectat (fara apostroful santinela, cum il consuma downstream cauta_alfa) si verifica EUR/USD dau id intern (2/1), nu ISO (44/142)
|
||||||
|
LOCAL lcSqlClean
|
||||||
|
lcSqlClean = SUBSTR(pcselect, 2, LEN(pcselect) - 2)
|
||||||
|
IF goExecutor.oExecuta(lcSqlClean + [ and nume_val2 in ('EUR','USD')], "cVal")
|
||||||
|
SELECT cVal
|
||||||
|
LOCATE FOR ALLTRIM(nume_val2) = 'EUR'
|
||||||
|
IF FOUND() AND id_valuta2 = 2
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS EUR -> id_valuta2=' + TRANSFORM(id_valuta2) + ' (asteptat 2, intern EURO)' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL EUR -> id_valuta2=' + TRANSFORM(IIF(FOUND(),id_valuta2,-999)) + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
LOCATE FOR ALLTRIM(nume_val2) = 'USD'
|
||||||
|
IF FOUND() AND id_valuta2 = 1
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS USD -> id_valuta2=' + TRANSFORM(id_valuta2) + ' (asteptat 1, intern USD)' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL USD -> id_valuta2=' + TRANSFORM(IIF(FOUND(),id_valuta2,-999)) + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
USE IN (SELECT('cVal'))
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL query corectata esuata' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* regresie: acelasi cod, dar item 11 (valuta facturii) - lcIdFis = id_valuta, nu trebuie atins de conditie
|
||||||
|
LOCAL F2, C2, lcIdFis2, pcselect2
|
||||||
|
F2 = 'vnom_valute'
|
||||||
|
C2 = 'nume_val'
|
||||||
|
lcIdFis2 = 'id_valuta'
|
||||||
|
pcselect2 = ['select ] + C2 + [,] + Iif(F2 == 'vnom_valute' And Lower(lcIdFis2) == 'id_valuta2', [id_valuta3 as id_valuta2], lcIdFis2) + [ from ] + F2 + [ where 2=2']
|
||||||
|
IF pcselect2 == ['select nume_val,id_valuta from vnom_valute where 2=2']
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS regresie item 11 (id_valuta) neatins' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL regresie item 11: ' + pcselect2 + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* regresie: schimb valutar 10633, items 88/89 - lcIdFis = id_valuta3, nu trebuie atins de conditie
|
||||||
|
LOCAL F3, C3, lcIdFis3, pcselect3
|
||||||
|
F3 = 'vnom_valute'
|
||||||
|
C3 = 'nume_val3'
|
||||||
|
lcIdFis3 = 'id_valuta3'
|
||||||
|
pcselect3 = ['select ] + C3 + [,] + Iif(F3 == 'vnom_valute' And Lower(lcIdFis3) == 'id_valuta2', [id_valuta3 as id_valuta2], lcIdFis3) + [ from ] + F3 + [ where 2=2']
|
||||||
|
IF pcselect3 == ['select nume_val3,id_valuta3 from vnom_valute where 2=2']
|
||||||
|
lnPass = lnPass + 1
|
||||||
|
STRTOFILE('PASS regresie 10633 item 88/89 (id_valuta3) neatins' + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ELSE
|
||||||
|
lnFail = lnFail + 1
|
||||||
|
STRTOFILE('FAIL regresie 10633: ' + pcselect3 + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
STRTOFILE('TOTAL PASS=' + TRANSFORM(lnPass) + ' FAIL=' + TRANSFORM(lnFail) + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
STRTOFILE('end ' + TTOC(DATETIME()) + CHR(13)+CHR(10), lcLog, 1)
|
||||||
|
QUIT
|
||||||
Reference in New Issue
Block a user