При работе со сложными типовыми конфигурациями (такими как «Управление торговлей», «ERP Управление предприятием» или «Комплексная автоматизация») разработчики часто сталкиваются со следующей проблемой. В режиме «1С:Предприятие» пользователи успешно работают с удобным вариантом отчета, но при попытке сохранить этот отчет как внешний разработчик не обнаруживает данного варианта в Конфигураторе. Попытки выгрузить настройки и загрузить их напрямую в макет СКД приводят к ошибкам формата или к созданию «пустой» схемы без наборов данных.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем разницу между элементами системы компоновки данных и рассмотрим пошаговое руководство, как правильно перенести пользовательский вариант отчета в Конфигуратор для последующего анализа и доработки.
Главная причина трудностей, с которыми сталкиваются начинающие разработчики, кроется в непонимании архитектуры Системы компоновки данных (СКД). Нам необходимо четко разделять два фундаментальных понятия:
Когда пользователь создает новый вариант отчета в режиме «1С:Предприятие» (например, «Себестоимость товаров по 1 номенклатуре» на базе типового отчета АнализСебестоимостиТоваровРасширенный), платформа не создает новую схему СКД. Она сохраняет только настройки компоновки. Сама схема с тяжелыми SQL-запросами остается прежней.
Когда вы через меню «Изменить вариант» выгружаете настройки в файл, платформа создает XML-файл, содержащий исключительно объект типа НастройкиКомпоновкиДанных. Попытка загрузить этот файл в Конфигураторе в качестве основной схемы СКД закономерно приводит к ошибке: конфигуратор ожидает увидеть структуру схемы (с запросами и полями), а получает лишь перечень группировок и отборов.
Чтобы восстановить полную картину и увидеть, как именно устроен пользовательский вариант отчета в Конфигураторе, нам нужно наложить сохраненные пользовательские настройки поверх оригинальной (типовой) схемы компоновки данных. Выполним этот процесс по шагам. В качестве альтернативы для анализа данных непосредственно в режиме Предприятия можно использовать расширение для отладки СКД и запросов под пользователем.
Для начала нам нужно получить файл настроек из пользовательского интерфейса:
Теперь нам нужен доступ к исходному коду и макету отчета:
АнализСебестоимостиТоваровРасширенный).ОсновнаяСхемаКомпоновкиДанных).На этом этапе мы соединяем схему и пользовательские настройки:
Важное примечание: Если в пользовательском варианте были жестко заданы отборы по конкретным элементам справочников (например, по конкретному складу или номенклатуре из текущей базы данных), в Конфигураторе на их месте вы увидите надпись «Объект не найден» и уникальный идентификатор (GUID). Это абсолютно нормально, так как в конфигураторе нет данных самой информационной базы. Для корректной работы такие отборы перед сохранением или уже после загрузки в Конфигуратор рекомендуется очистить.
Поскольку современные конфигурации 1С (УТ 11, ERP, КА) построены на базе Библиотеки стандартных подсистем (БСП), механизмы работы с отчетами стандартизированы. Пользовательские варианты, созданные в режиме «1С:Предприятие», не меняют метаданные конфигурации. Они хранятся непосредственно в таблицах информационной базы:
ВариантыОтчетов.Если вам необходимо быстро перенести пользовательский вариант отчета из одной базы данных в другую без использования Конфигуратора, воспользуйтесь встроенным механизмом БСП. В режиме «1С:Предприятие» в форме нужного отчета нажмите Еще -> Варианты отчета -> Сохранить в файл, а в базе-приемнике выполните аналогичную команду Обновить из файла.
В некоторых случаях разработчику требуется программно применить сохраненные настройки пользователя для вывода данных в коде или при программном формировании отчета на сервере. Рассмотрим, как прочитать XML-файл настроек и загрузить его в компоновщик:
// Путь к файлу, который мы сохранили из режима Предприятие
ПутьКФайлу = "C:\Users\User\Documents\MyReportSettings.xml";
// Читаем файл XML
ЧтениеXML = Новый ЧтениеXML;
Попытка
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
Исключение
ВызватьИсключение "Не удалось открыть файл настроек: " + ОписаниеОшибки();
КонецПопытки;
// Выполняем десериализацию XML-данных в объект 1С "НастройкиКомпоновкиДанных"
НастройкиКомпоновки = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("НастройкиКомпоновкиДанных"));
ЧтениеXML.Закрыть();
// Загружаем полученные настройки в компоновщик отчета
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки);
Этот код позволяет программно управлять структурой отчета, динамически загружая внешние файлы настроек в зависимости от бизнес-логики приложения. Для упрощения программного описания и модификации структуры отчетов можно воспользоваться библиотекой для программного создания СКД.
Проанализируем важную особенность отчета АнализСебестоимостиТоваровРасширенный. Попытка использовать его схему СКД во внешнем отчете напрямую очень часто приводит к некорректным результатам или пустым таблицам. Почему так происходит?
Этот отчет является динамическим. В модуле объекта этого отчета, в предопределенной процедуре ПриКомпоновкеРезультата, написан сложнейший программный алгоритм. Платформа перед формированием отчета анализирует настройки, которые выбрал пользователь, и на лету модифицирует саму схему компоновки данных:
Если вы хотите использовать логику построения себестоимости в своей собственной разработке, вам недостаточно просто скопировать схему компоновки. Вам придется перенести и адаптировать весь код из модуля объекта отчета АнализСебестоимостиТоваровРасширенный, убрав зависимости от глобальных серверных модулей БСП, которые не поддерживают работу с внешними отчетами напрямую.
Таким образом, мы детально разобрали механизм разделения схем и настроек СКД, научились переносить пользовательские варианты в среду разработки и узнали о подводных камнях при работе со сложными механизмами расчета себестоимости в типовых конфигурациях 1С.