Как вывести информационную колонку в табличную часть управляемой формы без изменения структуры данных?

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

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

Основные подходы к решению

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

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

Разберем процесс по этапам, чтобы добиться чистого и предсказуемого результата.

  1. Создание реквизита формы: В дереве реквизитов формы находим наш объект (например, Объект.Товары). Нажимаем правой кнопкой мыши и выбираем «Добавить». Указываем имя нового реквизита, например ПроцентОтклонения, и задаем соответствующий тип данных.
  2. Вывод на форму: Переходим на вкладку «Элементы» формы. Находим нужную табличную часть и добавляем новый элемент управления — колонку. В свойстве «ПутьКДанным» указываем созданный нами реквизит Объект.Товары.ПроцентОтклонения.
  3. Программное заполнение данных: Так как этот реквизит не хранится в базе, его нужно заполнять при каждом открытии или чтении формы.

Организация заполнения и жизненный цикл данных

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

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


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ЗаполнитьСправочнуюИнформацию();
КонецПроцедуры

2. Обработка новых документов: Поскольку событие ПриЧтенииНаСервере не вызывается для новых, еще не записанных документов, обязательно продублируйте вызов процедуры в ПриСозданииНаСервере.

3. Актуализация при записи: Помните, что при выполнении записи документа динамически добавленные данные могут очищаться или требовать пересчета. Используйте события ПередЗаписьюНаСервере для сохранения текущего состояния, если это критично, и ПослеЗаписиНаСервере для повторного наполнения данными.

Управление актуальностью информации

Если данные в колонке зависят от других реквизитов (например, при изменении номенклатуры в строке ТЧ), нам необходимо настроить механизм обновления:

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

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

  1. Создаем серверную функцию, которая принимает всю коллекцию строк табличной части.
  2. Выполняем один запрос к регистру сведений с использованием временной таблицы или массива номенклатур (конструкция ГДЕ Номенклатура В (&МассивНоменклатур)).
  3. Полученные данные выгружаем в таблицу значений или структуру.
  4. Обходим строки ТЧ формы и заполняем данные, используя соответствие (Соответствие) для быстрого поиска нужной записи.

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

← На главную