Я прямо в Calc рисую. В свойствах xlsx прописываю разделение на детальки в терминах клариона.
Код построения отчета выглядит так.
Код: Выделить всё
reestrSotr_r routine !реестр по сотрудникам
DATA
FsXLSXL &FsXLSX
lor:i long
lor:sumIt_r real
CODE
do FsViewQueue_r
if records(Loc:Queue)=0
FsMessagePr('Данные не найдены!')
exit
.
sort(Loc:Queue,Loc:NameCardPayK,Loc:IDCardPay,Loc:NameTovarK,Loc:IDTovar)
do raschSotrIt_r
do formSotr_r
FsPrimary:Param(1)
FsPrimary:Klients(Loc:IDKlient)
Loc:Filename=GetNameTmp(FsAccess:ActiveUserDir,'xlsx',0)
FsXLSXL &= NEW(FsXLSX)
FsXLSXL.init(Loc:FileName,FsAccess:ActiveUserDir)
FsXLSXL.LoadTemplate('reports\reestrCardsPay.xlfx')
!FsXLSXL.SetPageSetup(,,-1,,1,999)
FsXLSXL.SetValue('PeriodStart',Loc:PeriodStart)
FsXLSXL.SetValue('PeriodEnd',Loc:PeriodEnd)
FsXLSXL.SetValue('NameMag',PAR:Adress)
FsXLSXL.OutSection('secHeader')
lor:sumIt_r=0
loop lor:i=1 to records(Loc:Queue)
get(Loc:Queue,lor:i)
case Loc:TypeRec
of 0
FsPrimary:CardsPay(Loc:IDCardPay)
clear(Loc:QueueCardsIt)
Loc:IDCardPayIt=Loc:IDCardPay
get(Loc:QueueCardsIt,Loc:IDCardPayIt)
lor:sumIt_r+=Loc:SumPayIt
FsXLSXL.SetValue('Sum',Loc:Sum)
FsXLSXL.SetValue('SumTalon',Loc:SumPayIt)
FsXLSXL.OutSection('secGroup')
of 1
FsPrimary:Tovar(Loc:IDTovar)
FsXLSXL.SetValue('Kol',Loc:Kol)
FsXLSXL.SetValue('Sum',Loc:Sum)
FsXLSXL.OutSection('secDetail')
of 3
FsXLSXL.SetValue('Sum',Loc:Sum)
FsXLSXL.SetValue('SumTalon',lor:sumIt_r)
FsXLSXL.OutSection('secFooter')
.
.
free(Loc:Queue)
free(Loc:QueueCardsIt)
FsXLSXL.Make
if FsAnyScreen=0
FsXLSXL.kill(1)
else
FsXLSXL.Kill(2)
FsMessagePr('Отчет будет загружен на Ваш компьютер в файле ' & clip(FsFileShort(Loc:Filename,0)) & ' !')
AnyScreen:DownloadFile(clip(longpath(Loc:Filename)))
.
dispose(FsXLSXL)
Calc требуется только для редактирования бланка, при построении не нужен, xlsx формируется напрямую в файл. Для xls бланков очень похоже. Отчеты такие рисовать очень быстро, быстрее не бывает, используются все возможности офисных пакетов.
C6/C11, ШВС, tps/btrieve.