Посылается ли в интерфейс какое-нибудь событие, когда пользователь ничего не делает???
Или какое нибудь событие типа cmInit, только когда окно уже проинициализированно?
Посылается ли окну какое-нибудь событие типа cmIdle???
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 159
- Зарегистрирован: 28 сен 2005, 19:48
- Откуда: mos
- Контактная информация:
Проблема следущая. Я вызываю интерфейс, програмно фокусируюсь на поле выбора и посылаю событие cmPick, открывается интерфейс выбора ЦО, соответствующий этому полю. Выбираю нужный ЦО, затем програмно посылаю событие cmClose. Проблема в том, что при открытии интерфейса не успевают проинициализироваться поля и соответственно при выходе в базе апдейтятся пустыми значениями.
Вот хочется какое нибудь событие типа cmInit, только чтобы оно срабатывало после того как проинициализируются все поля. Ну и конечно же нежелательно трогать cfg...
Вот хочется какое нибудь событие типа cmInit, только чтобы оно срабатывало после того как проинициализируются все поля. Ну и конечно же нежелательно трогать cfg...
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
код в студию
.
или лог.
Как вы догадываетесь, что поля не проинициализировались?
и что rereadrecord не помогает? или rescanpanel?. Фейс вами вызываемй это ваш? Если да, то вам никто не мешает сделать вызов фейса выбора в cmIdle, ну или тайемр стартануть на событие. Если же стандартный, то интересно как вы програмно сие вызываете. Была такая функция Notify еще, но это к Screw
.

или лог.
Как вы догадываетесь, что поля не проинициализировались?
и что rereadrecord не помогает? или rescanpanel?. Фейс вами вызываемй это ваш? Если да, то вам никто не мешает сделать вызов фейса выбора в cmIdle, ну или тайемр стартануть на событие. Если же стандартный, то интересно как вы програмно сие вызываете. Была такая функция Notify еще, но это к Screw

-
- Постоянный обитатель
- Сообщения: 159
- Зарегистрирован: 28 сен 2005, 19:48
- Откуда: mos
- Контактная информация:
Ну выложить код это будет многовато))
Кароче я домисал исходник интерфейса Dogovor.
Мне необходимо в окне редактирования договора добавить поле выбора ЦО, однако после выбора ЦО должна сработать функция замены ЦО во всем документе, как при выборе ЦО в интерфейсе AttrDog (который вызывается по нажатию кнопки "Контрагент1"). Копировать соответствующий кусок кода из AttrDog в Dogovor накладно, так как там повторяются какие-то переменные, да и вообще код в дальнейшем необходимо править под патчи, а соответственно искать различия в отпатчеванных исходниках и исправленных мной станет более проблемотично.
Как сделал я. Интерфейс AttrDog вызывается с 2-мя параметрами. 1-й параметр это 0,если вызван по кнопке "Контрагент1" и 1,если вызван по кнопке "Контрагент2". Я в AttrDog при инициализации предусматрел обработку первого параметра со значением 2, это означает что интерфейс вызван с добавленной мной строки выбора ЦО. При выборе ЦО открывается AttrDog, курсор фокусируется на строке выбора ЦО и посылается команда cmPick, соответственно запускается интерфейс выбора ЦО. После того как мы выбрали ЦО мы закрываем интерфейс выбора ЦО и в обработчике cmPick в конце посылается команда cmClose, как раз в это время срабатывает функция, которая предлагает изменить ЦО в ПКП и т.д.
И все работает отлично. Только при вызове AttrDog не успевают проинициализироваться поля, а сразу курсор прыгает на поле выбора ЦО, и при последующем закрытии интерфейса поля еще не проинициализированны, и все поля задействованные в интерфейсе AttrDog обнуляются функцией, которая апдейтит изменения.
Куски кода:
Interface AttrDog 'Просмотр реквизитов контрагента' ('', hcDogRekvizitKontr, sci13Esc) EscClose;
.......................
cmPick:
{
......................
if (MyAddition) {
PutCommand(cmClose);
}
}
...........................
cmInit:{
MyAddition:=FALSE;
if (pNumber=2){
pNumber:=0;
MyAddition:=TRUE;
SelectFormat(scAttrDogPeople);
SelectField (#KATPODROTV.NAME);
PutCommand(cmPick);
}
}
...........................
end.
И вызывается это в интерфейсе Dogovor
Interface Dogovor ...............
............
cmPick:{
if (CurField=#FPCOD.Name){
UpDateInsertDogovor;
if ( OldSubject1 <> AttrDog.Subject1 )
if ( update current AttrDog <> tsOk )
{}
RunInterface('AttrDog', word(2), Dogovor.nRec);
RereadRecord(#Dogovor);
}
.......
}
...............
end.
Кароче я домисал исходник интерфейса Dogovor.
Мне необходимо в окне редактирования договора добавить поле выбора ЦО, однако после выбора ЦО должна сработать функция замены ЦО во всем документе, как при выборе ЦО в интерфейсе AttrDog (который вызывается по нажатию кнопки "Контрагент1"). Копировать соответствующий кусок кода из AttrDog в Dogovor накладно, так как там повторяются какие-то переменные, да и вообще код в дальнейшем необходимо править под патчи, а соответственно искать различия в отпатчеванных исходниках и исправленных мной станет более проблемотично.
Как сделал я. Интерфейс AttrDog вызывается с 2-мя параметрами. 1-й параметр это 0,если вызван по кнопке "Контрагент1" и 1,если вызван по кнопке "Контрагент2". Я в AttrDog при инициализации предусматрел обработку первого параметра со значением 2, это означает что интерфейс вызван с добавленной мной строки выбора ЦО. При выборе ЦО открывается AttrDog, курсор фокусируется на строке выбора ЦО и посылается команда cmPick, соответственно запускается интерфейс выбора ЦО. После того как мы выбрали ЦО мы закрываем интерфейс выбора ЦО и в обработчике cmPick в конце посылается команда cmClose, как раз в это время срабатывает функция, которая предлагает изменить ЦО в ПКП и т.д.
И все работает отлично. Только при вызове AttrDog не успевают проинициализироваться поля, а сразу курсор прыгает на поле выбора ЦО, и при последующем закрытии интерфейса поля еще не проинициализированны, и все поля задействованные в интерфейсе AttrDog обнуляются функцией, которая апдейтит изменения.
Куски кода:
Interface AttrDog 'Просмотр реквизитов контрагента' ('', hcDogRekvizitKontr, sci13Esc) EscClose;
.......................
cmPick:
{
......................
if (MyAddition) {
PutCommand(cmClose);
}
}
...........................
cmInit:{
MyAddition:=FALSE;
if (pNumber=2){
pNumber:=0;
MyAddition:=TRUE;
SelectFormat(scAttrDogPeople);
SelectField (#KATPODROTV.NAME);
PutCommand(cmPick);
}
}
...........................
end.
И вызывается это в интерфейсе Dogovor
Interface Dogovor ...............
............
cmPick:{
if (CurField=#FPCOD.Name){
UpDateInsertDogovor;
if ( OldSubject1 <> AttrDog.Subject1 )
if ( update current AttrDog <> tsOk )
{}
RunInterface('AttrDog', word(2), Dogovor.nRec);
RereadRecord(#Dogovor);
}
.......
}
...............
end.