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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При программной настройке интерфейса управляемой формы разработчики часто сталкиваются с ошибкой «Недопустимое значение параметров» при вызове метода Элементы.Добавить(). Рассмотрим подробно, почему возникает эта проблема, как правильно генерировать группы элементов на управляемой форме и как решить сопутствующую задачу по динамическому выводу изображений.

Анализ причины ошибки при создании группы

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


ГруппаДляКнопок = Элементы.Добавить("ГруппаДляКнопок" + Строка(КоличествоГрупп), Тип("ОбычнаяГруппаФормы"), РодительскаяГруппа);

При выполнении данной строки платформа 1С:Предприятие генерирует исключение. Выясним причину этого поведения:

  1. В объектной модели управляемых форм отсутствует тип ОбычнаяГруппаФормы. Все контейнеры формы (обычные группы, страницы, панель страниц, командные панели) описываются универсальным типом ГруппаФормы.
  2. Конкретный вид контейнера на управляемой форме определяется не его типом, а свойством Вид, которому присваивается значение системного перечисления ВидГруппыФормы (например, ВидГруппыФормы.ОбычнаяГруппа или ВидГруппыФормы.Страницы).
  3. Дополнительно при конкатенации строк во избежание явных или неявных ошибок приведения типов рекомендуется приводить числовые счетчики к строковому типу через функцию Строка() или СокрЛП().

Пошаговое решение для программного создания группы

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

  1. При вызове метода Элементы.Добавить() укажем в качестве второго параметра универсальный тип Тип("ГруппаФормы").
  2. Сразу после создания элемента установим необходимое значение свойства Вид.

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


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

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

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

Проанализируем следующую задачу, которая часто возникает при создании динамических интерфейсов подбора: как отобразить картинку товара на кнопке или отдельном элементе управляемой формы?

Платформа 1С накладывает ограничение: свойство Картинка у объектов КнопкаФормы и КомандаФормы может принимать только предопределенные изображения из библиотеки картинки конфигурации (БиблиотекаКартинок). Назначить произвольную картинку из файла или хранилища напрямую объекту кнопки нельзя.

Для обхода данного ограничения разберем вариант с программным созданием реквизита и элемента с видом ПолеКартинки.

Создание динамического поля картинки

Чтобы вывести динамическое изображение (например, фото номенклатуры), разберем следующий алгоритм:

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

Рассмотрим пример реализации:


// 1. Формируем имя и описание нового реквизита
ИмяРеквизита = "АдресКартинки_" + СокрЛП(КодТовара);
РеквизитКнопки = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка"));

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

// 3. Записываем адрес временного хранилища или навигационную ссылку в реквизит
ЭтаФорма[ИмяРеквизита] = АдресКартинкиВоВременномХранилище;

// 4. Создаем элемент поля картинки на форме
ИзображениеКнопки = Элементы.Добавить("ИзображениеТовара_" + СокрЛП(КодТовара), Тип("ПолеФормы"), ГруппаКнопки);
ИзображениеКнопки.Вид = ВидПоляФормы.ПолеКартинки;
ИзображениеКнопки.ПутьКДанным = ИмяРеквизита;

// 5. Настраиваем поведение поля под кнопку
ИзображениеКнопки.Гиперссылка = Истина;
ИзображениеКнопки.УстановитьДействие("Нажатие", "ИзображениеТовараНажатие");

Рекомендации по оптимизации производительности

Обратим внимание на важные технические нюансы при массовом создании элементов:

← На главную