При работе со сложными отчетами на базе Системы компоновки данных (СКД) разработчики часто сталкиваются с необходимостью отладки или модернизации текста запроса. Одной из самых трудоемких задач в этом процессе является ручной перенос параметров. Если отчет содержит десятки фильтров, периодов и списков значений, вбивать их заново в консоль запросов долго и чревато ошибками. Рассмотрим эффективные способы автоматизации этого процесса, включая использование специализированных инструментов и решение сопутствующих технических проблем.
Наиболее продвинутый и быстрый метод заключается в использовании профессионального набора «Инструменты разработчика» (автор — Сергей Старых, известный как TormozIT). В этом комплексе реализована тесная интеграция между консолью СКД и консолью запросов. Разберем по шагам, как это работает:
.dcs) или откроем отчет непосредственно из конфигурации..xml), который содержит заполненные параметры.Этот метод позволяет избежать механической работы и исключает ошибки при копировании идентификаторов и типов значений.
Часто при попытке запустить мощные консоли или инструменты разработчика возникает ошибка: «невозможно подключить MSScriptControl.ScriptControl». Выясним причину этой ситуации. Данный компонент является 32-битным COM-объектом Windows. Если вы запускаете «1С:Предприятие» в 64-битной версии клиента, система не сможет инициализировать этот объект.
Рассмотрим варианты решения этой проблемы:
C:\Program Files (x86)\1cv8\...). В нем MSScriptControl будет работать корректно.msscript.ocx просто не зарегистрирована в системе. Попробуем выполнить команду в консоли Windows от имени администратора:
regsvr32 C:\Windows\SysWOW64\msscript.ocx
Если вы не хотите устанавливать сторонние инструменты, воспользуемся стандартной консолью СКД, которая входит в состав инструментов разработчика на диске ИТС. Она позволяет загружать схему и настройки. Рассмотрим алгоритм действий:
После того как мы загрузили файл настроек .xml, в интерфейсе консоли СКД обычно доступна кнопка или пункт меню «Открыть запрос». В современных версиях этой обработки реализован механизм передачи контекста (текста запроса и значений параметров) во внешнюю или встроенную консоль запросов.
Проанализируем ситуацию, если параметры представляют собой сложные типы (например, массивы или списки значений). Большинство стандартных консолей корректно сериализуют их из XML настроек компоновки и восстанавливают их структуру в таблице параметров. Это особенно полезно при отладке запросов, использующих оператор В (&Параметр).
Существует еще один профессиональный подход — захват параметров из реального сеанса работы пользователя. Вместо того чтобы выгружать настройки в XML, мы можем использовать «Инструменты разработчика» для перехвата выполнения запроса.
Для этого в ИР существует функция «Захват запросов». Мы запускаем отчет в обычном режиме, а консоль в фоновом режиме перехватывает структуру запроса и все актуальные значения параметров прямо «на лету» перед отправкой на сервер. После этого запрос со всеми данными можно открыть в консоли для детального анализа.
Если вам необходимо написать свою микро-обработку для переноса данных из файла настроек, можно использовать следующий фрагмент кода для чтения параметров из XML:
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлуНастроек);
Настройки = СериализаторXDTO.ПрочитатьXML(Чтение, Тип("НастройкиКомпоновкиДанных"));
Для Каждого ЗначениеПараметра Из Настройки.ПараметрыДанных.Элементы Цикл
Если ЗначениеПараметра.Использование Тогда
Имя = Строка(ЗначениеПараметра.Параметр);
Значение = ЗначениеПараметра.Значение;
// Здесь можно добавить логику заполнения таблицы параметров консоли
КонецЕсли;
КонецЦикла;
Важный момент: при использовании СериализаторXDTO система автоматически преобразует строковые представления из XML в типизированные объекты 1С (Ссылки, Числа, Даты), что позволяет корректно использовать их в дальнейшем при выполнении запроса в консоли.
Мы рассмотрели несколько способов решения задачи. Для разовых правок лучше всего подходит Консоль СКД из состава Инструментов Разработчика, так как она обеспечивает бесшовную передачу параметров в один клик. В случае возникновения ошибок COM-объектов рекомендуется переключиться на 32-битный клиент или использовать версии инструментов на управляемых формах, которые более стабильны в современных средах.