Что такое кросс отчет
Отчет «Кросс таблица»
Отчеты с перекрестными таблицами представляют собой сетку, определяемую значениями аналитика, на пересечении которых находятся числовые значения, соответствующие значениям данных аналитика. Частным случаем отчетов типа Cross Table являются календарные отчеты, в которых периоды расположены на одной из осей: Месяцы, Недели и т. Д.
Мы рекомендуем использовать стиль формулы Excel R1C1 для настройки отчетов с кросс-таблицами. При использовании вывода маркера стиль формул R1C1 является единственно возможным. При использовании «обычного» стиля формул (A1, B1 и т. Д.) После применения маркеров формулы не работают.
Кросс-таблица с фиксированным шаблоном
Чтобы начать настройку отчета, перейдите в список шаблонов отчетов и добавьте новый шаблон отчета Excel (см. Отчет на базе шаблона Excel).
Затем вам необходимо подготовить шаблон отчета в Excel. Шаблон Excel будет содержать два листа Отчет и Данные. Данные, полученные источником данных, будут отображаться на втором листе данных, а форма отчета будет расположена на первом листе отчета.
На листе данных создайте таблицу Excel с двумя строками. Зададим имя таблицы записей, это имя соответствует имени источника данных. Для столбцов мы зададим имена, соответствующие именам столбцов источника данных.
На листе отчета создайте макет отчета. Наносим желаемый дизайн.
Далее вам нужно установить формулы в ячейках на пересечении строки-столбца, которые будут извлекать нужные нам данные из таблицы данных. Используйте формулу «= СУММЕСЛИМН ()». Благодаря использованию стиля формул R1C1 ту же формулу можно применить ко всем другим ячейкам отчета, в которых вы хотите получить значения из таблицы данных.
Для расчета итогов по группам, а также результатов проекта мы используем следующие функции «= ПРОМЕЖУТОЧНЫЙ ИТОГ ()»
Итоги в столбце можно рассчитать с помощью функции «= СУММ ()».
Этого недостатка можно избежать, если построить отчет с помощью маркеров.
Кросс-таблица с использованием маркеров
Для этой версии отчета потребуются дополнительные источники данных, которые позволят вам составить список и определить для них сетку.
На листе данных мы будем выводить записи из источника данных с помощью маркеров: <<. >>
На листе отчета необходимо настроить макет отчета:
В ячейке R2C1 мы установим маркер: <<. >>. По умолчанию маркеры отключены, поэтому никаких других настроек для этого маркера не требуется.
В ячейке R1C2 устанавливаем маркер: <<. ; direction = horizontal>>. Обратите внимание, что в этом случае четко указано горизонтальное направление поворота.
На пересечении в ячейке R2C2 мы определяем формулу, которая будет извлекать нужные нам данные из таблицы данных: «= СУММЕСЛИМН ()»;
Для расчета итогов по группам, а также результатов проекта мы используем следующие функции «= ПРОМЕЖУТОЧНЫЙ ИТОГ ()»
Итоги в столбце можно рассчитать с помощью функции «= СУММ ()».
Кросс отчет
Добрый День! Подскажите делаю внешний отчет, немного запутался не могу сообразить как сделать обход Контрагентов в документах!
(6) эм, так и не понятно, что именно надо. Сбоку не нужно, снизу не нужно. А где нужно?
Если нужно вида
К | Н | Кол
к1 | Н1 | 10
к2 | Н2 | 15
То выводишь по строчкам: сначала шапку, потом строчка за строчкой
выводишь контрагента, присоединяешь номенклатуру, присоедишяешь количество
повторить пока не надоест.
Т.е. смысл в том, что если не извращаться с позиционирование по ячейкам, то выводить надо построчно, каждый раз обходя все колонки.
Спасибо что ответили, мне нужно вывести таким образом: Контрагент Товар1,Товар2,Товар3 итд.
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
а у меня почему то получается при обходе параметра Кол во при ТабДок.Присоединить, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент Кол-во, Кол-во, Кол-во—-почему то Кол-во выводится
только в последнюю строку, а если написать ТабДок.Вывести, то тогда получается, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент
Кол-во
Кол-во
Кол-во
Посмотрите пожалуйста во вложении мой отчет. чтобы вам было более понятно
Для Каждого СтрКол ИЗ ВыборкаКол.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть(«Строка|Колонка»);
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
а он мне выводит почему то под Контрагентом как будто я написал вместо(Строка|Колонка),(Строка|Начало) что то не въеду?
Не могу разобраться с циклами, немного оптимизировал, но результата нужного нет. Подскажите пожалуйста в коде по циклу, буду рад любому совету!
Да всем пофиг, собсно. Задача решается элементарно на СКД. Если нужно решить не на СКД, то это говорит о том, что задача практической пользы не несет и нужна для проверки квалификации.
Отсюда как бы идет отсыл к школьной программе:
Цикл 1 для строк
Цикл 2 для колонок
Исходные данные при таком подходе должны быть в виде таблиц со строками для каждого контрагента, номенклатуры, месяца и ресурса. Номенклатуры в таблице должны быть или все, или придется проверять и выводить отдельно пустые колонки для каждой пропущенной позиции.
Полезные приемы для разработки отчетов на СКД
Ни одно внедрение не обходится без разработки отчетов. Само собой, отчет должен возвращать корректные данные. Но, кроме этого, он должен быть красиво и аккуратно оформлен, в быстрых настройках должны быть доступны поля, по которым чаще всего потребуется установить отбор и т.д. Всё это важно для удобства работы пользователей с отчетом.
Поэтому сегодня мы рассмотрели несколько простых, но в то же время полезных приемов настройки и доработки отчетов на СКД.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в каждом видео.
Как вывести заголовок колонки вертикально, а значения в ячейках горизонтально
При помощи условного оформления в отчете можно для ряда полей изменить направление текста с горизонтального на вертикальное.
Также можно ограничить область действия условного оформления, чтобы вертикально выводился только заголовок колонки, при этом сами значения в ячейках значения выводились как обычно – горизонтально.
Тайминг ключевых моментов в видео:
00:39 – Какой параметр в настройках условного оформления необходимо использовать для горизонтального вывода текста.
01:14 – Как сделать, чтобы условное оформление применялось только к заголовкам полей.
01:38 – Как ограничить список полей, к которым применяется условное оформление.
Как сделать, чтобы в итогах кросс-таблицы выводилась только часть ресурсов, при этом в самой таблице отображались все ресурсы
При помощи СКД достаточно просто и без написания программного кода можно создавать кросс-таблицы, где и в строках, и в колонках выводятся данные, а на их пересечении – значения.
Однако, чтобы в таблице вывести все ресурсы из схемы компоновки, а в итогах показать только часть ресурсов (например, в таблице вывести количество и сумму, в итогах – только сумму), нужно знать один простой прием.
Тайминг ключевых моментов в видео:
00:40 – Как настроить структуру отчета для вывода в виде кросс-таблицы.
02:22 – Как отключить вывод общих итогов.
02:55 – Как добавить группировку для вывода итогов по одному ресурсу.
Как в отчете на СКД вывести колонку с расчетом процентов без создания отдельного поля компоновки
Отчеты на СКД часто сравнивают с Excel: «там же просто: добавил колонку, протянул формулу – и всё готово» 🙂
А на СКД может быть даже ещё проще! Например, для расчета процентов по числовым показателям не надо прописывать никаких формул. Это можно сделать при помощи настроек компоновки. В видео покажем, как именно.
Тайминг ключевых моментов в видео:
00:30 – Какие «виртуальные» вложенные поля доступны в настройках компоновки для числовых ресурсов.
02:05 – Чем отличается поле «процент общий» от «процент в группировке».
02:35 – Как в отчете пронумеровать строки и вывести процент проданного количества без создания отдельного поля компоновки.
Как управлять порядком выводимых в отчет ресурсов
Часто встречается следующая ситуация. Разработчик в отчете настроил выбранные поля, указал, в каком порядке поля должны следовать в отчете. Но в отчет они выводятся совсем в другом порядке.
Причиной может быть всего одна настройка, про которую нужно просто знать. В видео мы покажем такую настройку.
Тайминг ключевых моментов в видео:
00:35 – Какие настройки нужно установить, чтобы вывести в отчете ресурсы после всех полей.
01:10 – Какие настройки нужно установить, чтобы поля выводились в порядке, указанном в списке выбранных полей.
Как в отчете отфильтровать данные при помощи сложного выражения с использованием И, ИЛИ, НЕ
Часто пользователям в отчетах нужно отбирать данные по условиям, намного сложнее, чем просто “Номенклатура = Стол”. Система компоновки позволяет конструировать такие фильтры, используя группы логических условий И, ИЛИ, НЕ. В видео мы покажем, как можно реализовать такие отборы.
Тайминг ключевых моментов в видео:
00:32 – Как в настройках компоновки создать группу отборов (И, ИЛИ, НЕ).
01:52 – Как назначить представление для группы отборов и включить группу отборов в пользовательские настройки.
Особенности расчета итогов при использовании нескольких наборов данных
СКД может по-разному рассчитывать итоги в зависимости от того, где используется соединение – в тексте запроса или в схеме компоновки на уровне отдельных наборов данных.
В следующих видеоуроках показываются ситуации, когда использование нескольких наборов данных позволяет получить корректный расчет итогов.
Отличия расчета итогов в запросах и СКД
Тайминг ключевых моментов в видео:
02:41 – Почему отличаются итоги при использовании запроса и при использовании соединения наборов данных.
04:05 – Как можно изменить текст запроса набора данных для корректного расчета итогов.
Вывод табличной части документа и корректного итога по сумме документа
Тайминг ключевых моментов в видео:
00:30 – Как решить задачу при помощи одного запроса.
04:14 – Как решить задачу при помощи соединения двух наборов данных.
07:01 – В каких случаях использование запроса приводит к некорректному расчету итогов.
Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?
В интернете очень много различных отзывов о системе компоновки данных. Комментаторов даже можно разделить на две большие группы: «да знаю я вашу СКД, ничего там не работает» и «я действительно умею разрабатывать отчеты на СКД» 🙂
Разница между ними просто огромная, в том числе и в заработке.
И если Вы хотите не просто «слышать про СКД», а на самом деле знать возможности и особенности системы компоновки данных и уверенно применять их на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Комментарии / обсуждение (63):
Добрый день!
Как при сворачивании данных отчета в одну строку все же показывать одинаковые данные в свернутой строке, соответственно неодинаковые – не выводить.
Добрый день!
Как вариант – программно в обработчике ПриКомпоновкеРезультата сформировать нужные данные в таблице значений, а затем передать таблицу в качестве внешних данных в набор данных – объект.
имя реквизита номенклатуры совпадает с характеристикой, скд выбирает реквизит. лучше бы характеристику
Добрый день!
Можно в наименовании характеристики перед записью добавлять суффикс, например, “(доп. реквизит)” или “(доп. свойство)“, чтобы не было путаницы.
Уже ничего не добавишь, ни в реквизит, ни в характеристику, необозримо внешних отчетов
Что-то менять всё равно придется – или имена полей, или в отчетах способ получения данных (например, вместо механизма характеристик явно использовать в запросе соединение с ТЧ ДополнительныеРеквизиты, где хранятся значения). Смотря, какой способ окажется менее трудозатратным.
Да так и сделал, соединил. Прописал бы кто, что не надо дублей делать, а еще лучше, будь возможность уточнять раз”именование
Отлично, что получилось решить задачу!
В Вашем комментарии нет текста или вложенных файлов.
Обращаем Ваше внимание, что Вы мoжете добавить к комментарию:
– изображение (JPG, PNG, GIF)
– архивы (ZIP, RAR)
– документы и текст (TXT, DOC, DOCX, XLS, XLSX, PPT, PPTX или PDF).
Из соображений безопасности максимальный размер файла установлен в 10 МБ.
Проверьте, пожалуйста, что Ваш комментарий соответствует этим требованиям, и опубликуйте его повторно.
Добрый день!
Можно реализовать поэлементный вывод:
СхемаКомпоновки = Отчеты.ОстаткиТоваровНаСкладах.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);
НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
Иначе
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЕсли;
Этот код выводит отдельно каждый элемент результата компоновки данных. Это не обязательно строка будет.
Другой вариант – вывести результат компоновки в таблицу значений, затем обходить ее, выводить в табличный документ по 100 строк.
Добрый день!
Несколько лет назад проходил Ваш курс.
Но как часто бывает, со сложными вопросами столкнулся только сейчас.
Если сможете ответить, буду очень признателен.
1. Автопозиция ресурсов – прекрасно работает, когда в отчете только детальные записи. Но когда есть несколько уровней группировки, в том числе без детальных записей, вывести ресурсы и группировочные поля в произвольном порядке – непонятно как. То есть, допустим, “через один” группировочное поле, ресурс и тд. Пробовал добавлять в нужном порядке все поля на вкладке Выбранные поля – не помогает, система выводит поля как ей вздумается. Даже письмо в 1с написал. Вы с такой проблемой не сталкивались?
2. Можно ли, используя язык системы компоновки данных, организовать следующий расчет ресурса в такой задаче: нужно посчитать количество листов прикрепленных файлов (в бп 3, к договорам, поступлениям и счетам-фактурам). Само количество у каждого файла посчитано и хранится отдельным реквизитом. При этом у каждого файла также есть реквизиты Вид, дата и номер файла (например, УПД, 1, 01.01.20). С одной стороны, к договору прикреплен Договор и доп. соглашение и оба помечены как “договор” от одной даты. С другой стороны, один и тот же УПД прикреплен к поступлению товаров и к счет фактуре и посчитать количество страниц по такому файлу нужно только один раз. То есть, я сначала бы рассмотрел файлы каждого отдельного документа, там сгруппировал их по полям вид, номер и дата, а количество страниц просуммировал (решается проблема договор+доп. соглашение). Дальше, на уровне контрагент+договор я бы взял максимум по каждому виду, номеру и дате (решается проблема двух одинаковых упд, количество страниц посчитается один раз). А затем, на уровне других группировок и общего итога, снова бы просуммировал количество страниц. Задать два выражения для ресурса (у вида, номера, даты, контрагента и договора как Максимум, в другой группировке у остальных полей – как Сумма) не получается – пишет Неоднозначное выражение. Хочется написать “вычислить с группировкой таблица значений”, а потом эту таблицу значений передать в следующее выражение и еще раз, чтобы посчитать сумма+максимум+сумма. Но похоже такое выражение не составить. Тут можете помочь? Спасибо.
Шаблон кросс-таблицы с иерархией на СКД
Добрый день! Представляю вашему вниманию пример реализации отчета кросс-таблицы с иерархией и жестко заданной структурой вывода на примере двух отчетов для БП 3.0:
1. ДДС по месяцам и кварталам (Простой отчет);
2. ДДС по счетам в разрезе валют (Сложный отчет).
Предпосылки:
В моей практике часто приходилось создавать подобные отчеты для финансового отдела, однако, первые реализации занимали у меня много времени, но по факту данный отчет без учета реализации жестко заданного шаблона является простым и легко реализуется на СКД.
Так как разработать данный отчет только с использованием СКД не является возможным из-за жестко заданной структуры вывода, я разработал шаблон отчета из симбиоза СКД и программного вывода в табличный документ, о котором пойдет речь далее.
Несмотря на то, что данный шаблон является своего рода «велосипедом», на моей практике он помогал мне на порядок минимизировать трудозатраты и реализовывать достаточно сложные отчеты.
Основной алгоритм разработанного шаблона:
1. Разработка схемы компоновки данных;
2. Вывод данных в дерево значений;
3. Создание нового дерева значений с нужными колонками кросс-таблицы;
4. Заполнение кросс-таблицы на основании дерева значений СКД;
5. Вывод кросс-таблицы в табличный документ.
1. Схема компоновки данных для отчета ДДС по месяцам и кварталам.
Схема компоновки данных для разрабатываемого отчета, последний уровень группировки будет преобразован в столбцы в кросс-таблице.
1.2 Схема компоновки данных по счетам в разрезе валют (Сложный отчет).
Этот вариант отчета выводит данные по всем организациям, по счетам БУ 50,51,52,55 с горизонтальными итогами в разрезе регламентированной валюты.
Основными удобствами при использовании шаблона является удобная программная структура, позволяющая разрабатывать сложный отчет различными способами, а также процедуры представленные ниже:
1. Процедура заполнения кросс-таблицы на основание дерева значений.
2. Процедура, устанавливающая значение ресурса во всех родительских группировках.
3. Процедура, выполняющая рекурсивный вывод созданной кросс-таблицы в табличный документ.
Данная обработка тестировалась на 1С:Предприятие 8.3 (8.3.12.1714) в Бухгалтерия предприятия, редакция 3.0 (3.0.43.239).
Что такое кросс отчет
Перейдем от теории к практике. Построим простой кросс-отчет, показывающий зарплату сотрудников за четыре года. Для этого нам понадобится таблица crosstest, которая находится в папке FastReport DEMOS\MAIN. Таблица содержит данные следующего характера:
Как обычно, создаем новый проект в Delphi, кладем на форму компоненты TTable, TfrxDBDataSet, TfrxReport и настраиваем их:
DatabaseName = ‘c:\Program Files\FastReports\FastReport 3\Demos\Main’
естественно, значение свойства DatabaseName должно соответствовать пути к вашей папке с FastReport!
Для построения кросс-отчетов необходимо использовать компонент TfrxCrossObject из палитры компонент FastReport. Просто положите его на форму – ничего настраивать не требуется. При этом в список «uses» вашего проекта добавится модуль frxCross – он содержит всю необходимую функциональность.
Зайдем в дизайнер отчета. Первым делом подключим наш источник данных в меню «Отчет|Данные…». На лист отчета положим объект «Кросс-таблица БД» :
Все настройки делаются с помощью редактора объекта. Вызовем его, сделав двойной щелчок мышью на объекте:
1 – выпадающий список доступных источников данных;
2 – список полей в выбранном источнике данных. Поля из этого списка можно перетаскивать в списки 3, 4, 5;
3 – список полей, которые образуют заголовок строки;
4 – список полей, которые образуют заголовок столбца;
5 – список полей, которые образуют ячейку таблицы;
6 – здесь отображается структура будущей таблицы.
7 – настройки объекта.
Если сейчас запустить отчет, мы увидим следующее: