В процессе работы с базой 1С:Бухгалтерия предприятия 3.0 нередко возникает задача зафиксировать нормативно-справочную информацию. Если каждый пользователь имеет возможность вводить новые карточки номенклатуры или произвольно менять существующие, справочник быстро засоряется дублями, некорректными ставками НДС и счетами учета. Разберем, как грамотно ограничить права на изменение и создание элементов справочника Номенклатура, оставив эту возможность только за выделенными ответственными сотрудниками.
Проанализируем ключевое препятствие, с которым сталкиваются администраторы: попытка ограничить действия пользователей, которым назначены полные права (профиль Администратор). В платформе 1С действует фундаментальное правило: механизмы ограничения доступа на уровне записей (RLS) платформенно игнорируются для учетных записей с полными административными правами. Кроме того, пользователь с правами администратора всегда может самостоятельно зайти в настройки, отключить любые наложенные ограничения, добавить себе необходимые роли или снять расширение.
Поэтому первоочередной шаг к наведению порядка в базе — пересмотр политики безопасности. Профиль администратора должен оставаться исключительно у системного администратора или программиста для выполнения технических задач (обновление конфигурации, архивация, настройка интеграций). Рядовые бухгалтеры должны работать с профилями Бухгалтер, а руководители — Главный бухгалтер.
Если в базе корректно распределены права и у пользователей отозваны административные роли, задачу можно решить полностью стандартными средствами программы без программирования. Разберем по шагам, как настроить ограничения с помощью подсистемы управления доступом:
Добавление и изменение номенклатуры, и снимем с них флажки. При этом обязательно оставляем роли на чтение и просмотр номенклатуры.При таком подходе конфигурация остается на полной типовой поддержке, а пользователи физически лишаются прав на добавление и модификацию элементов через интерфейс программы.
В некоторых организациях забрать административные или расширенные права у пользователей невозможно по внутренним регламентам либо требуется тонкая логика проверки (например, разрешение редактирования только определенной группе пользователей). В таком случае правильным решением становится использование расширения конфигурации.
В обсуждениях часто предлагают просто переопределить форму элемента и открыть ее в режиме «Только просмотр». Выясним причину, почему блокировка на уровне формы ненадежна. Данный метод оставляет множество обходных путей:
Чтобы исключить обход запрета, проверку необходимо выполнять не в форме, а непосредственно перед записью самого объекта на сервере. Рассмотрим подробнее, как реализовать подписку на событие в расширении:
КонтрольЗаписиНоменклатурыПередЗаписью.СправочникОбъект.Номенклатура.ПередЗаписью.Посмотрим на пример правильного кода обработчика с учетом фоновых обменов и проверки прав:
Процедура КонтрольЗаписиНоменклатурыПередЗаписью(Источник, Отказ, ТекущийОбъект) Экспорт
// Обязательно пропускаем запись, если идет обмен данными или загрузка
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Проверяем доступность специальной роли или принадлежность к группе
// Рекомендуется проверять назначенную роль, добавленную в расширение:
Если Не РольДоступна("ПравоИзмененияНоменклатуры") Тогда
Отказ = Истина;
ВызватьИсключение "У вас нет прав на создание или изменение элементов справочника ""Номенклатура"". Обратитесь к ответственному за ведение НСИ.";
КонецЕсли;
КонецПроцедуры
Разберем важные детали приведенного алгоритма:
ОбменДанными.Загрузка: если пропустить данную проверку, при синхронизации с другими программами (например, с 1С:Управление торговлей или 1С:ЗУП) фоновый процесс завершится аварийно, так как запись номенклатуры будет заблокирована.ИмяПользователя() = "Иванов") крайне не рекомендуется. При смене фамилии, увольнении или передаче обязанностей придется вносить правки в код. Гораздо надежнее проверять наличие роли или вхождение пользователя в типовой справочник ГруппыПользователей.Источник.ЭтоНовый().Если в силу административных причин сотрудники все же продолжают работать с полными правами, необходимо включить контроль изменений. Для этого перейдем в Администрирование → Общие настройки → История изменений. Настроим версионирование для справочника Номенклатура в режиме При записи. Это позволит в любой момент выяснить автора некорректных правок, увидеть состав измененных реквизитов и при необходимости восстановить состояние карточки из сохраненной версии.