Почему конструктор запроса в конфигураторе не видит объекты из расширения и как это исправить?

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

При разработке внешних отчетов и обработок в 1С часто возникает ситуация, когда конструктор запроса или конструктор схемы компоновки данных (СКД) не видит таблицы, созданные в расширении. Конфигуратор подчеркивает имя таблицы, например РегистрСведений.МойРегистр, и выдает ошибку «Таблица не найдена», хотя в режиме «1С:Предприятие» отчет прекрасно работает. Разберемся, почему так происходит и какие есть способы решения этой проблемы.

Выясним причину проблемы

Корень проблемы кроется в контексте, в котором работает конфигуратор. Когда вы открываете для редактирования внешний файл (отчет .erf или обработку .epf), конфигуратор не имеет информации о том, к какой информационной базе этот файл будет подключен. Соответственно, он "знает" только о метаданных основной конфигурации и ничего не знает об установленных в базе расширениях.

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

Это известное и долгое время существовавшее ограничение платформы. Рассмотрим, как с ним можно работать.

Способы решения: от обходных путей до кардинального

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

Решение 1: Использование консоли запросов в режиме «Предприятие»

Это самый распространенный и надежный способ. Его суть в том, чтобы создавать запрос не в конфигураторе, а в режиме «Предприятие», где видны все объекты, а затем переносить готовый текст в отчет.

Рассмотрим по шагам:

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

Важный момент: после вставки текста конфигуратор, скорее всего, продолжит ругаться на «ненайденную» таблицу. Эту ошибку можно и нужно игнорировать. Как мы уже выяснили, она возникает только на этапе разработки в конфигураторе, но никак не влияет на работоспособность отчета в боевом режиме.

Решение 2: Сборка запроса в контексте самого расширения

Этот способ немного хитрее, но тоже очень эффективен. Он позволяет использовать конструктор запроса в конфигураторе, но в правильном контексте.

Порядок действий:

  1. В конфигураторе откройте не внешний отчет, а само расширение, в котором создан нужный вам объект (регистр, справочник и т.д.).
  2. Создайте в этом расширении временный объект, например, новую обработку. Или откройте модуль любого существующего объекта в этом расширении.
  3. В модуле этого временного объекта вызовите конструктор запроса. Поскольку вы находитесь внутри расширения, конструктор будет «видеть» все его внутренние объекты, а также заимствованные объекты основной конфигурации.
  4. Соберите нужный вам запрос, как обычно.
  5. Скопируйте готовый текст запроса и вставьте его в свой внешний отчет. Временную обработку после этого можно удалить.

Этот метод не избавляет от ошибки в итоговом внешнем отчете, но позволяет удобно и визуально составить запрос, не выходя из конфигуратора.

Решение 3: Кардинальное решение — обновление платформы

Все описанные выше методы являются, по сути, обходными путями для старых версий платформы. Фирма «1С» знала об этой проблеме и исправила ее.

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

Таким образом, если вы используете платформу 8.3.28 или новее, конструктор запроса, конструктор СКД и работа с динамическими списками будут напрямую видеть объекты из расширений без каких-либо дополнительных действий. Это самое правильное и долгосрочное решение проблемы.

Уточнение по назначению расширения

Напоследок стоит упомянуть важный нюанс. Чтобы объекты, добавленные в расширении, были доступны из основной конфигурации, для самого расширения рекомендуется выбирать назначение «Адаптация» или «Исправление». Объекты из расширений с назначением «Дополнение» могут быть недоступны для прямого использования в запросах извне.

Подводя итог: если вы столкнулись с ошибкой «Таблица не найдена» для объекта из расширения, не пугайтесь. Используйте консоль запросов в режиме «Предприятие» для составления запроса или обновите платформу до актуальной версии, чтобы навсегда забыть об этой проблеме.

← На главную