Разработка отчетов на базе Системы компоновки данных (СКД) часто предполагает итеративный процесс: программист создает базу, пользователь в режиме «1С:Предприятие» настраивает удобные ему отборы, группировки и условное оформление, а затем просит закрепить эти настройки как «стандартный» вариант в конфигурации. На этом этапе многие разработчики сталкиваются с технической проблемой: файл, сохраненный пользователем, отказывается загружаться в конфигуратор, выдавая ошибку о несоответствии форматов или типов данных. В этой статье мы подробно разберем, как преодолеть эти трудности и корректно перенести плоды пользовательского труда в среду разработки.
Прежде чем приступать к загрузке, нам необходимо четко разграничить объекты, с которыми работает СКД. Ошибка «несоответствие форматов» чаще всего возникает из-за того, что конфигуратор ожидает один тип данных, а получает другой. Проанализируем структуру данных СКД:
.xml.Когда пользователь в режиме предприятия нажимает «Сохранить настройки», система может сохранять либо весь объект варианта, либо только текущие настройки. Конфигуратор же, в зависимости от того, в какой именно узел дерева настроек мы пытаемся загрузить файл, ожидает строго определенный формат XML.
Рассмотрим пошагово самый простой и правильный путь переноса настроек из пользовательского режима в конфигуратор:
1. В режиме «1С:Предприятие»: Откройте отчет, примените нужный пользовательский вариант. Нажмите кнопку «Изменить вариант» (обычно находится в меню «Еще»). В открывшемся окне редактирования варианта выберите «Все действия» — «Сохранить настройки». Сохраните файл на диск.
2. В режиме «Конфигуратор»: Откройте вашу схему компоновки данных. Перейдите на закладку «Настройки». Выберите нужный вариант в списке слева или создайте новый. Теперь внимание: чтобы загрузить настройки, нужно нажать на иконку «Загрузить настройки из файла» (синяя папка со стрелкой), которая находится на панели инструментов над деревом настроек. Не путайте это с загрузкой всей схемы (ПКМ на корне дерева в окне конфигурации)!
Выясним причину, по которой даже при соблюдении алгоритма может возникнуть сбой. Проанализируем ситуацию с отборами и параметрами. Если пользователь установил в отчете фильтр по конкретному элементу справочника (например, выбрал конкретную организацию или склад), в файл настроек записывается Уникальный Идентификатор (UUID) этой ссылки.
Проблема в том, что в конфигураторе нет базы данных. Когда вы пытаетесь загрузить настройки, содержащие ссылки на реальные объекты базы, конфигуратор может выдать ошибку или создать так называемую «битую ссылку». В тексте настройки это выглядит как объект типа НеизвестныйТип или ОбъектНеНайден.
Рекомендация: Перед выгрузкой настроек из режима «Предприятие» рекомендуется очистить все значения отборов и параметров, которые ссылаются на конкретные данные (документы, элементы справочников), если они не являются предопределенными. Оставьте только структуру отборов, а значения заполните уже в конфигураторе или оставьте пустыми для пользователя.
Если стандартный механизм «Сохранить настройки» дает сбои из-за специфики версии платформы или сложности схемы, мы можем воспользоваться программным методом выгрузки через СериализаторXDTO. Это гарантирует, что XML будет сформирован строго по правилам платформы.
Рассмотрим пример кода, который можно запустить во внешней обработке в режиме предприятия, чтобы получить «чистый» XML настроек:
// Получаем настройки текущего отчета
НастройкиДляВыгрузки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
// Используем СериализаторXDTO для записи в файл
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\MySettings.xml");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, НастройкиДляВыгрузки, "settings", "http://v8.1c.ru/8.1/data-composition-system/settings");
ЗаписьXML.Закрыть();
Полученный таким образом файл C:\MySettings.xml с гораздо большей вероятностью будет принят конфигуратором без возражений, так как мы явно указали пространство имен и тип объекта.
Существует еще один эффективный метод, который мы назовем «методом посредника». Он позволяет избежать проблем с форматами файлов вообще. Разберем его по шагам:
Этот способ самый надежный, так как копирование объектов внутри конфигуратора происходит по внутренним механизмам платформы, которые автоматически корректируют мелкие несоответствия версий и структур.
Если вы опытный разработчик, можно прибегнуть к прямому редактированию XML-файла схемы. Рассмотрим ситуацию, когда нужно заменить настройки в существующей схеме. Выгрузите схему из конфигуратора в файл schema.xml. Откройте его любым текстовым редактором (лучше всего Notepad++ или VS Code).
Найдите тег <settingsVariant>. Внутри него находится структура <settings>. Вы можете заменить всё содержимое тега <settings> на те данные, которые вы получили из пользовательского файла настроек. Однако будьте осторожны: необходимо следить за корректностью закрывающих тегов и пространств имен (xmlns), иначе конфигуратор просто не сможет прочитать схему.
Мы проанализировали основные способы переноса настроек СКД и выяснили, что ключ к успеху лежит в понимании разницы между НастройкамиКомпоновкиДанных и ВариантомНастроек. Помните о проблеме битых ссылок и старайтесь использовать метод копирования через внешний отчет как наиболее стабильный. Использование программной выгрузки через СериализаторXDTO также является отличным способом получить валидный XML-файл, готовый к импорту в любую версию конфигуратора.