К статье
Практический материал

Администрирование · 12 мин

Как запретить менять ответственного в 1С

Как запретить изменение ответственного в документах 1С: настройка ролей, RLS, подписки на события и доработка форм. Пошаговые инструкции, проверка результата, FAQ.

Поле «Ответственный» в документах и справочниках 1С определяет, кто отвечает за проведение операции, и часто используется в отчётах, разграничении доступа и аналитике продаж. Когда пользователи вручную меняют ответственного, ломается отчётность по менеджерам, искажаются данные по комиссионным и появляются споры о том, кто оформил документ. Задача администратора — сделать так, чтобы поле заполнялось автоматически и не могло быть изменено без необходимых полномочий.

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

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

Как устроено поле «Ответственный» и почему его меняют

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

Меняют ответственного как случайно, так и осознанно: менеджер оформляет отгрузку «на коллегу», бухгалтер исправляет документы за другим подразделением, руководитель переназначает документы при увольнении сотрудника. Часть этих сценариев легитимна, поэтому перед настройкой запрета определите, кому право изменения всё-таки нужно — обычно это администраторы и, возможно, старшие менеджеры.

Важно понимать: запрет на уровне интерфейса (недоступное поле на форме) не защищает данные полностью — изменить реквизит можно через групповое изменение, обработку или обмен данными. Полноценный запрет реализуется только на уровне записи объекта в базу.

Способ 1. Запрет через настройку прав и ролей

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

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

В некоторых конфигурациях есть механизм «Даты запрета изменения данных» — он не блокирует поле ответственного напрямую, но закрывает редактирование документов прошлых периодов целиком, что косвенно решает проблему «задним числом». Настраивается в разделе «Администрирование → Поддержка и обслуживание → Регламентные операции» или «Настройка прав и пользователей» в зависимости от конфигурации.

Способ 2. Блокировка поля на форме документа

Самый простой точечный вариант — сделать поле «Ответственный» недоступным для редактирования в форме документа. Для этого конфигурацию нужно открыть в конфигураторе, найти форму документа и для элемента, связанного с реквизитом «Ответственный», установить свойство «Только просмотр» или управлять доступностью программно в обработчике «ПриСозданииНаСервере».

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

Пример логики для управляемой формы: в обработчике «ПриСозданииНаСервере» проверить, входит ли текущий пользователь в список разрешённых, и если нет — установить элементу формы «ТолькоПросмотр = Истина». Так руководители сохранят возможность менять ответственного, а остальные увидят заблокированное поле.

Как заблокировать поле через расширение
  1. 1
    Откройте конфигуратор, создайте новое расширение конфигурации с понятным именем и префиксом
  2. 2
    Добавьте в расширение форму нужного документа через заимствование
  3. 3
    В модуле формы создайте обработчик ПриСозданииНаСервере с аннотацией &После или изменением
  4. 4
    Проверьте роль пользователя и установите ТолькоПросмотр = Истина для элемента Ответственный
  5. 5
    Сохраните расширение, обновите конфигурацию базы данных и проверьте форму под обычным пользователем

Способ 3. Подписка на событие с принудительной подстановкой

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

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

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

bsl
Процедура ЗапретСменыОтветственногоПередЗаписью(Источник, Отказ) Экспорт
	Если Пользователи.ЭтоПолноправныйПользователь() Тогда
		Возврат;
	КонецЕсли;
	Если Не Источник.ЭтоНовый() Тогда
		Прежний = Источник.Ссылка.Ответственный;
		Если Источник.Ответственный <> Прежний Тогда
			Источник.Ответственный = Прежний;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Способ 4. RLS и альтернативные варианты защиты

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

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

Сравнение способов запрета

Блокировка поля на форме

Быстро и просто, но обходится через групповое изменение и обмены. Подходит как дополнение к другим методам.

Подписка на событие

Надёжно защищает при любом способе изменения. Требует доработки и аккуратности с обменами данными.

RLS

Ограничивает доступ к чужим документам целиком. Может замедлять запросы, сложнее в настройке.

Дата запрета изменения

Штатный механизм, закрывает старые периоды. Не защищает документы текущего периода.

Как проверить, что запрет работает

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

Дополнительно проверьте косвенные каналы изменения: обработку «Групповое изменение реквизитов», загрузку данных из табличного документа и, если используется, обмен с другими базами. Именно через эти каналы чаще всего «протекает» запрет, реализованный только на форме.

Контрольные точки

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

Изменение поля в форме документа
Норма

Поле недоступно или значение возвращается после записи

Тревожный признак

Поле редактируется и новое значение сохраняется

Групповое изменение реквизитов
Норма

Подписка откатывает изменение ответственного

Тревожный признак

Ответственный меняется у всех выбранных документов

Работа администратора
Норма

Смена ответственного выполняется без ошибок

Тревожный признак

Администратор тоже заблокирован — забыто исключение в коде

Обмен данными
Норма

Синхронизация проходит без ошибок записи

Тревожный признак

Обмен падает с ошибкой из-за подписки

Типичные ошибки и риски при настройке

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

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

Типичные ошибки
01
Блокировка только на форме — запрет обходится через групповое изменение и обмены
02
Отсутствие исключения для администраторов — никто не может легально переназначить документы
03
Забытый обмен данными — синхронизация падает с ошибками записи
04
Снятие конфигурации с поддержки вместо расширения — усложняются обновления
05
Доработка сразу в рабочей базе без копии — риск потери данных при ошибке в коде

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

Можно ли запретить смену ответственного без доработки конфигурации?

Полностью — нет. Штатные роли ограничивают доступ к документам целиком, а не к отдельному реквизиту. Без доработки доступны только косвенные меры: дата запрета изменения для закрытых периодов и RLS для ограничения доступа к чужим документам.

Запрет работает в форме, но ответственный всё равно меняется. Почему?

Скорее всего, изменение происходит через групповую обработку реквизитов, загрузку данных или обмен между базами. Блокировка на форме эти каналы не закрывает — нужна подписка на событие записи объекта.

Как разрешить менять ответственного только руководителю?

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

Что выбрать: изменение конфигурации или расширение?

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

Нарушит ли запрет обмен данными между базами?

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

Как узнать, кто менял ответственного в прошлом?

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

Итог

Что важно запомнить

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