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