Отладка сложных отчетов на СКД

28 Декабря 2018

Отладка сложных отчетов на СКД


Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

Отчеты на СКД в типовых решениях встречаются очень сложными. Чтобы понять, что они и почему выдают, по-хорошему надо взять запросы наборов данных или схему компоновки данных целом и "перебраться" с ними в консоли запросов или отчетов СКД. Но беда в том, что готового запроса или схемы компоновки в конфигураторе нет, т.к. сложные отчеты собираются программно по кусочкам, а потом еще куча параметров также получается функциями общих модулей и т.п. 

Я предлагаю набор функций, которые через режим отладки быстро помогу быстро "перебраться" в консоли запросов или отчетов. Эти функции находятся в расширении в общем модуле ОтладкаСКД. 

Подключаем расширение, перезапускаемся, появляется подсистема "Отладка СКД"

На примере демо-базы Бухгалтерии возьмем отчет "Задолженность покупателей по срокам долга". В этот отчете как раз запрос набора данных собирается каждый раз в зависимости от количества интервалов заданные в настройках , и значений параметров в запросе используется очень много.

Посмотрим наименование набора данных в схеме компоновки данных, он нам далее понадобиться. Это "ОсновнойНабор".

I  Шаги для перехода отлаживать отчет в консоль запросов.

  1. Определим, где ставить точку остановки, используя замер производительности
  2. В указанной точке вызовем функцию для получения структуры запроса одного из набора данных с параметрами
  3. Перейдём в консоль запрос и выполним запрос

1. Определяем место точки остановки отладки в Конфигураторе

В конфигураторе в разделе "Отладка" подключаемся к серверному сеансу для отладки. Будем ловить место, где выполняется в итоге отчет. Не забываем в разделе "Автоматическое подключение" к фоновым заданиям, т.к. отчеты на СКД "любят" выполняться фоновыми заданиями.

Включаем "Замер производительности" и нажимаем "Сформировать" в отчете. Отключаем "Замер производительности", смотрим и ищем нужное место

В итоге вижу, что реальное выполнение отчета происходит в общем модуле "Бухгалтерские отчеты" , перехожу туда и ставлю точку остановки именно там как можно ближе к методу КомпоновщикаМакета.Выполнить, чтобы не пропустить какие-то промежуточные процедуры и функции, которые могу изменить настройки.

2. Получаем запрос с  установленными параметрами в виде XML

Для того, чтобы мне получить в итоге конечный выполняемый запрос мне нужно иметь "Схему компоновки данных" и "Компоновщик настроек данных" (точнее Настройки компоновщика).  Оглядевшись там, видим эти переменные, включаем Табло отладки и пишем

ОтладкаСКД.ПолучитьЗапросНабора(СхемаКомпоновкиДанных,КомпоновщикНастроек,"ОсновнойНабор")

ОтладкаСКД.ЗапросВСтрокуXML(ОтладкаСКД.ПолучитьЗапросНабора(СхемаКомпоновкиДанных,КомпоновщикНастроек,"ОсновнойНабор"))

Видим, что в 1-ой запись получили запрос набора данных "ОсновнойНабор" а во 2-ой тот же запрос (не текст запроса) в виде XML.

Копируем строку XML и запускаем консоль запросов

3. В консоле запросов выполняем запрос

Открываем консоль запрос с ИТС https://its.1c.ru/db/files/1CITS/EXE/ExtReps/Unireps83/RequestConsoleManaged/RequestConsoleManaged.zip, я её включил в расширение.

Вставляем скопированную строку XML в текст запроса (хотя это не совсем текст запроса, но это трюк консоли) и нажимаем в "Еще" "Заполнить из XML"

И о чуда текст запроса превратился в текст запроса и все параметры с установленными значениями стоят. Гигантское количество значений параметров, руками устанавливать займёт кучу времени.

Нажимаем "Выполнить"

Запрос выполнился всё работает, дальше уже разбираемся с запросом.

II  Шаги для перехода отлаживать отчет в консоль отчетов СКД

  1. Определим, где ставить точку остановки, используя замер производительности
  2. В указанной точке вызовем функцию для получения схемы компоновки в XML и настроек компоновщика в XML
  3. Перейдём в консоль отчетов СКД и добавим там отчет, вариант отчета.

1.Определим, где ставить точку остановки, используя замер производительности

Этот шаг ничем не отличается от ранее описанного для работы с консолью запросов

1.Получение схемы компоновки данных и настроек компоновщика в XML

Поставив точки остановки и остановшись при выполнении отчета, пишем в "Табло отладки"

ОтладкаСКД.ЗначениеВСтрокуXML(СхемаКомпоновкиДанных)

ОтладкаСКД.ЗначениеВСтрокуXML(КомпоновщикНастроек.ПолучитьНастройки())

Получаем 2 строки XML:

 - Схема компоновки данных

 - Настройки компоновщика (вариант отчета)

Копируем эти строки в 2 файла. Создаём здесь в конфигураторе 2 текстовых файла и сохраняем например "СхемаСКД.txt" и "НастройкиСКД.txt"

3. Консоль отчетов СКД и добавим там отчет, вариант отчета.

Открывает стандартную консоль отчетов СКД с ИТС https://its.1c.ru/db/files/1CITS/EXE/ExtReps/Unireps83/DCSConsole/DCSConsole.zip, я её добавил в подсистему.

Делаем "Добавить отчет" и кнопку "Загрузить из файла", выбираем файл "СхемаСКД.txt"

Добавляем "Вариант отчета" и кнопку "Ещё-Загрузить настройки", выбираем файл ""НастройкиСКД.txt"

Всё готов отчет, все параметры и настройки заданы.

!!! Конкретно в этом отчете, есть дополнительный наборы в виде таблицы значений, поэтому отчет не выполнится. Но это уже другие нюансы, конкретно этого отчета

ИТОГ: С помощью функций расширения "ОтладкаСКД" можно быстро начать отлаживать довольно сложные отчеты СКД в различных консолях или просто разобраться в ситуации прямо в отладке.

На текущий момент перечень функций в расширении:

Функция ПолучитьМакетаКД - Возвращает макет выполнения компоновки данных

Функция ПолучитьЗапросНабора - Возвращает запрос с текстом запроса и значениями параметров из компоновщика

Функция ПолучитьЗапросыНаборов  - Возвращает структура запросов всех наборов данных с применными настройками и значениям параметров компоновщика

Функция ПолучитьРезультатЗапросаНабора - Возвращает результат запроса набора данных с применными настройками и параметрами компоновщика

Функция ПолучитьРезультатыЗапросовНаборов - Возвращает структуру результатов запросов всех наборов данных схемы компновки данных с применными настройками компоновщика

Функция ТабДокВXML - Возвращает результат выполнения СКД в табличный документ в XML, далее табличный документы можно получить обработкой "Табличный документ(Отладка СКД)", включенной в расширение

Функция ПолучитьТабДок - Возвращает результат выполнения СКД в табличный документ

Функция ПолучитьТЗ - Возвращает результат выполнения СКД в таблицу значений

Функция ПолучитьДЗ - Возвращает результат выполнения СКД в дерево значений

включены вспомогательные функции из БСП также (в БСП они в общем модуле ОбщегоНазначения) для конфигураций без БСП:

Функция ЗначениеВСтрокуXML

Функция ЗначениеИзСтрокиXML

Функция ЗапросВСтрокуXML

Ещё чуть-чутьдоработана "Консоль запросов", добавлено при создании параметров поддержка типов "Массив", "Список значений", "Стандартный период". Без этого может выдавать ошибку по кнопку "Заполнить из XML" при определенных параметрах компоновщика.

Тестировался пример на платформе 1С:Предприятие 8.3 (8.3.12.1616)

Бухгалтерия предприятия, редакция 3.0 (3.0.67.43)