Привязка функции к форме
Модераторы: m0p3e, edward_K, Модераторы
Привязка функции к форме
Ещё раз здравствуйте! У меня вопрос: можно ли привязать функцию к форме? То есть чтобы при открытии формы печати(Ctrl+P) автоматически выполнялся перерасчет цены. Сама функция у меня есть. сперва сделал чтобы перерасчет выполнялся при нажатии кнопки на форме "Сбыт", однако попросили сделать пересчет(на всякий случай) ещё и автоматически при вызове формы печати(ctrl+p). Если кто-нибудь знает функцию или какой-дибо алгоритм выполнения действий, помогите плиз.
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Re: Привязка функции к форме
Вот я пытаюсь обратиться к этой форме.
Однако при компиляции возникает ошибка
Interface compiler. Версия 5.4.41 (c) 1992-2012, корпорация "Галактика"
D:\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip(6)
Ошибка: Имя логической таблицы не указано! (стр.6, поз.13 в D:\GAL810_VIP\Forms
_MAV_2013_01\Forms\форма печати.vip)
create view var kkk1:longint condition org as report.cotdel=coGetTune('MYORG');.
я просмотрел внешние интерфейсы в галактике и увидел отличие: когда я работал с кнопкой на форме "Сбыт", то там было написано так,
а когда работаю с формой печати то. Тоесть разница в "::" и "." может мне как-то подругому обращаться к данной форме? а не через ???
Код: Выделить всё
#component "REPORT_AND_GROUP"
const
cmbut1=143213;
end;
alter interface FREESCREEN;
create view var kkk1:longint condition org as report.cotdel=coGetTune('MYORG');
Однако при компиляции возникает ошибка
Interface compiler. Версия 5.4.41 (c) 1992-2012, корпорация "Галактика"
D:\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip(6)
Ошибка: Имя логической таблицы не указано! (стр.6, поз.13 в D:\GAL810_VIP\Forms
_MAV_2013_01\Forms\форма печати.vip)
create view var kkk1:longint condition org as report.cotdel=coGetTune('MYORG');.
я просмотрел внешние интерфейсы в галактике и увидел отличие: когда я работал с кнопкой на форме "Сбыт", то там было написано так
Код: Выделить всё
L_BASEDOC::VSCHET
а когда работаю с формой печати то
Код: Выделить всё
REPORT_AND_GROUP.FREESCREEN
Код: Выделить всё
alter interface FREESCREEN
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Привязка функции к форме
Пример перекрытия стандартного фейса. Добавлена кнопка, которая печатает что-то из вьюхи:
Код: Выделить всё
// Отчет печатает данные о запланированных мероприятиях по договорам
// Для работы он перекрывает стандартный интерфейс Галактики,
// добавлена кнопка ПЕЧАТЬ
#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.
Re: Привязка функции к форме
спасибо, но у меня немного не такая ситуация. В данный момент в Галактике я работаю в модуле "Управление сбытом", нужно чтобы после редактирования любого отчета при нажатии CTRL+P выполнялась необходимая функция. Пока что я пробую просто вывести текстовое сообщениеsavov писал(а):Пример перекрытия стандартного фейса. Добавлена кнопка, которая печатает что-то из вьюхи:
Код: Выделить всё
message('Функция работает нормально');
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Привязка функции к форме
Во-первых,
Во-вторых, перехватить HandleEvent сmOK
Код: Выделить всё
alter interface Report_And_group;
Re: Привязка функции к форме
хм... а как быть сsavov писал(а):Во-первых,Во-вторых, перехватить HandleEvent сmOKКод: Выделить всё
alter interface Report_And_group;
Код: Выделить всё
#component "REPORT_AND_GROUP"
при компиляции выдаёт ошибку
Код: Выделить всё
D:\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip(2)
Ошибка: В ресурсе нет интерфейса REPORT_AND_GROUP::REPORT_AND_GROUP (стр.2, поз
.33 в D:\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip)
alter interface Report_and_Group;
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Привязка функции к форме
А почему компонент-то Report_And_Group?
Компонент CompData
Компонент CompData
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Привязка функции к форме
1. У фейса REPORT_AND_GROUP нет компоненты(compdata - это рес).
2. REPORT_AND_GROUP запрещен для докомпиляции(поправьте примером если это не так) - жаль, можно было бы много чего интересного сделать - типа прав на запуск отчетов.
3. REPORT_AND_GROUP вызывается абсолютно везде при печати в формат бизнес-текст, так что смысла модифицировать именно его нет.
4. То есть вам нужно либо докомпилировать тот фейс, из которого идет вызов печати(скорей всего это будет событие cmPrintDoc или то что срабатывает по вашей кнопке ), либо встроить изменения в саму печатную форму.
2. REPORT_AND_GROUP запрещен для докомпиляции(поправьте примером если это не так) - жаль, можно было бы много чего интересного сделать - типа прав на запуск отчетов.
3. REPORT_AND_GROUP вызывается абсолютно везде при печати в формат бизнес-текст, так что смысла модифицировать именно его нет.
4. То есть вам нужно либо докомпилировать тот фейс, из которого идет вызов печати(скорей всего это будет событие cmPrintDoc или то что срабатывает по вашей кнопке ), либо встроить изменения в саму печатную форму.
Re: Привязка функции к форме
при компиляцииsavov писал(а):А почему компонент-то Report_And_Group?
Компонент CompData
Код: Выделить всё
D:\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip(2)
Ошибка: В ресурсе нет интерфейса COMPDATA::REPORT_AND_GROUP (стр.2, поз.33 в D:
\GAL810_VIP\Forms_MAV_2013_01\Forms\форма печати.vip)
alter interface Report_and_Group;
^ [ Enter-продолжить ] :
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Re: Привязка функции к форме
спасибо я догадывался, что скорее всего эту форму нельзя модифицировать. однако начальство требовало дополнительного пересчета для невнимательных работников) получилось так, что кнопка всё считает нормально, однако работники могут забыть её нажать а сразу пустить документ на печать(CTRL+P), вот и дали задание чтобы скидки автоматически пересчитывались при нажатии на CTRL+P или ,чтобы ,хотя бы, высвечивалось сообщение "Не забудьте пересчитать налог".edward_K писал(а):1. У фейса REPORT_AND_GROUP нет компоненты(compdata - это рес).
2. REPORT_AND_GROUP запрещен для докомпиляции(поправьте примером если это не так) - жаль, можно было бы много чего интересного сделать - типа прав на запуск отчетов.
3. REPORT_AND_GROUP вызывается абсолютно везде при печати в формат бизнес-текст, так что смысла модифицировать именно его нет.
4. То есть вам нужно либо докомпилировать тот фейс, из которого идет вызов печати(скорей всего это будет событие cmPrintDoc или то что срабатывает по вашей кнопке ), либо встроить изменения в саму печатную форму.
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Re: Привязка функции к форме
Помню ковырял как-то Report_And_Groups на 5.82. Даже разграничение доступа сделал. Но муторно очень.
В данном случае пошел бы по такому пути привлечения обработчиков событий. BindEvent и т.д.
Делаем фейсик с событием.
Докомпиляцией в основной интерфейс вешаем слушать данное событие и при срабатывании запускаем нужный нам процесс.
В нужной форме добавляем вызов данного события.
В данном случае пошел бы по такому пути привлечения обработчиков событий. BindEvent и т.д.
Делаем фейсик с событием.
Докомпиляцией в основной интерфейс вешаем слушать данное событие и при срабатывании запускаем нужный нам процесс.
В нужной форме добавляем вызов данного события.
Re: Привязка функции к форме
Ну а тут вообще все просто.Espada писал(а):[однако начальство требовало дополнительного пересчета для невнимательных работников) получилось так, что кнопка всё считает нормально, однако работники могут забыть её нажать а сразу пустить документ на печать(CTRL+P), вот и дали задание чтобы скидки автоматически пересчитывались при нажатии на CTRL+P или ,чтобы ,хотя бы, высвечивалось сообщение "Не забудьте пересчитать налог".
Код: Выделить всё
HandleEvent
cmPrintdoc :
{
MyCalcFunc;
inherined::handleevent(cmPrintDoc);
};
End;
Re: Привязка функции к форме
Спасибо большое!)m0p3e писал(а): Ну а тут вообще все просто.Код: Выделить всё
HandleEvent cmPrintdoc : { MyCalcFunc; inherined::handleevent(cmPrintDoc); }; End;
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!