Почему возникает ошибка создания источника доступных настроек компоновки данных во внешнем отчете СКД?

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

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

Суть и механизм возникновения ошибки

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

Исключительная ситуация генерируется в следующих случаях:

  1. По переданному адресу во временном хранилище отсутствует схема (адрес указывает на Неопределено, очищен сборщиком мусора или передан некорректно).
  2. Адрес временного хранилища был сформирован с привязкой к чужому контексту (например, использован неверный УникальныйИдентификатор формы или хранилище сеанса фонового задания, недоступное основному потоку).
  3. В свойствах внешнего отчета не заполнено поле основной схемы компоновки данных.
  4. Схема компоновки данных содержит поврежденные ссылки на метаданные конфигурации, недоступные текущему сеансу или внешнему файлу.

Влияние параметра запуска /C РежимОтладки и фоновых заданий

Проанализируем конкретный случай из практики: отчет перестает работать, если база запущена с дополнительным параметром /C РежимОтладки. По умолчанию БСП формирует отчеты асинхронно в фоновом задании через подсистему длительных операций.

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

Для исправления достаточно закрыть сеанс отладки и убрать ключ /C РежимОтладки из параметров запуска информационной базы в окне запуска 1С.

Несовместимость типовой формы БСП с режимом прямого открытия файла

Рассмотрим подробнее архитектурные особенности типовых отчетов. В конфигурациях на базе БСП отчеты обычно привязаны к объекту ОбщаяФорма.ФормаОтчета подсистемы «Варианты отчетов». Когда вы открываете файл отчета через меню «Файл → Открыть», платформа не находит объект во внутреннем дереве метаданных Метаданные.Отчеты.

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

Способ 1. Регистрация через «Дополнительные отчеты и обработки»

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

Для этого добавим в модуль объекта отчета стандартную экспортную функцию:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Внешний отчет'");
    Команда.Идентификатор = "ОсновнаяКоманда";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    
    Возврат ПараметрыРегистрации;
КонецФункции

После добавления функции подключим отчет в режиме «1С:Предприятие» через раздел администрирования печатных форм, отчетов и обработок.

Способ 2. Создание собственной формы отчета без использования БСП

Если отчет требуется запускать автономно исключительно из файла .erf, отвяжем его от общих механизмов БСП:

  1. Откроем внешний отчет в конфигураторе и очистим поле Основная форма.
  2. Создадим собственную новую управляемую форму отчета. Платформа автоматически сгенерирует стандартную форму СКД с табличным документом и панелью настроек.
  3. Если форма создается вручную с нуля, инициализируем компоновщик настроек в серверном обработчике формы, передав адрес схемы с привязкой к текущей форме:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СхемаКД = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД, УникальныйИдентификатор);
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
КонецПроцедуры

Передача параметра УникальныйИдентификатор формы гарантирует, что данные схемы будут существовать во временном хранилище ровно столько, сколько открыта форма отчета.

Способ 3. Проверка корневых свойств отчета и кэша

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

Если отчет работает локально, но падает на клиент-серверной базе с ошибкой чтения временного хранилища (e1cib/tempstorage/... Undefined), причиной может быть сбой сеансового кэша. В такой ситуации помогает перезапуск службы кластера серверов 1С с удалением каталогов сеансовых данных (папки с префиксом snccntx в каталоге reg_xxxx).

Способ 4. Альтернатива — отладка через расширение конфигурации

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

← На главную