Каждый администратор или разработчик 1С хотя бы раз сталкивался с ситуацией, когда под полными правами отчеты работают безупречно, но стоит запустить сеанс под ограниченной учетной записью (например, с типовым профилем «Бухгалтер»), как начинают происходить странности. Одной из таких неочевидных проблем является внезапное исчезновение кодов номенклатуры (или кодов других справочников) из дополнительных полей Оборотно-сальдовой ведомости (ОСВ).
В этой статье мы подробно разберем, почему возникает эта ошибка, изучим внутренние механизмы платформы «1С:Предприятие 8.3», которые приводят к подобному поведению, и рассмотрим пошаговые инструкции по диагностике и устранению проблемы как программными, так и административными методами.
Для того чтобы понять природу этой ошибки, нам необходимо заглянуть под капот платформы и разобраться, как строятся отчеты в типовых конфигурациях. Оборотно-сальдовая ведомость базируется на Системе компоновки данных (СКД). Когда мы открываем настройки отчета, переходим в «Дополнительные поля» и добавляем поле Номенклатура.Код, система генерирует SQL-запрос к базе данных.
Сложность заключается в том, как именно хранятся аналитические разрезы (субконто) на счетах учета в регистре бухгалтерии:
ПланВидовХарактеристик.ВидыСубконтоХозрасчетные. В этот ПВХ входят десятки справочников: Номенклатура, Контрагенты, Договоры, СтатьиЗатрат, Проекты и многие другие.Субконто1.Код), на уровне СУБД происходит левое соединение (LEFT JOIN) таблицы регистра со всеми таблицами справочников, входящих в составной тип ПВХ, у которых есть реквизит с именем «Код».NULL) вместо реального кода номенклатуры.Рассмотрим пример запроса, который неявно формирует СКД при обращении к коду субконто:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК СубконтоНоменклатура,
ХозрасчетныйОстатки.Субконто1.Код КАК КодСубконто
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет10, , ) КАК ХозрасчетныйОстатки
Если в системе существует справочник, включенный в ПВХ (например, Справочник.Проекты или устаревший Справочник.УдалитьОценочныеОбязательства), к которому у пользователя с ролью «Бухгалтер» нет доступа на чтение, поле КодСубконто вернет пустоту.
Это самый частый вопрос, который ставит в тупик пользователей и начинающих программистов. Если добавить в дополнительные поля ОСВ Номенклатура.Артикул, то он выводится без каких-либо проблем. Почему так происходит?
Дело в том, что реквизит Артикул уникален — он создан разработчиками только в справочнике Номенклатура. У других справочников (например, у договоров или статей затрат) реквизита с таким именем нет. Платформа «понимает», что обращение идет к конкретной таблице номенклатуры, и не пытается соединять другие справочники из ПВХ. В случае с реквизитом Код, он присутствует абсолютно во всех справочниках, что и заставляет систему выполнять полное сканирование и наталкиваться на ограничение прав.
---
Прежде чем вносить изменения в конфигурацию, нам нужно точно определить, какой именно объект вызывает отказ в доступе. Для этого выполним следующие действия:
Код, и сформируйте отчет.Справочник.Проекты или Справочник.УдалитьОценочныеОбязательства.---
Самым правильным и безопасным способом решения проблемы является использование Расширений конфигурации. Этот метод позволяет не снимать типовую конфигурацию с поддержки и гарантирует успешное обновление базы в будущем.
Выполним процедуру создания расширения по шагам:
Справочник.Проекты). Нажмите на него правой кнопкой мыши и выберите «Добавить в расширение».ДоступККодамДляОСВ.Теперь нам осталось назначить созданную роль пользователям. Для этого перейдите в режим «1С:Предприятие» под администратором, откройте Администрирование — Настройки пользователей и прав — Профили групп доступа, создайте новый профиль (или добавьте роль в существующий профиль бухгалтеров) и отметьте галочкой нашу новую роль из расширения.
---
Если вы не хотите использовать расширения, можно попробовать решить проблему штатными средствами администрирования 1С. В некоторых релизах конфигурации «Бухгалтерия предприятия» за доступ к «проблемным» справочникам отвечают стандартные роли, которые не входят в профиль «Бухгалтер».
Попробуем добавить пользователям права стандартными методами:
Проекты) или аналогичным аналитическим разрезам.Важное примечание: В старых релизах конфигураций пользователи часто использовали добавление роли Удаленный доступ (стандартный интерфейс OData) для решения этой проблемы, поскольку эта роль неявно давала широкие права на чтение справочников. Мы настоятельно не рекомендуем использовать этот метод на современных релизах платформы (начиная с 3.0.70 и выше). Во-первых, это создает серьезную брешь в безопасности системы, открывая доступ к данным через внешние протоколы. Во-вторых, в актуальных версиях платформы этот обходной путь заблокирован разработчиками.
Мы детально изучили проблему отображения кодов номенклатуры в ОСВ и выяснили, что ее причиной является строгое разыменование полей составного типа в СКД при отсутствии прав на чтение смежных справочников ПВХ. Использование точечной настройки прав через расширение конфигурации позволяет решить эту задачу элегантно, безопасно и без нарушения типовой поддержки программы.