Как правильно загрузить пользовательский вариант отчета СКД в конфигураторе и избежать ошибок формата

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

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

Разбираемся в иерархии объектов СКД

Прежде чем приступать к загрузке, нам необходимо четко разграничить объекты, с которыми работает СКД. Ошибка «несоответствие форматов» чаще всего возникает из-за того, что конфигуратор ожидает один тип данных, а получает другой. Проанализируем структуру данных СКД:

  1. Схема компоновки данных (DataCompositionSchema) — это фундамент. Она содержит запросы, описания наборов данных, доступные поля и параметры. Расширение файла при выгрузке — обычно .xml.
  2. Вариант настроек (DataCompositionSettingsVariant) — это описание конкретного представления отчета внутри схемы (например, «Ведомость по складам» и «Остатки товаров» могут быть разными вариантами одной схемы).
  3. Настройки компоновки данных (DataCompositionSettings) — это конкретный набор выбранных полей, отборов и сортировок, который применяется к варианту или схеме.

Когда пользователь в режиме предприятия нажимает «Сохранить настройки», система может сохранять либо весь объект варианта, либо только текущие настройки. Конфигуратор же, в зависимости от того, в какой именно узел дерева настроек мы пытаемся загрузить файл, ожидает строго определенный формат 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 с гораздо большей вероятностью будет принят конфигуратором без возражений, так как мы явно указали пространство имен и тип объекта.

Использование внешнего отчета как промежуточного буфера

Существует еще один эффективный метод, который мы назовем «методом посредника». Он позволяет избежать проблем с форматами файлов вообще. Разберем его по шагам:

  1. В режиме «Предприятие» сохраните отчет с нужными настройками как внешний отчет (.erf), если ваша конфигурация это позволяет (через «Сохранить как»).
  2. Либо создайте новый внешний отчет в конфигураторе, скопируйте туда вашу схему.
  3. В режиме предприятия откройте этот внешний отчет, настройте его как нужно и сохраните вариант.
  4. Вернитесь в конфигуратор, откройте этот внешний отчет.
  5. В окне настроек СКД внешнего отчета нажмите правую кнопку мыши на корневом элементе настроек и выберите «Копировать».
  6. Перейдите в основной отчет конфигурации, в аналогичное окно настроек, и нажмите «Вставить».

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

Ручное редактирование XML (для продвинутых пользователей)

Если вы опытный разработчик, можно прибегнуть к прямому редактированию XML-файла схемы. Рассмотрим ситуацию, когда нужно заменить настройки в существующей схеме. Выгрузите схему из конфигуратора в файл schema.xml. Откройте его любым текстовым редактором (лучше всего Notepad++ или VS Code).

Найдите тег <settingsVariant>. Внутри него находится структура <settings>. Вы можете заменить всё содержимое тега <settings> на те данные, которые вы получили из пользовательского файла настроек. Однако будьте осторожны: необходимо следить за корректностью закрывающих тегов и пространств имен (xmlns), иначе конфигуратор просто не сможет прочитать схему.

Заключение

Мы проанализировали основные способы переноса настроек СКД и выяснили, что ключ к успеху лежит в понимании разницы между НастройкамиКомпоновкиДанных и ВариантомНастроек. Помните о проблеме битых ссылок и старайтесь использовать метод копирования через внешний отчет как наиболее стабильный. Использование программной выгрузки через СериализаторXDTO также является отличным способом получить валидный XML-файл, готовый к импорту в любую версию конфигуратора.

← На главную