Как готовое решение проблематично, так как встроено в менеджер проектов, куда информация закачивается через файлы, генерируемые шаблонами при сборке проекта. Часть информации берется из базы данных менеджера проектов, часть путем парсинга clw файлов.
Выглядит процедура сбора информации следующим образом, не знаю, поможет ли чем.
Код: Выделить всё
rasch_r routine
DATA
lor:i long
lor:okWind long
lor:queueModuls queue, pre()
lor:nameModule string(128)
.
lor:j long
lor:okModule byte
CODE
clear(Loc:GroupStat)
clear(Fil:record,-1)
Fil:IDProject=GloV:IDProect
set(Fil:keyName,Fil:keyName)
loop
next(files)
if error() or Fil:IDProject<>GloV:IDProect
break
.
if Fil:TypeFile='ALIAS'
cycle
.
Loc:Tables+=1
clear(Ke:record,-1)
Ke:IDFile=Fil:ID
set(Ke:keyKod,Ke:keyKod)
loop
next(keys)
if error()
break
.
if Ke:IDFile<>Fil:ID
break
.
Loc:Keys+=1
.
clear(Fie:record,-1)
Fie:IDFile=Fil:ID
set(Fie:keyKod,Fie:keyKod)
loop
next(fields)
if error()
break
.
if Fie:IDFile<>Fil:ID
break
.
Loc:Fields+=1
.
.
clear(Pro:record,-1)
Pro:IDProject=GloV:IDProect
set(Pro:keyName,Pro:keyName)
loop
next(procs)
if error() or Pro:IDProject<>GloV:IDProect
break
.
Loc:Proc+=1
case Pro:ProcTempl
of 'Browse'
Loc:ProcBrowse+=1
of 'Form'
Loc:ProcForm+=1
of 'Window'
Loc:ProcWindow+=1
of 'Source'
Loc:ProcSource+=1
else
Loc:ProcOther+=1
.
if Pro:IDDLL=0
FinSoftASCIIFileName=clip(GloV:PathProects) & '\' & clip(Pro:Modules)
else
FsPrimary:ModulsDLL(Pro:IDDLL)
FinSoftASCIIFileName=clip(ModD:Paths) & '\' & clip(Pro:Modules)
.
lor:okModule=0
loop lor:j=1 to records (lor:queueModuls)
get(lor:queueModuls,lor:j)
if FinSoftASCIIFileName=lor:nameModule
lor:okModule=1
break
.
.
if lor:okModule=0
lor:nameModule=FinSoftASCIIFileName
add(lor:queueModuls)
else
cycle
.
open(FsASCIIFile)
if error()
stop(clip(FinSoftASCIIFileName) & ' - ' & error())
cycle
.
set(FsASCIIFile)
loop
next(FsASCIIFile)
if error()
break
.
if FsAF:rec=''
cycle
.
Loc:ProcStr+=1
if lower(sub(FsAF:rec,1,12))='quickwindow '
Loc:ProcWindows+=1
lor:okWind=1
elsif lower(sub(FsAF:rec,1,7))='window '
Loc:ProcWindows+=1
lor:okWind=1
elsif lor:okWind>0
FsAF:rec=left(FsAF:rec)
if sub(FsAF:rec,1,4)='END '
lor:okWind-=1
elsif sub(FsAF:rec,1,7)='STRING('
Loc:ProcContr+=1
Loc:CotnrString+=1
elsif sub(FsAF:rec,1,7)='BUTTON('
Loc:ProcContr+=1
Loc:CotnrButton+=1
elsif sub(FsAF:rec,1,4)='TAB('
Loc:ProcContr+=1
Loc:CotnrTab+=1
elsif sub(FsAF:rec,1,6)='ENTRY('
Loc:ProcContr+=1
Loc:CotnrEntry+=1
elsif sub(FsAF:rec,1,5)='LIST,'
Loc:ProcContr+=1
Loc:CotnrList+=1
elsif sub(FsAF:rec,1,6)='CHECK('
Loc:ProcContr+=1
Loc:CotnrCheck+=1
elsif sub(FsAF:rec,1,6)='RADIO('
Loc:ProcContr+=1
Loc:CotnrRadio+=1
.
.
.
close(FsASCIIFile)
.
free(lor:queueModuls)
FsPrimary:Proects(GloV:IDProect)
!Бланки FRB
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTS\*.rpt',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTS\*.rpt',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsFRB+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSU\*.rpt',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSU\*.rpt',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsFRB+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSE\*.rpt',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSE\*.rpt',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsFRB+=1
.
free(AllFiles)
!Бланки RTF
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTS\*.rtf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTS\*.rtf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsRTF+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSU\*.rtf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSU\*.rtf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsRTF+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSE\*.rtf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSE\*.rtf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsRTF+=1
.
free(AllFiles)
!Бланки Excel
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTS\*.xlf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTS\*.xlf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsExcel+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSU\*.xlf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSU\*.xlf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsExcel+=1
.
free(AllFiles)
if sub(PR:PathAll,len(clip(PR:PathAll)),1)='\'
DIRECTORY(AllFiles,clip(PR:PathAll) & 'REPORTSE\*.xlf',ff_:NORMAL)
else
DIRECTORY(AllFiles,clip(PR:PathAll) & '\REPORTSE\*.xlf',ff_:NORMAL)
.
loop lor:i=1 to records(AllFiles)
get(AllFiles,lor:i)
Loc:BlancsExcel+=1
.
free(AllFiles)