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