Расширение мешает одному сотруднику: как выключить доработку только для него

· 9 мин

Содержание

Отдельной галочки «отключить расширение для пользователя» в 1С 8.3 нет: расширение подключается ко всей информационной базе, а флажок Активно выключает его сразу у всех. Отключить расширение для одного пользователя можно тремя рабочими способами: не давать ему роли расширения, проверять роль в коде доработки или скрыть добавленные команды в его персональных настройках.

Какой способ подойдёт, зависит от того, что именно делает расширение. Новый отчёт или справочник закрывается ролями за пять минут. Изменённое поведение типового документа ролями не закрыть — тут нужна правка кода расширения. Разберём оба случая и типичные конфликты, из-за которых расширение «не отключается».

Как расширение подключается к базе и почему роли решают не всё

Расширение — это отдельная мини-конфигурация, которую платформа накладывает на основную при старте каждого сеанса. Механизм появился в версии 8.3.6, а в актуальных версиях платформы им пользуются почти все типовые решения.

В расширении бывают объекты двух видов:

  • 🆕 Собственные объекты — новые справочники, документы, отчёты, обработки, общие модули, роли. Доступ к ним регулирует роль, как и в основной конфигурации.
  • 🔁 Заимствованные объекты — типовые формы, модули и объекты, которые расширение изменяет: добавляет кнопку на форму, перехватывает процедуру через &Перед, &После или &Вместо, добавляет реквизит.

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

Ещё одно свойство, о котором часто забывают: права в 1С складываются. Роль расширения может только добавить права, но не отнять те, что выданы ролями основной конфигурации. Поэтому «запрещающую» роль сделать нельзя.

Что делает расширениеМожно закрыть ролямиЧто нужно ещё
Добавляет новый отчёт или обработкуДаНичего
Добавляет новый справочник или документДаПроверить, не выводится ли он на типовых формах
Добавляет кнопку или поле на типовую формуЧастичноУправлять видимостью в коде формы
Перехватывает процедуру типового модуляНетУсловие в коде перехвата
Добавляет реквизит в типовой документНетСкрыть поле на форме по роли

Шаг 1. Выключить расширение целиком, если оно не нужно никому

Иногда задача «отключить для пользователя» на деле означает «расширение сломалось, остальные пока потерпят». Тогда проще снять флажок активности, а не настраивать права.

Где это сделать:

  1. В режиме 1С:Предприятие (типовые конфигурации на БСП). Откройте Администрирование → Печатные формы, отчеты и обработки → Расширения. В списке снимите флажок активности у нужного расширения.
  2. Через стандартную функцию. Главное меню → Функции для технического специалиста → Стандартные → Управление расширениями конфигурации. В старых версиях платформы этот пункт называется Все функции и включается в Сервис → Параметры.
  3. В Конфигураторе. Конфигурация → Расширения конфигурации, флажок в колонке Активно.

После снятия флажка изменения применятся к новым сеансам. Пользователи, которые уже работают, увидят старое поведение до перезапуска программы.

Если после отключения у кого-то остались кнопки расширения — пусть закроет 1С полностью и откроет заново. Принудительно завершать чужие сеансы из консоли кластера можно, но несохранённые документы пользователей при этом пропадут. Делайте это вне рабочего времени или после предупреждения.

В базах с разделением данных (например, в облачных сервисах) у расширения есть ещё свойство «Область действия»: расширение может быть подключено ко всей базе или только к одной области данных. Это позволяет включить доработку одной организации-абоненту, но не отдельному пользователю внутри неё.

В том же списке есть флажок «Безопасный режим». Он не отключает расширение, а ограничивает его: в безопасном режиме код расширения не может работать с файлами, COM-объектами и внешними компонентами. Путать эти два флажка нельзя.

Шаг 2. Отключить расширение для пользователя через роли

Этот способ работает для собственных объектов расширения: новых отчётов, обработок, справочников, разделов меню.

Проверьте свойство «Использовать основные роли для всех пользователей»

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

  • «Основные роли» — роли расширения, которые считаются базовыми.
  • «Использовать основные роли для всех пользователей» — если флажок стоит, эти роли получает каждый пользователь базы, независимо от списка его ролей.

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

Раздайте роль расширения выборочно

Дальше роль выдают только тем, кому доработка нужна.

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) права раздают через профили групп доступа:

  1. Откройте Администрирование → Настройки пользователей и прав → Профили групп доступа.
  2. Создайте копию нужного профиля или новый профиль.
  3. В списке ролей профиля отметьте роль расширения. Роли расширений отображаются в этом же списке.
  4. Включите в группу доступа с этим профилем только тех, кому расширение нужно.

В нетиповой базе без БСП роль назначают напрямую в карточке пользователя: Администрирование → Пользователи в Конфигураторе, вкладка Прочие.

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

Что увидит пользователь без роли

Без роли сотрудник не увидит команды расширения в разделах и не сможет открыть его отчёты и обработки. Если он перейдёт по ссылке на объект расширения, получит сообщение о нарушении прав доступа. Это нормальное поведение, а не ошибка.

Как проверить результат

Настройку прав проверяют не под своей учётной записью, а под тестовым пользователем:

  1. Создайте пользователя Тест_БезРасширения и включите его в ту же группу доступа, что и сотрудника, которому расширение отключаете.
  2. Задайте ему пароль и войдите в базу под ним в отдельном окне.
  3. Пройдите по разделам, куда расширение добавляло команды, и откройте типовые формы, которые оно меняет.
  4. Повторите то же под пользователем с ролью расширения — у него всё должно работать как раньше.

Такая проверка занимает несколько минут и сразу показывает, хватит ли ролей или придётся править код. Тестового пользователя после проверки отключите: снимите в его карточке флажок «Вход в программу разрешён».

Шаг 3. Программно отключить доработку в коде расширения

Если расширение меняет поведение типового объекта, условие придётся добавить в сам код. Практичный приём: завести в расширении отдельную роль-«метку», например Расш1_ИспользоватьДоработку, без прав, и проверять её наличие.

Как завести такую роль:

  1. В Конфигураторе откройте дерево расширения и в ветке Общие → Роли добавьте новую роль.
  2. Права в ней не отмечайте: роль нужна только как признак «доработка включена».
  3. Сохраните расширение, обновите его в базе и добавьте роль в профиль тех, кому доработка нужна.

Перехват процедуры с возвратом к типовому поведению

Для перехвата &Вместо есть удобный ход: если у пользователя нет роли, вызываем типовой код через ПродолжитьВызов() и выходим.

&Вместо("ЗаполнитьТовары")
Процедура Расш1_ЗаполнитьТовары(Документ)

    Если Не РольДоступна("Расш1_ИспользоватьДоработку") Тогда
        ПродолжитьВызов(Документ);
        Возврат;
    КонецЕсли;

    // Доработанный алгоритм заполнения
    Документ.Товары.Очистить();
    // ...

КонецПроцедуры

Для функции то же самое пишется через Возврат ПродолжитьВызов(...). Для перехватов &Перед и &После достаточно обернуть свой код в условие: типовой код выполнится в любом случае.

Скрытие добавленных элементов формы

Кнопки и поля, которые расширение добавило на типовую форму, прячут в обработчике ПриСозданииНаСервере, назначенном в расширении формы с типом вызова «После»:

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

    ЕстьДоступ = РольДоступна("Расш1_ИспользоватьДоработку");
    Элементы.Расш1_ЗаполнитьПоШаблону.Видимость = ЕстьДоступ;
    Элементы.Расш1_ДатаСогласования.Видимость = ЕстьДоступ;

КонецПроцедуры

Тонкости проверки роли

  • ⚠️ Привилегированный режим. Внутри привилегированного режима РольДоступна() возвращает Истина для любой роли. Если перехват вызывается из такого кода, условие не сработает.
  • 👤 Полные права. Администратор с ролью ПолныеПрава не получает автоматически вашу роль-метку. В БСП для проверки удобнее функция Пользователи.РолиДоступны(): она учитывает полные права.
  • 🔄 Фоновые задания. Код в регламентном задании выполняется от имени пользователя, указанного в задании. Если там нет роли, доработка в фоне тоже отключится.

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

После правки кода расширение нужно сохранить и обновить в базе. Динамическое обновление применится только к новым сеансам.

Шаг 4. Скрыть команды расширения в интерфейсе пользователя

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

Что может сделать сам пользователь:

  1. Команды в разделах. Нажмите на шестерёнку в панели раздела и выберите Настройка навигации или Настройка действий. Уберите команды расширения в левую колонку.
  2. Кнопки и поля на форме. В форме откройте Еще → Изменить форму и снимите флажки у добавленных элементов.
  3. Целый раздел. Если расширение добавило свой раздел, его скрывают через Главное меню → Вид → Настройка панели разделов.

Администратор в типовых конфигурациях может применить такие настройки за пользователя: Администрирование → Настройки пользователей и прав → Настройки пользователей. Там же настройки копируют от одного сотрудника другому и очищают, если человек «наскрывал» лишнего.

Диагностика: расширение не отключается или конфликтует

Что происходит после настройки?

Как проверить, какие расширения работают в сеансе

Быстрая проверка — выполнить в консоли кода или обработке:

Для Каждого Расширение Из РасширенияКонфигурации.Получить() Цикл
    Сообщить(Расширение.Имя + " | активно: " + Формат(Расширение.Активно, "БЛ=Нет; БИ=Да"));
КонецЦикла;

Если нужного расширения нет в списке или оно неактивно, проблема не в правах.

Конфликты расширений

Типичные источники проблем:

  • 🔀 Два расширения перехватывают одну процедуру. Каждое ожидает своё поведение, а итог зависит от порядка применения. Отключайте их по одному и смотрите, после какого проблема уходит.
  • 📐 Два расширения меняют одну форму. Добавленные элементы могут наложиться или пропасть. Проверьте, какие элементы формы заимствует каждое расширение.
  • 🆙 Обновление основной конфигурации. Если в типовой изменили или удалили заимствованный объект, расширение может перестать применяться. Платформа сообщит об этом при запуске.
  • 🔒 Безопасный режим. Код, которому нужен доступ к файлам или внешним компонентам, в безопасном режиме упадёт с ошибкой. Это не повод отключать расширение — нужно снять безопасный режим или переписать код.

Ключ /ClearCache и перезапуск сеансов безопасны, но перезапуск сервера 1С оборвёт работу всех пользователей. Не начинайте диагностику с перезагрузки сервера.

Частые ошибки при отключении расширения

  • ❌ Удаляют расширение вместо отключения. При удалении пропадают данные его собственных справочников и реквизитов. Снимите флажок активности — данные сохранятся.
  • ❌ Пытаются сделать «запрещающую» роль. Права суммируются, роль без прав ничего не отнимет.
  • ❌ Забывают про флажок основных ролей для всех. Роли настроены верно, но доступ есть у всех — потому что флажок «Использовать основные роли для всех пользователей» включён.
  • ❌ Правят поставляемый профиль. После обновления роль пропадёт из профиля, а доступ — у пользователей.
  • ❌ Проверяют под администратором. У администратора полные права, и он видит то, чего не увидит обычный пользователь. Проверяйте под тестовой учётной записью с тем же профилем.

Частые вопросы

Можно ли отключить расширение для одного пользователя без программиста?
Да, если расширение добавляет только свои отчёты, обработки и справочники: достаточно не выдавать роль расширения. Если оно меняет типовые формы и алгоритмы, нужна правка кода.
Сохранятся ли данные, если снять флажок «Активно»?
Да. Данные собственных объектов расширения остаются в базе и снова становятся доступны после включения. Теряются они только при удалении расширения.
Почему в профиле групп доступа нет роли расширения?
Расширение не применено к базе или неактивно. Проверьте флажок активности и перезапустите программу.
Можно ли выдать расширение только одной организации в базе?
Отдельной настройки нет. Ограничение по организации делают в коде расширения или через ограничение доступа на уровне записей в типовом механизме прав.
Работает ли отключение по роли в веб-клиенте и тонком клиенте одинаково?
Да. Роли и проверка в серверном коде не зависят от типа клиента.