EXCEL снова он
Добавлено: 21 янв 2014, 14:56
Код: Выделить всё
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 МБ . Где ошибка? Я понимаю что есть другой способ вывести в ячейки, но может есть более простой способ?