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