Почему дополнительные сведения БСП не выводятся в отчетах и списках при использовании расширения в 1С?

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

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

Автор проблемы, присоединив механизм БСП к своему нетиповому справочнику через расширение, обнаружил, что, хотя на форме элемента справочника появились команда для дополнительных сведений и поля для дополнительных реквизитов, а также команда сведений на форме списка, попытка вывести дополнительные сведения в отчетах (например, в универсальном отчете) или добавить их как поле в форму списка справочника вызывала ошибку "Поле не обнаружено "Ссылка.[НаименованиеДопСведения]"". При этом дополнительные реквизиты того же справочника работали безупречно.

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

Разберем суть проблемы: Дополнительные реквизиты vs. Дополнительные сведения

Прежде чем углубляться в детали проблемы с расширениями, давайте четко разграничим понятия «Дополнительные реквизиты» и «Дополнительные сведения» в контексте БСП. Это фундаментально важно для понимания логики работы механизма и возможных причин возникновения ошибок.

  1. Дополнительные реквизиты (ДР):
    • Хранение: Они хранятся непосредственно в самом объекте конфигурации, к которому подключены. Обычно для этого используется табличная часть объекта, например, с именем ДополнительныеРеквизиты. Каждая строка этой табличной части содержит информацию о дополнительном реквизите (вид реквизита, его значение).
    • Отображение: Отображаются непосредственно на форме элемента или документа, увеличивая контекст формы. Они представляют собой обычные поля ввода или отображения.
    • Применение: Идеально подходят для хранения часто используемой, критически важной дополнительной информации, которая должна быть всегда под рукой и видна пользователю (например, размер, цвет, артикул поставщика).
    • Производительность: Хотя они увеличивают объем данных в основной таблице объекта и могут незначительно влиять на время открытия формы из-за дополнительного считывания табличной части, их прямой доступ обычно делает их быстрыми для частого использования.
  2. Дополнительные сведения (ДС):
    • Хранение: Хранятся в отдельном регистре сведений, что является ключевым отличием. Обычно это регистр сведений типа ОбъектСвойствоЗначение. Каждая запись такого регистра связывает конкретный объект (например, элемент справочника), вид свойства (наименование дополнительного сведения) и его значение.
    • Отображение: Не выводятся на форму элемента напрямую как поля. Доступ к ним осуществляется через специальную команду (кнопку) на форме, которая открывает отдельную форму для работы с этими сведениями. Они не увеличивают контекст основной формы.
    • Применение: Лучше использовать для справочной, реже используемой информации, которая не должна "загромождать" основную форму. Такой подход позволяет добавлять практически неограниченное количество дополнительных сведений без существенного увеличения времени серверного вызова для основной формы.
    • Производительность: За счет отдельного хранения и вывода "по требованию" они более масштабируемы, но их получение может потребовать дополнительного запроса к регистру сведений.

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

Настройка механизма дополнительных реквизитов и сведений в БСП (стандартный подход)

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

  1. Активация функционала: Убедитесь, что в режиме «1С:Предприятие», как правило, в разделе «НСИ и админиментирование» -> «Общие настройки», установлена константа ИспользоватьДополнительныеРеквизитыИСведения в значение Истина. Это базовое условие для работы всего механизма.
  2. Настройка наборов свойств: Для каждого объекта, для которого мы хотим использовать дополнительные свойства, необходимо настроить набор дополнительных свойств. Это делается в справочнике НаборыДополнительныхРеквизитовИСведений.

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

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

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

Диагностика и попытки решения проблемы автором

Автор предпринял несколько логичных шагов для локализации проблемы, что позволяет нам исключить некоторые распространенные причины:

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

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

Предполагаемый источник проблемы: Баг платформы и расширения

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

Ошибка «Поле не обнаружено» в контексте СКД (Системы Компоновки Данных), которая используется для формирования отчетов и динамических списков, может возникать по нескольким причинам:

  1. Некорректное "видение" метаданных расширения: Платформа или СКД могут некорректно интерпретировать метаданные, добавленные расширением. Если расширение добавляет или изменяет объект, а затем пытается использовать его свойства (например, виртуальные поля, генерируемые БСП для дополнительных сведений), платформа может "не видеть" эти поля в контексте запроса или компоновки данных.
  2. Особенности работы БСП и расширений: Механизм дополнительных сведений БСП генерирует специальные запросы для получения данных из регистра сведений. Возможно, при работе через расширение, эти генерируемые запросы формируются некорректно или их выполнение сталкивается с ограничениями безопасности/видимости в рамках расширения.
  3. Версия совместимости расширения: В сообщении упоминается версия совместимости расширения 21. Различные версии совместимости расширений могут приводить к различному поведению платформы. Иногда снижение или повышение версии совместимости может решить проблему, но это не всегда так.
  4. Общие проблемы платформы 8.3.25: Хотя прямых указаний на этот конкретный баг в общих описаниях версии 8.3.25 нет, каждая версия платформы имеет свои особенности и исправления. Сложные взаимодействия между подсистемами, такими как БСП, СКД и механизм расширений, могут приводить к непредсказуемым результатам.

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

Как должен работать механизм дополнительных сведений в отчетах и динамических списках (корректный подход)

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

В БСП, ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения является центральным звеном, которое позволяет нам оперировать дополнительными реквизитами и сведениями как обычными полями в отчете. Это позволяет, например, добавлять отборы по этим дополнительным свойствам.

Для вывода дополнительных свойств (как реквизитов, так и сведений) в отчетах на СКД обычно используется специальная конструкция в запросе, которая позволяет "развернуть" характеристики объекта. Типовой запрос для СКД, работающий с характеристиками, может выглядеть примерно так:


ВЫБРАТЬ
    СправочникОбъект.Ссылка КАК Ссылка,
    СправочникОбъект.Наименование КАК Наименование
ИЗ
    Справочник.ВашНетиповойСправочник КАК СправочникОбъект
{ХАРАКТЕРИСТИКИ
    СправочникОбъект.Ссылка,
    ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения,
    Справочник.ЗначенияСвойствОбъектов
}

Разберем этот фрагмент:

  1. Блок {ХАРАКТЕРИСТИКИ ... } — это специальный синтаксис запросов 1С, предназначенный для работы с планами видов характеристик.
  2. Первый параметр СправочникОбъект.Ссылка указывает на объект, для которого мы хотим получить характеристики.
  3. Второй параметр ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения указывает, какой именно план видов характеристик мы используем для определения свойств.
  4. Третий параметр Справочник.ЗначенияСвойствОбъектов (или аналогичный регистр сведений, хранящий значения характеристик) указывает, где хранятся значения этих характеристик.

При использовании такой конструкции, система компоновки данных автоматически "разворачивает" дополнительные свойства, делая их доступными как обычные поля в наборе данных СКД. Это позволяет:

В случае с динамическими списками, платформа предоставляет аналогичные возможности для включения характеристик в список. Однако, в рассматриваемой проблеме, даже этот корректный и типовой подход не срабатывал для дополнительных сведений при использовании расширения, что еще раз подтверждает гипотезу о баге платформы.

Выводы и принятое решение по данной проблеме

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

Пришли к следующему выводу и решению:

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

Что мы можем извлечь из этой ситуации:

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

← На главную