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