Как вывести реквизит контрагента в список документов в 1С (Обычные формы)

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

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

Понимание механизма отображения данных

Важно помнить, что в обычных формах табличное поле, отображающее список документов, работает через динамический список или выборку. Пытаться записывать данные напрямую в ДанныеСтроки во время прорисовки — это распространенная ошибка, приводящая к ошибке «Поле объекта недоступно для записи».

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

Метод первый: Использование события ПриПолученииДанных

Этот способ позволяет выводить любые данные, не меняя структуру запроса источника данных. Рассмотрим шаги для реализации:

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

Рассмотрим пример кода, который выводит значение реквизита контрагента в колонку с именем ДопКолонка:


Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        // Получаем ссылку на документ из данных строки
        ТекущийДокумент = ОформлениеСтроки.ДанныеСтроки.Ссылка;
        
        // Получаем значение нужного нам реквизита контрагента
        ЗначениеРеквизита = ТекущийДокумент.Контрагент.ВашРеквизит;
        
        // Устанавливаем текст в ячейку колонки
        ОформлениеСтроки.Ячейки.ДопКолонка.Текст = ЗначениеРеквизита;
    КонецЦикла;
КонецПроцедуры

Важное примечание: Обратите внимание, что мы обращаемся к ОформлениеСтроки.Ячейки.ИмяКолонки.Текст. Именно свойство Текст отвечает за то, что пользователь увидит на экране. Использование этого метода не сохраняет данные в базу, а лишь отображает их для пользователя.

Метод второй: Оптимальный подход через запрос

Хотя первый метод прост в реализации, он может приводить к замедлению работы формы при больших объемах данных, так как для каждой строки списка 1С выполняет обращение к базе данных (проблема N+1 запросов). Если производительность важна, рекомендуется изменить запрос динамического списка:

  1. В свойствах списка найдите свойство Данные (или Запрос в настройках источника).
  2. Добавьте ЛЕВОЕ СОЕДИНЕНИЕ с таблицей справочника Контрагенты.
  3. Включите нужный реквизит контрагента в выборку запроса.
  4. Добавьте новую колонку в табличное поле и в свойстве Данные укажите имя поля из запроса.

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

Что делать, если событие не отображается в списке?

Если вы не видите ПриПолученииДанных в выпадающем списке процедур, это не значит, что его нет. В платформе 1С события, для которых не написан код, скрыты из быстрого списка. Чтобы активировать событие:

Теперь вы обладаете инструментами для вывода любых данных в списки документов. Рекомендуем выбирать первый метод для быстрых правок, а второй — для высоконагруженных систем.

← На главную