Почему в конструкторе запроса расширения 1С отсутствует реквизит ЭтоГруппа и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке расширений конфигурации в среде 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда при попытке составить запрос к заимствованному справочнику через штатный конструктор запросов в списке полей отсутствуют стандартные реквизиты, например, ЭтоГруппа или Родитель, хотя в основной конфигурации справочник является иерархическим и эти поля доступны. Разберем по шагам, почему так происходит, как устроена работа конструктора запросов в расширениях и какими способами можно решить эту задачу.

Причина поведения конструктора запросов в расширении

Проанализируем контекст разработки и выполнения программного кода в 1С. Важно понимать ключевое различие между работой конструктора запросов в конфигураторе и выполнением сформированного текста запроса в режиме 1С:Предприятие:

  1. Контекст конструктора запросов: Конструктор запросов, открытый из модуля расширения, видит только ту структуру метаданных, которая физически заимствована или создана непосредственно в данном расширении. Если объект заимствован без определенных реквизитов или без признака иерархии, конструктор считает, что этих полей не существует.
  2. Контекст времени выполнения: В режиме 1С:Предприятие платформа применяет расширение поверх основной конфигурации и выполняет текст запроса к объединенной схеме базы данных. Поэтому корректно написанный вручную текст запроса, обращающийся к незаимствованным полям основной конфигурации, успешно выполнится без ошибок.

Способ 1. Корректное заимствование свойств и стандартных реквизитов справочника

Если нам необходимо полноценно использовать конструктор запросов прямо в модулях расширения, разберем порядок действий для настройки свойств заимствованного справочника:

  1. Откроем дерево метаданных нашего расширения конфигурации.
  2. Найдем заимствованный справочник и откроем его палитру свойств.
  3. Проверим свойство Иерархический справочник. Если флажок снят, установим его и выберем вид иерархии (например, Иерархия групп и элементов). После включения иерархии стандартные поля ЭтоГруппа и Родитель автоматически станут доступны конструктору.
  4. Если иерархия включена, но конкретный реквизит не отображается, раскроем ветку Стандартные реквизиты заимствованного справочника в расширении, найдем нужный реквизит (например, ЭтоГруппа) и через контекстное меню добавим его в расширение.

Посмотрим на пример текста запроса, который становится доступен для редактирования в конструкторе:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.Наименование КАК Наименование,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	НЕ Номенклатура.ЭтоГруппа";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Обработка элементов справочника
КонецЦикла;

Способ 2. Разработка запроса без заимствования лишних метаданных

Рассмотрим альтернативный подход, который часто применяется на практике, когда заимствовать большое количество метаданных в расширение нецелесообразно. Если запрос сложный и обращается к десяткам регистров, табличных частей и справочников, заимствование каждого объекта исключительно ради открытия конструктора сильно перегружает расширение и усложняет его дальнейшую поддержку.

Разберем эффективные варианты обхода этого ограничения:

  1. Использование внешней консоли запросов: Открываем обработку «Консоль запросов» непосредственно в режиме «1С:Предприятие». В этом режиме доступна вся структура метаданных основной базы. Составляем, отлаживаем и проверяем результат запроса, после чего копируем готовый текст в модуль расширения.
  2. Конструирование во внешней обработке: Создаем временную внешнюю обработку в конфигураторе основной конфигурации, собираем нужный текст запроса штатным конструктором и вставляем полученный текст в процедуру или функцию модуля расширения.
  3. Ручное редактирование текста запроса: Если требуется добавить только одно поле, например, условие по полю ЭтоГруппа, дописываем текст запроса вручную прямо в коде модуля без вызова конструктора.

Особенности настройки режима совместимости расширения

При работе с расширениями важно следить за согласованностью параметров совместимости. Разберем ключевые правила настройки свойства РежимСовместимости:

  1. Свойство Режим совместимости у расширения конфигурации должно в точности совпадать со свойством Режим совместимости основной конфигурации. Если у основной конфигурации установлен, например, режим Версия 8.3.6, то и в свойствах расширения обязан быть выставлен режим Версия 8.3.6.
  2. Попытка установить в расширении значение Не использовать или более высокую версию при старом режиме совместимости основной конфигурации приведет к ошибке подключения расширения.
  3. Если мы принудительно отключаем режим совместимости в основной конфигурации (выставляем Не использовать), конфигурация может выдать ошибку «Серверные вызовы при завершении работы запрещены». Это связано с тем, что в современных версиях платформы запрещено выполнять синхронные серверные вызовы в событиях закрытия программы (ПередЗавершениемРаботы, ПриЗавершенииРаботы). Отключать режим совместимости у типовых конфигураций следует только при их полном обновлении до версий БСП, адаптированных к работе без совместимости.
← На главную