В практике разработчика 1С нередко возникает ситуация, когда при работе в режиме 1С:Предприятие стандартная Консоль запросов или встроенный Конструктор запросов ведут себя странно: список доступных полей объекта (справочника, документа или таблицы) в конструкторе оказывается неполным. При этом в Конфигураторе все реквизиты на месте, а сам запрос, если написать его вручную, может успешно выполняться. Рассмотрим подробно, почему возникает этот технический "косяк" и как восстановить видимость метаданных.
Прежде чем углубляться в настройки системы, нам необходимо выяснить, имеем ли мы дело с визуальным багом интерфейса или с реальным ограничением доступа к данным. Проанализируем ситуацию с помощью простого теста: введем имя "невидимого" поля в текст запроса вручную.
Если мы знаем, что у справочника Номенклатура есть реквизит Артикул, который не отображается в дереве полей слева, попробуем выполнить следующий код:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Артикул КАК Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Артикул <> ""
Если запрос выполняется и выдает результат, значит, на уровне базы данных и прав доступа проблем нет. Проблема кроется именно в механизме построения дерева метаданных в Конструкторе запросов.
Выясним одну из самых неочевидных причин: использование механизма Функциональных опций. В современных типовых конфигурациях (и даже в доработанных УПП) многие реквизиты привязаны к определенным опциям. Если в константах или настройках программы конкретная опция выключена, платформа 1С автоматически скрывает связанные с ней поля из интерфейса, включая Конструктор запросов в пользовательском режиме.
Проанализируем это в Конфигураторе:
Решение: Если поле скрыто функциональной опцией, оно не появится в конструкторе, пока опция не будет включена. Однако вы всегда можете прописать его в тексте запроса вручную.
Разберем ситуацию, связанную с расширениями. Если вы работаете в контексте расширения, Конструктор запросов будет видеть только те объекты и поля, которые добавлены в это конкретное расширение. Но даже если вы не создавали расширение сами, система может содержать автоматические патчи от 1С, которые влияют на схему метаданных.
Рассмотрим рекомендации по работе в таких условиях:
Часто разработчики полагают, что наличие роли ПолныеПрава снимает все ограничения. Однако это не всегда так. В типовых решениях (УПП, ERP, КА) могут быть настроены сложные ограничения на уровне записей (RLS). Если шаблоны RLS ограничивают доступ к полям по каким-то условиям (например, по организации или подразделению), Конструктор запросов может отфильтровывать эти поля.
Проанализируем права более детально:
Даже при наличии прав на "Чтение" объекта, у пользователя могут отсутствовать права на "Просмотр" конкретных реквизитов. В 1С это разные права. Если право Просмотр снято, поле исчезнет из всех визуальных списков, включая конструкторы запросов и отчеты.
Выясним техническую причину, которую часто называют "демоническим обновлением". Если конфигурация обновлялась в динамическом режиме, пока пользователи работали в базе, возникает рассинхронизация кэша метаданных. Платформа начинает использовать устаревшее описание таблиц.
Для решения этой проблемы выполним следующие действия:
%AppData%\1C\1Cv8).Разберем ситуацию с программным кодом самой консоли. Разные версии консолей используют разные методы получения состава полей. Старые консоли на обычных формах часто обращаются к метаданным через объект Метаданные, который может возвращать неполную информацию в новых версиях платформы или при наличии режима совместимости.
Попробуем использовать альтернативные инструменты:
Проанализировав проблему "исчезающих" полей, мы пришли к выводу, что чаще всего это связано либо с настройками Функциональных опций, либо с особенностями прав доступа View (Просмотр). Если же ручной запрос отрабатывает, а поля в списке нет — используйте ручной ввод имен полей (алиасов), так как это самый быстрый способ обойти визуальные ограничения конструктора.