Расширение мешает одному сотруднику: как выключить доработку только для него
Содержание
Отдельной галочки «отключить расширение
для пользователя» в 1С 8.3 нет: расширение подключается ко всей информационной базе, а флажок Активно выключает его сразу у всех. Отключить расширение для одного пользователя можно тремя рабочими способами: не давать ему роли расширения, проверять роль в коде доработки или скрыть добавленные команды в его персональных настройках.
Какой способ подойдёт, зависит от того, что именно делает расширение. Новый отчёт или справочник закрывается ролями за пять минут. Изменённое поведение типового документа ролями не закрыть — тут нужна правка кода расширения. Разберём оба случая и типичные конфликты, из-за которых расширение «не отключается».
Как расширение подключается к базе и почему роли решают не всё
Расширение — это отдельная мини-конфигурация, которую платформа накладывает на основную при старте каждого сеанса. Механизм появился в версии 8.3.6, а в актуальных версиях платформы им пользуются почти все типовые решения.
В расширении бывают объекты двух видов:
- 🆕 Собственные объекты — новые справочники, документы, отчёты, обработки, общие модули, роли. Доступ к ним регулирует роль, как и в основной конфигурации.
- 🔁 Заимствованные объекты — типовые формы, модули и объекты, которые расширение изменяет: добавляет кнопку на форму, перехватывает процедуру через
&Перед,&Послеили&Вместо, добавляет реквизит.
Ключевой момент: изменения заимствованных объектов действуют на всех пользователей сразу. Если расширение добавило кнопку на форму счёта или подменило алгоритм заполнения, роль не спасёт: перехват метода срабатывает независимо от того, кто работает в программе.
Ещё одно свойство, о котором часто забывают: права в 1С складываются. Роль расширения может только добавить права, но не отнять те, что выданы ролями основной конфигурации. Поэтому «запрещающую» роль сделать нельзя.
| Что делает расширение | Можно закрыть ролями | Что нужно ещё |
|---|---|---|
| Добавляет новый отчёт или обработку | Да | Ничего |
| Добавляет новый справочник или документ | Да | Проверить, не выводится ли он на типовых формах |
| Добавляет кнопку или поле на типовую форму | Частично | Управлять видимостью в коде формы |
| Перехватывает процедуру типового модуля | Нет | Условие в коде перехвата |
| Добавляет реквизит в типовой документ | Нет | Скрыть поле на форме по роли |
Шаг 1. Выключить расширение целиком, если оно не нужно никому
Иногда задача «отключить для пользователя» на деле означает «расширение сломалось, остальные пока потерпят». Тогда проще снять флажок активности, а не настраивать права.
Где это сделать:
- В режиме 1С:Предприятие (типовые конфигурации на БСП). Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. В списке снимите флажок активности у нужного расширения. - Через стандартную функцию.
Главное меню → Функции для технического специалиста → Стандартные → Управление расширениями конфигурации. В старых версиях платформы этот пункт называетсяВсе функциии включается вСервис → Параметры. - В Конфигураторе.
Конфигурация → Расширения конфигурации, флажок в колонкеАктивно.
После снятия флажка изменения применятся к новым сеансам. Пользователи, которые уже работают, увидят старое поведение до перезапуска программы.
Если после отключения у кого-то остались кнопки расширения — пусть закроет 1С полностью и откроет заново. Принудительно завершать чужие сеансы из консоли кластера можно, но несохранённые документы пользователей при этом пропадут. Делайте это вне рабочего времени или после предупреждения.
В базах с разделением данных (например, в облачных сервисах) у расширения есть ещё свойство «Область действия»: расширение может быть подключено ко всей базе или только к одной области данных. Это позволяет включить доработку одной организации-абоненту, но не отдельному пользователю внутри неё.
В том же списке есть флажок «Безопасный режим». Он не отключает расширение, а ограничивает его: в безопасном режиме код расширения не может работать с файлами, COM-объектами и внешними компонентами. Путать эти два флажка нельзя.
Шаг 2. Отключить расширение для пользователя через роли
Этот способ работает для собственных объектов расширения: новых отчётов, обработок, справочников, разделов меню.
Проверьте свойство «Использовать основные роли для всех пользователей»
Откройте расширение в Конфигураторе и выделите корень дерева. В палитре свойств есть два связанных поля:
- «Основные роли» — роли расширения, которые считаются базовыми.
- «Использовать основные роли для всех пользователей» — если флажок стоит, эти роли получает каждый пользователь базы, независимо от списка его ролей.
Пока этот флажок включён, закрыть расширение от одного человека ролями не получится. Снимите его, сохраните расширение и обновите конфигурацию базы данных расширения (F7).
Раздайте роль расширения выборочно
Дальше роль выдают только тем, кому доработка нужна.
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) права раздают через профили групп доступа:
- Откройте
Администрирование → Настройки пользователей и прав → Профили групп доступа. - Создайте копию нужного профиля или новый профиль.
- В списке ролей профиля отметьте роль расширения. Роли расширений отображаются в этом же списке.
- Включите в группу доступа с этим профилем только тех, кому расширение нужно.
В нетиповой базе без БСП роль назначают напрямую в карточке пользователя: Администрирование → Пользователи в Конфигураторе, вкладка Прочие.
Не правьте поставляемые профили напрямую — при обновлении типовой конфигурации поставляемый профиль восстановится, и роль расширения из него пропадёт. Работайте с копией профиля.
Что увидит пользователь без роли
Без роли сотрудник не увидит команды расширения в разделах и не сможет открыть его отчёты и обработки. Если он перейдёт по ссылке на объект расширения, получит сообщение о нарушении прав доступа. Это нормальное поведение, а не ошибка.
Как проверить результат
Настройку прав проверяют не под своей учётной записью, а под тестовым пользователем:
- Создайте пользователя
Тест_БезРасширенияи включите его в ту же группу доступа, что и сотрудника, которому расширение отключаете. - Задайте ему пароль и войдите в базу под ним в отдельном окне.
- Пройдите по разделам, куда расширение добавляло команды, и откройте типовые формы, которые оно меняет.
- Повторите то же под пользователем с ролью расширения — у него всё должно работать как раньше.
Такая проверка занимает несколько минут и сразу показывает, хватит ли ролей или придётся править код. Тестового пользователя после проверки отключите: снимите в его карточке флажок «Вход в программу разрешён».
Шаг 3. Программно отключить доработку в коде расширения
Если расширение меняет поведение типового объекта, условие придётся добавить в сам код. Практичный приём: завести в расширении отдельную роль-«метку», например Расш1_ИспользоватьДоработку, без прав, и проверять её наличие.
Как завести такую роль:
- В Конфигураторе откройте дерево расширения и в ветке
Общие → Ролидобавьте новую роль. - Права в ней не отмечайте: роль нужна только как признак «доработка включена».
- Сохраните расширение, обновите его в базе и добавьте роль в профиль тех, кому доработка нужна.
Перехват процедуры с возвратом к типовому поведению
Для перехвата &Вместо есть удобный ход: если у пользователя нет роли, вызываем типовой код через ПродолжитьВызов() и выходим.
&Вместо("ЗаполнитьТовары")
Процедура Расш1_ЗаполнитьТовары(Документ)
Если Не РольДоступна("Расш1_ИспользоватьДоработку") Тогда
ПродолжитьВызов(Документ);
Возврат;
КонецЕсли;
// Доработанный алгоритм заполнения
Документ.Товары.Очистить();
// ...
КонецПроцедуры
Для функции то же самое пишется через Возврат ПродолжитьВызов(...). Для перехватов &Перед и &После достаточно обернуть свой код в условие: типовой код выполнится в любом случае.
Скрытие добавленных элементов формы
Кнопки и поля, которые расширение добавило на типовую форму, прячут в обработчике ПриСозданииНаСервере, назначенном в расширении формы с типом вызова «После»:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ЕстьДоступ = РольДоступна("Расш1_ИспользоватьДоработку");
Элементы.Расш1_ЗаполнитьПоШаблону.Видимость = ЕстьДоступ;
Элементы.Расш1_ДатаСогласования.Видимость = ЕстьДоступ;
КонецПроцедуры
Тонкости проверки роли
- ⚠️ Привилегированный режим. Внутри привилегированного режима
РольДоступна()возвращаетИстинадля любой роли. Если перехват вызывается из такого кода, условие не сработает. - 👤 Полные права. Администратор с ролью
ПолныеПраване получает автоматически вашу роль-метку. В БСП для проверки удобнее функцияПользователи.РолиДоступны(): она учитывает полные права. - 🔄 Фоновые задания. Код в регламентном задании выполняется от имени пользователя, указанного в задании. Если там нет роли, доработка в фоне тоже отключится.
Если доработку нужно включать и выключать без программиста, вместо роли используйте константу или функциональную опцию расширения. Тогда переключатель будет в интерфейсе, а не в коде.
После правки кода расширение нужно сохранить и обновить в базе. Динамическое обновление применится только к новым сеансам.
Шаг 4. Скрыть команды расширения в интерфейсе пользователя
Если сотруднику расширение просто мешает визуально, а прав у него быть может, хватит персональных настроек. Это не настоящее отключение: код расширения продолжит работать.
Что может сделать сам пользователь:
- Команды в разделах. Нажмите на шестерёнку в панели раздела и выберите
Настройка навигацииилиНастройка действий. Уберите команды расширения в левую колонку. - Кнопки и поля на форме. В форме откройте
Еще → Изменить формуи снимите флажки у добавленных элементов. - Целый раздел. Если расширение добавило свой раздел, его скрывают через
Главное меню → Вид → Настройка панели разделов.
Администратор в типовых конфигурациях может применить такие настройки за пользователя: Администрирование → Настройки пользователей и прав → Настройки пользователей. Там же настройки копируют от одного сотрудника другому и очищают, если человек «наскрывал» лишнего.
Диагностика: расширение не отключается или конфликтует
Как проверить, какие расширения работают в сеансе
Быстрая проверка — выполнить в консоли кода или обработке:
Для Каждого Расширение Из РасширенияКонфигурации.Получить() Цикл
Сообщить(Расширение.Имя + " | активно: " + Формат(Расширение.Активно, "БЛ=Нет; БИ=Да"));
КонецЦикла;
Если нужного расширения нет в списке или оно неактивно, проблема не в правах.
Конфликты расширений
Типичные источники проблем:
- 🔀 Два расширения перехватывают одну процедуру. Каждое ожидает своё поведение, а итог зависит от порядка применения. Отключайте их по одному и смотрите, после какого проблема уходит.
- 📐 Два расширения меняют одну форму. Добавленные элементы могут наложиться или пропасть. Проверьте, какие элементы формы заимствует каждое расширение.
- 🆙 Обновление основной конфигурации. Если в типовой изменили или удалили заимствованный объект, расширение может перестать применяться. Платформа сообщит об этом при запуске.
- 🔒 Безопасный режим. Код, которому нужен доступ к файлам или внешним компонентам, в безопасном режиме упадёт с ошибкой. Это не повод отключать расширение — нужно снять безопасный режим или переписать код.
Ключ /ClearCache и перезапуск сеансов безопасны, но перезапуск сервера 1С оборвёт работу всех пользователей. Не начинайте диагностику с перезагрузки сервера.
Частые ошибки при отключении расширения
- ❌ Удаляют расширение вместо отключения. При удалении пропадают данные его собственных справочников и реквизитов. Снимите флажок активности — данные сохранятся.
- ❌ Пытаются сделать «запрещающую» роль. Права суммируются, роль без прав ничего не отнимет.
- ❌ Забывают про флажок основных ролей для всех. Роли настроены верно, но доступ есть у всех — потому что флажок «Использовать основные роли для всех пользователей» включён.
- ❌ Правят поставляемый профиль. После обновления роль пропадёт из профиля, а доступ — у пользователей.
- ❌ Проверяют под администратором. У администратора полные права, и он видит то, чего не увидит обычный пользователь. Проверяйте под тестовой учётной записью с тем же профилем.