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