Администрирование · 12 мин
Как запретить менять ответственного в 1С
Как запретить изменение ответственного в документах 1С: настройка ролей, RLS, подписки на события и доработка форм. Пошаговые инструкции, проверка результата, FAQ.
Поле «Ответственный» в документах и справочниках 1С определяет, кто отвечает за проведение операции, и часто используется в отчётах, разграничении доступа и аналитике продаж. Когда пользователи вручную меняют ответственного, ломается отчётность по менеджерам, искажаются данные по комиссионным и появляются споры о том, кто оформил документ. Задача администратора — сделать так, чтобы поле заполнялось автоматически и не могло быть изменено без необходимых полномочий.
Универсальной кнопки «запретить менять ответственного» в типовых конфигурациях 1С нет, поэтому задачу решают комбинацией штатных средств: настройки прав доступа, подписок на события, изменения форм или отключения изменения через расширение. Выбор способа зависит от конфигурации (УТ, ERP, БП, КА), режима работы (файловая или клиент-серверная база) и того, нужно ли запретить изменение полностью или только для части пользователей.
Ниже разобраны рабочие подходы от простых к сложным: от запрета интерактивного изменения через форму до программного контроля при записи объекта. Каждый способ сопровождается условиями применения, ограничениями и способом проверки результата.
Как устроено поле «Ответственный» и почему его меняют
В типовых конфигурациях реквизит «Ответственный» обычно имеет тип «СправочникСсылка.Пользователи» и заполняется автоматически при создании документа — туда подставляется текущий пользователь сеанса. Проблема в том, что по умолчанию поле доступно для редактирования: любой пользователь с правами на изменение документа может выбрать в поле другого сотрудника.
Меняют ответственного как случайно, так и осознанно: менеджер оформляет отгрузку «на коллегу», бухгалтер исправляет документы за другим подразделением, руководитель переназначает документы при увольнении сотрудника. Часть этих сценариев легитимна, поэтому перед настройкой запрета определите, кому право изменения всё-таки нужно — обычно это администраторы и, возможно, старшие менеджеры.
Важно понимать: запрет на уровне интерфейса (недоступное поле на форме) не защищает данные полностью — изменить реквизит можно через групповое изменение, обработку или обмен данными. Полноценный запрет реализуется только на уровне записи объекта в базу.
Способ 1. Запрет через настройку прав и ролей
Штатный механизм ролей в 1С работает на уровне объектов целиком: можно запретить пользователю изменять документы определённого вида, но нельзя стандартной ролью закрыть редактирование одного реквизита. Поэтому роли применяют как первый уровень защиты: убедитесь, что у рядовых пользователей нет ролей «Полные права», «Администратор системы» и «Добавление и изменение базовой нормативно-справочной информации» сверх необходимого.
Проверьте текущие права: откройте «Администрирование → Настройки пользователей и прав → Пользователи», выберите сотрудника и посмотрите входящие в его профиль группы доступа. Если профиль построен на типовых ролях, изменение ответственного технически возможно у всех, кто может редактировать документ, — значит, нужен один из программных способов ниже.
В некоторых конфигурациях есть механизм «Даты запрета изменения данных» — он не блокирует поле ответственного напрямую, но закрывает редактирование документов прошлых периодов целиком, что косвенно решает проблему «задним числом». Настраивается в разделе «Администрирование → Поддержка и обслуживание → Регламентные операции» или «Настройка прав и пользователей» в зависимости от конфигурации.
Способ 2. Блокировка поля на форме документа
Самый простой точечный вариант — сделать поле «Ответственный» недоступным для редактирования в форме документа. Для этого конфигурацию нужно открыть в конфигураторе, найти форму документа и для элемента, связанного с реквизитом «Ответственный», установить свойство «Только просмотр» или управлять доступностью программно в обработчике «ПриСозданииНаСервере».
Если конфигурация на поддержке и снимать её с поддержки нежелательно, используйте расширение конфигурации — оно позволяет заимствовать форму документа и переопределить поведение поля без изменения основной конфигурации. Это безопаснее при обновлениях: типовые обновления не затронут расширение, хотя после обновления стоит проверить, что переопределённая форма работает корректно.
Пример логики для управляемой формы: в обработчике «ПриСозданииНаСервере» проверить, входит ли текущий пользователь в список разрешённых, и если нет — установить элементу формы «ТолькоПросмотр = Истина». Так руководители сохранят возможность менять ответственного, а остальные увидят заблокированное поле.
- 1Откройте конфигуратор, создайте новое расширение конфигурации с понятным именем и префиксом
- 2Добавьте в расширение форму нужного документа через заимствование
- 3В модуле формы создайте обработчик ПриСозданииНаСервере с аннотацией &После или изменением
- 4Проверьте роль пользователя и установите ТолькоПросмотр = Истина для элемента Ответственный
- 5Сохраните расширение, обновите конфигурацию базы данных и проверьте форму под обычным пользователем
Способ 3. Подписка на событие с принудительной подстановкой
Наиболее надёжный способ — перехватывать запись объекта и принудительно возвращать правильное значение ответственного, независимо от того, что выбрал пользователь. Реализуется через подписку на событие «ПриЗаписи» или «ПередЗаписью» для нужных видов документов.
Логика обработчика: если текущий пользователь не входит в список исключений (администраторы), а значение реквизита «Ответственный» отличается от сохранённого в базе, отменить изменение — вернуть прежнее значение или вызвать исключение с понятным сообщением. Вариант с откатом мягче: документ записывается, но ответственный остаётся прежним. Вариант с исключением жёстче: запись прерывается, и пользователь видит предупреждение.
Подписка срабатывает при любом способе изменения: через форму, групповую обработку, обмен данными, загрузку из файлов. Это и преимущество, и риск — если в обмене ответственный меняется легитимно (например, при синхронизации между базами), предусмотрите в коде исключение для фоновых сеансов обмена или для пользователя, под которым работает синхронизация.
Процедура ЗапретСменыОтветственногоПередЗаписью(Источник, Отказ) Экспорт
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
Возврат;
КонецЕсли;
Если Не Источник.ЭтоНовый() Тогда
Прежний = Источник.Ссылка.Ответственный;
Если Источник.Ответственный <> Прежний Тогда
Источник.Ответственный = Прежний;
КонецЕсли;
КонецЕсли;
КонецПроцедурыСпособ 4. RLS и альтернативные варианты защиты
Механизм ограничения доступа на уровне записей (RLS) решает смежную задачу: пользователь видит и изменяет только документы, где он указан ответственным. Это не запрет на смену поля, но сильно снижает мотивацию и возможность «перевешивать» документы: чужой документ просто недоступен. RLS настраивается в шаблонах ограничений доступа ролей и требует аккуратности — непродуманные шаблоны замедляют запросы и могут скрыть нужные данные.
Ещё одна альтернатива — отдельная роль «Разрешить изменение ответственного», выдаваемая узкому кругу лиц, плюс программная проверка этой роли в подписке на запись. Такой подход прозрачен: аудит покажет, у кого есть право, а журнал регистрации зафиксирует, кто и когда менял поле. Включите в журнале регистрации отслеживание изменения данных, чтобы при спорах восстановить картину.
Сравнение способов запрета
Быстро и просто, но обходится через групповое изменение и обмены. Подходит как дополнение к другим методам.
Надёжно защищает при любом способе изменения. Требует доработки и аккуратности с обменами данными.
Ограничивает доступ к чужим документам целиком. Может замедлять запросы, сложнее в настройке.
Штатный механизм, закрывает старые периоды. Не защищает документы текущего периода.
Как проверить, что запрет работает
Проверку выполняйте минимум под двумя учётными записями: обычным пользователем и администратором. Под обычным пользователем откройте существующий документ, попробуйте сменить ответственного и записать — поле должно быть недоступно либо значение должно вернуться к исходному после записи. Под администратором та же операция должна пройти успешно, если для него предусмотрено исключение.
Дополнительно проверьте косвенные каналы изменения: обработку «Групповое изменение реквизитов», загрузку данных из табличного документа и, если используется, обмен с другими базами. Именно через эти каналы чаще всего «протекает» запрет, реализованный только на форме.
Как проверить результат
Поле недоступно или значение возвращается после записи
Поле редактируется и новое значение сохраняется
Подписка откатывает изменение ответственного
Ответственный меняется у всех выбранных документов
Смена ответственного выполняется без ошибок
Администратор тоже заблокирован — забыто исключение в коде
Синхронизация проходит без ошибок записи
Обмен падает с ошибкой из-за подписки
Типичные ошибки и риски при настройке
Самая частая ошибка — ограничиться блокировкой поля только на форме и считать задачу закрытой. Данные при этом остаются уязвимы для групповых обработок и обменов, и через время расхождения в отчётах появляются снова. Вторая ошибка — забыть исключения для полноправных пользователей и служебных сеансов обмена: тогда ломается синхронизация, а администраторы не могут выполнять легитимные переназначения.
Отдельный риск — снятие конфигурации с поддержки ради небольшой доработки. Это усложняет все последующие обновления и может стоить дороже, чем разовая настройка расширения. Перед любыми изменениями сделайте резервную копию базы и сначала проверьте решение на копии, а не на рабочей базе.
Частые вопросы
Можно ли запретить смену ответственного без доработки конфигурации?
Полностью — нет. Штатные роли ограничивают доступ к документам целиком, а не к отдельному реквизиту. Без доработки доступны только косвенные меры: дата запрета изменения для закрытых периодов и RLS для ограничения доступа к чужим документам.
Запрет работает в форме, но ответственный всё равно меняется. Почему?
Скорее всего, изменение происходит через групповую обработку реквизитов, загрузку данных или обмен между базами. Блокировка на форме эти каналы не закрывает — нужна подписка на событие записи объекта.
Как разрешить менять ответственного только руководителю?
Создайте отдельную роль или используйте проверку принадлежности к группе пользователей в коде подписки или формы. Если пользователь не входит в разрешённый список, изменение откатывается или поле остаётся недоступным.
Что выбрать: изменение конфигурации или расширение?
Расширение предпочтительнее: конфигурация остаётся на поддержке, обновления проходят штатно. Изменение основной конфигурации оправдано только если расширением задачу решить нельзя — например, при очень старой версии платформы.
Нарушит ли запрет обмен данными между базами?
Может нарушить, если в обмене ответственный изменяется легитимно. Добавьте в код подписки исключение для пользователя, под которым выполняется синхронизация, либо проверку параметра сеанса обмена, и обязательно протестируйте обмен после внедрения.
Как узнать, кто менял ответственного в прошлом?
Откройте журнал регистрации с отбором по событию изменения данных и нужному документу — там видны пользователь и время изменения. Если требуется детальная история по реквизитам, подключите версионирование объектов, если оно поддерживается вашей конфигурацией.
Что важно запомнить
Надёжный запрет на смену ответственного строится в два слоя: подписка на запись объекта защищает данные при любом способе изменения, а блокировка поля на форме делает запрет очевидным для пользователя. Не забудьте исключения для администраторов и обменов, тестируйте на копии базы и предпочитайте расширение изменению типовой конфигурации.