В начало

Программное создание реквизита в расширении

 

            Поскольку основная конфигурация «не видит через точку» объекты и свойства из расширения, а тем более объекты одного расширения из другого, может оказаться актуальной задача по программному созданию реквизитов и вызова форм с их использованием.

            Создадим два тестовых расширения: «Расширение 1» и «Расширение 2». В этих расширениях создадим справочники: «Сотрудники» и «КонтактнаяИнформация».

 

Рис. Справочники « Расширение 1» и «Расширение 2»

 

            Если мы захотим создать в «Расширении 1» новый реквизит с типом «СправочникСсылка. ТелефонныйСправочник», то конфигуратор не позволит нам это сделать. Потому что, для того чтобы видеть объекты основной конфигурации в расширении их надо добавить в данное конкретное расширение.

 

 

Рис. Доступные типы данных из расширения (слева) и
добавленный из основной конфигурации «ТелефонныйСправочник» (справа)

 

            Но можно ли обойтись без добавления объектов основной конфигурации в расширение? Давайте это проверим. Удалим только что добавленный «ТелефонныйСправочник» из «Расширения 1», а вместо него в модуль формы элемента справочника «Расш1_Сотрудники» добавим обработчик «ПриСозданииНаСервере». Создадим новый реквизит программно, при этом укажем нужный нам тип «Телефонного справочника» из основной конфигурации.

 

Листинг. Модуль формы элемента справочника «Расш1_Сотрудники»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            ДобавляемыеРеквизиты = Новый Массив;

            НовыйРеквизит = Новый РеквизитФормы("Телефон", Новый ОписаниеТипов("СправочникСсылка.ТелефонныйСправочник"));         

            ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

            ИзменитьРеквизиты(ДобавляемыеРеквизиты);

           

            Элемент = Элементы.Добавить("БезРазницыКакНазывать", Тип("ПолеФормы"));

            Элемент.Вид = ВидПоляФормы.ПолеВвода;          

            Элемент.ПутьКДанным = "Телефон";          

КонецПроцедуры

 

            Немного подготовимся, предварительно заполнив «Телефонный справочник» случайными значениями.

Рис. Телефонный справочник

 

            Запускаем режим отладки. Создаем элемент справочника «Сотрудники (Из расширения 1)», выбираем поле с телефоном и видим, что обращаемся в телефонному справочнику, находящемуся в основной конфигурации. При этом мы его не добавляли в расширение.

Рис. Проверка программного создания реквизита

 

            Еще усложним задачу: проверим, как будет работать создание реквизита из одного расширения с типом «СправочникСсылка.Расш2_КонтактнаяИнформация» из другого расширения. Немного меняем код, изменяя тип создаваемого реквизита.

 

Листинг. Модуль формы элемента справочника «Расш1_Сотрудники»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            ДобавляемыеРеквизиты = Новый Массив;

            НовыйРеквизит = Новый РеквизитФормы("Телефон", Новый ОписаниеТипов("СправочникСсылка.Расш2_КонтактнаяИнформация"));        

            ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

            ИзменитьРеквизиты(ДобавляемыеРеквизиты);

           

            Элемент = Элементы.Добавить("БезРазницыКакНазывать", Тип("ПолеФормы"));

            Элемент.Вид = ВидПоляФормы.ПолеВвода;          

            Элемент.ПутьКДанным = "Телефон";           

КонецПроцедуры

           

Запускаем пользовательский режим и тестируем.

Рис. Проверка программного создания реквизита

 

            Таким образом, мы создали программным методом реквизит «Телефон» и выбрали значение из другого расширения.

Конечно, в структуре  справочника «Расш1_Сотрудники» физически нет реквизита «Телефон» и поэтому для его сохранения нужно уже будет как то изгаляться, создавать некий реквизит с примитивным типом или еще что, х/з?