Ситуация, когда два пользователя имеют абсолютно идентичный набор ролей в Конфигураторе, но при этом один из них не может выполнить привычную операцию (например, записать документ Счет-фактура выданный), является классической проблемой для администраторов и разработчиков 1С. Особенно часто это проявляется в конфигурациях на обычных формах, таких как «Управление торговлей 10.3». В данной статье мы подробно разберем, как проанализировать ситуацию, где искать «скрытые» ограничения и какие инструменты использовать для диагностики.
Первое, что мы должны сделать — это выяснить, на каком уровне происходит отказ: на уровне платформенных прав (метаданных) или на уровне программного кода. Для этого проанализируем Журнал регистрации. Рассмотрим последовательность действий:
Если в журнале зафиксировано событие Доступ. Отказ в доступе. Документ.Счет-Фактура Выданный Действие: Изменение, значит, система безопасности платформы блокирует запись. Если же в журнале записей об отказе нет, но программа выдает окно с предупреждением, значит, ограничение зашито в программном коде конфигурации.
Часто разработчики внедряют проверки, которые не зависят от ролей. Это могут быть проверки по конкретным именам пользователей, по датам или по вхождению в определенные группы. Проанализируем программный код в модуле объекта документа или в модуле формы.
Рассмотрим пример кода, который может вызывать подобную проблему (аналогичный тому, что стал причиной в обсуждении):
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Дата < '20210101' Тогда // Ошибка в коде: должна быть проверка текущего периода
Если Не РольДоступна("ПолныеПрава") Тогда
Сообщить("Редактирование документов за прошлый год запрещено!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В данном случае, если у одного документа дата установлена корректно, а у другого ошибочно (например, прошлый год), пользователь без полных прав получит отказ, хотя роли у него могут быть такими же, как у коллеги.
Также стоит проверить наличие конструкций вида:
Если ИмяПользователя() = "Иванов" Тогда
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
Хотя такой подход считается плохим тоном («хардкод»), в доработанных базах он встречается нередко. Выясним это с помощью глобального поиска (Ctrl+Shift+F) по метаданным документа.
В конфигурации «Управление торговлей 10.3» (и других на базе УПП 1.3) существует мощный механизм, дополняющий систему ролей. Это регистр сведений Дополнительные права пользователей. При копировании пользователя в справочнике эти настройки могут не скопироваться автоматически.
Проанализируем этот механизм:
Если у одного пользователя установлена галочка, а у другого — нет, их возможности будут различаться даже при одинаковой роли Менеджер по продажам.
Если роли идентичны, но один видит/редактирует документ, а другой — нет, причина может крыться в RLS (Row Level Security). Это механизм, который ограничивает доступ к конкретным строкам таблиц (например, доступ только к одной Организации или одному Складу).
Разберем, как проверить RLS:
Группы доступа к контрагентам или Группы доступа к складам.Проанализируем настройки даты запрета изменения данных. В 1С она может устанавливаться:
Если для скопированного пользователя (или группы, в которую он входит) установлена персональная дата запрета, он не сможет редактировать документы ранее этой даты, в то время как другой пользователь будет работать без ограничений.
Иногда проблема кроется не в настройках, а в техническом сбое платформы. Кэш метаданных на локальном компьютере может «забаговать» и хранить неверную информацию о правах. Выясним, помогает ли очистка кэша:
%AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8.Для детального сравнения рекомендуется использовать встроенные или внешние отчеты. В современных версиях это отчет «Права доступа» в карточке пользователя. Для старых конфигураций (УТ 10.3) можно воспользоваться консолью запросов или внешними обработками типа «Анализ прав доступа 2.0».
С помощью таких инструментов мы можем увидеть сводную таблицу по всем ролям и объектам, что позволит быстро заметить, какая именно роль дает право на Изменение и почему она может не срабатывать у конкретного сотрудника.
Подведем итог: если роли одинаковые, а права разные, ищите причину в регистре дополнительных прав, настройках RLS (группах доступа), дате запрета или в программных проверках внутри модулей 1С. Как показал пример из практики, даже банальная опечатка в дате в коде модуля может привести к блокировке работы конкретного пользователя.