Разработка и отладка отчетов на базе Системы компоновки данных (СКД) в устаревших или кастомизированных конфигурациях на обычных формах (например, Управление торговым предприятием, Управление производственным предприятием 1.3 или Комплексная автоматизация 1.1) часто превращается в серьезную проблему для разработчика. Стандартная обработка «Консоль компоновки данных», поставляемая фирмой «1С» на дисках ИТС, разработана исключительно под управляемый интерфейс. При попытке запустить систему в режиме управляемого приложения для работы с ней разработчики регулярно сталкиваются с фатальными ошибками инициализации сеанса.
В этой статье мы подробно рассмотрим причины возникновения этой проблемы и разберем три проверенных практических метода, которые позволят вам полноценно работать с консолью СКД в режиме обычного приложения на платформе 8.2 и 8.3.
Для начала проанализируем техническую сторону вопроса. Официальная «Консоль системы компоновки данных» спроектирована с использованием управляемых форм. Для корректной отрисовки интерфейса и работы встроенного конструктора запросов и схем платформе требуется режим «Толстый клиент (управляемое приложение)».
Попытка принудительно запустить старую конфигурацию в режиме управляемого приложения через параметры запуска или конфигуратор обычно приводит к аварийному завершению работы системы по следующим причинам:
МодульУправляемогоПриложения отсутствует необходимая инициализация параметров сеанса, либо код написан некорректно для работы в управляемом режиме..cfe), которая появилась только в версиях 8.3.6/8.3.8. Соответственно, внедрить управляемые инструменты в качестве расширения технически невозможно.Ниже мы подробно разберем три альтернативных способа решения этой задачи.
Самым эффективным и функциональным решением для работы с СКД в режиме обычного приложения является использование подсистемы «Инструменты разработчика» (ИР), а точнее ее переносимой версии — «ИР Портативный» (ранее известной как «Мобильные ИР»).
Этот программный комплекс спроектирован специально на обычных формах и идеально подходит для работы в режиме обычного приложения на платформах 1С:Предприятие 8.2 и 8.3.
Выполним следующие шаги для запуска:
ирПортативный.epf).ирПортативный.epf.Преимущества этого метода: Консоль СКД из состава «ИР Портативный» значительно превосходит стандартную консоль от «1С». Она позволяет не просто редактировать схемы, но и детально отлаживать запросы, просматривать содержимое временных таблиц на любом этапе компоновки, замерять производительность отдельных частей схемы и анализировать промежуточные макеты компоновки данных.
Если на сервере действуют жесткие ограничения политики безопасности, запрещающие запуск сторонних тяжелых обработок вроде «Инструментов разработчика», можно применить элегантный обходной путь с использованием двух баз данных.
Рассмотрим этот алгоритм по шагам:
Для автоматизации процесса выгрузки и загрузки схем компоновки данных вы можете использовать следующий программный код в простой внешней обработке:
// Пример программного экспорта схемы компоновки данных в XML-файл
СхемаКомпоновкиДанных = Отчеты.МойОтчетУТП.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\skd_templates\MySchema.xml", "UTF-8");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных, "dataCompositionSchema", "http://v8.1c.ru/8.1/data-composition-system/schema");
ЗаписьXML.Закрыть();
Сообщить("Схема успешно экспортирована для настройки!");
После редактирования в чистой базе вы можете загрузить схему обратно следующим образом:
// Пример программного импорта измененной схемы из XML-файла
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C:\skd_templates\MySchema.xml");
НоваяСхема = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));
ЧтениеXML.Закрыть();
// Запись измененной схемы в отчет или использование в макете
// (требуются права на изменение метаданных, если схема импортируется напрямую в конфигурацию)
На профильных ресурсах для разработчиков (таких как Инфостарт) доступно множество альтернативных консолей СКД, написанных энтузиастами непосредственно под **обычные формы**.
Проанализируем принцип их работы: они представляют собой внешние обработки (.epf), которые содержат элементы управления обычного приложения (табличные поля, деревья значений, стандартные диалоги выбора файлов). Они используют стандартный программный интерфейс платформы 1С для работы с СКД:
КомпоновщикНастроекКомпоновкиДанных — для редактирования параметров, отборов и выводимых полей;КомпоновщикМакетаКомпоновкиДанных — для генерации макета выполнения;ПроцессорКомпоновкиДанных — для соединения схемы с реальными источниками данных информационной базы;ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент — для вывода итогового результата в форму.Такие консоли не требуют тяжелых библиотек, запускаются мгновенно как внешние обработки в УТП 8.2 и отлично подходят для быстрого анализа выполнения запросов СКД на реальных данных прямо в рабочей базе. Для детального анализа промежуточных данных компоновки также подойдёт инструмент для отладки отчетов на СКД.
Если вам критически важно запустить стандартную управляемую консоль СКД именно в вашей рабочей базе, нам потребуется локализовать и устранить ошибки инициализации при старте управляемого сеанса. Рассмотрим, как это сделать наиболее безопасным способом:
Откройте конфигуратор, перейдите в свойства корневого узла конфигурации и откройте Модуль управляемого приложения. Зачастую там присутствуют вызовы процедур, которые вызывают падение системы. Оберните проблемные участки кода в инструкции препроцессора:
Процедура ПриНачалеРаботыСистемы()
#Если Клиент И Не ТонкийКлиент Тогда
// Этот блок кода выполнится только в обычном толстом клиенте
// Инициализируем обычные формы и интерфейс
ИнициализироватьОбычныйИнтерфейс();
#КонецЕсли
#Если УправляемоеПриложение Тогда
// Здесь размещаем код инициализации только для управляемого режима,
// исключая вызовы модулей, привязанных к обычным формам
ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИмяВхода", ИмяПользователя());
#КонецЕсли
КонецПроцедуры
Использование таких директив компиляции позволит вам изолировать несовместимый код обычного приложения, успешно запускать конфигурацию в режиме Толстый клиент (управляемое приложение) и использовать абсолютно любые стандартные инструменты разработчика от фирмы «1С». Для работы в таком режиме можно использовать управляемую консоль запросов и отчетов СКД.