При разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с неприятной особенностью: при создании или изменении запроса внутри расширения конфигурации визуальный Конструктор запроса отказывается видеть субконто плана счетов, виртуальные таблицы регистров бухгалтерии или даже некоторые добавленные документы. При этом сам запрос, если его написать вручную, может прекрасно работать в режиме предприятия. В этой статье мы подробно разберем, почему возникает эта проблема, и рассмотрим несколько эффективных способов ее решения.
Для начала проанализируем ситуацию и поймем, как работает платформа 1С с метаданными. Визуальный конструктор запросов — это инструмент среды разработки (конфигуратора), который строит дерево доступных таблиц и полей на основе строго определенного набора метаданных. В отличие от выполнения запроса в реальном времени, когда платформа имеет доступ ко всей базе данных (основная конфигурация плюс все активные расширения), конструктор запросов внутри конкретного расширения видит только «срез» метаданных.
Этот срез включает в себя:
Если вы хотите обратиться к какому-либо объекту (например, документу или справочнику) или к сложной структуре данных (например, субконто на плане счетов) из расширения, конструктор запросов не покажет их, пока в расширение не будут перенесены все сопутствующие связи. Субконто в системе 1С — это не просто отдельное поле в таблице, это сложный механизм, который тесно завязан на другие объекты метаданных.
Рассмотрим основные технические причины, по которым конструктор не отображает субконто:
ВидыСубконто), который определяет типы значений субконто. Если сам ПланСчетов добавлен в расширение, а связанный с ним ПВХ — нет, конструктор не сможет определить типы данных субконто и просто не выведет их в список доступных полей.ВидыСубконто содержит составной тип данных, включающий десятки справочников, документов и других объектов. Если в расширение заимствован ПВХ, но не заимствована часть объектов, входящих в его составной тип, конструктор запросов сталкивается с проблемой неразрешенных («битых») типов. В результате он может выдавать ошибки валидации, скрывать ресурсы регистра или вообще не отображать субконто в виртуальных таблицах (таких как Остатки, Обороты или ОстаткиИОбороты).Исправление, Адаптация, Дополнение), напрямую влияют на то, насколько глубоко конструктор анализирует связи. В режиме «Исправление» (Patch) возможности работы с метаданными наиболее ограничены.Самый правильный с точки зрения методологии разработки способ заставить конструктор запросов нормально работать — предоставить ему всю необходимую информацию о типах данных. Давайте разберем по шагам, что именно нужно добавить в расширение.
Шаг 1. Заимствование Плана счетов и регистра бухгалтерии
В дереве конфигурации найдите используемый план счетов (например, Хозрасчетный) и соответствующий ему регистр бухгалтерии. Нажмите правой кнопкой мыши по объекту и выберите пункт «Добавить в расширение».
Шаг 2. Заимствование Плана видов характеристик
Обязательно найдите связанный с вашим планом счетов План видов характеристик (как правило, это ВидыСубконтоХозрасчетные). Добавьте его в расширение тем же способом. Это ключевой момент, без которого конструктор не сможет связать счета с конкретными аналитиками.
Шаг 3. Заимствование типов данных (объектов аналитики)
Если в запросе вы планируете обращаться к конкретным реквизитам субконто (например, хотите получить Субконто1.Код или Субконто2.Артикул), вам необходимо добавить в расширение те объекты конфигурации, которые выступают в качестве этих субконто. Это могут быть справочники Номенклатура, Контрагенты, ДоговорыКонтрагентов или соответствующие документы.
Важное замечание: Добавляйте только те свойства и реквизиты объектов, к которым вы планируете обращаться в тексте запроса. Избыточное добавление метаданных усложняет поддержку расширения при обновлениях основной конфигурации.
Если заимствование огромного количества справочников и документов в расширение нежелательно (например, чтобы не перегружать расширение и избежать конфликтов при последующих обновлениях системы), есть отличный обходной путь. Поскольку само ядро платформы отлично выполняет ручные запросы к субконто внутри расширения, нам не обязательно заставлять работать именно конструктор внутри расширения. Мы можем разработать запрос в другом месте, а затем перенести готовый текст.
Рассмотрим два варианта реализации этого подхода.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет КАК Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто2 КАК Договор,
| ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками);
РезультатЗапроса = Запрос.Выполнить();
При сохранении кода платформа может выдать предупреждение или подчеркнуть текст запроса красным цветом (сигнализируя об ошибке проверки метаданных в рамках расширения), однако при компиляции и в режиме предприятия этот код отработает абсолютно корректно и без ошибок.
Если вам неудобно переключаться в режим предприятия, можно воспользоваться конфигуратором:
Обратите внимание: Если вы попытаетесь открыть этот запрос конструктором повторно уже внутри расширения, платформа выдаст ошибку или очистит «невидимые» с точки зрения расширения поля. Поэтому редактировать такой запрос в дальнейшем придется исключительно вручную (или снова копировать его во внешнюю обработку для визуального редактирования).
Если вам предстоит написать очень сложный и объемный запрос с множеством связей, условий и временных таблиц, ручное редактирование текста может оказаться слишком трудоемким. В таком случае можно применить метод временного заимствования объектов.
Проанализируем этот алгоритм:
Мы выяснили, что ограничение видимости субконто в расширении — это особенность работы инструмента разработки (конструктора запросов), а не ограничения самой платформы «1С:Предприятие». Использование консоли запросов или механизма временного добавления объектов метаданных позволяет обойти это препятствие и создавать эффективные механизмы бухгалтерского учета в расширениях конфигурации.