При разработке на обычных формах часто возникает задача отобразить в колонке списка документов данные, которые не хранятся непосредственно в таблице документа, а принадлежат связанному справочнику Контрагенты. Давайте разберем, как реализовать это грамотно и эффективно.
Важно помнить, что в обычных формах табличное поле, отображающее список документов, работает через динамический список или выборку. Пытаться записывать данные напрямую в ДанныеСтроки во время прорисовки — это распространенная ошибка, приводящая к ошибке «Поле объекта недоступно для записи».
Для «рисования» данных на лету в табличном поле существует событие ПриПолученииДанных. Оно позволяет нам вмешаться в процесс формирования внешнего вида каждой строки, которую видит пользователь.
Этот способ позволяет выводить любые данные, не меняя структуру запроса источника данных. Рассмотрим шаги для реализации:
ПриПолученииДанных и создайте для него обработчик.ОформленияСтрок.Рассмотрим пример кода, который выводит значение реквизита контрагента в колонку с именем ДопКолонка:
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
// Получаем ссылку на документ из данных строки
ТекущийДокумент = ОформлениеСтроки.ДанныеСтроки.Ссылка;
// Получаем значение нужного нам реквизита контрагента
ЗначениеРеквизита = ТекущийДокумент.Контрагент.ВашРеквизит;
// Устанавливаем текст в ячейку колонки
ОформлениеСтроки.Ячейки.ДопКолонка.Текст = ЗначениеРеквизита;
КонецЦикла;
КонецПроцедуры
Важное примечание: Обратите внимание, что мы обращаемся к ОформлениеСтроки.Ячейки.ИмяКолонки.Текст. Именно свойство Текст отвечает за то, что пользователь увидит на экране. Использование этого метода не сохраняет данные в базу, а лишь отображает их для пользователя.
Хотя первый метод прост в реализации, он может приводить к замедлению работы формы при больших объемах данных, так как для каждой строки списка 1С выполняет обращение к базе данных (проблема N+1 запросов). Если производительность важна, рекомендуется изменить запрос динамического списка:
Данные (или Запрос в настройках источника).ЛЕВОЕ СОЕДИНЕНИЕ с таблицей справочника Контрагенты.Данные укажите имя поля из запроса.Такой подход является профессиональным стандартом, так как данные подтягиваются одним общим запросом к базе данных, что делает интерфейс отзывчивым даже при работе с тысячами документов.
Если вы не видите ПриПолученииДанных в выпадающем списке процедур, это не значит, что его нет. В платформе 1С события, для которых не написан код, скрыты из быстрого списка. Чтобы активировать событие:
ПриПолученииДанных нажмите кнопку с лупой или просто введите имя процедуры, чтобы платформа создала ее автоматически.Теперь вы обладаете инструментами для вывода любых данных в списки документов. Рекомендуем выбирать первый метод для быстрых правок, а второй — для высоконагруженных систем.