Не работает процессор компоновки данных
Отчеты на СКД в типовых решениях частенько сделаны очень сложно. Чтобы понять, почему они выдают какой-то результат, необходимо взять запросы наборов данных или схему компоновки данных целиком и "перебраться" с ними в консоли запросов или консоли отчетов СКД, указав значения всех параметров. Но беда в том, что готового запроса или схемы компоновки в конфигураторе нет, т.к. сложные отчеты собираются программно по кусочкам, а параметров много и к тому же часть параметров устанавливается функциями общих модулей, модулей менеджеров и т.п.
Я предлагаю набор функций, которые через режим отладки помогут быстро "перебраться" в консоли запросов или отчетов. Эти функции находятся в расширении в общем модуле ОтладкаСКД.
Подключаем расширение, перезапускаемся, появляется подсистема "Отладка СКД"
На примере демо-базы Бухгалтерии возьмем отчет "Задолженность покупателей по срокам долга". В этом отчете запрос набора данных собирается каждый раз в зависимости от количества интервалов, заданных в настройках, при этом значения параметров в запросе очень много.
Посмотрим наименования наборов данных в схеме компоновки данных:
-"ОсновнойНабор"(запрос);
- "ПросроченнаяЗадолженность" (таблица значений);
- "ДанныеПервичныхДокументов" (запрос).
I Шаги для перехода к отладке отчета в консоле запросов
- Определим, где ставить точку остановки, используя замер производительности.
- В указанной точке вызовем функцию для получения структуры запроса одного из набора данных с параметрами.
- Перейдём в консоль запросов и выполним запрос.
1. Определяем место точки остановки отладки в Конфигураторе
В конфигураторе в разделе "Отладка" подключаемся к серверному сеансу для отладки. Будем "ловить" место, где, в конечном итоге, выполняется отчет. Не забываем в разделе "Автоматическое подключение" подключится к фоновым заданиям, т. к. отчеты на СКД "любят" выполняться фоновыми заданиями.
Включаем "Замер производительности" и нажимаем "Сформировать" в отчете. Отключаем "Замер производительности", смотрим и ищем нужное место
В итоге видим, что реальное выполнение отчета происходит в общем модуле "Бухгалтерские отчеты" , переходим туда и ставим точку остановки именно там, как можно ближе к методу КомпоновщикаМакета.Выполнить, чтобы не пропустить какие-либо промежуточные процедуры и функции, которые могут изменить настройки.
2. Получаем запрос с установленными параметрами в виде XML
Для того, чтобы получить в итоге конечный запрос, необходимо иметь "Схему компоновки данных" и "Компоновщик настроек данных" (точнее Настройки компоновщика). Внимательно посмотрев текст модуля в месте точки остановки, видим эти переменные. Включаем Табло отладки и пишем:
ОтладкаСКД.ЗапросВСтрокуXML(ОтладкаСКД.ПолучитьЗапросНабора(СхемаКомпоновкиДанных,КомпоновщикНастроек,"ОсновнойНабор"))
Видим, что в 1-ой записи получили запрос набора данных "ОсновнойНабор" (тип "Запрос"), а во 2-ой тот же запрос набора данных "ОсновнойНабор" (тип "Запрос") в XML.
Копируем строку XML и запускаем консоль запросов
3. В "Консоле запросов" выполняем запрос
Вставляем скопированную строку XML в текст запроса (хотя это не совсем текст запроса, но это трюк консоли) и нажимаем в "Еще" "Заполнить из XML"
И о чудо ! Строка ХМL превратилась в текст запроса и в параметры с установленными значениями.
Если всё это делать "руками", то установка значений параметров займёт много времени с одной стороны, а с другой можно легко пропустить какое-либо значение в параметрах, например в списках, что приведёт к неверному (другому) результату запроса.
Запрос выполнился, всё работает, дальше уже разбираемся с запросом.
II Шаги для перехода отлаживать отчет в консоли отчетов СКД
- Определим, где ставить точку остановки, используя замер производительности.
- В указанной точке вызовем функцию для получения схемы компоновки в XML и настроек компоновщика в XML.
- Перейдём в консоль отчетов СКД и добавим там отчет, вариант отчета.
1.Определим, где ставить точку остановки, используя замер производительности
Этот шаг ничем не отличается от ранее описанного для работы с консолью запросов
2.Получение схемы компоновки данных и настроек компоновщика в XML
Поставив точки остановки и остановившись при выполнении отчета, пишем в "Табло отладки"
Получаем 2 строки XML:
- Схема компоновки данных
- Настройки компоновщика (вариант отчета)
Копируем эти строки в 2 файла. Создаём здесь в конфигураторе 2 текстовых файла и сохраняем например "СхемаСКД.txt" и "НастройкиСКД.txt"
3. Консоль отчетов СКД и добавим там отчет, вариант отчета.
Открывает стандартную консоль отчетов СКД с ИТС
Добавляем "Вариант отчета" и кнопку "Ещё-Загрузить настройки", выбираем файл ""НастройкиСКД.txt"
Всё готов отчет, все параметры и настройки заданы.
. Конкретно в этом отчете есть дополнительный набор в виде таблицы значений, поэтому отчет не выполнится. Но это уже нюансы этого отчета. Чуть ниже сделана небольшая доработка, чтобы можно было в консоли отчетов СКД работать и с внешними наборами данных (таблицами значений)
08.01.2019 Добавлена возможность в консоли отчетов СКД загружать данные внешних наборов данных, используемых в схеме СКД
Отчет не заработает, если ему не передать таблицу значений в качестве внешнего набора данных. Имя этого набора "Просроченная задолженность" (на скриншотах выше это можно увидеть). К сожалению в консоли отчетов СКД от 1С нет стандартной возможности передать эти внешние наборы, поэтому пришлось немного её доработать. Добавлена новая кнопка "Внешние наборы данных" (доработанная консоль в расширении).
Как это делаем по шагам:
1. Отладкой находим место, где эти таблицы внешних наборов собираются и передаются на выполнение.
В том же модуле БухгалтерскиеОтчетыВызовСервера, где мы нашли метод выполнения макета компоновки, чуть ниже находим строку, в которой передаются внешние наборы данных на выполнение процессору компоновки, ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, и переменную ВнешниеНаборыДанных, эта структура в которой содержатся таблицы для внешних наборов
2. Выгружаем эти таблицы в XML
С помощью функции ОтладкаСКД.ВнешниеНаборыДанныхВXML , конвертируем переменную ВнешниеНаборыДанных в XML. Сохраняем эту строку в текстовый файл, например ВнешниеНаборыСКД.txt
3. Загружаем внешние наборы данных в консоль , выполняем отчет.
Теперь возвращаемся в консоль отчетов СКД из расширения и вызываем пункт "Внешние наборы данных" и выбираем файл ВнешниеНаборыСКД.txt
Видно, что загрузился из файла один внешний набор ПросроченнаяЗадолженность (планирую также добавить редактор таблиц значений для работы с внешними набора данных).
Закрываем окно и нажимаем НАКОНЕЦ "Сформировать" и отчет формируется.
16.01.2019 Добавлена в расширение для отладки отчетов функция, которая позволяет во время отладки в Конфигураторе выгрузить отлаживаемый отчет во внешний отчет (в файл) со всеми настройками в момент точки остановки:
ОтладкаСКД.Клиент.СгенерироватьВнешнийОтчет(ПолныйПутьКОтчету = Неопределено, ДанныеСКД)
. Внимание: Данная функция работает только для сеанса "Толстый клиент"
Например, чтобы выгрузить отчет в файл внешнего отчета необходимо в отладке вычислить выражение:
Далее отчет можно запускать как отдельный внешний отчет.
ИТОГ: С помощью функций расширения "ОтладкаСКД" можно быстро начать отлаживать довольно сложные отчеты СКД в различных консолях или просто разобраться в ситуации прямо в отладке.
На текущий момент перечень функций в расширении:
Функция ПолучитьМакетаКД - Возвращает макет выполнения компоновки данных
Функция ПолучитьЗапросНабора - Возвращает запрос с текстом запроса и значениями параметров из компоновщика
Функция ПолучитьЗапросыНаборов - Возвращает структура запросов всех наборов данных с примененными настройками и значениям параметров компоновщика
Функция ПолучитьРезультатЗапросаНабора - Возвращает результат запроса набора данных с примененными настройками и параметрами компоновщика
Функция ПолучитьРезультатыЗапросовНаборов - Возвращает структуру результатов запросов всех наборов данных схемы компоновки данных с примененными настройками компоновщика
Функция ТабДокВXML - Возвращает результат выполнения СКД в табличный документ в XML, далее табличный документы можно получить обработкой "Табличный документ(Отладка СКД)", включенной в расширение
Функция ПолучитьТабДок - Возвращает результат выполнения СКД в табличный документ
Функция ПолучитьТЗ - Возвращает результат выполнения СКД в таблицу значений
Функция ПолучитьДЗ - Возвращает результат выполнения СКД в дерево значений
ВнешниеНаборыДанныхВXML - возвращает таблицы для внешних наборов данных в XML
СгенерироватьВнешнийОтчет(ПолныйПутьКОтчету, ДанныеСКД) - выгружает во внешний отчет отлаживаемый отчет со всеми настройками.
включены вспомогательные функции из БСП также (в БСП они в общем модуле ОбщегоНазначения) для конфигураций без БСП:
Функция ЗначениеВСтрокуXML
Функция ЗначениеИзСтрокиXML
Функция ЗапросВСтрокуXML
Ещё чуть-чуть доработана "Консоль запросов", добавлено при создании параметров поддержка типов "Массив", "Список значений", "Стандартный период". Без этого может выдавать ошибку по кнопку "Заполнить из XML" при определенных параметрах компоновщика.
т.е. нужно получить информацию по всем сотрудникам из перечня подразделений и увидеть, по каким из работающих сотрудников есть списания в выбранном периоде и в какой день, а по каким - нет. Захотел присвоить значения параметров программно - чтобы их не набирать каждый раз для формирования отчета, а сразу заполнить при открытии формы. Сделал так в форме отчета:
ни один из параметров в режиме предприятия не заполняется. что не так делаю? помогите пожалуйста. Параметры отчета в СКД прилагаю.
Отчет СКД: отображение значений параметров на форме
Добрый день, устанавливаю значения параметров при открытии, но на форме колонки эти пустые.
Обычные формы, отчет на СКД - вывод параметров на форму
Обычная форма, делаю отчет на СКД. Задаю параметры , на форме размещаю Табличное поле - В его.
1с отчет СКД выбор данных в зависимости от значения логического параметра
Здравствуйте. Платформа 1С: Предприятие 8.3. Столкнулась с такой проблемой. Имеется отчет "Отчет.
Отчет СКД. Вывод нескольких таблиц в отчет из разных запросов.
Привет, коллеги! Возникла необходимость в одном отчете видеть 2 таблички: одну по продажам, другую.
jediAlex, Все это надо делать не в модуле формы и ПриОткрытии, а в модуле объекта отчета и в ПриКомпоновкиРезультата
А правильно делать - это в параметрах скд (ваш скрин) Вот там в выражениях и в доступных значениях настроить ваши значения параметров
а почему стандартная обработка ложь?
просто вы задаёте своих параметров или чего хотите, а уж компоновщик и прочие штуки пусть оно делает так, как ему полагается.
хотя вероятно дело не в этом
jediAlex Устанавливаешь Ложь стандартной обработке, а работаешь только с Компоновщиком. Ну изменил компоновщик, а где макет, где процессор вывода? У тебя ничего не выполняется без этого. И если эти параметры в скд установлены как пользовательские, то устанавливает параметры не в Настройках, а в ПользовательскиеНастройки. Ну и еще раз, как минимум параметры дат можно попробовать выставить на закладке Параметы макета скд
Добавлено через 3 часа 50 минут
Вижу сложности. Вот нашел у себя пример. Мне нужно было перенести в нестандартную обработку пользовательские настройки (параметры и отбор), с просто настройками - по аналогии.
jediAlex, Не надо просто копировать мой код. Адаптируйте его к своему. Например Параметры. У меня Меняется ОДИН параметр - Стандартный отчет (на скрине &Параметр) поэтому это ОДНА строка
у вас нет стандартного отчета, у вас ДВЕ строки поэтому уже установка всего в Элементы[2] работать не может
И потом Окончание периода что это?
В общем, установите правильно параметры в макете скд и все получится
also Первые шаги Отзывов (6) В закладки
В данной статье мы попробуем объяснить устройство системы компоновки данных понятным языком.
Фактически, формирование отчета средствами СКД разбито на несколько этапов. Причем нужно понимать, что разработчик может внести свои изменения во время любого из этапов.
По сути, формирование отчета это всего лишь два “глобальных” этапа: сама компоновка данных, согласно схемы, и вывод результата пользователю. На самом деле объектов компоновки немного больше чем два.
Для того чтобы скомпоновать данные в СКД существуют объекты: Компоновщик макета и Процессор компоновки данных. Рассмотрим принцип их работы. Компоновщик макета на основании схемы компоновки данных и настроек компоновки данных формирует макет компоновки данных:
Рис. 1 Компоновщик макета
Теперь наш сформированный макет необходимо заполнить данными. Именно эту функцию и выполняет Процессор компоновки данных. Процессор формирует результат компоновки. Также покажем это графически:
Рис.2 Процессор компоновки данных
Далее результат компоновки обрабатывается Процессором вывода, который выводит результат компоновки данных в один из следующих форматов:
- Табличный документ;
- Таблица значений;
- Дерево значений.
Рис. 3 Процессор вывода
Таким образом, мы познакомились со структурой системы компоновки данных, основными её элементами. Более подробное изучение работы данных объектов в дальнейших статьях цикла “Первые шаги”.
also Что-то вроде FAQ Ваш отзыв В закладки
Иногда хочется видеть подобие индикатора, но в строке состояния. Это можно сделать только с помощью СКД, и то есть небольшой минус: невозможно убрать или изменить надпись “Вывод отчета”. Сделать это можно примерно следующим образом:
Иногда хочется видеть подобие индикатора, но в строке состояния. Это можно сделать только с помощью СКД, и то есть небольшой минус: невозможно убрать или изменить надпись “Вывод отчета”. Сделать это можно примерно следующим образом: ПроцессорКомпоновки = Новый ПроцессорВыводаРезультатаКомпоновкиДанных ВТабличныйДокумент; ПроцессорКомпоновки.ОтображатьПроцентВывода = Истина ; ЭлементКомпоновки = Новый ЭлементРезультатаКомпоновкиДанных; ПроцессорКомпоновки.НачатьВывод(); //Считаем проценты по своему алгоритму, для примера: Для Сч = 1 По 100 Цикл ЭлементКомпоновки.ПроцентВывода = Сч; ПроцессорКомпоновки.ВывестиЭлемент(ЭлементКомпоновки); КонецЦикла; ПроцессорКомпоновки.ЗакончитьВывод(); Перейти к.
also Что-то вроде FAQ Отзывов (7) В закладки
Для того, чтобы зафиксировать шапку в скд, необходимо обрабатывать табличный документ. В инструментах скд этот механизм отсутствует.
Код вывода с фиксацией шапки:
Для того, чтобы зафиксировать колонку по горизонтали, можно просто выполнить следующее:
UPD В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД.
По сути в модуле объекта можно прописать следующее:
Для того, чтобы зафиксировать шапку в скд, необходимо обрабатывать табличный документ. В инструментах скд этот механизм отсутствует. Код вывода с фиксацией шапки: Результат = ЭлементыФормы.Результат; Результат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных ВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.НачатьВывод(); ТаблицаЗафиксирована = Ложь; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультата= Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); Если Не ТаблицаЗафиксирована И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда ТаблицаЗафиксирована = Истина; Результат.ФиксацияСверху = Результат.ВысотаТаблицы - 1; КонецЕсли; КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); Для того, чтобы зафиксировать колонку по горизонтали, можно просто выполнить следующее: Результат.ФиксацияСлева = 1; UPD В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД. По сути в модуле объекта можно прописать следующее.
also Что-то вроде FAQ 1 отзыв В закладки
Иногда в качестве заголовка отчета требуется задать что-нибудь сложное, вроде:
“Отчет за период с ” + ДатаНачала + “ по ” + ДатаКонца
Задать его таким образом в настройках не получится. Придется сделать это программно следующим образом:
Иногда в качестве заголовка отчета требуется задать что-нибудь сложное, вроде: “Отчет за период с ” + ДатаНачала + “ по ” + ДатаКонца Задать его таким образом в настройках не получится. Придется сделать это программно следующим образом: ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода. НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Title")); ЗначениеПараметра.Значение="Отчет за период с "+ДатаНачала+" по "+ДатаКонца; ЗначениеПараметра.Использование = Истина; Перейти к.
also Что-то вроде FAQ Отзывов (4) В закладки
В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений).
Для вывода отчета в коллекцию предназначен объект ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений.
В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений). Для вывода отчета в коллекцию предназначен объект ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений. Пример вывода отчета в дерево значений: КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных ВКоллекциюЗначений; ДеревоЗначений = Новый ДеревоЗначений; ПроцессорВывода.УстановитьОбъект(ДеревоЗначений); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); В данном примере результат вывода помещается в переменную ДеревоЗначений. Работа с выводом в таблицу значений аналогична. Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений: В настройках нельзя использовать таблицы, диаграммы и вложенные схемы; Не используется условное оформление; Игнорируются папки в выбранных полях.
also Первые шаги Отзывов (6) В закладки
В данной статье мы попробуем объяснить устройство системы компоновки данных понятным языком.
Фактически, формирование отчета средствами СКД разбито на несколько этапов. Причем нужно понимать, что разработчик может внести свои изменения во время любого из этапов.
В данной статье мы попробуем объяснить устройство системы компоновки данных понятным языком. Фактически, формирование отчета средствами СКД разбито на несколько этапов. Причем нужно понимать, что разработчик может внести свои изменения во время любого из этапов. По сути, формирование отчета это всего лишь два “глобальных” этапа: сама компоновка данных, согласно схемы, и вывод результата пользователю. На самом деле объектов компоновки немного больше чем два. Для того чтобы скомпоновать данные в СКД существуют объекты: Компоновщик макета и Процессор компоновки данных. Рассмотрим принцип их работы. Компоновщик макета на основании схемы компоновки данных и настроек компоновки данных формирует макет компоновки данных: Теперь наш сформированный макет необходимо заполнить данными. Именно эту функцию и выполняет Процессор компоновки данных. Процессор формирует результат компоновки. Также покажем это графически: Далее результат компоновки обрабатывается Процессором вывода, который выводит результат компоновки данных в один из следующих форматов: Табличный документ; Таблица значений; Дерево значений. Таким образом, мы познакомились со структурой системы компоновки данных, основными её элементами. Более подробное изучение работы данных объектов в дальнейших статьях цикла “Первые шаги”.
also Что-то вроде FAQ Отзывов (9) В закладки
Несмотря на то, изучающие СКД встречаются с этим на первый или второй день, это должно быть в разделе FAQ. Простой пример программного вывода отчета на компоновке, использующий настройки по умолчанию.
пропахал интернет, так никто и не знает как сделать чтоб работала расшифровка при программном выводе отчета. при таком выводе она не работает.
Пробовал такой совет:
после строки
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
поместить
ДанныеРасшифровки.Настройки = КомпоновщикНастроек.ПолучитьНастройки();
все равно не работает стандартная расшифровка по двойному клику. выдает лишь номер ячейки.
надо использовать Форма.ДанныеРасшифровки
Написала в точности, как здесь
Ругается:
Ошибка при вызове метода контекста (Инициализировать): Несоответствие типов (параметр номер ‘2’)
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ДанныеРасшифровки);
В чем может быть дело?
второй параметр насколько я помню обязательный
Если вы посмотрите в синтакс-помошник или справку – то увидите, что метод Инициализировать() у ПроцессораКомпоновкиДанных имеет 4 параметры:
Макет – обязательный
ВнешниеНаборыДанных – необязательный
ДанныеРасшифровки – необязательный
ИспользоватьВнешниеФункции – необязательный.
Поэтому в примере все верно написано
Кому не охота создавать на форме табличное поле но хочется сохранить расшифровку, то можно закомментить последнюю строчку из сабжа и сделать так:
//ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Результат = Новый ТабличныйДокумент;
Результат.ТолькоПросмотр = Истина;
Результат.ОтображатьГруппировки = Ложь;
Результат.ОтображатьЗаголовки = Ложь;
Результат.ОтображатьСетку = Ложь;
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
Пока НЕ ЭлементРезультата = Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
Для счКол = 1 по Результат.ШиринаТаблицы Цикл
ТекРасшифровкаИдентификатор = Результат.Область(Результат.ВысотаТаблицы,счКол).Расшифровка;
Результат.Область(Результат.ВысотаТаблицы,счКол).Расшифровка = ДанныеРасшифровки.Элементы[ТекРасшифровкаИдентификатор].ПолучитьПоля()[0].Значение
КонецЦикла;
КонецЕсли;
ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
Результат.Показать();
Применительно к примеру добавить
Перем ДанныеРасшифровкиСКД;
……
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровкиСКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиСКД, УникальныйИдентификатор);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровкиСКД);
Читайте также: