Как вывести реквизит справочника в документ в 1С

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

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

Постановка задачи и анализ ситуации

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

Метод 1. Отображение «через точку» на управляемой форме

Если мы используем Управляемые формы, то самый простой способ вывести данные — это механизм вытягивания реквизитов через ссылку. Этот метод не требует написания кода и идеально подходит, если нам нужно просто видеть значение на экране без необходимости его редактирования в самом документе.

Разберем этот процесс по шагам:

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

Важный момент: Платформа автоматически создаст элемент формы, путь к данным которого будет выглядеть как Объект.Договор.СуммаПлан. Это поле будет автоматически обновляться каждый раз, когда пользователь выбирает другой договор в документе.

Метод 2. Использование настройки «Изменить форму» пользователем

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

  1. В режиме «1С:Предприятие» открыть нужный документ.
  2. Нажать кнопку Ещё в верхней части формы и выбрать пункт Изменить форму.
  3. В появившемся окне найти поле Договор.
  4. Нажать кнопку Добавить поля.
  5. В открывшемся списке реквизитов договора поставить галочку напротив поля СуммаПлан и нажать ОК.

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

Метод 3. Программное заполнение реквизита (событие ПриИзменении)

Рассмотрим случай, когда нам нужно не просто видеть сумму, а хранить её в документе. Это критически важно для финансового учета. Если мы просто выведем сумму «через точку», то при изменении суммы в справочнике Договоры она изменится «задним числом» и во всех старых документах. Чтобы зафиксировать сумму на момент создания документа, нам понадобится отдельный реквизит документа Сумма (тип Число).

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

Проанализируем пример кода:


&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
    // Вызываем серверную процедуру для получения данных, 
    // так как напрямую через точку на клиенте обращаться к ссылке нельзя
    ЗаполнитьСуммуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСуммуНаСервере()
    // Обращаемся к реквизиту договора через точку
    // Объект.Договор — это ссылка на справочник
    Если ЗначениеЗаполнено(Объект.Договор) Тогда
        Объект.Сумма = Объект.Договор.СуммаПлан;
    Иначе
        Объект.Сумма = 0;
    КонецЕсли;
КонецПроцедуры

Этот код гарантирует, что при выборе договора сумма будет «подтянута» из справочника и записана в документ. Теперь, даже если в будущем сумма в договоре изменится, в документе останется то значение, которое было актуально на дату его создания.

Метод 4. Оптимизация производительности и БСП

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

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


&НаСервере
Процедура ЗаполнитьСуммуОптимизировано()
    // Используем БСП для быстрого получения одного реквизита
    Объект.Сумма = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "СуммаПлан");
КонецПроцедуры

Этот метод выполняет точечный SQL-запрос к базе данных, выбирая только числовое поле суммы, что значительно повышает производительность при массовой обработке документов.

Архитектурный итог: Видеть или Хранить?

Подведем итог нашему исследованию. Выбор метода зависит от бизнес-задачи:

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

← На главную