Почему возникает ошибка "Поле не обнаружено 'Географический объект'" в отчете, если у пользователя есть права?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

В практике администрирования и доработки конфигураций на платформе 1С:Предприятие часто встречается ситуация, когда отчет, прекрасно работающий у администратора, выдает ошибку компоновки данных у рядового пользователя. Одной из наиболее распространенных ошибок является сообщение вида "Поле не обнаружено". Рассмотрим подробнее этот случай на примере конфигурации "Бухгалтерия сельскохозяйственного предприятия" (БСХП) и отчета "Карта структуры посевных площадей".

Ситуация выглядит следующим образом: в коде при получении настроек компоновщика поле присутствует, администратор видит его в доступных полях, пользователь имеет права на просмотр соответствующего справочника (в данном случае "Географические объекты"), но при формировании отчета система выдает ошибку.

Давайте разберем причины такого поведения и способы решения проблемы, опираясь на особенности работы Системы Компоновки Данных (СКД) и механизмы разграничения прав доступа.

Анализ исходной ситуации

В исходном коде, который выполняется в привилегированном режиме или под администратором, настройки получаются корректно:


Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// В коллекции "Настройки" существуют поля: Гектары, Координаты, ГеографическийОбъект

Однако у пользователя возникает ошибка. Тот факт, что пользователь может открыть справочник ГеографическиеОбъекты через интерфейс, сбивает с толку, так как создает иллюзию наличия полных прав. На самом деле механизм видимости полей в СКД работает сложнее, чем просто проверка права "Просмотр" на ссылку справочника.

Причина 1: Функциональные опции

В современных типовых и отраслевых решениях (ERP, КА, БСХП) видимость реквизитов, справочников и документов часто управляется не только ролями, но и Функциональными опциями.

Рассмотрим, как это работает:

  1. В конфигураторе справочник или его реквизит может быть привязан к функциональной опции (например, ИспользоватьАгрохимическийУчет или ВестиУчетПоПолям).
  2. Значение этой опции хранится в константе или регистре сведений.
  3. Если у пользователя нет прав на чтение константы, управляющей этой опцией, или сама опция выключена для его набора прав/интерфейса, платформа автоматически скрывает связанные поля из метаданных для этого сеанса.

В контексте СКД это означает, что при инициализации схемы компоновки данных платформа "вырезает" поля, отключенные функциональными опциями. Когда отчет пытается наложить отбор или группировку по полю ГеографическийОбъект, он его физически не находит в доступной схеме пользователя.

Решение: Проверим в конфигураторе, входит ли справочник "Географические объекты" в состав какой-либо функциональной опции. Убедимся, что роль пользователя дает право чтения объектов, определяющих значение этой опции (обычно это константы).

Причина 2: Права доступа к реквизитам (RLS и профили)

Наличие права на просмотр справочника (права на таблицу) не гарантирует права на чтение всех его полей. Если в запросе отчета используется обращение к конкретным реквизитам (например, координаты полигона, площадь, кадастровый номер), а у пользователя нет прав на просмотр именно этих реквизитов, СКД исключит все поле целиком, чтобы избежать ошибки доступа к данным.

Проанализируем ситуацию:

Если отчет пытается вывести поле, составленное из реквизитов, к которым нет доступа, возникает ошибка "Поле не обнаружено".

Решение: Проверим роли пользователя. Попробуем добавить профиль, связанный с агрономией или работой с картами. Также полезно заглянуть в Журнал регистрации на предмет ошибок AccessDenied (Отказ в доступе) при формировании отчета.

Причина 3: Кэш пользовательских настроек

Это одна из самых частых и неочевидных проблем. Пользователь мог сохранить вариант отчета или его настройки в тот момент, когда конфигурация была другой, или когда у него были другие права. Либо структура отчета обновилась с релизом (как в сообщении упоминается версия 3.0.174.30), а пользовательские настройки ссылаются на старые идентификаторы полей.

При формировании отчета 1С пытается применить сохраненные настройки (отборы, группировки, выбранные поля) к текущей схеме. Если в сохраненных настройках есть ссылка на поле, которое теперь недоступно (или называется иначе во внутренней структуре), возникает ошибка.

Решение: Выполним очистку настроек. Для этого в форме отчета нужно:

  1. Зайти в меню "Еще" (или "Все действия").
  2. Выбрать пункт "Установить стандартные настройки".
  3. Если это не помогает, можно попробовать через "Администрирование" -> "Настройки пользователей и прав" -> "Очистка настроек" удалить сохраненные настройки конкретного отчета для данного пользователя.

Причина 4: Ограничение доступа на уровне записей (RLS)

В сложных запросах СКД, если используется соединение с таблицей, к которой у пользователя полностью закрыт доступ через RLS (Record Level Security), оптимизатор запросов может исключить эту таблицу, и, как следствие, поля из нее станут недоступны.

Например, поле ГеографическийОбъект может подтягиваться не напрямую, а через регистр сведений (например, ПлощадиПолей). Если RLS настроен так, что пользователь не видит записей в этом регистре, поле может "исчезнуть".

Диагностика проблемы по шагам

Чтобы точно определить причину и устранить неисправность, выполним следующую последовательность действий:

Шаг 1. Проверка под полными правами
Как верно замечено в обсуждении, первым делом проверим работу отчета под пользователем с полными правами. Если под администратором отчет формируется корректно, значит проблема 100% в правах доступа или функциональных опциях.

Шаг 2. Сброс настроек
Попросим пользователя установить стандартные настройки отчета. Это исключит влияние "битого" кэша настроек.

Шаг 3. Анализ Журнала регистрации
Посмотрим журнал регистрации событий в момент формирования отчета. Фильтруем по событию "Отказ в доступе". Если видим ошибки доступа к константам — это функциональные опции. Если к реквизитам справочника — это нехватка ролей.

Шаг 4. Проверка Функциональных опций
Откроем конфигуратор. Найдем справочник ГеографическиеОбъекты. На вкладке "Дополнительно" или в свойствах посмотрим, привязан ли он к какой-либо ФункциональнойОпции. Если да — найдем эту опцию в дереве метаданных, посмотрим её "Хранение" (обычно Константа) и проверим, есть ли у роли пользователя права на чтение этой константы.

Шаг 5. Добавление ролей
Если конфигурация отраслевая (БСХП), часто права разбиты очень дробно. Попробуем добавить пользователю роль "Чтение нормативно-справочной информации по растениеводству" или аналогичную. В типовых конфигурациях для доступа к картам иногда требуется отдельная роль "Использование карт".

Пример программного решения (Костыль vs Правильный подход)

Иногда программисты пытаются решить проблему, принудительно добавляя права в коде или выполняя запрос в привилегированном режиме.


УстановитьПривилегированныйРежим(Истина);
// Формирование отчета

Однако для СКД это работает плохо, так как компоновка макета происходит в контексте прав текущего пользователя. Правильный подход — настройка ролей (Роли). Убедитесь, что пользователю назначены профили групп доступа, соответствующие его бизнес-функции (в данном случае работа с картами и полями).

Заключение

Ошибка "Поле не обнаружено" при наличии прав на объект чаще всего указывает на работу механизма Функциональных опций или сохранение некорректных пользовательских настроек. В редких случаях — это ограничение прав на конкретные реквизиты объекта. Последовательная проверка этих гипотез позволит быстро вернуть работоспособность отчета.

← На главную