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