Имя: Пароль:
1C
1С v8
1с8 как проверить есть ли у элемента формы событие?
0 VitaliyTokarev
 
18.11.11
10:10
Есть необходимость автоматически проверять есть ли события у элементов формы. По хорошему, хочу всё занести в ТЗ: Элемент формы, реквизит (если привязан), событие (ссылка на процедуру)
Кто-нибудь сталкивался?
1 Скимен
 
18.11.11
10:16
проверить скриптом или щелкая мышью в окне?
2 vmv
 
18.11.11
10:22
хлопотно это, но возможно
3 VitaliyTokarev
 
18.11.11
12:14
(1) Скриптом
(2) Это понятно, что хлопотно... А вот как - я пока не нашёл. Только зная имя можно вытянуть. А без него?
4 vmv
 
18.11.11
12:24
(3) вам нужно знать и где-то хранить все ВИДЫ обработчиков событий элементов формы.

НО

для каждого элемента формы будет свой набор событий, например для ТабличногоПоля он свой, для флажка свой, для строки свой, для списка свой и т.д. Если вам удасца собрать в некую структуру все варианты событий, например в виде

<ТипЭлемента - СтруктураИменСобытий>
ЭФТабличноеПоле - СтруктураИменСобытийТабличноеПоле
ЭФФлаг - СтруктураИменСобытийФлаг
ЭФПолеВвода - СтруктураИменСобытийПолеВвода
.....

то дело в шляпе, так как далее все просто

Функция ПолучитьДействияТабличногоПоля(ТабличноеПоле) Экспорт
       
   мСобытия = Новый Массив;
   
   мСобытия.Добавить("Выбор");
   мСобытия.Добавить("ВыборЗначения");
   мСобытия.Добавить("НачалоПеретаскивания");
     мСобытия.Добавить("ОбработкаВыбора");
   мСобытия.Добавить("ОбработкаЗаписиНовогоОбъекта");
   мСобытия.Добавить("ОкончаниеПеретаскивания");
   мСобытия.Добавить("ПередНачаломДобавления");
   мСобытия.Добавить("ПередНачаломИзменения");
   мСобытия.Добавить("ПередОкончаниемРедактирования");
   мСобытия.Добавить("ПередУдалением");
   мСобытия.Добавить("Перетаскивание");
   мСобытия.Добавить("ПослеУдаления");
   мСобытия.Добавить("ПриАктивизацииКолонки");
   мСобытия.Добавить("ПриАктивизацииСтроки");
   мСобытия.Добавить("ПриАктивизацииЯчейки");
     мСобытия.Добавить("ПриВыводеСтроки");
   мСобытия.Добавить("ПриИзмененииФлажка");
   мСобытия.Добавить("ПриНачалеРедактирования");
   мСобытия.Добавить("ПриОкончанииРедактирования");
   мСобытия.Добавить("ПриПолученииДанных");
   мСобытия.Добавить("ПриСменеТекущегоРодителя");
   мСобытия.Добавить("ПроверкаПеретаскивания");
   
   ДействияТП = Новый Соответствие;
   
   Для Каждого ИмяСобытия Из мСобытия Цикл
       
       ИмяОбработчикаСобытия = "";
       Попытка
           ИмяОбработчикаСобытия = Строка(ТабличноеПоле.ПолучитьДействие(ИмяСобытия));    
       Исключение
           // Источник ТабличногоПоля не предполагает такого события  
       КонецПопытки;
       
       Если ПустаяСтрока(ИмяОбработчикаСобытия) Тогда
           Продолжить;
       КонецЕсли;
       
       ДействияТП.Вставить(ИмяСобытия, ИмяОбработчикаСобытия);    
       
   КонецЦикла;
   
   Возврат ДействияТП;
   
КонецФункции


все остальное от лукавого - инфа 100%)
5 VitaliyTokarev
 
18.11.11
13:55
(4) "так как далее все просто" - интересно )))
Мне нужно именно "СтруктураИменСобытийТабличноеПоле" или "СтруктураИменСобытийФлаг" или "СтруктураИменСобытийПолеВвода".
Как и куда сложить - это уже не проблема.
Проблема в получении всех имён реально существующих событий, а не гипотетически существующих. Ну или ссылки на обработчики... Без разницы - не суть важно.
6 VitaliyTokarev
 
18.11.11
13:55
(4) к (5) - ой, код не увидел ))))
7 VitaliyTokarev
 
18.11.11
13:59
(4) Спасибо!
В общем, всё-равно руками все события нужно сначала где-то описать...
Независимо от того, куда вы едете — это в гору и против ветра!