sync SVN r18224

This commit is contained in:
2026-09-29 16:36:55 +03:00
parent ca8e7ca694
commit 1ae4086ee6
14 changed files with 1092 additions and 9 deletions

View File

@@ -9591,6 +9591,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="chkDeCompletat" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="lblCoadaAntet" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Lb_shortcuts2" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Sfsplitterv1" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*m: actualizeazacontoare
@@ -10813,7 +10814,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
FontSize = 10, ;
GridLineColor = 192,192,192, ;
HeaderHeight = 35, ;
Height = 294, ;
Height = 292, ;
lcamptextneeditabil = .F., ;
Left = 7, ;
Name = "grdFacturi", ;
@@ -11818,6 +11819,22 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
ZOrderSet = 21
*< 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 ;
Anchor = 0, ;
ControlSource = "crsFacturi.Acont", ;
@@ -12550,6 +12567,13 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx"
loRecunoastere = Createobject('RecunoastereArticolEF')
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
Select crsDetaliiFacturi
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')
Use In cAnaliticCerut
ENDIF
This.Sfsplitterv1.SavePosition()
ENDPROC
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
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
ENDPROC

View File

@@ -674,6 +674,172 @@ DEFINE CLASS sfsplitterh AS sfsplitter OF "sfsplitter.vcx"
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"
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
@@ -706,26 +872,26 @@ DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
gripper.Name = "gripper"
*</PropValue>
PROCEDURE getobject1size && Gets the size for Object 1
PROCEDURE getobject1size
lparameters toObject
return toObject.Top + This.nObject1MinSize
ENDPROC
PROCEDURE getobject2size && Gets the size for Object 2
PROCEDURE getobject2size
lparameters toObject
return toObject.Top + toObject.Height - This.nObject2MinSize - This.Height
ENDPROC
PROCEDURE getposition && Returns the new position: X for a horizontal splitter and Y for a vertical splitter
PROCEDURE getposition
lparameters tnXCoord, ;
tnYCoord
return tnYCoord + This.Top - Objtoclient(this,1)
ENDPROC
PROCEDURE moveobject1 && Moves Object 1 to the new position
PROCEDURE moveobject1
lparameters toObject
with toObject
.Move(.Left, .Top, .Width, This.Top - .Top)
@@ -733,7 +899,7 @@ DEFINE CLASS sfsplitterv AS sfsplitter OF "sfsplitter.vcx"
ENDPROC
PROCEDURE moveobject2 && Moves Object 2 to the new position
PROCEDURE moveobject2
lparameters toObject
with toObject
.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
PROCEDURE setposition && Sets the new position for the splitter
PROCEDURE setposition
lparameters tnPosition
This.Top = tnPosition
ENDPROC
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

View File

@@ -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 |
| `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 |
| `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,
prompturi de configurare) -> skill `roa-onboarding` pentru executie. Nu se citesc in sesiunile de lucru.

View 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`.

View File

@@ -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");
- 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`;
- 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").
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

View File

@@ -21,6 +21,7 @@ IF m.llSucces
TRY
This.Log(m.lcServer)
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.Send()
llSucces = .T.
@@ -69,6 +70,7 @@ If m.llSucces AND m.lcVersiuneServer <> m.lcVersiuneClient AND !EMPTY(m.lcServer
TRY
This.Log(m.lcServer)
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.Send()
llSucces = .T.

View File

@@ -624,6 +624,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
loHTTP = CREATEOBJECT('WinHttp.WinHttpRequest.5.1')
loHTTP.SetTimeouts(5000, 5000, 5000, 5000)
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.Send('state=' + lcState)
lnStatus = loHTTP.Status
@@ -714,7 +715,6 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
llSucces = .T.
lcRefreshToken = Alltrim(This.cRefreshToken)
tcMesaj = ''
SET STEP ON
If Empty(m.lcRefreshToken)
tcMesaj = 'Completati Refresh Token'
This.Log(m.tcMesaj)
@@ -724,6 +724,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
TRY
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
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.Send([refresh_token=] + m.lcRefreshToken)
@@ -735,6 +736,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
TRY
loHTTP = Createobject('MSXML2.XMLHTTP.6.0')
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.Send([refresh_token=] + m.lcRefreshToken)
CATCH TO loEx

View File

@@ -8353,6 +8353,7 @@ PROCEDURE HTTPDownloadFile
loHTTP = Createobject("winhttp.winhttprequest.5.1")
loHTTP.Open("GET", m.lcURL, .F.)
loHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
loHTTP.Send()
lnStatus = loHTTP.Status
lnBytes = 0

View File

@@ -100,6 +100,7 @@ Define Class eFacturaXmlPreview As Custom
* Deschide conexiunea
loXMLHTTP.Open("POST", This.webURL + "receiver.php", .F.)
loXMLHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
* Seteaza headere
loXMLHTTP.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")

View File

@@ -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
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()
ENDIF

View File

@@ -128,13 +128,17 @@ TRY
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 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-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 '2026-000123 -> 123 (neschimbat)', loCoada.NrActDinNumarAct('2026-000123') = 123
DO PrTest WITH 'FACTURA (fara cifre) -> 0', loCoada.NrActDinNumarAct('FACTURA') = 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

View 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

View 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

View 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