Страница 1 из 2

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

Добавлено: 17 окт 2007, 15:41
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.
Что неправильно? Видел похожую тему годичной давности, но там рецепт так и не предложен.

Добавлено: 17 окт 2007, 20:25
Max_Fin
хотя и нужны другие вихи, та же беда, на уровне проекта тоже не помогает

Добавлено: 17 окт 2007, 22:25
edward_K
вашу переменную опишите в
.var

.endvar
.declare надо писать после .form
можно еще Loadvipinterface делать.

Добавлено: 18 окт 2007, 06:43
Алексей
В 7.12 в фрм в начале формы после полей сделал инициализацию

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

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

В версии 8.10 вроде инициализация не нужна, но это на випе, в ФРМ не уверен.

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

Да пребудет с Вами Шворц.

Добавлено: 23 окт 2007, 10:13
Nikos
Сделал все, что предложили - тот же результат. Та же ошибка выдается на этапе выполнения в строке LoadVipRef(com,'Commission'); или LoadVipInterface(Com); в зависимости от использования. Что еще можно сделать?

Добавлено: 23 окт 2007, 11:03
Алексей
Nikos
какой объектный интерфейс подключаете?
какой вих используете?

Добавлено: 23 окт 2007, 11:24
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.

Добавлено: 23 окт 2007, 13:37
Алексей

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

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

Добавлено: 23 окт 2007, 14:18
Nikos
Может, конечно Вих поменялся, но почему тогда в обычных интерфейсах работает?

Добавлено: 23 окт 2007, 16:57
Nikos
Спасибо, все заработало! Дело было в том, что в проекте была строка
#component "F_COMMON"
убрал - заработало почему-то...

Добавлено: 23 окт 2007, 18:08
Den
Мдась..до сих пор парни из Галактики так vih-и и меняют :sad:
Хоть бы тогда свободно с патчами их раздавали.

Добавлено: 24 окт 2007, 06:34
Алексей
Den
я про это уже писал, но многоуважаемый Screw сказал, что их можно взять в описании.
Вот Nikos и взял в описании...


Даешь ВИХи в патчах!!!

Добавлено: 24 окт 2007, 07:39
Nikos
Конечно, если бы Вихи были в патчах, то было бы удобнее, но справедливости ради надо сказать, что я взял его в описании и все в итоге заработало.

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

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

:)