При выгрузке типового отчета, построенного с использованием Библиотеки стандартных подсистем (БСП), в отдельный внешний отчет разработчики часто сталкиваются с исключением: «Ошибка создания источника доступных настроек компоновки данных». Эта ошибка происходит в момент формирования отчета или открытия его формы в режиме «1С:Предприятие». Разберем природу этого поведения платформы, проанализируем взаимосвязь с механизмами БСП и рассмотрим все способы решения проблемы.
Выясним причину на уровне платформенных вызовов. Ошибка возникает при выполнении конструктора объекта ИсточникДоступныхНастроекКомпоновкиДанных. В управляемом приложении на клиенте схема компоновки данных напрямую недоступна, поэтому конструктор инициализируется строковым адресом схемы, расположенной во временном хранилище.
Исключительная ситуация генерируется в следующих случаях:
Неопределено, очищен сборщиком мусора или передан некорректно).УникальныйИдентификатор формы или хранилище сеанса фонового задания, недоступное основному потоку).Проанализируем конкретный случай из практики: отчет перестает работать, если база запущена с дополнительным параметром /C РежимОтладки. По умолчанию БСП формирует отчеты асинхронно в фоновом задании через подсистему длительных операций.
Параметр командной строки /C РежимОтладки переключает подсистему «Длительные операции» на синхронный режим выполнения непосредственно в основном сеансе. При смене режима кардинально меняется жизненный цикл временного хранилища. Если алгоритм отчета или общие механизмы БСП рассчитывали на адрес, возвращаемый фоновым заданием, адрес схемы теряется, и при инициализации компоновщика настроек система выдает ошибку создания источника настроек.
Для исправления достаточно закрыть сеанс отладки и убрать ключ /C РежимОтладки из параметров запуска информационной базы в окне запуска 1С.
Рассмотрим подробнее архитектурные особенности типовых отчетов. В конфигурациях на базе БСП отчеты обычно привязаны к объекту ОбщаяФорма.ФормаОтчета подсистемы «Варианты отчетов». Когда вы открываете файл отчета через меню «Файл → Открыть», платформа не находит объект во внутреннем дереве метаданных Метаданные.Отчеты.
В результате встроенные механизмы БСП не могут корректно зарегистрировать вариант отчета, поместить схему во временное хранилище и возвращают пустой адрес. Разберем рабочие варианты обхода этой проблемы.
Вместо прямого открытия файла через главное меню зарегистрируем внешний отчет в штатном справочнике БСП. В этом сценарии библиотека инициализирует контекст внешнего объекта штатно, корректно выделяя временное хранилище.
Для этого добавим в модуль объекта отчета стандартную экспортную функцию:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Внешний отчет'");
Команда.Идентификатор = "ОсновнаяКоманда";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
После добавления функции подключим отчет в режиме «1С:Предприятие» через раздел администрирования печатных форм, отчетов и обработок.
Если отчет требуется запускать автономно исключительно из файла .erf, отвяжем его от общих механизмов БСП:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СхемаКД = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД, УникальныйИдентификатор);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
КонецПроцедуры
Передача параметра УникальныйИдентификатор формы гарантирует, что данные схемы будут существовать во временном хранилище ровно столько, сколько открыта форма отчета.
Посмотрим на частую механическую ошибку при сохранении отчета: при выгрузке типового отчета из конфигуратора в файл может очиститься свойство Основная схема компоновки данных в палитре свойств корневого узла. Убедимся, что макет схемы не просто присутствует внутри отчета, но и явно выбран в качестве основного.
Если отчет работает локально, но падает на клиент-серверной базе с ошибкой чтения временного хранилища (e1cib/tempstorage/... Undefined), причиной может быть сбой сеансового кэша. В такой ситуации помогает перезапуск службы кластера серверов 1С с удалением каталогов сеансовых данных (папки с префиксом snccntx в каталоге reg_xxxx).
Для глубокой доработки типовых БСП-отчетов гораздо удобнее не сохранять их во внешний файл, а добавлять в расширение конфигурации. В этом случае объект полностью сохраняет все связи с общими формами БСП, метаданными и правами доступа без необходимости переписывать код инициализации и подстраиваться под ограничения внешних файлов.