🔥 Горящие вакансии
Все статьи

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

Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti

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

Управляемая форма

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

Элементы формы могут быть добавлены непосредственно в конфигураторе на панели редактирования формы, либо в модуле программным образом (с помощью встроенного языка и редактора текстов и модулей).

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

Реквизиты

Реквизит формы — это некоторые данные, которые привязаны к форме, создаются, хранятся, редактируются и отображаются на самой форме. Вне контекста формы существовать не могут. 

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

ПолучитьРеквизиты(<Путь>)

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

Элементы формы

Элементы — свойство формы, содержащее все элементы формы клиентского приложения.

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

Добавление программно

Создание описания реквизита формы

Для создания описания будущего реквизита формы используется следующая конструкция:

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>) 

Параметры:

Параметр

Обязательный

Тип

Описание

Пример

Имя

Да

Строка

Имя реквизита

«СуммаВЮанях»

Тип

Да

ОписаниеТипов

Тип реквизита

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

Путь

Нет

Строка

Путь к создаваемому реквизиту. Не включает имя реквизита.

«» 

или 

«ТаблицаТовары», если реквизит таблицы формы

Заголовок

Нет

Строка

Содержит отображаемый текст реквизита.

«Сумма в Юанях»

СохраняемыеДанные

Нет

Булево

Реквизит содержит сохраняемые данные. Истина – значение будет сохранятся.

Истина

 

Реквизит1 = Новый РеквизитФормы(«СуммаВКопейках», Новый ОписаниеТипов(«Число»), , «Сумма в копейках», Ложь) ;

Реквизит2 = Новый РеквизитФормы(«НовыйКонтрагент», Новый ОписаниеТипов(«СправочникСсылка.Контрагенты»), , «Новый поставщик», Истина) ;

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

РеквизитТаблицаТовары = Новый РеквизитФормы(«ТаблицаТовары», Новый ОписаниеТипов(«ТаблицаЗначений»), , «Товары») ;

РеквизитНоменклатура = Новый РеквизитФормы(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»), РеквизитТаблицаТовары.Имя, «Товар») ;

РеквизитСумма = Новый РеквизитФормы(«Сумма», Новый ОписаниеТипов(«Число»), РеквизитТаблицаТовары.Имя, «Сумма») ;

Добавление реквизитов доступно только на сервере.

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

ИмяРеквизита  = "ДобавляемыйРеквизит_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
ТипРеквизита = Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»);
ЗаголовокРеквизита = «Номенклатура аналога»;

Реквизит3 = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита ,  ЗаголовокРеквизита) ;

Изменить структуру реквизитов формы

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

ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)

ДобавляемыеРеквизиты — Массив, содержащий элементы РеквизитФормы.

УдаляемыеРеквизиты — Массив, содержащий строки, описывающие пути к удаляемым реквизитам.

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

Метод «ИзменитьРеквизиты» также может удалить реквизиты, которые были ранее добавлены этим же методом:

УдаляемыеРеквизиты = Новый Массив;
УдаляемыеРеквизиты.Добавить(«РеквизитТовар»);
ИзменитьРеквизиты(, УдаляемыеРеквизиты);

Таким образом указанным методом можно удалить ненужные и/или добавить новые реквизиты.

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

Сначала происходит удаление реквизитов, затем добавление. 

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

Добавление элемента формы

Следующим действием будет добавление элемента формы с помощью метода «Добавить» свойства формы Элементы:

 Добавить(<Имя>, <ТипЭлемента>, <Родитель>)

Имя — тип Строка, уникальное имя добавляемого элемента, может быть задано как имя реквизита.

ТипЭлемента — тип Тип, указывается тип добавляемого элемента, например Тип(«ПолеФоры») или Тип(«ПолеНадписи»).

Родитель — существующий элемент формы (ГруппаФормы, ТаблицаФормы или Форма), указывается, если необходимо добавляемый элемент расположить внутри какой-либо группы формы или страницы формы, например, Элементы.ГруппаДополнительно.

Добавление элементов формы доступно только на сервере.

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

ЭлементГруппа = Элементы.Добавить(«ГруппаДополнительно», Тип("ГруппаФормы"));
ЭлементГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ЭлГруппа.Заголовок = "Дополнительно";

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

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

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

Для каждого добавляемого элемента дополнительно необходимо заполнить свойство «Вид»:

Тип элемента

Вид

Возможные значения

ПолеФормы

ВидПоляФормы

ПолеВвода

ПолеНадписи

ПолеКартинки

ПолеИндикатора

ПолеФлажка

ГруппаФормы

ВидГруппыФормы

ГруппаКнопок

ГруппаКолонок

ОбычнаяГруппа

Эл.Вид = ВидПоляФормы.ПолеНадписи;

Свойства элементов формы

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

  • Заголовок
  • ШрифтЗаголовка
  • Подсказка
  • РежимРедактирования
  • Доступность
  • ПоложениеЗаголовка
  • ТолькоПросмотр
  • ЦветТекстаЗаголовка

События элемента формы

Также можно для элемента установить привязку события к действию (процедуре модуля формы):

УстановитьДействие(<ИмяСобытия>, <Действие>)

ИмяСобытия – наименование определённого события. Список событий для определённого элемента можно посмотреть в палитре свойств этого элемента.

События элемента формы 1С

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

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

Пример кода

ИмяРеквизита  = "ДобавляемыйРеквизит_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
ТипРеквизита = Новый ОписаниеТипов(«СправочникСсылка.Контрагенты»);
ЗаголовокРеквизита = «Новый поставщик»;

НовыйРеквизит = Новый РеквизитФормы(
ИмяРеквизита, 
ТипРеквизита,
, 
ЗаголовокРеквизита);

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

// Добавляем элементы формы
ЭлементГруппа = Элементы.Добавить(«ГруппаДополнительно», Тип("ГруппаФормы"));
ЭлементГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ЭлементГруппа.Заголовок = "Дополнительно";

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

// Устанавливаем действия на события элемента формы
ЭлементПоставщик.УстановитьДействие(«ПриИзменении», «ПриИзмененииПоставщика»);
ЭлементПоставщик.УстановитьДействие(«НачалоВыбора», «НачалоВыбораПоставщика»);

Данный пример демонстрирует возможности платформы 1С. Для реализации на конкретном проекте рекомендуется модифицировать код для оптимальной работы приложения.

 

Оставить коментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Раз в квартал — дайджест достойный внимания

Вести с полей 1С, кейсы работы с заказчиками и вакансии на удалёнке

Image

Отправить резюме

    Я согласен на обработку персональных данных в соответствии
    со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

    Отправить резюме

      Я согласен на обработку персональных данных в соответствии
      со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

      Pекомендовать друга

        Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


        Выбрать вакансию
        • Ведущий аналитик 1С
        • Программист 1С
        • Консультант-аналитик 1С
        • Проекты для команды специалистов 1С
        • Проекты для специалистов 1С
        • Стажёр-программист 1С
        • Bitrix-разработчик
        Я согласен на обработку персональных данных в соответствии
        со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

        Pекомендовать друга

          Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


          Выбрать вакансию
          • Ведущий аналитик 1С
          • Программист 1С
          • Консультант-аналитик 1С
          • Проекты для команды специалистов 1С
          • Проекты для специалистов 1С
          • Стажёр-программист 1С
          • Bitrix-разработчик
          Я согласен на обработку персональных данных в соответствии
          со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

          Спасибо!

          Мы получили ваше резюме. Менеджер свяжется с вами в течение трех дней

          Горящие вакансии