Почему конструктор запросов в расширении не видит субконто плана счетов и как это исправить?

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

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

Выясняем причину: почему «слепнет» конструктор запросов в расширении

Для начала проанализируем ситуацию и поймем, как работает платформа 1С с метаданными. Визуальный конструктор запросов — это инструмент среды разработки (конфигуратора), который строит дерево доступных таблиц и полей на основе строго определенного набора метаданных. В отличие от выполнения запроса в реальном времени, когда платформа имеет доступ ко всей базе данных (основная конфигурация плюс все активные расширения), конструктор запросов внутри конкретного расширения видит только «срез» метаданных.

Этот срез включает в себя:

  1. Собственные объекты, созданные непосредственно в данном расширении.
  2. Заимствованные объекты из основной конфигурации, которые разработчик явным образом добавил в расширение.

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

Рассмотрим основные технические причины, по которым конструктор не отображает субконто:


Способ №1: Правильное заимствование связанных метаданных в расширение

Самый правильный с точки зрения методологии разработки способ заставить конструктор запросов нормально работать — предоставить ему всю необходимую информацию о типах данных. Давайте разберем по шагам, что именно нужно добавить в расширение.

Шаг 1. Заимствование Плана счетов и регистра бухгалтерии

В дереве конфигурации найдите используемый план счетов (например, Хозрасчетный) и соответствующий ему регистр бухгалтерии. Нажмите правой кнопкой мыши по объекту и выберите пункт «Добавить в расширение».

Шаг 2. Заимствование Плана видов характеристик

Обязательно найдите связанный с вашим планом счетов План видов характеристик (как правило, это ВидыСубконтоХозрасчетные). Добавьте его в расширение тем же способом. Это ключевой момент, без которого конструктор не сможет связать счета с конкретными аналитиками.

Шаг 3. Заимствование типов данных (объектов аналитики)

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

Важное замечание: Добавляйте только те свойства и реквизиты объектов, к которым вы планируете обращаться в тексте запроса. Избыточное добавление метаданных усложняет поддержку расширения при обновлениях основной конфигурации.


Способ №2: Разработка запроса в основной конфигурации или консоли запросов (Рекомендуемый обходной путь)

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

Рассмотрим два варианта реализации этого подхода.

Вариант А: Использование внешней консоли запросов в пользовательском режиме

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

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ХозрасчетныйОстатки.Счет КАК Счет,
    |	ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    |	ХозрасчетныйОстатки.Субконто2 КАК Договор,
    |	ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки";

Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками);
РезультатЗапроса = Запрос.Выполнить();

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

Вариант Б: Использование временного конструктора в основной конфигурации

Если вам неудобно переключаться в режим предприятия, можно воспользоваться конфигуратором:

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

Обратите внимание: Если вы попытаетесь открыть этот запрос конструктором повторно уже внутри расширения, платформа выдаст ошибку или очистит «невидимые» с точки зрения расширения поля. Поэтому редактировать такой запрос в дальнейшем придется исключительно вручную (или снова копировать его во внешнюю обработку для визуального редактирования).


Способ №3: Метод временного заимствования для работы со сложными запросами

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

Проанализируем этот алгоритм:

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

Подведем итоги

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

← На главную