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

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

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

Исправление ошибки «Недопустимое значение» в пути к данным

Рассмотрим код, который часто пытаются использовать для добавления таблицы:


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

В этом примере возникает ошибка, так как в свойство ПутьКДанным передается сам объект данных (табличная часть), а не строка с указанием пути к нему. Платформа 1С требует, чтобы ПутьКДанным задавался исключительно строкой. Правильный вариант будет выглядеть так:


ТаблицаФормы.ПутьКДанным = "Объект.Работы";

Почему добавленная страница не отображается?

После исправления ошибки с путем к данным вы можете столкнуться с ситуацией: ошибок при выполнении кода больше нет, но страница в документе так и не появляется. Выясним причину.

В управляемых формах 1С платформа оптимизирует отрисовку интерфейса. Если таблица формы пустая, то есть в ней программно не создана ни одна видимая колонка, платформа считает, что выводить пользователю нечего. Следовательно, таблица скрывается. А так как таблица — это единственный элемент на добавленной нами странице, то платформа автоматически скрывает и саму страницу (группу). Именно поэтому, если на страницу добавить обычную декорацию (надпись), она сразу становится видимой.

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

Чтобы наша таблица и страница появились на форме, давайте программно создадим колонки. Делается это по аналогии с добавлением самой таблицы, только в качестве родителя мы указываем переменную нашей созданной таблицы, а в качестве типа — ПолеФормы.

Разберем алгоритм по шагам:

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

Посмотрим на пример кода:


// Добавление колонки Номенклатура
КолонкаНоменклатура = Элементы.Добавить("Расш1_Номенклатура", Тип("ПолеФормы"), ТаблицаФормы);
КолонкаНоменклатура.Вид = ВидПоляФормы.ПолеВвода;
КолонкаНоменклатура.ПутьКДанным = "Объект.Работы.Номенклатура";
КолонкаНоменклатура.Заголовок = "Номенклатура";

// Добавление колонки Сумма
КолонкаСумма = Элементы.Добавить("Расш1_Сумма", Тип("ПолеФормы"), ТаблицаФормы);
КолонкаСумма.Вид = ВидПоляФормы.ПолеВвода;
КолонкаСумма.ПутьКДанным = "Объект.Работы.Сумма";
КолонкаСумма.Заголовок = "Сумма";

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

Вывод итогов: Путь к данным заголовка

Часто бизнес-задача требует, чтобы количество строк или итоговая сумма выводились прямо в заголовке вкладки (страницы). У элемента типа ГруппаФормы с видом Страница есть специальное свойство ПутьКДаннымЗаголовка.

Здесь важно помнить один технический нюанс: 1С автоматически создает виртуальные поля итогов для табличных частей. Если в табличной части есть колонка "Сумма", у нее автоматически генерируется свойство "ИтогСумма". Чтобы вывести итог по колонке в заголовок, нам нужно присвоить этому свойству строку с полным путем к виртуальному полю:


Страница.ПутьКДаннымЗаголовка = "Объект.Работы.ИтогСумма";

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

Вывод итогов в подвал таблицы

Если нам необходимо продублировать итог еще и в подвале самой таблицы (внизу), мы должны явно включить отображение подвала и указать путь к данным для конкретной колонки. Посмотрим, как это сделать программно:


// Включаем подвал для всей таблицы
ТаблицаФормы.ПоложениеПодвала = ПоложениеПодвалаТаблицыФормы.Внизу;

// Указываем данные для подвала конкретной колонки
КолонкаСумма.ПутьКДаннымПодвала = "Объект.Работы.ИтогСумма";

Рекомендации при разработке в расширениях

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

Вместо имен вида "Страница10" или "МояТаблица" используйте "Расш1_СтраницаДопРабот". Это гарантирует отсутствие конфликтов при обновлениях типовой конфигурации, если разработчики фирмы "1С" решат добавить на форму элемент с таким же простым названием.

← На главную