Код: Выделить всё
Const
  xlColorBlack     = 0;
end;
Interface _gt_kkontragent 'Справка по сертификатам' (,,sci178InsPM) escclose;
show at(,,70,);
create view
var
date1,dat1,date2,dat2:date;
XlRes: Boolean;
aFileName: String;
as
Select *
From 
  basedoc
, katorg
, katcity
, katstate
, katbank
Where
((
word(201)==basedoc.viddoc
and dat1<<=basedoc.ddoc
and dat2>>=basedoc.ddoc
and katorg.nrec == basedoc.corg
and basedoc.nrec==stepdoc.cbasedoc
and stepdoc.nrec==katsopr.cstepdoc
and basedoc.nrec==basefin.cbasedoc
and katorg.ccity==katcity.nrec
and katorg.cstate==katstate.nrec
and katorg.nrec==katbank.corg
));
screen params 
show at(,,,3);
//show at(,,,20);
fields 
date1:,noprotect;
date2:,noprotect;
buttons 
cmOK, default;
cmCancel;
<<
  c .@@@@@@@@@@ по .@@@@@@@@@@
 <.Формировать.>  <.  Закрыть  .>
>>
end;
panel P1
//show at(1,5,32,10);
show at(,4,,);
 browse Bro1
  table katorg;
  fields
  katorg.name 'Организация':[50],protect;
  katcity.name 'Город':[30],protect;
 end;
end;
handleevent
cmInit:
{
	date1:=sub_months(cur_date,1);
	date2:=cur_Date;
	getfirst katorg(KATORG02);
}
cmOK:
{
	var i,j,k,c,d:integer;
	var myorg, boss, buh: string;
	myorg := sGetTune('MYORG');
	boss  := sGetTune('BOSS');
	buh   := sGetTune('MAINBUH');
	dat1:=date1;
	dat2:=date2;
	if getfirst basedoc!=tsOk {
		message('Данные отсутствуют!');
		exit;
	}
//	getfirst katbank where ((1==katbank.aktiv(noindex)));
//	message(RecordsInTable(#katbank));
	StartNewVisual(vtRotateVisual, vfTimer+vfBreak+vfConfirm,'Расчет ...', RecordsInTable(#basedoc));
        XlRes := True;
	aFileName := GetStringParameter('Files','OutputFilesDirectory',0) +'kntagnt-'+DateToStr(date1,'DDMMYY')+DateToStr(date2,'DDMMYY')+'.xls';
	DeleteFile(aFileName);
	XlRes := xlCreateExcel((aFileName), True);
	if (XlRes) XlRes := xlIsExcelValid;
	If (not XlRes) {
		message('Ошибка создания EXEL файла');
		Exit;
	}
	xlCreateMatrix ( 1000, 10 );
	xlSetFontSize  ( 8 , 1 , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"
	xlSTWriteToMatrix(1, 1, myorg);
	xlSetFontSize  ( 14, 1 , 1 , 1 , 8);
	xlAlignCells(xlCenter,1,1,1,8);
	xlMergeCells(1,1,1,8);
	xlSTWriteToMatrix(2, 1, 'Акт сверки с контрагентом');
	xlSetFontSize  ( 12, 2 , 1 , 2 , 8);
	xlAlignCells(xlCenter,2,1,2,8);
	xlMergeCells(2,1,2,8);
	xlSTWriteToMatrix(3, 1, 'сформирован за период '+ DateToStr(date1,'DD.MM.YYYY')+' по '+DateToStr(date2,'DD.MM.YYYY'));
	xlSetFontSize  ( 10, 2 , 1 , 2 , 8);
	xlAlignCells(xlCenter,3,1,3,8);
	xlMergeCells(3,1,3,8);
	xlSTWriteToMatrix(5, 1, 'Контрагент: ' + katorg.name);
	xlMergeCells(5,1,5,8);
	xlSTWriteToMatrix(6, 1, 'Адрес: ' + katstate.name + ', ' + katcity.name + ', ' + katorg.addr  + ', тел: ' + katorg.tel);
	xlMergeCells(6,1,6,8);
	xlSTWriteToMatrix(7, 1, 'Банковские реквизиты: ' + katbank.name );
	xlMergeCells(7,1,7,8);
	
	xlSTWriteToMatrix(8, 1, 'P/c: ' + katbank.SCHET1 + ' МФО ' + katbank.MFO1);
	xlMergeCells(8,1,8,8);
	i:=10;
	xlSTWriteToMatrix(i, 1, 'Счёт фактура');
	xlSTWriteToMatrix(i, 3, 'Отгружено');
	xlSTWriteToMatrix(i, 4, 'Оплачено');
	xlMergeCells(i,1,i,2);
//	xlMergeCells(i,3,i,4);
	xlMergeCells(i,4,i,6);
	xlAlignCells(xlCenter,i,1,i,6);
	i:=i+1;
	xlSTWriteToMatrix(i, 1, 'Накладные');
	xlSTWriteToMatrix(i, 4, 'Оплата');
	xlMergeCells(i,1,i,3);
	xlMergeCells(i,4,i,6);
	xlAlignCells(xlCenter,i,1,i,8);
	i:=i+1;
	xlSTWriteToMatrix(i, 1, 'Номер');
	xlSTWriteToMatrix(i, 2, 'Дата');
	xlSTWriteToMatrix(i, 3, 'Сумма');
	xlSTWriteToMatrix(i, 4, 'Номер');
	xlSTWriteToMatrix(i, 5, 'Дата');
	xlSTWriteToMatrix(i, 6, 'Сумма');
	xlAlignCells(xlCenter,i,1,i,8);
	xlSetFontStyle ( xlBold, 1 , 1 , i , 8);
	i:=i+1;
	d:=i;
//	getfirst basedoc(BASEDOC05);
	_loop basedoc {
//		message(basedoc.ddoc + ' ' + basedoc.nodoc);
		if getfirst katsopr!=tsOk and getfirst basefin!=tsOk then continue;
		c:=i;
		xlSTWriteToMatrix(i, 1, basedoc.nodoc +' от '+ DateToStr(basedoc.ddoc,'DD.MM.YY')+'г.');
		xlMergeCells(i,1,i,2);
//		xlMergeCells(i,3,i,4);
//		xlMergeCells(i,5,i,6);
		i:=i+1;
		j:=i;
		_loop katsopr {
			xlSTWriteToMatrix(j, 2, DateToStr(katsopr.dsopr,'DD.MM.YYYY'));
			xlSTWriteToMatrix(j, 1, katsopr.nsopr);
			xlAlignCells(xlCenter,j,1,j,2);
			xlDOWriteToMatrix(j, 3, katsopr.summa);
			j:=j+1;
		}
		k:=i;
		_loop basefin {
			xlSTWriteToMatrix(k, 5, DateToStr(basefin.ddoc,'DD.MM.YYYY'));
			xlSTWriteToMatrix(k, 4, basefin.nodoc);
			xlAlignCells(xlCenter,k,4,k,5);
			xlDOWriteToMatrix(k, 6, basefin.summa);
			k:=k+1;
		}
		if (j>k) then {i:=j;} else {i:=k;}
		xlSTWriteToMatrix(c, 3, '=sum(C'+string(c+1)+':C'+string(i-1)+')');
		xlSTWriteToMatrix(c, 6, '=sum(F'+string(c+1)+':F'+string(i-1)+')');
		xlSetFontStyle( xlBold, c , 1 , c , 8 );
		xlAlignCells( xlCenter, c , 1 , c , 8 );
		xlAlignCells( xlCenter, c , 3 , c , 3 );
		xlAlignCells( xlCenter, c , 6 , c , 6 );
//		xlMergeCells(c,3,c,4);
//		xlMergeCells(c,5,c,6);
		if (not nextvisual)  break;
	}
	xlSTWriteToMatrix(i, 1, 'Всего по контрагенту');
	xlSTWriteToMatrix(i, 3, '=sum(C'+string(d)+':C'+string(i-1)+')/2');
	xlSTWriteToMatrix(i, 6, '=sum(F'+string(d)+':f'+string(i-1)+')/2');
	xlSetNumberFormat	( '# ##0,00',		d,  3, i, 3 ); 
	xlSetNumberFormat	( '# ##0,00',		d,  6, i, 6 ); 
	 xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	 xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	 xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	 xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	 xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	 xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, d-3, 1, i, 6 );
	d:=i;
	xlMergeCells(i,1,i,2);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Задолженность контрагента на '+DateToStr(date2,'DD.MM.YYYY')+ 'г. перед '+myorg+' составляет: ');
	xlMergeCells(i,1,i,6);
	xlSTWriteToMatrix(i, 7, '=C'+string(d)+'-F'+string(d));
	xlSetFontStyle ( xlBold, d , 1 , d , 8);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Задолженность подтверждаем:');
	xlMergeCells(i,1,i,8);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'От '+myorg);
	xlMergeCells(i,1,i,8);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Директор');
	xlSTWriteToMatrix(i, 3, boss);
	xlSTWriteToMatrix(i, 6, '___________');
	xlMergeCells(i,1,i,2);
	xlMergeCells(i,3,i,5);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Главный бухгалтер');
	xlSTWriteToMatrix(i, 3, buh);
	xlSTWriteToMatrix(i, 6, '___________');
	xlMergeCells(i,1,i,2);
	xlMergeCells(i,3,i,5);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'От '+katorg.name);
	xlMergeCells(i,1,i,8);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Директор');
	xlSTWriteToMatrix(i, 3, '_____________________________');
	xlSTWriteToMatrix(i, 6, '___________');
	xlMergeCells(i,1,i,2);
	xlMergeCells(i,3,i,5);
	i:=i+2;
	xlSTWriteToMatrix(i, 1, 'Главный бухгалтер');
	xlSTWriteToMatrix(i, 3, '_____________________________');
	xlSTWriteToMatrix(i, 6, '___________');
	xlMergeCells(i,1,i,2);
	xlMergeCells(i,3,i,5);
//	xlSetFontStyle ( xlBold, d , 1 , i , 8);
	xlWriteMatrixToExcel ( 1, 1 );
	xlFreeMatrix;
	xlAutoFit(1,1,MaxExcelRow , MaxExcelCol);
	xlSetColumnWidth(10,1,1,MaxExcelRow,6); // ширина колонки
	StopVisual('',0);
	xlKillExcel;
}
cmCancel:
{
	closeinterface(cmDone);
}
end;
end.
Ребят Привет. скажите почему у меня строки тут циклятся до 65501 строки. и документ получается 41 МБ . Где ошибка? Я понимаю что есть другой способ вывести в ячейки, но может есть более простой способ?

