Имя: Пароль:
1C
1C 7.7
v7: Подскажите про регистрацию классов?
0 Zhuravlik
 
29.01.13
12:26
Добрый день. Понадобилось использовать класс "Управление формой", решил сразу в конфу его вставить (не польлзоваться внешним DefCls.prm).
Создал 8 обработок:

1. DefCls
2. Класс_УправлениеФормой
3. Класс_УправлениеФормой_Привязки
4. Класс_УправлениеФормой_ЭлементПривязки
5. Класс_УправлениеФормой_Сплиттер
6. Класс_УправлениеФормой_Гиперссылки
7. Класс_УправлениеФормой_ОбязательныеРеквизиты
8. Класс_УправлениеФормой_Привязка


в обработки со 2 по 6 прописал текты модулей из внешних файлов, в DefCls такой текст:

класс УправлениеФормой                       = Класс_УправлениеФормой@MD : РасширениеФормы
класс УправлениеФормой.Привязки              = Класс_УправлениеФормой_Привязки@MD;
класс УправлениеФормой.ЭлементПривязки       = Класс_УправлениеФормой_ЭлементПривязки@MD;
класс УправлениеФормой.Сплиттер              = Класс_УправлениеФормой_Сплиттер@MD;
класс УправлениеФормой.Гиперссылки           = Класс_УправлениеФормой_Гиперссылки@MD;
класс УправлениеФормой.ОбязательныеРеквизиты = Класс_УправлениеФормой_ОбязательныеРеквизиты@MD;


//------------------------------------------------------------------------------------------------------------

class РасширениеФормы = Класс_УправлениеФормой@MD : РасширениеФормы
{
   void Привязка(Строка ИДЭлемента, Строка ТипВ="", Строка ИДЭлементаВ="", Строка ТипГ="", Строка ИДЭлементаГ="");
   void УстановитьФорму(РасширяемаяФорма);
   void ПриИзмененииРазмераОкна(ТипСобытия, ШиринаФормы, ВысотаФормы);
   void ПослеОткрытия();
   void ПриДвиженииМыши(Сост,ЛевоМ,ВерхМ);
   void ПриНажатииЛевойКнопки(Сост,ЛевоМ,ВерхМ);
   void ПриОтжатииЛевойКнопки(Сост,ЛевоМ,ВерхМ);
   void Сбросить();
   void Выровнять(ИДЭлемента, Граница, ИДЭлементаЦель, ГраницаЦель, Отступ);
   void Привязать();
};
//------------------------------------------------------------------------------------------------------------


При загрузке конфа ошибок не выдает, на вкладке 1С++ (вер. 3.2.3.20) такой текст:

Информация о классах:

Всего зарегистрировано классов: 1
Всего объявлено методов: 10

Имена зарегистрированных классов:
УправлениеФормой = Класс_УправлениеФормой@MDКласс_УправлениеФормой_Привязки@MD;классУправлениеФормой.ЭлементПривязкиКласс_УправлениеФормой_ЭлементПривязки@MD;классУправлениеФормой.СплиттерКласс_УправлениеФормой_Сплиттер@MD;классУправлениеФормой.ГиперссылкиКласс_УправлениеФормой_Гиперссылки@MD;классУправлениеФормой.ОбязательныеРеквизитыКласс_УправлениеФормой_ОбязательныеРеквизиты@MD;classРасширениеФормыКласс_УправлениеФормой@MD

Информация о настройках:

EnableHookEventsGroupContext: 0
EnableCheckType: 0
EnableDebugging: 0
EnableOptimization: 1
EnableTableSourceTable: 1
EnableTurboBL: 1


Но в модуле документа, когда инициализирую привязку:

   Попытка
       УправлениеФормой = СоздатьОбъект("РасширениеФормы");
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;    
   
   ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;
   //ПривязкаЭлементов.УстановитьГраницыПоФорме("ТаблПоле_",1,1,1,1);

   
   ЭлементПривязки = ПривязкаЭлементов.Добавить("ТаблПоле_");
   ЭлементПривязки.Установить("Верх", "В", "Форма");
   ЭлементПривязки.Установить("Низ", "В", "Форма");
   ЭлементПривязки.Установить("Лево", "Л", "Форма");
   ЭлементПривязки.Установить("Право", "П", "Форма");



В описании ошибки сообщается:
"ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;
{Документ._ТТН_Реализация.Форма.Модуль(744)}: Поле агрегатного объекта не обнаружено (ПривязкаЭлементов)"

Что не так?
1 Zhuravlik
 
29.01.13
12:29
+ в обработке "Класс_УправлениеФормой" прописано
Перем ПривязкаЭлементов Экспорт;
Да и не могл это быть не прописано, я все скопипастил, ничего по дороге не трогал...
2 ADirks
 
29.01.13
12:36
чё, прям вот так вот?!
class РасширениеФормы = Класс_УправлениеФормой@MD : РасширениеФормы {};

т.е. сам от себя наследуется?

ну и во всех остальных декларациях пропущены {};
3 Ёпрст
 
29.01.13
12:40
4 Zhuravlik
 
29.01.13
12:41
(2) Честно говоря, все это делалось методом научного тыка...
(3) Я это читал, туго доходит.
5 ADirks
 
29.01.13
12:51
ну лишнего ты из копипасты поудалял. вот так надо

класс УправлениеФормой                       = Класс_УправлениеФормой@MD : РасширениеФормы {};

гораздо интересней другое, откуда вот это?

class РасширениеФормы = Класс_УправлениеФормой@MD : РасширениеФормы
{
   void Привязка(Строка ИДЭлемента, Строка ТипВ="", Строка ИДЭлементаВ="", Строка ТипГ="", Строка ИДЭлементаГ="");
   void УстановитьФорму(РасширяемаяФорма);
   void ПриИзмененииРазмераОкна(ТипСобытия, ШиринаФормы, ВысотаФормы);
   void ПослеОткрытия();
   void ПриДвиженииМыши(Сост,ЛевоМ,ВерхМ);
   void ПриНажатииЛевойКнопки(Сост,ЛевоМ,ВерхМ);
   void ПриОтжатииЛевойКнопки(Сост,ЛевоМ,ВерхМ);
   void Сбросить();
   void Выровнять(ИДЭлемента, Граница, ИДЭлементаЦель, ГраницаЦель, Отступ);
   void Привязать();
};
//------------------------------------------------------------------------------------------------------------


удали его нафиг короче, это судя по всему какие-то ошмётки декларации совсем другого класса (привязки от DmitrO)
6 Ёпрст
 
29.01.13
12:51
дык скачай любую демо конфу с классами, сделай по-аналогии
7 Ёпрст
 
29.01.13
12:54
я б вообще не пользовался этими классами.
Не нравится мне идея привязок через Перехватчик в приоткрытии формы.Да и лишнего там много, да и ..если есть свои перехватчики - переписывать усё придётся.
8 Zhuravlik
 
29.01.13
13:02
(5) Это уже мои ваяния, когда ветку создавал их уже в конфе не было, а из ветки не удалил, поспешил...
Все-равно ругается, может еще что-то недописал?

(6) Я смотрел как на пример в конфигурацию Скат, там вот так как-то...
Плюс качал демоконфу с 1СРР, но что-то там понакидано всего, начал копать потом забросил.
9 Zhuravlik
 
29.01.13
13:03
(7) А какими?
10 Zhuravlik
 
29.01.13
13:07
+ В скате вот так:

класс Общие.Форма.Привязка=КлассПривязкаЭлементовФормы@MD: РасширениеФормы
{
   void Привязка(Строка ИДЭлемента, Строка ТипВ="", Строка ИДЭлементаВ="", Строка ТипГ="", Строка ИДЭлементаГ="");
   void УстановитьФорму(РасширяемаяФорма);
   void ПриИзмененииРазмераОкна(ТипСобытия, ШиринаФормы, ВысотаФормы);
   void ПослеОткрытия();
   void ПриДвиженииМыши(Сост, ЛевоМ, ВерхМ);
   void ПриНажатииЛевойКнопки(Сост, ЛевоМ, ВерхМ);
   void ПриОтжатииЛевойКнопки(Сост, ЛевоМ, ВерхМ);
   void Сбросить();
   void Выровнять(ИДЭлемента, Граница, ИДЭлементаЦель, ГраницаЦель, Отступ);
   void Привязать();
};

, и висит обработка "КлассПривязкаЭлементовФормы", прям в редакторе не сравнивал, но кажется то же самое что у меня "Класс_УправлениеФормой"
11 Zhuravlik
 
29.01.13
13:10
Попробовал у себя и как в (5), и как в (10), все-равно ошибка:
ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;
{Документ._ТТН_Реализация.Форма.Модуль(738)}: Поле агрегатного объекта не обнаружено (ПривязкаЭлементов)
12 Ёпрст
 
29.01.13
13:15
(11) просто {} вотнки
13 Ёпрст
 
29.01.13
13:15
в (0)
14 Ёпрст
 
29.01.13
13:15
везде
15 Ёпрст
 
29.01.13
13:15
и ;
16 Ёпрст
 
29.01.13
13:17
класс УправлениеФормой                       = Класс_УправлениеФормой@MD{};
класс УправлениеФормой.Привязки              = Класс_УправлениеФормой_Привязки@MD{};
класс УправлениеФормой.ЭлементПривязки       = Класс_УправлениеФормой_ЭлементПривязки@MD{};
класс УправлениеФормой.Сплиттер              = Класс_УправлениеФормой_Сплиттер@MD{};
класс УправлениеФормой.Гиперссылки           = Класс_УправлениеФормой_Гиперссылки@MD{};
класс УправлениеФормой.ОбязательныеРеквизиты = Класс_УправлениеФормой_ОбязательныеРеквизиты@MD{};
17 Zhuravlik
 
29.01.13
13:22
(16) Делал так, не прокатывает. Уже и через внешний ДевКлс прописал, все-равно... У меня талант наверное(
18 Ёпрст
 
29.01.13
13:23
(17) если как в (16) на вкладке о программе, есть имена зарегистрированных классов ?
19 Zhuravlik
 
29.01.13
13:25
(18) Да.
20 Zhuravlik
 
29.01.13
13:25
Информация о классах:

Всего зарегистрировано классов: 6
Всего объявлено методов: 0

Имена зарегистрированных классов:
УправлениеФормой.Гиперссылки = Класс_УправлениеФормой_Гиперссылки@MD
УправлениеФормой.ОбязательныеРеквизиты = Класс_УправлениеФормой_ОбязательныеРеквизиты@MD
УправлениеФормой.Сплиттер = Класс_УправлениеФормой_Сплиттер@MD
УправлениеФормой.ЭлементПривязки = Класс_УправлениеФормой_ЭлементПривязки@MD
УправлениеФормой = Класс_УправлениеФормой@MD
УправлениеФормой.Привязки = Класс_УправлениеФормой_Привязки@MD
21 Ёпрст
 
29.01.13
13:26
(20) ну, радуйся - классы зарегистрированы.
Чего там гришь у тебя не работает ?
22 Zhuravlik
 
29.01.13
13:28
УправлениеФормой = СоздатьОбъект("РасширениеФормы");  
   ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;

   ЭлементПривязки = ПривязкаЭлементов.Добавить("ТаблПоле_");
   ЭлементПривязки.Установить("Верх", "В", "Форма");
   ЭлементПривязки.Установить("Низ", "В", "Форма");
   ЭлементПривязки.Установить("Лево", "Л", "Форма");
   ЭлементПривязки.Установить("Право", "П", "Форма");

Ругается:
ПривязкаЭлементов = УправлениеФормой.ПривязкаЭлементов;
{Документ._ТТН_Реализация.Форма.Модуль(738)}: Поле агрегатного объекта не обнаружено (ПривязкаЭлементов)

ПривязкаЭлементов объявлена как экспортная, и в другой конфе, где я обьявлял эти классы через внешний ДефКлс, такой же код нормально работает, а здесь - нет.
23 Ёпрст
 
29.01.13
13:29
Ё...
//УправлениеФормой = СоздатьОбъект("РасширениеФормы");  
УправлениеФормой = СоздатьОбъект("УправлениеФормой");
24 Zhuravlik
 
29.01.13
13:30
(23) Да, это я догнал. Только что так сделал, и вот что получилось:
УправлениеФормой.ЭлементПривязки::Конструктор() : Неудачная попытка создания объекта
Верх = СоздатьОбъект("Коллекция");
{Класс_УправлениеФормой_ЭлементПривязки@MD(32) }

УправлениеФормой.Привязки::Добавить(Строка ИмяАтрибута=ТаблПоле_) : УправлениеФормой.ЭлементПривязки::Конструктор() : Неудачная попытка создания объекта
Верх = СоздатьОбъект("Коллекция");
{Класс_УправлениеФормой_ЭлементПривязки@MD(32) }

ЭлементПривязки = СоздатьОбъект("УправлениеФормой.ЭлементПривязки");
{Класс_УправлениеФормой_Привязки@MD(870) }

ЭлементПривязки = ПривязкаЭлементов.Добавить("ТаблПоле_");
{Документ._ТТН_Реализация.Форма.Модуль(740)}: УправлениеФормой.Привязки::Добавить(Строка ИмяАтрибута=ТаблПоле_) : УправлениеФормой.ЭлементПривязки::Конструктор() : Неудачная попытка создания объекта
Верх = СоздатьОбъект("Коллекция");
{Класс_УправлениеФормой_ЭлементПривязки@MD(32) }

ЭлементПривязки = СоздатьОбъект("УправлениеФормой.ЭлементПривязки");
{Класс_УправлениеФормой_Привязки@MD(870) }
25 Zhuravlik
 
29.01.13
13:31
+Там видимо еще нужны классы Объекты V8?
26 Ёпрст
 
29.01.13
13:32
Я без идей откуда ты эти классы взял и каких они версий.
27 Ёпрст
 
29.01.13
13:32
в упправлении формой, должны быть зарегистрированны след. классы:
класс УправлениеФормой                       = УправлениеФормой.ert{};

класс УправлениеФормой.Привязки              = УправлениеФормой.Привязки.ert{};
класс УправлениеФормой.ЭлементПривязки       = УправлениеФормой.ЭлементПривязки.ert{};
класс УправлениеФормой.Сплиттер              = УправлениеФормой.Сплиттер.ert{};

класс УправлениеФормой.Гиперссылки           = УправлениеФормой.Гиперссылки.ert{};

класс УправлениеФормой.ОбязательныеРеквизиты = УправлениеФормой.ОбязательныеРеквизиты.ert{};

класс Коллекция = Коллекция.ert{};
28 Ёпрст
 
29.01.13
13:33
и усё.
29 Zhuravlik
 
29.01.13
13:34
c 1CPP откуда-то оттуда... С очень подробной документацией. Сейчас попробую по-аналогии их вставить в конфу.
класс Коллекция = Коллекция.ert{}; - вот его-то у меня и нет) надо посмотреть в внешних...
30 ADirks
 
29.01.13
13:35
(29) ну ты даёшь, я и то знаю откуда ты их взял :))
http://www.1cpp.ru/forum/YaBB.pl?num=1278756052
31 Ёпрст
 
29.01.13
13:37
(30) %:))

там не одна реализация.. аутор же их писал-переписывал хрен знает сколько раз
..
32 Zhuravlik
 
29.01.13
13:40
(27) - (30) Все получилось))) У меня в конфе где это все прописано была папка Обекты_V8.
Спасибо огромное)
Основная теорема систематики: Новые системы плодят новые проблемы.