Автоматизация бизнеса

Установка, настройка, внедрение и сопровождение любых конфигураций на платформе 1С:Предприятие. 

e-mail: info@programmist1c.ru

Минимальный объем работ от 50 000 рублей
  •   Удаленный админ
  •   Карта сайта
  •   Контакты


  • Поиск
     

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

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


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


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

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


    TormozIT
    Однажды мне пришлось сохранять отбор. Оказалось, это не так то и просто. Пришлось создавать структуру структур для того, чтобы сымитировать структуру отбора. Вот тут то мне и понадобилась функция, которая бы возвращала контейнер, в котором я бы мог сохранить элемент структуры отбора.
    // Получает структуру свойств объекта по имени типа или объекту.
    //
    // Параметры:
    //  пОбъект      - Произвольный - имя типа или сам объект.
    //
    // Возвращаемое значение:
    //               – Структура – свойств.
    //
    Функция ЛксПолучитьСтруктуруСвойствОбъекта(пОбъект) Экспорт 
    
        СтруктураСвойств = Новый Структура;
        Если Ложь
            ИЛИ ТипЗнч(пОбъект) = Тип("ЭлементОтбора")
            ИЛИ пОбъект = "ЭлементОтбора"
        Тогда 
            СтруктураСвойств.Вставить("ВидСравнения");
            СтруктураСвойств.Вставить("Значение");
            СтруктураСвойств.Вставить("ЗначениеПо");
            СтруктураСвойств.Вставить("ЗначениеС");
            СтруктураСвойств.Вставить("Имя");
            СтруктураСвойств.Вставить("Использование");
            СтруктураСвойств.Вставить("Представление");
            СтруктураСвойств.Вставить("ПутьКДанным");
            СтруктураСвойств.Вставить("ТипЗначения");
        КонецЕсли;
        Возврат СтруктураСвойств;
    
    КонецФункции // ЛксПолучитьСтруктуруСвойствОбъекта()
    
    
    // Получает копию универсального объекта Отбор.
    //
    // Параметры:
    //  пОтбор  – Отбор – копируемый отбор.
    //
    // Возвращаемое значение:
    //               – Структура – копия отбора.
    //
    Функция ЛксПолучитьКопиюОтбора(пОтбор)
    
        КопияОтбора = Новый Структура;
        Для Каждого ЭлементОтбора Из пОтбор Цикл
            ЭлементКопииОтбора = ЛксПолучитьСтруктуруСвойствОбъекта(ЭлементОтбора);
            ЗаполнитьЗначенияСвойств(ЭлементКопииОтбора, ЭлементОтбора);
            КопияОтбора.Вставить(ЭлементОтбора.Имя, ЭлементКопииОтбора);
        КонецЦикла;    
        Возврат КопияОтбора;
        
    КонецФункции // ЛксПолучитьКопиюОтбора()
    
    
    21.02.18 | 10:31


    30.11.16 | 20:25


    28.11.16 | 09:22


    26.11.16 | 08:19


    22.11.16 | 20:17


    19.11.16 | 10:14


    18.11.16 | 20:09




    Внедрение 1С Автоматизация 1С Доработка 1С Сопровождение 1С Обслуживание 1С Программирование 1С 8 Hастройка 1С Карта сайта Контакты