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