Как вывести дополнительный реквизит на форму документа в 1С:Бухгалтерия 3.0 без изменения конфигурации

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

В практике разработчика и администратора 1С часто возникает задача добавить на форму документа или справочника новое поле для ввода данных. Ситуация осложняется, когда конфигурация находится на поддержке, а использование расширений ограничено версией платформы или политикой обновлений. В данной статье мы рассмотрим, как реализовать вывод поля «Причина списания» в документе Требование-накладная, используя возможности Библиотеки стандартных подсистем (БСП), которые уже интегрированы в 1С:Бухгалтерия предприятия 3.0.

Различие между дополнительными реквизитами и сведениями

Прежде всего, проанализируем фундаментальное различие между двумя механизмами хранения свойств в БСП. Это критически важно для решения задачи автора:

  1. Дополнительные сведения: хранятся в отдельном регистре сведений. Они не отображаются на самой форме объекта напрямую, а доступны через отдельное окно (кнопка «Дополнительные сведения»).
  2. Дополнительные реквизиты: хранятся в специальной табличной части самого объекта (например, документа). Именно они предназначены для отображения непосредственно в интерфейсе формы документа рядом со стандартными полями.

Для нашей задачи — вывода поля «Причина списания» прямо на форму — выберем механизм дополнительных реквизитов.

Настройка в пользовательском режиме (без программирования)

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

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

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

Почему документа может не быть в списке наборов?

Иногда при попытке добавить реквизит пользователь не обнаруживает нужный документ в справочнике НаборыДополнительныхРеквизитовИСведений. Выясним причину этого поведения:

Если объект отсутствует в списке, это означает, что он не включен в состав типов Плана видов характеристик ДополнительныеРеквизитыИСведений. В типовой «1С:Бухгалтерия 3.0» документ Требование-накладная (или РасходМатериалов в новых редакциях) обычно уже включен в этот механизм. Если же вы работаете с кастомным объектом, его необходимо добавить в ПВХ и создать для него запись в справочнике наборов свойств.

Программный механизм работы БСП на форме

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

Имя динамического реквизита формы обычно формируется следующим образом:

ДополнительныйРеквизитЗначение_<ID_свойства_без_тире>

Где ID_свойства — это уникальный идентификатор ссылки из ПВХ ДополнительныеРеквизитыИСведений.

Чтобы программно найти путь к данным этого реквизита, посмотрим на пример кода, который можно использовать в расширении или при доработке формы:


// В процедуре ПриСозданииНаСервере
Для Каждого РеквизитФормы Из ЭтотОбъект.ПолучитьРеквизиты() Цикл
    Если СтрНайти(РеквизитФормы.Имя, "ДополнительныйРеквизитЗначение_") > 0 Тогда
        // Мы нашли динамический реквизит, созданный БСП
        // Теперь можем создать элемент формы и привязать его
        НовыйЭлемент = Элементы.Добавить("ПолеПричинаСписания", Тип("ПолеФормы"), ГруппаНаФорме);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "Объект." + РеквизитФормы.Имя;
    КонецЕсли;
КонецЦикла;

Важный нюанс: в современных версиях БСП данные дополнительных реквизитов часто выносятся не в корень Объект, а в специальную коллекцию на форме. Проанализируем структуру: если на форме есть реквизит СвойстваУправления, то пути к данным будут храниться именно там.

Управление размещением через стандартные группы

Вместо того чтобы вручную вычислять ПутьКДанным, рассмотрим подробнее более элегантный способ управления размещением. БСП ищет на форме контейнеры с определенными именами.

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

Использование программного интерфейса (API) БСП

Если вы реализуете поддержку дополнительных реквизитов в собственном объекте, выясним, какие методы необходимо вызвать. В модуле формы документа должны присутствовать следующие вызовы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Стандартное заполнение и инициализация свойств
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // Обновление значений свойств при перечитывании объекта
    УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Сохранение значений свойств из формы в таблицу объекта
    УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры

Метод УправлениеСвойствами.ПриСозданииНаСервере выполняет всю «магию»: анализирует настройки наборов свойств в пользовательском режиме, создает программные реквизиты формы, привязывает их к табличной части ДополнительныеРеквизиты и размещает элементы управления в интерфейсе.

Подведем итог

Для решения задачи автора в «1С:Бухгалтерия 3.0» выполним следующие действия:

  1. Используем именно Дополнительные реквизиты, так как они созданы для отображения на форме.
  2. Настройку производим в пользовательском режиме через Администрирование — Дополнительные реквизиты.
  3. Если реквизит должен быть в строго определенном месте формы, создаем на форме группу ГруппаДополнительныеРеквизиты (через расширение или в конфигураторе), и система сама «притянет» туда новое поле.
  4. Не пытаемся вручную прописывать ПутьКДанным для элемента, так как БСП генерирует имена реквизитов динамически на основании внутренних идентификаторов (GUID), которые могут измениться при переносе настроек между базами.

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

← На главную