Книга знаний

1С:Предприятие / v8 / Объекты конфигурации

v8: Получение списка свойств и событий объекта

К сожалению, в 1С невозможно получить список свойств и событий объекта. Данная статья призвана восполнить этот печальный пробел. Стыдитесь, товарищ Нуралиев. Не все типы объектов я расписал, буду благодарен, если вы допишете и восполните пробелы. Автор статьи: Гений 1С | Редакторы: TormozIT, Camino
Последняя редакция №19 от 01.09.06 | История
URL: http://kb.mista.ru/article.php?id=346

Ключевые слова: элемент управления, событие, свойство


Список функций:
•    п_СписокСвойствЭлементаУправления - получаем список свойств элемента управления в структуру.
•    п_СвойстваЭлементаУправления - получаем список свойств и их значений элемента управления в структуру.
•    п_СписокСобытийЭлементаУправления - получаем список событий элемента управления в структуру.
•    п_СобытияЭлементаУправления- получаем список событий и их значений элемента управления в структуру.

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

Функция п_СвойстваЭлементаУправления(Элемент) Экспорт
    Рез=п_СписокСвойствЭлементаУправления(Элемент);
    ЗаполнитьЗначенияСвойств(Рез, Элемент);
    Возврат Рез;
КонецФункции

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

Функция п_СобытияЭлементаУправления(Элемент) Экспорт
    Рез=п_СписокСобытийЭлементаУправления(Элемент);
    ЗаполнитьЗначенияСвойств(Рез, Элемент);
    Возврат Рез;
КонецФункции


TormozIT
Однажды мне пришлось сохранять отбор. Оказалось, это не так то и просто. Пришлось создавать структуру структур для того, чтобы сымитировать структуру отбора. Вот тут то мне и понадобилась функция, которая бы возвращала контейнер, в котором я бы мог сохранить элемент структуры отбора.
// Получает структуру свойств объекта по имени типа или объекту.
//
// Параметры:
//  пОбъект      - Произвольный - имя типа или сам объект.
//
// Возвращаемое значение:
//               – Структура – свойств.
//
Функция ЛксПолучитьСтруктуруСвойствОбъекта(пОбъект) Экспорт 

    СтруктураСвойств = Новый Структура;
    Если Ложь
        ИЛИ ТипЗнч(пОбъект) = Тип("ЭлементОтбора")
        ИЛИ пОбъект = "ЭлементОтбора"
    Тогда 
        СтруктураСвойств.Вставить("ВидСравнения");
        СтруктураСвойств.Вставить("Значение");
        СтруктураСвойств.Вставить("ЗначениеПо");
        СтруктураСвойств.Вставить("ЗначениеС");
        СтруктураСвойств.Вставить("Имя");
        СтруктураСвойств.Вставить("Использование");
        СтруктураСвойств.Вставить("Представление");
        СтруктураСвойств.Вставить("ПутьКДанным");
        СтруктураСвойств.Вставить("ТипЗначения");
    КонецЕсли;
    Возврат СтруктураСвойств;

КонецФункции // ЛксПолучитьСтруктуруСвойствОбъекта()


// Получает копию универсального объекта Отбор.
//
// Параметры:
//  пОтбор  – Отбор – копируемый отбор.
//
// Возвращаемое значение:
//               – Структура – копия отбора.
//
Функция ЛксПолучитьКопиюОтбора(пОтбор)

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


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика