Почему элементы формы из расширения видны обычному пользователю, но отсутствуют у Администратора в 1С?

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

При работе с механизмами расширений в платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с крайне странной на первый взгляд ситуацией. Вы добавляете новые элементы (кнопки, реквизиты, колонки) на форму существующего документа или справочника через расширение конфигурации. Вы заходите в информационную базу под обычным пользователем — всё отображается идеально и работает без нареканий. Но стоит вам авторизоваться под учетной записью Администратора (или пользователя с полными правами), как все ваши доработки бесследно исчезают. Более того, при попытке программного обращения к новым элементам система выдает ошибку о том, что элемент не найден.

Давайте подробно разберем, почему возникает этот парадокс, проанализируем внутренние механизмы платформы и Библиотеки стандартных подсистем (БСП), а также рассмотрим пошаговые сценарии решения этой проблемы.

Причина 1. Парадокс ролей в расширениях конфигурации

Основная и наиболее частая причина такого поведения платформы кроется в логике работы прав доступа в расширениях. Поведение платформы кардинально меняется в зависимости от наличия ролей в самом расширении:

  1. В расширении нет собственных или заимствованных ролей: В этом случае платформа считает, что все созданные в расширении объекты, реквизиты и элементы форм должны быть доступны абсолютно всем пользователям информационной базы. Права на них не ограничиваются.
  2. В расширении создана или заимствована хотя бы одна роль: Как только в расширении появляется хотя бы одна роль (даже если она создана для одного конкретного справочника и не связана с вашим документом), механизм безопасности платформы переключается в строгий режим. Теперь права на все новые объекты и реквизиты расширения необходимо раздавать явно.

Почему в этой ситуации страдает именно Администратор?

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

Решение проблемы с ролями

Для исправления этой ситуации у нас есть два пути решения в зависимости от архитектуры вашего расширения.

Вариант А: Полное удаление ролей из расширения

Если в вашем расширении нет реальной необходимости разграничивать права доступа между пользователями, самым простым и надежным решением будет полное удаление всех ролей (и собственных, и заимствованных) из дерева объектов расширения. Как только расширение будет сохранено без ролей, права автоматически предоставятся всем пользователям, включая Администратора.

Вариант Б: Заимствование роли ПолныеПрава

Если роли в расширении вам все-таки необходимы, выполним следующие шаги:

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

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


// Безопасное обращение к реквизитам формы, добавленным в расширении
Попытка
    Элементы.ГруппаДополнительныхРеквизитов.Видимость = Истина;
    Элементы.НовоеПолеВвода.Доступность = Истина;
Исключение
    // Запишем информацию в журнал регистрации, если у пользователя нет прав на эти элементы
    ЗаписьЖурналаРегистрации(
        "Расширения.ПроверкаДоступа",
        УровеньЖурналаРегистрации.Предупреждение,
        ,
        ,
        "Не удалось настроить видимость элементов расширения: " + ОписаниеОшибки()
    ); КонецПопытки;

Причина 2. Специфика интеграции с Библиотекой стандартных подсистем (БСП)

Если ваша база работает на современной конфигурации (например, Бухгалтерия предприятия 3.0 или ERP), в ней активно используется Библиотека стандартных подсистем. У БСП есть встроенные механизмы контроля и синхронизации ролей пользователей:

Поэтому правильным архитектурным решением для конфигураций на БСП является именно расширение (заимствование) роли ПолныеПрава, а не создание отдельных ролей "для администратора" внутри расширения.

Причина 3. Кэширование пользовательских настроек формы

Еще одна частая причина, из-за которой изменения не видны конкретному пользователю (чаще всего самому разработчику или администратору), — это сохраненные системные настройки отображения формы.

В процессе разработки администратор открывает форму документа СчетНаОплатуПоставщика множество раз. Платформа 1С сохраняет индивидуальные настройки внешнего вида формы (видимость колонок, расположение кнопок, группировки) для каждого пользователя непосредственно в базу данных. При применении расширения сохраненные старые настройки могут "перекрывать" новую структуру формы, делая свежие элементы невидимыми.

Как сбросить кэш настроек формы

Разберем, как очистить сохраненные настройки формы для пользователя Администратор:

  1. Запустим информационную базу под пользователем Администратор в режиме 1С:Предприятие.
  2. Откроем проблемную форму документа (например, Счет на оплату поставщику).
  3. В правом верхнем углу формы нажмем кнопку «Еще» и выберем пункт «Изменить форму...».
  4. В открывшемся окне настроек нажмем кнопку «Еще» (внутри окна настройки) и выберем команду «Установить стандартные настройки».
  5. Нажмем «ОК» для сохранения и перезапустим форму.

Дополнительно рекомендуется выполнить очистку локального кэша платформы на рабочем компьютере разработчика, так как старые метаданные форм могут кэшироваться на уровне файлов операционной системы.

← На главную