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