|
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
|
для понимания
http://www.1cpp.ru/docum/icpp/html/classes.html#id33 |
|||
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.
Спасибо огромное) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |