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