Files
comun/skills/roa-vfp-frx-report/scripts/structura_frx.prg
2026-09-24 23:07:59 +03:00

61 lines
2.2 KiB
Plaintext

* structura_frx.prg - listeaza structura unui raport VFP (.frx): benzile si obiectele lor,
* exact cum le asociaza motorul de raportare (prin FFC\_FRXCursor.vcx).
* Utilizare headless: precompileaza intai, apoi
* vfp9.exe -A "<...>\structura_frx.FXP" "<raport>.frx" ["<iesire>.txt"]
* Fara al doilea parametru scrie langa raport, in "<raport>_structura.txt". Se termina cu QUIT.
LPARAMETERS tcReport, tcOut
SET SAFETY OFF
SET TALK OFF
PRIVATE pcReport, pcOut
LOCAL lnF, i, lcLine
LOCAL ARRAY laF[1, 1]
pcReport = IIF(VARTYPE(tcReport) = "C", tcReport, "")
IF EMPTY(pcReport) OR NOT FILE(pcReport)
STRTOFILE("structura_frx: raport inexistent: " + pcReport + CHR(13)+CHR(10), FORCEEXT(pcReport, "structura.txt"))
QUIT
ENDIF
pcOut = IIF(EMPTY(tcOut), FORCEEXT(pcReport, "structura.txt"), tcOut)
ON ERROR DO errhand WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
STRTOFILE("Raport: " + pcReport + CHR(13)+CHR(10), pcOut)
SET CLASSLIB TO (HOME() + "FFC\_FRXCursor.vcx") ADDITIVE
USE (pcReport) IN 0 ALIAS FRX
SELECT FRX
loFRX = CREATEOBJECT("FRXCursor")
loFRX.CreateObjectCursor()
IF USED("BANDS")
SELECT BANDS
lnF = AFIELDS(laF, "BANDS")
STRTOFILE("=== BENZI ===" + CHR(13)+CHR(10), pcOut, 1)
SCAN
lcLine = ""
FOR i = 1 TO lnF
IF INLIST(laF[i,1], "BANDLABEL", "START", "STOP", "HEIGHT")
lcLine = lcLine + laF[i,1] + "=" + TRANSFORM(EVALUATE(laF[i,1])) + " "
ENDIF
NEXT
STRTOFILE(lcLine + CHR(13)+CHR(10), pcOut, 1)
ENDSCAN
ENDIF
IF USED("OBJECTS")
SELECT OBJECTS
lnF = AFIELDS(laF, "OBJECTS")
STRTOFILE("=== OBIECTE (VPOS -> banda) ===" + CHR(13)+CHR(10), pcOut, 1)
SCAN
lcLine = ""
FOR i = 1 TO lnF
IF INLIST(laF[i,1], "OBJTYPE", "OBJCODE", "VPOS", "HPOS", "HEIGHT", "WIDTH", "BANDLABEL", "START_BAND_ID", "EXPR")
lcLine = lcLine + laF[i,1] + "=" + TRANSFORM(EVALUATE(laF[i,1])) + " "
ENDIF
NEXT
STRTOFILE(lcLine + CHR(13)+CHR(10), pcOut, 1)
ENDSCAN
ENDIF
USE IN FRX
STRTOFILE("gata" + CHR(13)+CHR(10), pcOut, 1)
QUIT
PROCEDURE errhand
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
STRTOFILE("ERROR " + TRANSFORM(tnErr) + " " + tcMsg + " @ " + tcProg + ":" + TRANSFORM(tnLine) + CHR(13)+CHR(10), pcOut, 1)
ENDPROC