Пример перекрытия стандартного фейса. Добавлена кнопка, которая печатает что-то из вьюхи:
Код: Выделить всё
// Отчет печатает данные о запланированных мероприятиях по договорам
// Для работы он перекрывает стандартный интерфейс Галактики,
// добавлена кнопка ПЕЧАТЬ
#component 'L_ADVREP'
#include cfg_all.inc
#include galnet.inc
const
cmPrintMes = 9999;
End;
Alter interface DOGURGENT;
overload end;
var ButPrint, scrPrint : longint ;
var Res, CanWork, FL : Boolean ;
var OutFileName, file_Name : String ;
var IRow, rMeas, RMeas2 : Integer ;
var szResult : String ;
var ActiveWorkBook : string ; // имя активной книги
var Crec : Comp ;
// вьюха, которая пробегает по договорам, которые видны в верхнем окне галактического фейса
create View TDogovor as
select Memtbl_dogurg.nrec, Memtbl_dogurg.cdoc, Memtbl_dogurg.name,
Memtbl_dogurg.nodoc, Memtbl_dogurg.ddoc, Memtbl_dogurg.dbeg,
Memtbl_dogurg.dend, katorg.name, dogovor.desgr
From Memtbl_dogurg, katorg
Where((root==Memtbl_dogurg.nrec and
Memtbl_dogurg.cdoc==dogovor.nrec
and dogovor.corg==katorg.nrec
));
//а эта вьюха цепляет собственно мероприятия к тем договорам, которые получили в предыдущем запросе
create View TMesasures as
Select
urgentm.nrec, urgentm.dend, urgentm.nodoc, urgentm.ddoc, measures.name, measures.comment
From urgentm, measures
WHERE((Crec==urgentm.cdogovor and
urgentm.cmeasures==measures.nrec
));
HandleEvent
cmInit:
{
inherited::handleEvent(cmInit);
cfsSetCurrentContainer('L_ADVREP::DOGURGENT');
// тут интересный момент. в стандартном фейсе Галактики нет места для кнопки, поэтому сначала
//создаем дополнительный скрин, уменьшив размер броузера стандартного фейса ( нижня часть окна)
cfsSetProp('BRURGENTM', cfpRectB_Y ,17);
cfsCreateObject('screen', 'L_ADVREP::DOGURGENT', 'scrPrint', FALSE, scrPrint);
cfsSetProp ( scrPrint, cfpRectA_X, 1 );
cfsSetProp ( scrPrint, cfpRectA_Y, 18 );
cfsSetProp ( scrPrint, cfpRectB_X, 115 );
cfsSetProp ( scrPrint, cfpRectB_Y, 19);
cfsSetProp ( scrPrint, cfpVisible,TRUE);
// а вот теперь в этом скрине создаем кнопку и вешаем на нее команду
cfsCreateObject('button', 'scrPrint', 'ButPrint', FALSE, ButPrint);
cfsSetProp ( ButPrint, cfpOrigin_X, 17 );
cfsSetProp ( ButPrint, cfpOrigin_Y, 10 );
cfsSetProp ( ButPrint, cfpSize_X, 119 );
cfsSetProp ( ButPrint, cfpSize_Y, 29 );
cfsSetProp ( ButPrint, cfpCommand, cmPrintMes );
cfsSetProp ( ButPrint, cfpTitle, 'ПЕЧАТЬ' );
}
cmPrintMes:
{
szResult := GetStringParameter ( 'Files', 'OutputFilesDirectory' , 0 ) ;
OutFileName := Trim(szResult)+'График_Мероприятий_' +'.xls';
file_Name:='\\GalaxyV\VRNF$\Res\Template\_Grafik_measures.xls';
if (not xlCreateExcelWithTemplate(File_Name,true))
{ CanWork:=false;
Message('Не могу открыть файл: '+file_name,0);
}
else
{ CanWork:=True;
}
if CanWork
{
res:=xlDisplayAlerts(false);
res:=xlSetActiveSheetByName('Лист1');
rMeas:=TDogovor.getFirst;
IRow:=6;
res:=xlSetCellStringValue('на дату '+String(Cur_date),2,1,2,1);
while(rMeas=0)
{
res:=xlSetCellStringValue(TDogovor.Memtbl_dogurg.NoDoc+' ',IRow,1,IRow,1);
res:=xlSetCellStringValue(TDogovor.dogovor.desgr,IRow,2,IRow,2);
res:=xlSetCellStringValue(DateToStr(TDogovor.Memtbl_dogurg.DDoc,'DD.MM.YYYY'),IRow,3,IRow,3);
res:=xlSetCellStringValue(TDogovor.Katorg.Name,IRow,4,IRow,4);
res:=xlSetCellStringValue(TDogovor.Memtbl_dogurg.Subject1,IRow,5,IRow,5);
res:=xlSetFontStyle(xlBold,IRow,1,IRow,6);
res:=xlFrameCells(xlBorderT or xlBorderB or xlBorderL or xlBorderR or xlInsideV or xlInsideH, xlThin,xlContinuous,1,IRow,1,Irow,6);
Crec:=TDogovor.Memtbl_dogurg.cdoc;
rMeas2:=TMesasures.getFirst;
FL:=False;
while(rMeas2=0)
{
FL:=true;
IRow:=IRow+1;
res:=xlSetCellStringValue(TMesasures.measures.name,IRow,5,IRow,5);
res:=xlSetCellStringValue(DateToStr(TMesasures.urgentm.dend,'DD.MM.YYYY'),IRow,6,IRow,6);
RMeas2:=TMesasures.getNext;
}
if FL IRow:=IRow+2 else IRow:=IRow+1;
rMeas:=TDogovor.getNext;
}
If NOT (xlGetActiveWorkBookName( ActiveWorkBook )) // определяем наименование активной книги
then Message('Не смог получить имя открытого Excel-файла') ;
else
// сохраняем ее с именем OutFileName
if not xlSaveAsWorkBookByName( ActiveWorkBook, OutFileName )
message( 'Ошибка сохранения отчета как'#13+OutFileName, Error ) ;
res:=xlKillExcel;
}
}
end;
end.