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

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

Содержание

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

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

Задача

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как программно добавить на УФ реквизита с типом Структура?

↓ [XLife,
13.03.14 — 10:52]

Я
   toypaul

13.03.14 — 10:31

Вроде можно создать (в конфигураторе) сначала поле с типом Произвольный и потом присвоить туда Структуру. Только как программно создать такой реквизит? Что передать в Новый ОписаниеТипов?

  

Партнерская программа EFSOL Oblako

   toypaul

1 — 13.03.14 — 10:32

Не понимаю кстати почему ТЗ,СЗ можно создавать, а Структуру нет.

   XLife

2 — 13.03.14 — 10:33

чем тз не нравится?

   Fedor-1971

3 — 13.03.14 — 10:35

(0) и как она должна выглядеть на форме?

   a_alenkin

4 — 13.03.14 — 10:35

А зачем создавать программно реквизит?

чем не устраивает переменная формы?

   toypaul

5 — 13.03.14 — 10:36

(2) я не спрашиваю про обходные варианты.

(3) але, гараж? я написал, что мне ее отображать на форме надо?

   butterbean

6 — 13.03.14 — 10:36

вот ведь, я и не знал, что можно реквизиты формы программно создавать

   toypaul

7 — 13.03.14 — 10:37

(4) какая еще переменная формы. але, вы с какой планеты?

   XLife

8 — 13.03.14 — 10:38

(7) сам але… у тебя тема как называется?

   toypaul

9 — 13.03.14 — 10:41

(8) это что — конкурс тупых вопросов что ли?

я конкретный вопрос задал вроде.

   XLife

10 — 13.03.14 — 10:43

(9) ты пока лидируешь…

еще раз спрошу: что ты написал в названии темы?

   toypaul

11 — 13.03.14 — 10:44

ЗначенияПоУмолчаниюТЧ = Новый РеквизитФормы(«ЗначенияПоУмолчаниюТЧ»,Новый ОписаниеТипов(«Произвольный»),»»,»ЗначенияПоУмолчаниюТЧ»,Ложь);

ЭтаФорма.ЗначенияПоУмолчаниюТЧ = Новый Структура;

вместо Произволный что написать?

   toypaul

12 — 13.03.14 — 10:44

(10) ты если в УФ не рубишь, зачем лезешь. в названии темы и в сообщении написано все корректно.

   XLife

13 — 13.03.14 — 10:47

(12) я смотрю у тебя рубильник на полную пашет… http://www.forum.mista.ru/index.php?user_id=2399

   butterbean

14 — 13.03.14 — 10:48

(11) имхо не взлетит, т.к. интерактивно тоже не дает создавать с типом Структура

   vmv

15 — 13.03.14 — 10:48

проще создать ключевой параметр формы. В предлагаемых типах все будет видно что и как.

а путь тс — выбор извращенца конеш

   toypaul

16 — 13.03.14 — 10:50

(14) интерактивно, я написал как можно сделать. сначала создаем Произвольный, потом пихаем туда Структуру.

(15) ты это зачем написал?

   toypaul

17 — 13.03.14 — 10:52

(13) ты сюда зачем залез? свои темы почитай — если тебе нечем заняться, изучай новости.

   vmv

18 — 13.03.14 — 10:54

предлагаю оставить гения в гордом одиночестве, пока

   butterbean

19 — 13.03.14 — 10:55

(16) а если просто Новый ОписаниеТипов()??

   Maxus43

Модератор

20 — 13.03.14 — 10:56

Мир, Дружба, Жвачка!

   toypaul

21 — 13.03.14 — 10:58

(19) это была последняя мысль, передем тем как написать на форум :)

проверил — работает.

спасибо.

   butterbean

22 — 13.03.14 — 11:01

(21) ты бы сразу просто написал, что тебе произвольное описаниеТипов, ответ был бы пораньше :-)

  

toypaul

23 — 13.03.14 — 11:03

(22) в сообщении ровно это и написано.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поиск:
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)

Файлы материала
Описание

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

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

Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.

Способ отражение в позиции штатного расписания

Создадим расширение и выполним следующую последовательность действий:

  1. Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”

добавление реквизита АВ_СпособОтражения в расширение

2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_СпособОтражения»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы);

//Вместо Добавить() можно использовать метод Вставить()

//в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент.

//ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»));

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»;

//ЭлементФормы.МногострочныйРежим = Истина;

//ЭлементФормы.Высота = 3;

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Образец расширения для скачивания в начале описания.

Программное добавление реквизита в табличную часть формы

Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.

Результат спецоценки условий труда с  колонкой спецжиры

Добавление реквизита в табличную часть

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда

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

ИмяЭлемента = «АВ_ЕстьСпецжиры»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(«Спецжиры», Тип(«ПолеФормы»), Форма.Элементы.РабочиеМеста);        

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

ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»;

//ЭлементФормы.ТолькоПросмотр = Истина;

КонецЕсли;

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

КонецЕсли;

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

В результате получим табличную часть с новой колонкой.

Программное добавление табличной части на форму

Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.

Табличная часть добавленная через расширение

Добавление табличной части на форму

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_ВредныеФакторы»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда   

ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы);  

ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»;

ЭлементФормы = Форма.Элементы.Добавить(«ВредныйФактор», Тип(«ПолеФормы»), ЭлементФормыТаблица);

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»;    

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Связь реквизитов формы с элементами формы

Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

// Массив для новых реквизитов

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

// Опишем ревизиты формы

Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»);

// Заполним массив после описания реквизитов формы

ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто);

// Добавим новые реквизиты в форму

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

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

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

...

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

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

Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто;

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


Расширения, Типовые приемы, Шаблоны и заготовки

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

Содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 ////--> Начало добавления | All4CF.ru | 26.05.2015 00:54
Если ЭтоНовый() Тогда дс=Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); КонецЕсли;
//Надпись и поле ввода
ЭлементНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), "НадписьДСПроект", Истина,);
ЭлементНадпись.Заголовок =  "ДС Проекты:";
ЭлементНадпись.Лево = 15; ЭлементНадпись.Верх = 450;
ЭлементНадпись.Высота = 19;
ЭлементНадпись.Ширина = 80;
ЭлементНадпись.ЦветФона = ЦветаСтиля.ЦветФонаКнопки;
ЭлементНадпись.ЦветТекста = ЦветаСтиля.ЦветРамки;

ЭлементКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), "ДСАвтоПодбор", Истина);
ЭлементКнопка.Заголовок = "Подбор ДС";
ЭлементКнопка.Верх = ЭлементНадпись.Верх;
ЭлементКнопка.Лево = 100;
ЭлементКнопка.Высота = ЭлементНадпись.Высота;
ЭлементКнопка.Ширина = 35;
ЭлементКнопка.УстановитьДействие("Нажатие", Новый Действие("ДСОткрытие"));

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

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

//Доп настройки
ЭлементПолеВвода.КнопкаОчистки = Ложь;
//ЭлементПолеВвода.ВыборПоВладельцу = Справочники.Контрагенты.НайтиПоКоду("000000249"); //Бургер

//Добавим обработчик
ЭлементПолеВвода.УстановитьДействие("ОкончаниеВводаТекста", Новый Действие("ДСОкончаниеВводаТекста")); 

// установка привязок
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
//ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
//ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
//--> Конец добавления | All4CF.ru | 26.05.2015 00:54  

Понравилась статья? Поделить с друзьями:
  • Как продвигать бизнес аккаунт в инстаграм самостоятельно с нуля
  • Как проехать до цито приорова в москве общественным транспортом
  • Как проехать зайцем на встречу счастью зиверт скачать бесплатно
  • Как проехать к ксении петербуржской в санкт петербурге на метро
  • Как проехать к мощам матроны московской в москве на метро адрес