1с программное добавление реквизита на управляемую форму шпаргалка

В данной статье описаны примеры программного создания объектов управляемой формы 1С : элементов, команд, реквизитов, а также описание стандартных возможностей для работы с ними.

Contents

  • 1 Введение в управляемая форма 1С реквизиты элементы команды
  • 2 Программное переопределение обработчиков событий формы и элементов формы
  • 3 Программное создание групп формы.
  • 4 Программное добавление команды на форму.
  • 5 Программное создание декораций форм.
  • 6 Программное добавление реквизита на форму.
  • 7 Вывод реквизитов на форму.
  • 8 Вызов процедур при создании на сервере 1С
  • 9 Некоторые советы при программном редактировании формы
  • 10 Полезные ссылки

Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.

Примеры работы с объектом «ДанныеФормыКоллекция» и созданием дин. списка и таблицы значений программно можно будет посмотреть в части 2.

Для запуска обработки в режиме предприятия необходимо наличие объектов «Справочники.Номенклатура», подчиненный ему «Справочники.ХарактеристикиНоменклатуры» и «РегистрыСведений.ЦеныНоменклатуры”.

Программное переопределение обработчиков событий формы и элементов формы

Переопределить обработчики событий формы можно в обработчике «ПриСозданииНаСервере» (кроме самого обрабочика «ПриСозданииНаСервере») или в теле модуля формы в контексте сервера (например, Переопределение событий ПриЧтениинаСервере и ПриСозданииНаСервере).

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтаФорма.УстановитьДействие(“ОбработкаВыбора”, “пр_ОбработкаВыбора”)
КонецПроцедуры

В теле модуля формы:

#Если Сервер Тогда
    ЭтаФорма.УстановитьДействие("ПриСозданииНаСервере", "пр_ПриСозданииНаСервере");
#КонецЕсли

А в новой процедуре нужно добавить вызов основной, если такая процедура есть.

&НаСервере
Процедура пр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПриСозданииНаСервере(Отказ, СтандартнаяОбработка);
КонецПроцедуры

Аналогично можно поступить и с обработчиками элементов формы:

Элементы.Номенклатура.УстановитьДействие(“ПриИзменении”, “пр_НоменклатураПриИзменении”)

Программное создание групп формы.

&НаСервере
Процедура пр_СоздатьГруппы()
    
    ГруппаСтраницы =  Элементы.Добавить("пр_Страницы", Тип("ГруппаФормы"),ЭтаФорма);
    ГруппаСтраницы.Вид = ВидГруппыФормы.Страницы;
    
    НоваяСтраница = Элементы.Добавить("пр_Страница", Тип("ГруппаФормы"),ГруппаСтраницы);
    НоваяСтраница.Вид = ВидГруппыФормы.Страница;
    НоваяСтраница.Заголовок = "Страница 1";
    
    НоваяГруппа = Элементы.Добавить("пр_Группа1", Тип("ГруппаФормы"),НоваяСтраница);
    НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
    НоваяГруппа.Заголовок = "Группа 1";
    
КонецПроцедуры

Доступные виды групп формы:

Программное добавление команды на форму.

Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.

&НаСервере
Процедура пр_СоздатьНовуюКоманду()
    
    //создать новую команду у формы
    НоваяКоманда    		 = Команды.Добавить("пр_Команда1");
    НоваяКоманда.Действие     = "пр_Команда1";
    НоваяКоманда.Картинка     = БиблиотекаКартинок.Облако;
    НоваяКоманда.Отображение = ОтображениеКнопки.Картинка;
    
    //вывести команду в элементы
    ЭлементКоманда    			 = Элементы.Добавить("пр_Команда1", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
    ЭлементКоманда.Заголовок     = "Вывести сообщение";
    ЭлементКоманда.ИмяКоманды     = "пр_Команда1";

    //удалить команду
    //Команды.Удалить(НоваяКоманда);
    
КонецПроцедуры

&НаКлиенте
Процедура пр_Команда1(Команда)
    
    Сообщить("Команда выполнена.");
    
КонецПроцедуры

Программное создание декораций форм.

&НаСервере
Процедура пр_СоздатьДекорацию()
    
    //добавить надпись
    Элемент    			 = Элементы.Добавить("Надпись1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид    		 = ВидДекорацииФормы.Надпись;
    Элемент.Заголовок    	 = "Добавленная надпись";
 
    //для того, чтобы добавить картинку, необходимо выбрать ВидДекорацииФормы.Картинка
    Элемент = Элементы.Добавить("Картинка1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид = ВидДекорацииФормы.Картинка;
    Элемент.Картинка = БиблиотекаКартинок.Бесконечность;  
  
КонецПроцедуры

Программное добавление реквизита на форму.

Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.

&НаСервере
Процедура пр_СоздатьРеквизиты()
    
	// Массив для новых реквизитов
	ДобавляемыеРеквизиты    = Новый Массив;
   	 
	// Опишем ревизиты формы
	Реквизит_Использование = Новый РеквизитФормы("пр_Использование",    Новый ОписаниеТипов("Булево"), "", "Использование");
	Реквизит_Номенклатура = Новый РеквизитФормы("пр_Номенклатура",    Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "", "Номенклатура");
	Реквизит_Характеристика = Новый РеквизитФормы("пр_Характеристика",    Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"), "", "Характеристика");
  	 Реквизит_Количество = Новый РеквизитФормы("пр_Количество",    Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), "", "Количество");
  	 Реквизит_УдалитьКоличество = Новый РеквизитФормы("пр_УдалитьКоличество",    Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), "", "Удалить_Количество");
       //если используется БСП, то можно для определения описания типов использовать функцию
       //ОбщегоНазначения.ОписаниеТипаСтрока(ДлинаСтроки)
       //ОбщегоНазначения.ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено)
       //ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты)
  	 Реквизит_Информация = Новый РеквизитФормы("пр_Информация",    ОбщегоНазначения.ОписаниеТипаСтрока(100), "", "Информация");
    
       // Для наглядности заполним массив после описания реквизитов формы
	ДобавляемыеРеквизиты.Добавить(Реквизит_Использование);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Номенклатура);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Характеристика);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Количество);
	ДобавляемыеРеквизиты.Добавить(Реквизит_УдалитьКоличество);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Информация);
    
	// Добавим новые реквизиты в форму
	ИзменитьРеквизиты(ДобавляемыеРеквизиты);
   	 
КонецПроцедуры

&НаСервере
Процедура пр_УдалитьРеквизиты()
    
	// Массив для удаляемых реквизитов
	УдаляемыеРеквизиты    = Новый Массив;
    
    //указываем путь к удаляемому реквизиту
	УдаляемыеРеквизиты.Добавить("пр_УдалитьКоличество");
    //К добавленным реквизитам нужно обращаться через переменную ЭтаФорма
    
	// Добавим новые реквизиты в форму
	ИзменитьРеквизиты(,УдаляемыеРеквизиты);
   	 
КонецПроцедуры

Вывод реквизитов на форму.

&НаСервере
Процедура пр_ВывестиРеквизитыНаФорму()
    
    НовыйЭлемент = Элементы.Добавить("пр_Использование", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Использование";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеФлажка;
    НовыйЭлемент.ПоложениеЗаголовка    	   = ПоложениеЗаголовкаЭлементаФормы.Право;
    //установим обработчик события элементы
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "пр_ИспользованиеПриИзменении");
    
    НовыйЭлемент = Элементы.Добавить("пр_Номенклатура", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Номенклатура";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеВвода;
    //установить параметр выбора элемента
    НовыйМассив = Новый Массив();
    НовыйПараметр = Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь);
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
	НовыйЭлемент.ПараметрыВыбора = НовыеПараметры;
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "пр_НоменклатураПриИзменении");

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

&НаКлиенте
Процедура пр_ИспользованиеПриИзменении(Элемент)
КонецПроцедуры

Вызов процедур при создании на сервере 1С

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

&НаСервере

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

Некоторые советы при программном редактировании формы

  • Если вы не используете префиксы при создании новых команд и элементов рекомендуется проверять существование создаваемых объектов по имени с помощью метода Найти(), который вернет Неопределено, если объект в коллекции не найден:
    • Элементы.Найти(«пр_Владелец»);
    • Команды.Найти(«пр_НоваяКоманда»);
  • Чтобы проверить уникальность реквизита на форме можно воспользоваться следующей функцией:
&НаКлиентеНаСервереБезКонтекста
// Функция определяет существует ли реквизит у объекта.
//
Функция ЕстьРеквизитОбъекта(мОбъект, ИмяРеквизита)
    
    КлючУникальности   = Новый УникальныйИдентификатор;
    СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
    ЗаполнитьЗначенияСвойств(СтруктураРеквизита, мОбъект);
    Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
    
КонецФункции // ЕстьРеквизитОбъекта()
  • Свойства, методы и коллекции управляемой формы описаны в синтакс-помощнике в разделе «Интерфейс (управляемый)»;
  • Изучите БСП, если она имеется в вашей конфигурации. Например в общем модуле «ОбщегоНазначения» уже описаны функции для создания объекта ОписаниеТипов, необходимого при создании новых реквизитов на форме:
    • ОбщегоНазначения.ОписаниеТипаСтрока(ДлинаСтроки) — Создает объект ОписаниеТипов, содержащий тип Строка;
    • ОбщегоНазначения.ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено) — Создает объект ОписаниеТипов, содержащий тип Число;
    • ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты) — Создает объект ОписаниеТипов, содержащий тип Дата;
    • ОбщегоНазначенияВызовСервера.ЦветСтиля(ИмяЦветаСтиля) — Функция получает цвет стиля по имени элемента стиля;
    • ОбщегоНазначенияВызовСервера.ШрифтСтиля(ИмяШрифтаСтиля) — Функция получает шрифт стиля по имени элемента стиля.

Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:

Полезные ссылки

1. Типовой механизм упрощенного изменения конфигурации в ERP 2.0 и УТ 11
2. Типовой функционал модификации конфигурации линейки ERP-решений (УТ 11, КА 2 и ERP 2)
3. 1С Управляемые Формы. Программное создание таблицы значений и динамического списка (Часть 2)

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

Сейчас форма имеет следующий вид:

После добавления новых элементов она будет иметь вид:

Итак, добавляем реквизиты:

  • ЕдиницаИзмерения, тип СправочникСсылка.ЕдиницыИзмерения;
  • ТекущийОстаток, тип Число.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    #Область ДобавлениеРеквизитовФормы

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новые ревизиты формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        ,
        "Единица измерения"
    );
    РеквизитТекущийОстаток = Новый РеквизитФормы(
        "ТекущийОстаток",
        Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)),
        ,
        "Текущий остаток"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);
    ДобавляемыеРеквизиты.Добавить(РеквизитТекущийОстаток);

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

    #КонецОбласти

    #Область ДобавлениеЭлементовФормы

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

    // Добавляем элементы внутрь новой группы
    НовыйЭлемент = Элементы.Добавить(
        "ЯчейкаХранения",
        Тип("ПолеФормы"),
        НоваяГруппаФормы
    );
    НовыйЭлемент.ПутьКДанным    = "ЕдиницаИзмерения";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

    НовыйЭлемент = Элементы.Добавить(
        "ТекущийОстаток",
        Тип("ПолеФормы"),
        НоваяГруппаФормы
    );
    НовыйЭлемент.ПутьКДанным    = "ТекущийОстаток";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

    #КонецОбласти

    #Область ЗаполнениеДанных

    // Имитируем заполнение данных
    ЭтаФорма.ЕдиницаИзмерения = ПредопределенноеЗначение(
        "Справочник.ЕдиницыИзмерения.Штука"
    );
    ЭтаФорма.ТекущийОстаток = 12;

    #КонецОбласти

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

Для удаления необходимо передать массив реквизитов на удаление в качестве второго параметра метода формы ИзменитьРеквизиты(). Удалять можно только реквизиты, созданные программно.

Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная:

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

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новый ревизит формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        "Объект.Состав",
        "Единица измерения"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);

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

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

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

Важно понимать, что данные добавленного реквизита сохраняться в ИБ не будут.

Поиск:
1С:Предприятие • Изменить реквизиты • При создании на сервере • Реквизит • Управляемая форма • Элемент формы

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

Содержание

В качестве примера будем использовать пустую обработку, в которой есть реквизит НашНужныйРеквизит. Все манипуляции по добавлению, удалению элементов и реквизитов формы производятся на сервере, и можно использовать как предопределенные обработчики, например &ПриСозданииНаСервере, так и любые другие методы с директивой &НаСервере. В нашем примере будем все элементы добавлять при помощи отдельных команд, для большей наглядности.

Как в 1С программно добавить элемент формы?

Вывести существующий реквизит

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

&НаКлиенте
Процедура ДобавитьПолеВвода(Команда)
	ДобавитьПолеВводаНаСервере();
КонецПроцедуры

Создать новый реквизит формы

&НаСервере
Процедура ДобавитьРеквизитФлажокНаСервере()
	
	Если Элементы.Найти("НужныйФлажок") = Неопределено Тогда
		НовыеРеквизиты = Новый Массив;
		//Обратите внимание, типизация реквизитов использует именно Описание типов, а не отдельный тип.
		ТипРеквизита = Новый ОписаниеТипов("Булево");
		РеквизитФлажок = Новый РеквизитФормы("НужныйФлажок", ТипРеквизита, "", "Нужный флажок");
		НовыеРеквизиты.Добавить(РеквизитФлажок);		
		ИзменитьРеквизиты(НовыеРеквизиты);		
		НовыйЭлемент = Элементы.Добавить("НужныйФлажок", Тип("ПолеФормы"));
		НовыйЭлемент.ПутьКДанным = "НужныйФлажок";
		НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьРеквизитФлажок(Команда)
	ДобавитьРеквизитФлажокНаСервере();
КонецПроцедуры

Вставить элемент формы в нужное место

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

&НаКлиенте
Процедура ВставитьКартинкуПередФлажком(Команда)
	ВставитьКартинкуПередФлажкомНаСервере();
КонецПроцедуры

Как программно добавить команду в управляемую форму?

&НаСервере
Процедура ДобавитьПрограммноКомандуНаСервере()
	Если Элементы.Найти("КнопкаПредупредить") = Неопределено Тогда
		//Добавим команду в коллекцию команд
		КомандаПредупредить = Команды.Добавить("Предупредить");
		КомандаПредупредить.Заголовок = "Предупредить!";
		КомандаПредупредить.Действие = "КомандаПредупредить";
		
		КнопкаКоманды = Элементы.Добавить("КнопкаПредупредить", Тип("КнопкаФормы"));
		КнопкаКоманды.ИмяКоманды = "Предупредить";
		// Если помещаем просто на форму, то вид - обычная кнопка
		// Если укажем контейнер с типом Командная панель, то вид - КнопкаКоманднойПанели
		КнопкаКоманды.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПрограммноКоманду(Команда)
	ДобавитьПрограммноКомандуНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура КомандаПредупредить(Команда)
	ПоказатьПредупреждение(, "А ведь я предупреждал!");
КонецПроцедуры

Как добавить таблицу на форму программно?

На программном добавлении таблицы на форму стоит остановиться отдельно. Порядок действий следующий:
Сперва создаем основной реквизит – саму таблицу формы. Далее – создаем подчиненные реквизиты-колонки. В простейшем случае колонки можно создать, перебрав колонки таблицы значений – источника. Далее следует создать связанные с только что созданными реквизитами элементы формы – также сперва основной элемент – таблицу, а затем подчиненные элементы – колонки.

&НаСервере
Процедура СоздатьТаблицуЗначенийНаСервере()
	
	Если Элементы.Найти("ДинамическаяТаблицаЭлемент") <> Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	НовыеРеквизиты = Новый Массив;
	
	ТипРеквизита = Новый ОписаниеТипов("ТаблицаЗначений");
	РеквизитТЗ = Новый РеквизитФормы("ДинамическаяТаблица", ТипРеквизита, "", "Динамическая таблица");
	
	НовыеРеквизиты.Добавить(РеквизитТЗ);
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Отметка", Новый ОписаниеТипов("Булево"));
	ТЗ.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
	ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка"));
	
	Для Каждого КолонкаТаблицы Из ТЗ.Колонки Цикл
		НовыеРеквизиты.Добавить(Новый РеквизитФормы(КолонкаТаблицы.Имя, КолонкаТаблицы.ТипЗначения, "ДинамическаяТаблица"));
	КонецЦикла;	
	ИзменитьРеквизиты(НовыеРеквизиты);
	
	ЭлементТаблица = Элементы.Добавить("ДинамическаяТаблицаЭлемент", Тип("ТаблицаФормы"));
	ЭлементТаблица.ПутьКДанным = "ДинамическаяТаблица";
	ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
	
	Для Каждого КолонкаТаблицы Из ТЗ.Колонки Цикл
		ЭлементКолонкаТаблицы = Элементы.Добавить(КолонкаТаблицы.Имя, Тип("ПолеФормы"), ЭлементТаблица);
		Если КолонкаТаблицы.ТипЗначения.СодержитТип(Тип("Булево")) Тогда
			ЭлементКолонкаТаблицы.Вид = ВидПоляФормы.ПолеФлажка;
		Иначе
			ЭлементКолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода;
		КонецЕсли;
		ЭлементКолонкаТаблицы.ПутьКДанным = "ДинамическаяТаблица." + КолонкаТаблицы.Имя;
	КонецЦикла;	

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

&НаКлиенте
Процедура СоздатьТаблицуЗначений(Команда)
	СоздатьТаблицуЗначенийНаСервере();
КонецПроцедуры

Как программно установить обработчик события элемента формы?

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

&НаКлиенте
Процедура ДобавитьОбработчикДействия(Команда)
	ДобавитьОбработчикДействияНаСервере();
КонецПроцедуры

// Количество и порядок параметров метода-обработчика должны соответствовать событию
// Подробнее см. синтакс-помощник
&НаКлиенте
Процедура ПриИзмененииТаблицы(Элемент)
	Сообщить("Изменили колонку " + Элемент.ТекущийЭлемент.Имя); 	
КонецПроцедуры

При разработке решений возникает необходимость добавить реквизит формы, состав и типы которых зависят от данных. Например при построении динамических деревьев с периодами, или при выводе контактной информации и т.д.

Содержание

  1. Задача
  2. Добавление реквизитов
  3. Удаление реквизитов
  4. Добавление реквизита табличной части
  5. Добавление реквизита с типом Произвольный

1С. Программное добавление и удаление реквизитов формы

Задача

Для наглядности разберем простой пример, в котором можно было обойтись только элементами формы, но мы создадим и реквизиты.

Есть некая конфигурация, в форме элемента справочника Номенклатура необходимо программно создавать реквизиты формы и элементы к ним:

  • ЯчейкаХранения, тип СправочникСсылка.ЯчейкиХранения;
  • ТекущийОстаток, тип Число.

Элементы объединить в группу с горизонтальной группировкой. На текущий момент форма имеет следующий вид:

добавить реквизит формы

Добавление реквизитов

В обработчике формы ПриСозданииНаСервере() опишем код, который разбивается на 3 этапа:

  1. Описание и создание реквизитов формы;
  2. Создание элементов формы, объединение в группу без отображения;
  3. Заполнение данных.

Ниже приведен готовый код, код снабжен комментариями и разбит на области для лучшего понимания

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    #Область ДобавлениеРеквизитовФормы
	
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты	= Новый Массив;
		
    // Опишем ревизиты формы
    Реквизит_ЯчейкаХранения = Новый РеквизитФормы("ЯчейкаХранения",	Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"),	, "Ячейка");
    Реквизит_ТекущийОстаток = Новый РеквизитФормы("ТекущийОстаток",	Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), , "Остаток");
	
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_ЯчейкаХранения);
    ДобавляемыеРеквизиты.Добавить(Реквизит_ТекущийОстаток);
	
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
    #КонецОбласти
	
    #Область ДобавлениеЭлементовФормы
	
    // Горизонтальная группа без отображения на форме
    ГруппаФормы = Элементы.Добавить("Группа_СправочныеДанные", Тип("ГруппаФормы"));
    ГруппаФормы.Вид                        = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаФормы.Отображение                = ОтображениеОбычнойГруппы.Нет;
    ГруппаФормы.ОтображатьЗаголовок        = Ложь;
    ГруппаФормы.Группировка                = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
	
    // Элементы
	
    НовыйЭлемент = Элементы.Добавить("ЯчейкаХранения", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ЯчейкаХранения";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    НовыйЭлемент = Элементы.Добавить("ТекущийОстаток", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ТекущийОстаток";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    #КонецОбласти
	
    #Область ЗаполнениеДанных
	
    //  Имитируем заполнение данных
    ЭтаФорма.ЯчейкаХранения = ПредопределенноеЗначение("Справочник.ЯчейкиХранения.Распаковка");
    ЭтаФорма.ТекущийОстаток = 12;
	
    #КонецОбласти
	
КонецПроцедуры

После выполнения приведенного кода форма будет выглядеть так:

реквизит программно

Удаление реквизитов

Для удаления необходимо передать массив содержащий пути реквизитов в качестве второго параметра метода формы ИзменитьРеквизиты().

    #Область УдалениеРеквизитовФормы
	
    // Массив удаляемых реквизитов
    УдаляемыеРеквизиты = Новый Массив;
    УдаляемыеРеквизиты.Добавить("ЯчейкаХранения");
    УдаляемыеРеквизиты.Добавить("ТекущийОстаток");
	
    // Удалим реквизиты формы
    ИзменитьРеквизиты( , УдаляемыеРеквизиты);
	
    #КонецОбласти

Внимание!!! Удалять можно только реквизиты созданные программно.

Добавление реквизита табличной части

Добавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект.<ИмяТабличнойЧасти>». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.

    #Область ДобавлениеРеквизитаТЧ
	
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив;
	
    // Опишем ревизиты формы
    Реквизит_Ячейка = Новый РеквизитФормы("Ячейка",	Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"),	"Объект.Комплектация", "Ячейка");
	
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_Ячейка);
	
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
    НовыйЭлемент = Элементы.Добавить("КомплектацияЯчейка", Тип("ПолеФормы"), Элементы.Комплектация);
    НовыйЭлемент.ПутьКДанным    = "Объект.Комплектация.Ячейка";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
	
    #КонецОбласти

Добавление реквизита с типом Произвольный

В одной из задач стало необходимо добавить реквизит с типом Произвольный, но ни СП, ни интернеты ответа не дали. В итоге через несколько попыток было найдено решение

ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит", Новый ОписаниеТипов("")));

Внимание!!! Данные добавленного реквизита сохраняться в ИБ не будут.

Содержание:

1.     Добавление реквизитов на 1С управляемые формы

2.     Добавить элементы на форму

3.     Установка событий элементам формы

При адаптации типовых конфигураций 1С часто приходится изменять в 1С 8 управляемые формы. Такие адаптации сложно потом поддерживать при обновлении. Такие изменения приходится вносить вручную заново, перепроверять корректность изменений в каждом обновлении. И если таких изменений множество, то каждое обновление может представлять серьезные трудозатраты. Есть несколько решений, которые позволяют упростить поддержку и обновление измененных систем 1С. Одно из них – это программное изменение форм.

Вести разработку в таком режиме получается немного дольше, чем прямое изменение формы. Но это хорошо компенсируется в дальнейшем при поддержке и обновлении системы 1С. На самом деле ничего сложного в этом нет, просто нужно привыкнуть.

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

Изменения, которые нужны в форме изначально, стоит вносить в процедуре «ПриСозданииНаСервере». Для внесения изменений лучше сделать отдельную процедуру (например, «ДополнитьФормуПрограммно») и вызывать ее в штатной процедуре «ПриСозданииНаСервере», тогда изменение типовой формы 1С будет выглядеть одной строчкой:

Согласитесь, обновить доработанную таким образом форму значительно проще, чем вручную сравнивать и вносить все изменения формы при каждом обновлении. Конечно при сильном изменении типовой формы, могут потребоваться правки в процедуре программного дополнения формы, но такие случаи довольно редкие.

Рассмотрим на примерах, как делать доработку управляемых форм кодом в 1С. 

1.          Добавление реквизитов на 1С управляемые формы

Если в ходе разработки изменилась типовая структура объекта, то добавлять новые реквизиты на форму нет необходимости. Эти реквизиты будут доступны по пути «Объект.НовыйРеквизит».

Но иногда нужно добавить реквизит формы. Например, «Статус документа», который будет заполняться из специального регистра при открытии формы. Добавить новые реквизиты можно, открыв в 1С табличный документ, управляемая форма изменяется через команду ИзменитьРеквизиты(«ДобавляемыеРеквизиты», «УдаляемыеРеквизиты»).

«ДобавляемыеРеквизиты» и «УдаляемыеРеквизиты» – это массивы с элементами типа «РеквизитФормы». Тут все просто – «Добавляемые» добавляются, «Удаляемые» – удаляются.

Функция РеквизитФормы («ИмяРеквизита», «ТипРеквизита», «Путь», «Заголовок») создает объект типа «РеквизитФормы».

Тут важно понимать, что «ИмяРеквизита» содержит имя без точек. То есть имя без пути реквизита. Если нужно добавить реквизит, например, табличной части объекта, то уже в реквизите «Путь» указать путь к ТЧ реквизита – «Объект.Товары». «ТипРеквизита» задается через объект «ОписаниеТипов».

В примере ниже я добавил два реквизита «ЭтоСборка» для табличной части «Товары» у объекта и «СтатусОбработки» на форму документа. 

2.          Добавить элементы на форму

После программного добавления реквизитов на форму нужно добавить элементы на форму или изменить свойства текущих.

Для добавления новых элементов на форму есть два метода:

­-Элементы.Добавить(«ИмяЭлемента», «ТипЭлемента», «Родитель»).

-Элементы.Вставить(«ИмяЭлемента», «ТипЭлемента», «Родитель», «Элемент»).

«ИмяЭлемента» должно быть уникальным в рамках элементов формы. Лучше добавить какой-то префикс, чтобы не возникло пересечений с типовыми элементами формы.

«ТипЭлемента» имеет не так уж много вариантов. Это «ПолеФормы», «ГруппаФормы», «ДекорацияФормы», «КнопкаФормы» и «ТаблицаФормы». Все остальные свойства назначаются через «Вид» создаваемого элемента. Например, поле с типом булево лучше сделать «флажком», установив вид элементу «ВидПоляФормы.ПолеФлажка».

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

Для функции вставить дополнительно указывается «Элемент», перед которым будет вставлен новый создаваемый элемент формы.

На примере ниже я добавил статус обработку в форму шапки и поле флажка в табличную часть товары перед единицей измерения. 

3.          Установка событий элементам формы

Ну и конечно же, мало просто добавить элементы на форму. Система должна реагировать на действия пользователя с формой.

Для установки событий элементам нужно использовать процедуру УстановитьДействие («ИмяСобытия», «Действие»).

«ИмяСобытия» — имя события, которое нужно отработать. Например, «ПриИзменении», «Очистка», «ОбработкаВыбора» и т.п.

«Действие» — процедура отработки события. Самое главное процедура должна содержать параметры необходимые для выполняемого события. Например, процедура «ПриИзменении» должна иметь параметр «Элемент».

Также программно можно задавать прочие доступные свойства новых элементов формы. Например, установить видимость кнопки очистки:

НовыйЭлемент.КнопкаОчистки = Истина;

Получилась вот такая процедура программного заполнения управляемой формы:

Код для копирования:

&НаСервере

Процедура КЛ_ДополнитьФормуПрограммно()

МассивРеквизитовФормы = Новый Массив;

//Новый реквизит Товары.КЛ_ЭтоСборка

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_ЭтоСборка»,

           Новый ОписаниеТипов(«Булево»)

           ,»Объект.Товары»

           ,»Это сборка»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

//Новый реквизит КЛ_СтатусОбработки

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_СтатусОбработки»,

           Новый ОписаниеТипов(«ПеречислениеСсылка.СтатусыДокументовРеализации»)

           ,

           ,»Статус обработки»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

ИзменитьРеквизиты(МассивРеквизитовФормы);

НовыйЭлемент = Элементы.Добавить(«КЛ_СтатусОбработки», Тип(«ПолеФормы»), Элементы.ГруппаШапкаЛевая);

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

НовыйЭлемент.КнопкаОчистки = Истина;

НовыйЭлемент.УстановитьДействие(«ПриИзменении»,»КЛ_ПриИзмененииСтатусаОбработки»);

НовыйЭлемент = Элементы.Вставить(«КЛ_ЭтоСборка», Тип(«ПолеФормы»),Элементы.Товары,Элементы.ТоварыКоличество);

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

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

Специалист компании ООО «Кодерлайн»

Кирилл Карцев.

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

Для добавления реквизитов удобно либо создать процедуру и вызывать ее из обработчика ПриСозданииНаСервере, либо использовать специальный общий модуль РаботаСФормамиПереопределяемый.

Пример добавления реквизитов на форму:

&НаСервере
Процедура ДополнитьЭлементыФормы()

     МассивРеквизитов = Новый Массив;

     РеквизитОткрытаИзОбработкиЛаборатории = Новый РеквизитФормы("ОткрытаИзОбработкиЛаборатории", Новый ОписаниеТипов("Булево"));
     РеквизитРезультат = Новый РеквизитФормы("РезультатАнализа", Новый ОписаниеТипов("Строка"));

     МассивРеквизитов.Добавить(РеквизитОткрытаИзОбработкиЛаборатории);
     МассивРеквизитов.Добавить(РеквизитРезультат);

     ИзменитьРеквизиты(МассивРеквизитов);

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

Пример добавления кнопок и элементов на форму:

&НаСервере
Процедура ДополнитьЭлементыФормы()

    НоваяКоманда = ЭтаФорма.Команды.Добавить("ЗагрузкаДанных");
    НоваяКоманда.Действие = "ЗагрузкаДанных";

    НовыйЭлемент = Элементы.Добавить("ЗагрузитьДанные", Тип("КнопкаФормы"), Элементы.РезультатКОбработкеКоманднаяПанель);
    НовыйЭлемент.ИмяКоманды = "ЗагрузкаДанных";
    НовыйЭлемент.Заголовок = "Загрузка данных";

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

&НаКлиенте
Процедура ЗагрузкаДанных(Команда)

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

Пример указания процедуры-обработчика для событий формы:

&НаСервере
Процедура ДополнитьЭлементыФормы()

    УстановитьДействие("ОбработкаОповещения", "ОбработкаОповещенияФормы");

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

Пример создания поля и добавления процедуры-обработчика для элемента формы:

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

&НаКлиенте
Процедура ИзменениеНазначенияЗаявки(Элемент)
     //Обработчик команды
КонецПроцедуры

Пример программного добавления реквизитов на форме:

МассивРеквизитов = Новый Массив;

//Добавляем три реквизита формы
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьСвязи", Новый ОписаниеТипов("Булево")));
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьРабочуюГруппу", Новый ОписаниеТипов("Булево")));
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьВизы", Новый ОписаниеТипов("Булево")));

//Добавление реквизита в табличную часть "Файлы"
МассивРеквизитов.Добавить(Новый РеквизитФормы("Актуальность", Новый ОписаниеТипов("Булево"), "Файлы", "Актуальность", Истина));

ИзменитьРеквизиты(МассивРеквизитов);

Чтобы вывести реквизиты на форму программно нужно в обработчике «ПриСозданииНаСервере» в форме выполнить следующий алгоритм:

Реквизит должен находится в метаданных.

Листинг кода:


Поле = Элементы.Добавить(«ТестовыйРеквизит», Тип(«ПолеФормы»), Элементы.ГруппаРеквизиты);
//»ТестовыйРеквизит» — Название реквизита (Метаданные)
//Тип(«ПолеФормы») — тип добавляемого объекта
//Элементы.ГруппаРеквизиты — группа куда добавляем наш реквизит
Поле.ПутьКДанным = «Объект.ТестовыйРеквизит»;//Обязательно надо указывать путь к данным, иначе поле не отобразится на форме
Поле.Вид = ВидПоляФормы.ПолеВвода; //Указываем что это поле ввода
//Все свойства созданного элемента «Поле» можно глянуть при отладке, там все как в свойствах

Чтобы вставить нужный нам реквизит перед каким либо уже существующим реквизитом нужно использовать параметр «Вставить()» . Четвертым параметром этого метода и будет являть тот реквизит перед которым мы будем вставлять наш реквизит.

Поле = Элементы.Вставить(«ТестовыйРеквизит», Тип(«ПолеФормы»),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
//Элементы.СтранаПроисхождения — реквизит перед которым вставляем
Поле.ПутьКДанным = «Объект.ТестовыйРеквизит»;
Поле.Вид = ВидПоляФормы.ПолеВвода; 

Программное добавление поля ввода на форму:

Листинг:

//Программное создание реквизита на форме
Массив = Новый Массив;
Массив.Добавить(Новый РеквизитФормы(«Статус», Новый ОписаниеТипов(«Строка»)));
ИзменитьРеквизиты(Массив);  //Изменяем массив содержащий реквизиты формы

//Теперь добавим созданный нам реквизит на форму уже изученным способом программно
Поле = Элементы.Вставить(«Статус», Тип(«ПолеФормы»),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
Поле.ПутьКДанным = «Статус»;
Поле.Вид = ВидПоляФормы.ПолеВвода;

Чтобы подключить событие к созданному полю нужно создать процедуру и подключить ее к полю:

*Процедура команды обязательно должна выполняться в директиве компиляции «&НаКлиенте»

Добавление команды на форму программно: 

НашаКоманда = Команды.Добавить(«НашаКоманда»);
НашаКоманда.Действие = «НашаКомандаПроцедура»;  //Указываем имя процедуры на клиенте 
//которую будет вызывать команда
Кнопка = Элементы.Вставить(«НашаКоманда», Тип(«КнопкаФормы»));
Кнопка.ИмяКоманды = «НашаКоманда»;
Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

Понравилась статья? Поделить с друзьями:
  • 2462222097 личный кабинет ооо сибирская теплосбытовая компания инн
  • 250 тысяч рублей на развитие бизнеса самозанятым самарская область
  • 250000 рублей на открытие бизнеса от государства как получить 2022
  • 3801009466 акционерное общество ангарская нефтехимическая компания
  • 5402 межрайонная ифнс россии 18 по новосибирской области реквизиты