Использование объектных интерфейсов в формах. Галактика 8.10

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Использование объектных интерфейсов в формах. Галактика 8.10

Сообщение Nikos »

Добрый день.
Хочу воспользоваться интерфейсом выбора комиссии.
Если в собственных интерфейсах пишу:
#include comission.vih
...
var com : Commission;
com.InitCommission(204);
com.RunWindowSelection(1);
то все прекрасно работает.
Если же пытаюсь использовать его в присоединенных формах, то получаю ошибку загрузки объекта из ресурсного файла (Commission). При этом при компиляции никаких ошибок или предупреждений нет. Вот код:
.declare
#include comission.vih
.enddeclare
....
.begin
var com : Commission;
com.InitCommission(204);
com.RunWindowSelection(1);
end.
Что неправильно? Видел похожую тему годичной давности, но там рецепт так и не предложен.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

хотя и нужны другие вихи, та же беда, на уровне проекта тоже не помогает
Жду выхода Вселенная 2.12!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вашу переменную опишите в
.var

.endvar
.declare надо писать после .form
можно еще Loadvipinterface делать.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

В 7.12 в фрм в начале формы после полей сделал инициализацию

Код: Выделить всё

 if not  LoadvipRef(iDecl,'declension') then
  {
   message('Не удалось инициализировать объектный интерфейс!');akts.fexit;
  }       
без неё тоже ошика вылетала, сейчас работает.

В версии 8.10 вроде инициализация не нужна, но это на випе, в ФРМ не уверен.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Нельзя быть уверенным в том, что в fcom работает механизм автоинициализации переменных типа ссылка на vip-интерфейс. Поэтому лучше подстрахуйтесь, и инициализируйте com явным образом, с помощью LoadVipInterface.

Да пребудет с Вами Шворц.
Виталий
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Сделал все, что предложили - тот же результат. Та же ошибка выдается на этапе выполнения в строке LoadVipRef(com,'Commission'); или LoadVipInterface(Com); в зависимости от использования. Что еще можно сделать?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Nikos
какой объектный интерфейс подключаете?
какой вих используете?
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Вих сделал сам из документации. Получилось:
#component "F_COMMON"
#ifndef _Commission_vih_Included
#define _Commission_vih_Included
!-------------------------------------------------------------------------------
ObjInterface ObjCommission;
//Объект для работы с комиссией и ответственными лицами

Procedure InitCommission (In_wTiDk : Word);
//Инициализация комиссии

Procedure InitResponsible (In_wTiDk : Word);
//Инициализация ответственных лиц

Procedure RunWindowSelection (wType : Word);
//Запуск окна выбора и редактирования комиссии
//для комиссий:
//0 - редактирование параметров
//1 - выбор комиссии
//для ответственных лиц
//2 - выбор ответственных лиц

Function GetSelection : Comp;
//Возвращает ссылку на выбранную комиссию // - Selection.nRec

Function SelectionIsValid : Boolean;
//Возвращает true если для текущего TiDk установлена комиссия // - соответствует if (GetSelectionCommission <> comp(0))

Function GetSelectionName : String;
//Возвращает имя установленной комиссии // из Selection.Name, // для соответствующего TiDk, установленного в InitCommission, // или текст о том, что комиссия не установлена // * нужно заменить function isValid_Commission : string; на эту

Function ClearSelection : String;
//Очищает поле выбора комиссии // для соответствующего TiDk, установленного в InitCommission, // или текст о том, что комиссия не установлена

Function GetCommissionChairMan : Boolean;
//Возвращает установлен ли председатель комиссии

Function GetComponentsCount : Word;
//Возвращает количество составляющих, без учёта председателя...

Function GetComponentNRec (wNumber : Word) : Comp;
//Возвращает nRec председателя или члена комиссии

Function GetComponentFIO (wNumber : Word) : String;
//Возвращает ФИО председателя или члена комиссии

Function GetComponentTabN (wNumber : Word) : String;
//Возвращает табельный номер председателя или члена комиссии

Function GetComponentPost (wNumber : Word) : String;
//Возвращает должность председателя или члена комиссии

Function GetComponentsList (wType : Word) : String;
//Возвращает председателя комиссии или список членов комиссии
end;
!-------------------------------------------------------------------------------
VipInterface Commission implements ObjCommission;
!-------------------------------------------------------------------------------
#end // _Commission_vih_Included
В обычных интерфейсах работает замечательно. А подключаю либо ObjCommission либо Commission. Не тот не другой не работают в frm.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Код: Выделить всё

var  com : odeclension;
.............
 if not  LoadvipRef(com,'Commission') then
  {
   message('Не удалось инициализировать объектный интерфейс!');
  }       
Вообще, вроде так же как и у вас. Должно работать.
Может быть Вих не оригинальный и поменялся? Запросите последний у ТП...
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Может, конечно Вих поменялся, но почему тогда в обычных интерфейсах работает?
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Спасибо, все заработало! Дело было в том, что в проекте была строка
#component "F_COMMON"
убрал - заработало почему-то...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Мдась..до сих пор парни из Галактики так vih-и и меняют :sad:
Хоть бы тогда свободно с патчами их раздавали.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Den
я про это уже писал, но многоуважаемый Screw сказал, что их можно взять в описании.
Вот Nikos и взял в описании...


Даешь ВИХи в патчах!!!
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Конечно, если бы Вихи были в патчах, то было бы удобнее, но справедливости ради надо сказать, что я взял его в описании и все в итоге заработало.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Nikos
ну вот выйдет патч, в котором поменяют пару методов объектного фейса, и у тебя всё упадет! И взмолишься ты "ТП - вышлите мне пожалуйста новую версию ВИХа...!"

Соглисись, было бы гораздо проще сразу в патч положить ВИХ.

:)
Ответить