v8: Получение списка свойств и событий объектаК сожалению, в 1С невозможно получить список свойств и событий объекта.
Данная статья призвана восполнить этот печальный пробел. Стыдитесь, товарищ Нуралиев.
Не все типы объектов я расписал, буду благодарен, если вы допишете и восполните пробелы.
| | Автор статьи: Гений 1С | Редакторы: TormozIT, Camino Последняя редакция №19 от 01.09.06 | История URL: http://kb.mista.ru/article.php?id=346 | |
Ключевые слова: элемент управления, событие, свойство
Список функций:
• п_СписокСвойствЭлементаУправления - получаем список свойств элемента управления в структуру.
• п_СвойстваЭлементаУправления - получаем список свойств и их значений элемента управления в структуру.
• п_СписокСобытийЭлементаУправления - получаем список событий элемента управления в структуру.
• п_СобытияЭлементаУправления- получаем список событий и их значений элемента управления в структуру.
Функция п_СписокСвойствЭлементаУправления(Элемент) Экспорт
Перем Рез;
Если ТипЗнч(Элемент)=Тип("Кнопка") Тогда
Рез=Новый Структура("ВертикальноеПоложение,ГоризонтальноеПоложение,Доступность,Заголовок,Картинка,Кнопки,МногострочныйРежим,Подсказка,ПоложениеКартинки,РазмерКартинки,РежимМеню,СочетаниеКлавиш,ЦветРамки,ЦветТекстаКнопки,ЦветФонаКнопки,Шрифт");
ИначеЕсли ТипЗнч(Элемент)=Тип("КоманднаяПанель") Тогда
Рез=Новый Структура("АвтоЗаполнение,Вспомогательная,ВыравниваниеКнопок,Доступность,Кнопки,Ориентация,Подсказка,ПрозрачныйФон,Рамка,ЦветРамки,ЦветТекстаКнопки,ЦветФона,ЦветФонаКнопки,Шрифт");
ИначеЕсли ТипЗнч(Элемент)=Тип("Надпись") Тогда
Рез=Новый Структура("БегущаяСтрока,ВертикальноеПоложение,ВыделятьОтрицательные,ГиперСсылка,ГоризонтальноеПоложение,Доступность,Заголовок,Картинка,Подсказка,ПоложениеКартинкиНадписи,ПрозрачныйФон,РазмерКартинки,Рамка,СочетаниеКлавиш,Формат,ЦветРамки,ЦветТекста,ЦветФона,Шрифт");
ИначеЕсли ТипЗнч(Элемент)=Тип("Панель") Тогда
Рез=Новый Структура("АвтоПорядокОбхода,Доступность,Картинка,ОтображениеЗакладок,Подсказка,ПорядокОбхода,ПрозрачныйФон,РазмерКартинки,Рамка,РаспределятьПоСтраницам,РежимПрокручиваемыхСтраниц,Страницы,ТекущаяСтраница,ЦветРамки,ЦветТекста,ЦветФона,Шрифт");
ИначеЕсли ТипЗнч(Элемент)=Тип("Переключатель") Тогда
Рез=Новый Структура("ВертикальноеПоложение,ВыбираемоеЗначение,ГоризонтальноеПоложение,Доступность,Заголовок,Подсказка,ПоложениеЗаголовка,ПрозрачныйФон,Рамка,ЦветРамки,ЦветТекста,ЦветТекстаПоля,ЦветФона,ЦветФонаПоля,Шрифт");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеВвода") Тогда
Рез=Новый Структура("АвтоВыборНезаполненного,АвтоОтметкаНезаполненного,АвтоПереносСтрок,ВертикальноеПоложение,ВыбиратьТип,ВыборНезаполненного,ВыделенныйТекст,ВыделятьОтрицательные,ВысотаСпискаВыбора,ГоризонтальноеПоложение,Доступность,Картинка,КартинкаКнопкиВыбора,КнопкаВыбора,КнопкаОткрытия,КнопкаОчистки,КнопкаРегулирования,КнопкаСпискаВыбора,МаксимальноеЗначение,Маска,МинимальноеЗначение,МногострочныйРежим,ОграничениеТипа,ОтметкаНезаполненного,Подсказка,ПрозрачныйФон,Рамка,РасширенноеРедактирование,РедактированиеТекста,РежимВыбораИзСписка,РежимВыбораНезаполненного,РежимПароля,СочетаниеКлавиш,СписокВыбора,ТолькоПросмотр,Формат,ЦветРамки,ЦветТекстаКнопки,ЦветТекстаПоля,ЦветФонаКнопки,ЦветФонаПоля,ШиринаСпискаВыбора,Шрифт,ЭлементСвязиПоТипу");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеСписка") Тогда
Рез=Новый Структура("Доступность,ОтображатьКартинку,ОтображатьПометку,Подсказка,Рамка,ТекущаяСтрока,ТолькоПросмотр,ЦветРамки,ЦветТекстаПоля,ЦветФонаПоля");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеТабличногоДокумента") Тогда
Рез=Новый Структура("ВертикальнаяПолосаПрокрутки,ГоризонтальнаяПолосаПрокрутки,Доступность,ОтображатьВыделение,РазрешитьНачалоПеретаскивания,РазрешитьПеретаскивание,Рамка,ЦветРамки");
ИначеЕсли ТипЗнч(Элемент)=Тип("РамкаГруппы") Тогда
Рез=Новый Структура("Доступность,Заголовок,Подсказка,ПрозрачныйФон,Рамка,ЦветРамки,ЦветТекста,ЦветФона,Шрифт");
Иначе
Рез=Новый Структура();
КонецЕсли;
Рез.Вставить("Видимость");
Рез.Вставить("ИзменяетДанные");
Рез.Вставить("ПервыйВГруппе");
Рез.Вставить("ПропускатьПриВводе");
Рез.Вставить("ТипЗначения");
//Опасные значения
Рез.Вставить("Данные");
Рез.Вставить("Значение");
Рез.Вставить("Имя");
Рез.Вставить("КнопкаПоУмолчанию");
Рез.Вставить("ИсточникДействий");
Рез.Вставить("КонтекстноеМеню");
Рез.Вставить("Лево");
Рез.Вставить("Высота");
Рез.Вставить("Верх");
Рез.Вставить("ТипЗначения");
Рез.Вставить("Подсказка");
Рез.Вставить("ПорядокОбхода");
Рез.Вставить("ПорядокОтображения");
Рез.Вставить("ПрозрачныйФон");
Рез.Вставить("Рамка");
Рез.Вставить("Свертка");
Рез.Вставить("Ширина");
Возврат Рез;
КонецФункции
Функция п_СвойстваЭлементаУправления(Элемент) Экспорт
Рез=п_СписокСвойствЭлементаУправления(Элемент);
ЗаполнитьЗначенияСвойств(Рез, Элемент);
Возврат Рез;
КонецФункции
Функция п_СписокСобытийЭлементаУправления(Элемент) Экспорт
Перем Рез;
Если ТипЗнч(Элемент)=Тип("Кнопка") Тогда
Рез=Новый Структура("Нажатие");
ИначеЕсли ТипЗнч(Элемент)=Тип("КоманднаяПанель") Тогда
Рез=Новый Структура("");
ИначеЕсли ТипЗнч(Элемент)=Тип("Надпись") Тогда
Рез=Новый Структура("Нажатие");
ИначеЕсли ТипЗнч(Элемент)=Тип("Панель") Тогда
Рез=Новый Структура("ПриСменеСтраницы");
ИначеЕсли ТипЗнч(Элемент)=Тип("Переключатель") Тогда
Рез=Новый Структура("ПриИзменении");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеВвода") Тогда
Рез=Новый Структура("АвтоПодборТекста,НачалоВыбора,НачалоВыбораИзСписка,ОбработкаВыбора,ОкончаниеВводаТекста,Открытие,Очистка,ПриИзменении,Регулирование");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеСписка") Тогда
Рез=Новый Структура("Выбор,ПриАктивизацииСтроки,ПриИзмененииФлажка");
ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеТабличногоДокумента") Тогда
Рез=Новый Структура("Выбор,НачалоПеретаскивания,ОбработкаРасшифровки,ОкончаниеПеретаскивания,Перетаскивание,ПриАктивизацииОбласти,ПриИзмененииСодержимогоОбласти,ПроверкаПеретаскивания");
ИначеЕсли ТипЗнч(Элемент)=Тип("РамкаГруппы") Тогда
Рез=Новый Структура("");
Иначе
Рез=Новый Структура();
КонецЕсли;
Возврат Рез;
КонецФункции
Функция п_СобытияЭлементаУправления(Элемент) Экспорт
Рез=п_СписокСобытийЭлементаУправления(Элемент);
ЗаполнитьЗначенияСвойств(Рез, Элемент);
Возврат Рез;
КонецФункции
TormozIT
Однажды мне пришлось сохранять отбор. Оказалось, это не так то и просто. Пришлось создавать структуру структур для того, чтобы сымитировать структуру отбора. Вот тут то мне и понадобилась функция, которая бы возвращала контейнер, в котором я бы мог сохранить элемент структуры отбора.
// Получает структуру свойств объекта по имени типа или объекту.
//
// Параметры:
// пОбъект - Произвольный - имя типа или сам объект.
//
// Возвращаемое значение:
// – Структура – свойств.
//
Функция ЛксПолучитьСтруктуруСвойствОбъекта(пОбъект) Экспорт
СтруктураСвойств = Новый Структура;
Если Ложь
ИЛИ ТипЗнч(пОбъект) = Тип("ЭлементОтбора")
ИЛИ пОбъект = "ЭлементОтбора"
Тогда
СтруктураСвойств.Вставить("ВидСравнения");
СтруктураСвойств.Вставить("Значение");
СтруктураСвойств.Вставить("ЗначениеПо");
СтруктураСвойств.Вставить("ЗначениеС");
СтруктураСвойств.Вставить("Имя");
СтруктураСвойств.Вставить("Использование");
СтруктураСвойств.Вставить("Представление");
СтруктураСвойств.Вставить("ПутьКДанным");
СтруктураСвойств.Вставить("ТипЗначения");
КонецЕсли;
Возврат СтруктураСвойств;
КонецФункции // ЛксПолучитьСтруктуруСвойствОбъекта()
// Получает копию универсального объекта Отбор.
//
// Параметры:
// пОтбор – Отбор – копируемый отбор.
//
// Возвращаемое значение:
// – Структура – копия отбора.
//
Функция ЛксПолучитьКопиюОтбора(пОтбор)
КопияОтбора = Новый Структура;
Для Каждого ЭлементОтбора Из пОтбор Цикл
ЭлементКопииОтбора = ЛксПолучитьСтруктуруСвойствОбъекта(ЭлементОтбора);
ЗаполнитьЗначенияСвойств(ЭлементКопииОтбора, ЭлементОтбора);
КопияОтбора.Вставить(ЭлементОтбора.Имя, ЭлементКопииОтбора);
КонецЦикла;
Возврат КопияОтбора;
КонецФункции // ЛксПолучитьКопиюОтбора()
|