Как программно перенести варианты отчета в другую базу 1С?

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

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

Выясним причину проблемы с загрузкой вариантов

Рассмотрим, как устроено хранение вариантов отчетов в платформе 1С:Предприятие 8.3. Данные о настройках отчетов размещаются на нескольких уровнях:

  1. Системное хранилище вариантов отчетов (ХранилищеВариантовОтчетов) — хранит основные пользовательские варианты и их наименования.
  2. Системное хранилище системных настроек (ХранилищеСистемныхНастроек) — содержит вспомогательную информацию, служебные связи и конфигурационные параметры отображения вариантов отчета для пользователей.
  3. Механизмы Библиотеки Стандартных Подсистем (БСП) — в типовых конфигурациях (например, 1С:Управление нашей фирмой, 1С:ERP, 1С:ЗУП) варианты дополнительно регистрируются в справочнике ВариантыОтчетов.

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

Проанализируем пример кода выгрузки и загрузки

Посмотрим на пример выгрузки вариантов настроек отчетов во внешний файл XML с использованием объекта СериализаторXDTO:


Процедура СохранитьНастройки(Кнопка)
    НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Путь = "e:\config.xml";
    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(Путь);
    
    МенеджерХранилища = ХранилищеВариантовОтчетов;
    Настройки = МенеджерХранилища.Выбрать();
    
    Табл = Новый ТаблицаЗначений;
    Табл.Колонки.Добавить("КлючОбъекта");
    Табл.Колонки.Добавить("КлючНастроек");
    Табл.Колонки.Добавить("Настройки");
    Табл.Колонки.Добавить("Пользователь");
    Табл.Колонки.Добавить("Представление");
    
    Пока Настройки.Следующий() Цикл
        Стр = Табл.Добавить();
        Стр.КлючНастроек = Настройки.КлючНастроек;
        Стр.КлючОбъекта = Настройки.КлючОбъекта;
        Стр.Настройки = Настройки.Настройки;
        Стр.Пользователь = Настройки.Пользователь;
        Стр.Представление = Настройки.Представление;
    КонецЦикла;
    
    Запись.ЗаписатьОбъявлениеXML();
    НовыйСXDTO.ЗаписатьXML(Запись, Табл, НазначениеТипаXML.Явное, ФормаXML.Элемент);
    Запись.Закрыть();
КонецПроцедуры

При загрузке данных в целевую базу считывание из XML выполняется следующим образом:


Процедура ВосстановитьНастройки(Кнопка)
    НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Путь = "e:\config.xml";
    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(Путь);
    
    МенеджерХранилища = ХранилищеВариантовОтчетов;
    Табл = НовыйСXDTO.ПрочитатьXML(Чтение);
    
    Опис = Новый ОписаниеНастроек;
    Для Каждого Стр Из Табл Цикл
        Опис.КлючОбъекта = Стр.КлючОбъекта;
        Опис.КлючНастроек = Стр.КлючНастроек;
        Опис.Пользователь = Стр.Пользователь;
        Опис.Представление = Стр.Представление;
        
        МенеджерХранилища.Сохранить(Стр.КлючОбъекта, Стр.КлючНастроек, Стр.Настройки, Опис, Стр.Пользователь);
    КонецЦикла;
    
    Чтение.Закрыть();
КонецПроцедуры

Разберем решение для корректного переноса

Чтобы варианты отчетов не только отображались в списке, но и успешно восстанавливали свои настройки при открытии, необходимо применить следующий комплекс мер:

  1. Перенос данных системных настроек: По аналогии с ХранилищеВариантовОтчетов следует выгрузить и восстановить записи из менеджера ХранилищеСистемныхНастроек. Именно в нем платформа хранит сопоставления выбранных пользователем вариантов и текущих форм отчетов.
  2. Использование ХранилищаЗначения: При передаче объектов типа НастройкиКомпоновкиДанных рекомендуется помещать их в ХранилищеЗначения для предотвращения искажения типов при XDTO-сериализации.
  3. Проверка ссылочной целостности: Если вариант отчета содержит отборы по конкретным элементам справочников (например, по организациям или складам), эти элементы в целевой базе должны иметь идентичные уникальные идентификаторы (GUID). При несоответствии ссылок платформа сбрасывает настройки СКД к первоначальным.

Альтернативные способы переноса настроек

Если нет необходимости писать собственный программный перенос для всей базы, рассмотрим готовые интерактивные варианты:

  1. Экспорт и импорт через меню отчета (БСП): В исходной базе откроем требуемый отчет, выберем меню «Ещё» -> «Варианты отчета» -> «Сохранить в файл...». В целевой базе через аналогичное меню выберем команду «Обновить из файла...». Это обеспечит корректную регистрацию варианта как в платформенных хранилищах, так и в подсистеме БСП.
  2. Сохранение настроек СКД в XML: В форме настройки отчета (в расширенном режиме) можно сохранить текущие настройки компоновки данных непосредственно в XML-файл и загрузить их в другом инстансе отчета.
← На главную