Проблема с докомпиляцией интерфейса в 9.1
Модераторы: m0p3e, edward_K, Модераторы
Проблема с докомпиляцией интерфейса в 9.1
Имеется докомпилированный интерфейс, добавляющий в список документов колонку с внешним атрибутом. В 8.1 всё работает "на ура". Пробую перенести его в 9.1: компилируется нормально, но при запуске вылетает по рантайму. Проблемная функция cfsCreateObject, падает на ней. Причем когда вызываю ее в режиме проверки (4-ый параметр == TRUE), то всё хорошо, возвращает 0. Тут же следом вызываю в режиме создания (с параметром FALSE) - и конец.
Версия 9.1 свежая, патчи почти последние. Кто-нибудь сталкивался с подобным? Проблема в программе или в моих неумелых руках?
Версия 9.1 свежая, патчи почти последние. Кто-нибудь сталкивался с подобным? Проблема в программе или в моих неумелых руках?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Проблема с докомпиляцией интерфейса в 9.1
а других alter со вставкой посредством cfsCreateObject работают ?
Можно попробовать встроенным конфигуратором сделать такое поле внешнего атрибута и посмотреть в designer-е массив свойств у созданного объекта и сравнить с тем что в коде alter присваивается .
Можно попробовать встроенным конфигуратором сделать такое поле внешнего атрибута и посмотреть в designer-е массив свойств у созданного объекта и сравнить с тем что в коде alter присваивается .
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Проблема с докомпиляцией интерфейса в 9.1
мы на 9-ку НЕ переходили, но я собирал альтеры, проверял, готовился к переходу. вроде ничего не падало.
может действительно со свойствами перемудрили?
может действительно со свойствами перемудрили?
Re: Проблема с докомпиляцией интерфейса в 9.1
У меня только в одном интерфейсе колонка добавляется, в остальных докомпилируются обработчики событий, там cfsCreateObject не требуется. До модификации свойств дело не доходит, т. к. объект не получается создать.Den писал(а):а других alter со вставкой посредством cfsCreateObject работают ?
Можно попробовать встроенным конфигуратором сделать такое поле внешнего атрибута и посмотреть в designer-е массив свойств у созданного объекта и сравнить с тем что в коде alter присваивается .
Сделать через конфигуратор попробовал сразу же, как докомпиляция обломилась. Колонка нормально создается, имена и типы остались те же, что в 8.1.
На днях атлантис обновился до 5.5.17, может, с ним получится.
Re: Проблема с докомпиляцией интерфейса в 9.1
Что конкретно передаете в cfsCreateObject в качестве пераметра. По идее там должен быть NREC атрибута. И в БД такой NREC тоже должен быть иначе не произойдет добавление колонки.KATZ писал(а):...докомпилированный интерфейс, добавляющий в список документов колонку с внешним атрибутом...при запуске вылетает по рантайму...проблемная функция cfsCreateObject...
Re: Проблема с докомпиляцией интерфейса в 9.1
Передается NREC, как и положено. В конфигураторе вручную добавил колонку, выгрузил скрипт, проверил - всё совпадает. Атрибут в БД, естественно, есть. В 8.1 код работает. Свежий атлантис ничего не изменил.LaaLaa писал(а):Что конкретно передаете в cfsCreateObject в качестве пераметра. По идее там должен быть NREC атрибута. И в БД такой NREC тоже должен быть иначе не произойдет добавление колонки.
Вот, собственно, исходник. Оставил минимум + добавил пояснения и отладочные сообщения. Суть - вставить колонку со строковым атрибутом в список договоров. Если кто-нибудь найдет время у себя попробовать и указать мне на ошибки, то достаточно будет только NREC атрибута сменить на реальный.
Код: Выделить всё
#component "L_DOGOVOR"
alter interface DOGOVOR;
HandleEvent
cmInit:
{
Inherited::HandleEvent(cmInit);
var lStatus, lMyObject: longint;
lStatus:=cfsSetCurrentContainer('L_DOGOVOR::DOGOVOR');
if (lStatus<>0)
{
Message('Ошибка '+String(lStatus)+' функции cfsSetCurrentContainer.', Error+OKButton);
exit;
}
lStatus:=cfsCreateObject('TreeColumn', 'BRDOGOVORSELECTMAIN', 'ExtAttr: DOGOVOR1,4612070754798193775', TRUE, lMyObject);
if (lStatus<>0)
{
Message('Ошибка '+String(lStatus)+' пробной функции cfsCreateObject.', Error+OKButton);
exit;
}
Message('Перед созданием.', 0); // это сообщение еще есть
lStatus:=cfsCreateObject('TreeColumn', 'BRDOGOVORSELECTMAIN', 'ExtAttr: DOGOVOR1,4612070754798193775', FALSE, lMyObject);
Message('После создания.', 0); // этого сообщения уже нет
if (lStatus<>0)
{
Message('Ошибка '+String(lStatus)+' функции cfsCreateObject.', Error+OKButton);
exit;
}
/*
Настройка свойств нового объекта, до которой дело не доходит
*/
}
end;
end.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Проблема с докомпиляцией интерфейса в 9.1
1.
Вместо
lStatus:=cfsSetCurrentContainer('L_DOGOVOR::DOGOVOR');
лучше использовать
lStatus:=cfsSetCurrentContainer(cfsGetCurrentContainerSelf)
2.
Я предпочитаю для атрибутов вставлять вычисляемые поля - их можно по наименованию юзать.
Да и то - вставку для них длеать через cnf скрипт.
Есть объект для отображения и выбора списочного атрибута.
С датой чуть сложнее - чтобы не зависеть от региональных настроек делаю так StrToDate(TRIM(REPLACE(ExprFieldValue,'/','.')),'DD.MM.YYYY')
Вместо
lStatus:=cfsSetCurrentContainer('L_DOGOVOR::DOGOVOR');
лучше использовать
lStatus:=cfsSetCurrentContainer(cfsGetCurrentContainerSelf)
2.
Я предпочитаю для атрибутов вставлять вычисляемые поля - их можно по наименованию юзать.
Да и то - вставку для них длеать через cnf скрипт.
Код: Выделить всё
//===========================
(local_propis)
as select
piExtAttr.doGetAttr(coPersons,Persons.Nrec,'Нечто') //
....
TableEvent Table ??????;
cmExprFieldChanged :
{ inherited :: handleEvent (cmExprFieldChanged);
case curfield of
#local_propis:
{ piExtAttr.doSetAttr(coPersons,Persons.Nrec,'Нечто',double(ExprFieldValue))
}
end;
}
end;
С датой чуть сложнее - чтобы не зависеть от региональных настроек делаю так StrToDate(TRIM(REPLACE(ExprFieldValue,'/','.')),'DD.MM.YYYY')
Re: Проблема с докомпиляцией интерфейса в 9.1
edward_K
Замечания полезные, но хотелось бы в имеющемся коде ошибку найти. Либо получить подтверждение от независимого эксперта, что это ошибка не моя, а "Галактики".
Может, кто-нибудь потратит 10-15 минут и попробует скомпилировать и запустить у себя на 9.1?
Замечания полезные, но хотелось бы в имеющемся коде ошибку найти. Либо получить подтверждение от независимого эксперта, что это ошибка не моя, а "Галактики".
Может, кто-нибудь потратит 10-15 минут и попробует скомпилировать и запустить у себя на 9.1?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Проблема с докомпиляцией интерфейса в 9.1
KATZ победил проблему или удалось выяснить ее причины ?
пробую аналогичный вариант на 5.5.17.0 - точь в точь такая же ситуация как у тебя...на 5,4,44 все ок без рантайма
пробую аналогичный вариант на 5.5.17.0 - точь в точь такая же ситуация как у тебя...на 5,4,44 все ок без рантайма
Re: Проблема с докомпиляцией интерфейса в 9.1
Нет, не победил. При каждом обновлении L_Dogovor докомпилирую обработчик событий, а потом к результату добавляю колонку вручную через конфигуратор. Свежий атлантис 5.5.18 ничего не изменил.Den писал(а):KATZ победил проблему или удалось выяснить ее причины ?
пробую аналогичный вариант на 5.5.17.0 - точь в точь такая же ситуация как у тебя...на 5,4,44 все ок без рантайма
И причины выяснить не удалось. Источник рантайма, понятное дело, - не код на VIPе, а EXE/DLL, причины в них только разработчики могут найти. А разработчик один раз отметился в теме банальным советом и более интереса не проявлял.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Проблема с докомпиляцией интерфейса в 9.1
Ну зачем же вручную - можно же раз добавить и выгрузить в скрипт. Собирать нужно в один рес - сначала докомпиляцию, потом cnf.
Глупый вопрос - а собираете точно на рабочей базе и том же exe? Просто если нет, то и раньше были проблемы при сборке без внешнего атрибута. А вообще поскольку у меня клиентов много, то я за добавление путем, как писал выше - так я не привязываюсь к базе, и более того - не нужно следить за наличием атрибута - он сам создается, ну разве что он будет ссылочный - тогда надо его все таки проверить и создать.
Падать еще может пр сборке с vih не соответствующим ресурсам - мне приходится держать vih отдельно под каждый тип exe клиента. Попробуйте собрать только вашу докомпиляцию.
Глупый вопрос - а собираете точно на рабочей базе и том же exe? Просто если нет, то и раньше были проблемы при сборке без внешнего атрибута. А вообще поскольку у меня клиентов много, то я за добавление путем, как писал выше - так я не привязываюсь к базе, и более того - не нужно следить за наличием атрибута - он сам создается, ну разве что он будет ссылочный - тогда надо его все таки проверить и создать.
Падать еще может пр сборке с vih не соответствующим ресурсам - мне приходится держать vih отдельно под каждый тип exe клиента. Попробуйте собрать только вашу докомпиляцию.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Проблема с докомпиляцией интерфейса в 9.1
Ясно
Прокатывает кажись еще через ExtendFormats. По крайней мере у меня не упало.
Прокатывает кажись еще через ExtendFormats. По крайней мере у меня не упало.
Re: Проблема с докомпиляцией интерфейса в 9.1
Сегодня потратил 50 минут. Скомпилировал пример KATZ. Подтверждаю пример KATZ корректный, функция cfsCreateObject действительно падает.
Жаль что кроме форума в техподдержку не написали.
По ночам мне спасть хочется, а не компилировать.
А на работе у меня сейчас другой проект не могу все отслеживать.
Жаль что кроме форума в техподдержку не написали.
По ночам мне спасть хочется, а не компилировать.
А на работе у меня сейчас другой проект не могу все отслеживать.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Проблема с докомпиляцией интерфейса в 9.1
102.132431
Кстати, если добавляешь по аналогии не в бравсе а в скрин - то все работает
Кстати, если добавляешь по аналогии не в бравсе а в скрин - то все работает