Формат данных отчета в Web-расширении

Введение

Для создания отчета в Web-расширении используется объект V8ReportSource, который, в свою очередь, пользуется несколькими объектами. Среди них объекты: V8ReportBuilder, V8ReportFormatter и объект, отвечающий за механизм кеширования отчета.

Объект V8ReportBuilder предназначен для решения следующих задач:

Входными данными является текст запроса, после установки которого объект V8ReportBuilder может вернуть доступные поля отчета, группировки, поля упорядочивания и поля для отборов.

Объект V8ReportFormatter – объект, задачей которого является преобразование данных отчета в формат оформленного отчета. Объекту V8ReportFormatter на вход подается некоторое количество данных отчета в формате XML документа и параметры оформления. На выходе получаются оформленные данные - также документ XML, но уже с несколько другой структурой.

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

После выполнения запроса объектом V8ReportBuilder полученные данные помещаются в кеш, из которого по мере необходимости эти данные извлекаются и передаются объекту V8ReportFormatter (в формате данных без оформления). Объект V8ReportFormatter , используя параметры оформления, возвращает отчет в формате данных с оформлением. Как оформленный, так и не оформленные отчеты представлены в формате XML. Целью данного раздела является описание формата представления данных отчета в Web-расширении. 

Данные без оформления

Документ содержит параметры отчета, отборы, описания полей, описания группировок строк и колонок и, собственно, данные отчета, которые оформлены в виде таблицы.

Параметр отчета имеет имя и значение.

Отбор не имеет имени и характеризуется путем к данным, типом сравнения и, собственно, значением отбора (для интервалов двумя значениями).

Часть описания полей отчета содержит список полей и взаимосвязь между ними, а также содержит описание типа поля. Описание поля нужно для правильного форматирования значений типа Число и Дата. Кроме того, для автоматического форматирования отчета в описании поля содержится длина представления значения поля.

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

Описание элементов

Далее описываются элементы данных отчета без оформления. Колонка Количество показывает количество подчиненных (детей) элементов. Символ "*" означает любое количество элементов.

report

Корневой элемент документа.

parameters

Список параметров отчета.

Подчиненные элементы:

Наименование Количество Описание
parameter 0…* Параметры отчета

parameter

Параметр отчета.

Подчиненные элементы:

Наименование Количество Описание
name 1 Имя параметра
presentation 1 Представление параметра
value 1 Строковое представление значения параметра

filters

Список отборов отчета.

Подчиненные элементы:

Наименование Количество Описание
filter 0...* Отбор отчета

filter

Отбор отчета.

Подчиненные элементы:

Наименование Количество Описание
dataPath 1 Путь к данным
comparisonType 1 Вид сравнения
value 1 Строковое представление значения отбора
valueFrom 1 Строковое представление значения нижней границы интервала отбора
valueTill 1 Строковое представление значения верхней границы интервала отбора

comparisonType

Вид сравнения. Может содержать значения: Equal, NotEqual, Contains, Greater, GreaterOrEqual, Less, LessOrEqual, Interval, IntervalIncludingBounds, IntervalIncludingLowerBound, IntervalIncludingUpperBound, InGroup, InList, InListByHierarchy, NotInGroup, NotInList, NotInListByHierarchy.

fieldInfos

Список описаний полей отчета.

Подчиненные элементы:

Наименование Количество Описание
fieldInfo * Описание поля отчета

fieldInfo

Описание поля отчета.

Подчиненные элементы:

Наименование Количество Описание
name 1 Имя поля
presentation 1 Представление поля
owner 1 Владелец поля
ownerPresentation 1 Признак, что является представлением владельца
resource 1 Признак, что поле ресурс
typeDescription 1 Строковое представление описания типа поля
presentationLength 1 Длина представления значения поля

rowGroupInfos

Список описаний группировок строк отчета.

Подчиненные элементы:

Наименование Количество Описание
rowGroupInfo * Описание группировки строк отчета

rowGroupInfo

Описание группировки строк отчета.

Подчиненные элементы:

Наименование Количество Описание
name 1 Имя группировки
presentation 1 Представление группировки

columnGroupInfos

Список описаний группировок колонок отчета.

Подчиненные элементы:

Наименование Количество Описание
columnGroupInfo * Описание группировки колонок отчета

columnGroupInfo

Описание группировки колонок отчета.

Подчиненные элементы:

Наименование Количество Описание
name 1 Имя группировки
presentation 1 Представление группировки

table

Элемент, описывающий табличную часть отчета.

Подчиненные элементы:

Наименование Количество Описание
column * Колонка отчета. Данный элемент только описывает колонку отчета, но не содержит данные. Не содержит элементов
row * Описывает строку таблицы. Может содержать элементы cell

column

Колонка отчета. Данный элемент только описывает колонку отчета, но не содержит данные. Не содержит элементов.

Подчиненные элементы:

Наименование Количество Описание
group 1 Колонка, содержащая имя группировки. Для детальных содержит зарезервированное имя "Detail"
groupNumber 1 Абсолютный номер группировки колонки. Идентифицирует группировку в отчете
level 0-1 Число, уровень вложенности группировки, к которой относится колонка
hasChild 0-1 Булево, имеются ли у данной колонки вложенные колонки. Имеются ли они вообще в отчете, а не в данном конкретном документе
isOpen 0-1 Булево, открыта или закрыта группировка. Имеет смысл, только если атрибут hasChild истина и часть, к которой относится колонка, является заголовком
groupPart 0-1 Является ли данная колонка заголовком группировки, подвалом или просто строкой. Установлен, только если сказано выводить данные по группировке в заголовке и в итогах. Для заголовка "header", для подвала "footer", для простого "none". Для колонки, не имеющей подчиненных колонок, вообще не установлен

Для указания левой (заголовка) и правой (итога) части группировок строк используются тоже элемент column.

row

Описывает строку таблицы. Может содержать элементы cell.

Подчиненные элементы:

Наименование Количество Описание
group 1 Строка, содержащая имя группировки. Для детальных содержит зарезервированное имя "Detail"
groupNumber 1 Абсолютный номер группировки строки. Идентифицирует группировку в отчете
level 0-1 Число, уровень вложенности группировки, к которой относится строка
hasChild 0-1 Булево, имеются ли у данной строки вложенные колонки. Имеются ли они вообще в отчете, а не в данном конкретном документе
isOpen 0-1 Булево, открыта или закрыта группировка. Имеет смысл, только если атрибут hasChild истина и часть, к которой относится строка, является заголовком
groupPart 0-1 Является ли данная колонка заголовком группировки, подвалом или просто строкой. Установлен, только если сказано выводить данные по группировке в заголовке и в итогах. Для заголовка "header", для подвала "footer", для простой "none". Для строки, не имеющей подчиненных строк, вообще не установлен

cell

Описывает отдельную ячейку отчета. Содержит элементы field.

Подчиненные элементы:

Наименование Количество Описание
rowGroupNumber 1 Номер группы
rowGroupPart 0-1 Является заголовком или подвалом
columnGroupNumber 1 Номер группы колонки
columnGroupPart 0-1 Является заголовком или подвалом
field * Значение поля

Элемент cell содержит все поля запроса. Для ячеек, описывающих область группировок строк и колонок, некоторые поля будут равны NULL. К таким полям относятся поля, принадлежащие вложенным группировкам, и их реквизиты.

field

Значение поля.

Подчиненные элементы:

Наименование Количество Описание
name 1 Строка, имя поля
value 1 Значение поля

value

Значение. Не содержит подчиненных элементов. Содержит символьные данные, являющиеся значением. Может содержать атрибуты nil и type. Атрибут nil булевого типа указывает, что данное значение равно Undefined. По умолчанию атрибут равен false. Атрибут type строкового типа есть только у полей составного типа или у значений типа NULLl. Содержит имя типа значения.

Данные с оформлением

Оформление отчета это добавление к данным отчета информации о способе размещения данных в отчете, значений таких параметров, как цвет фона, текста, шрифты, наличие рамок и их толщина.

Оформление происходит только в момент получения конкретной страницы. Оформленный отчет можно любым доступным способом (например, с помощью XSL) конвертировать из XML формата в желаемый, например, в HTML или PDF.

Формат оформленных данных по структуре совпадает с форматом неоформленных данных. Просто в оформленных данных у соответствующих элементов появляются дополнительные элементы, описывающие оформление, расположение и размер элементов отчета. В новой структуре отсутствует понятие поля, так как вся необходимая информация должна быть выведена в содержимое ячеек.

Описание элементов

report

Корневой элемент документа. Подчиненные элементы должны следовать строго в той последовательности, в которой они описаны.

Подчиненные элементы:

Наименование Количество Описание
styles 1 Список стилей
title 1 Элементы, описывающие шапку отчета
body 1 Элементы, описывающие содержание отчета
total 1 Элементы, описывающие подвал отчета

styles

Список стилей.

Подчиненные элементы:

Наименование Количество Описание
styleDescription * Стиль оформления

styleDescription

Стиль оформления

Подчиненные элементы:

Наименование Количество Описание
name 0-1 Имя стиля
horizontalAlign 0-1 Горизонтальное выравнивание. Более подробно "Выравнивание"
verticalAlign 0-1 Вертикальное выравнивание. Более подробно "Выравнивание"
padding 0-1 Отступ от рамки объекта. Элемент padding сокращенно устанавливает значения для элементов paddingLeft, paddingTop, paddingRight, paddingBottom. Значения разделяются пробелами. Если задано одно значение, то отступ применяется для всех сторон. Если два, то первое значение применяется к верхней и нижней сторонам. Если три, то первое значение применяется к верхней стороне, второе к левой и правой, а третье к нижней. В случае, когда указаны все четыре значения, они применяются к верхней, правой, нижней, левой сторонам соответственно. Дополнительно в разделе "Отступ"
paddingLeft 0-1 Отступ, применяемый к левой стороне. Дополнительно в разделе "Отступ"
paddingTop 0-1 Отступ, применяемый к верхней стороне. Дополнительно в разделе "Отступ"
paddingRight 0-1 Отступ, применяемый к правой стороне. Дополнительно в разделе "Отступ"
paddingBottom 0-1 Отступ, применяемый к нижней стороне. Дополнительно в разделе "Отступ"
backgroundColor 0-1 Цвет фона. Описание формата строки, указывающей цвет.
textColor 0-1 Цвет текстовых данных. Описание формата строки, указывающей цвет.
font 0-1 Параметры шрифта
border 0-1 Настройка параметров рамки. Элемент border сокращенно устанавливает значения для элементов borderLeft, borderTop, borderRight, borderBottom. Применение значений к сторонам рамки, аналогично отступу. Дополнительно в разделе "Рамка"
borderLeft 0-1 Описание левой стороны рамки. Дополнительно в разделе "Рамка"
borderTop 0-1 Описание верхней стороны рамки. Дополнительно в разделе "Рамка"
borderRight 0-1 Описание правой стороны рамки. Дополнительно в разделе "Рамка"
borderBottom 0-1 Описание нижней стороны рамки. Дополнительно в разделе "Рамка"

title, body, footer

Элементы, описывающие шапку, содержание, подвал отчета.

Подчиненные элементы:

Наименование Количество Описание
text * Элемент, описывающий кусочек текста
table * Элемент, описывающий табличную часть отчета
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит

text

Элемент, описывающий кусочек текста.

Подчиненные элементы:

Наименование Количество Описание
details 0-1 Описывает расшифровку отдельного элемента отчета
left 0-1 Левая координата позиционирования объекта
top 0-1 Верхняя координата позиционирования объекта
width 0-1 Ширина объекта
height 0-1 Высота объекта
style 0-1 Стиль элемента
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит
value 1 Значение элемента

table

Элемент, описывающий табличную часть отчета.

Подчиненные элементы:

Наименование Количество Описание
column 1...* Колонка отчета. Данный элемент только описывает колонку отчета, но не содержит данные
row 1...* Описывает строку таблицы
left 0-1 Левая координата позиционирования объекта
top 0-1 Верхняя координата позиционирования объекта
width 0-1 Ширина объекта
height 0-1 Высота объекта
style 0-1 Стиль элемента
border 0-1 Список параметров оформления рамки
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит

Рамка задает рамку именно вокруг таблицы в целом, а не значения по умолчанию для всех ячеек.

column

Колонка отчета. Данный элемент только описывает колонку отчета, но не содержит данных.

Подчиненные элементы:

Наименование Количество Описание
width 0-1 Ширина колонки.
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит

row

Описывает строку таблицы.

Подчиненные элементы:

Наименование Количество Описание
cell 1...* Описывает отдельную ячейку отчета
height 0-1 Высота строки в таблице
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит

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

cell

Описывает отдельную ячейку отчета.

Подчиненные элементы:

Наименование Количество Описание
table * Элемент, описывающий табличную часть отчета
text * Элемент, описывающий кусочек текста
rowSpan 0-1 Указывается, сколько строк таблицы будет занимать ячейка
colSpan 0-1 Указывается, сколько колонок таблицы будет занимать ячейка
toggle 0-1 Описание переключателя группировки
style 0-1 Стиль элемента
class 0-1 Содержит имена классов стилей. Имена должны перечисляться через пробел. Подчиненных элементов не содержит

style

Стиль элемента.

Подчиненные элементы:

Наименование Количество Описание
horizontalAlign 0-1 Горизонтальное выравнивание. Более подробно "Выравнивание"
verticalAlign 0-1 Вертикальное выравнивание. Более подробно "Выравнивание"
padding 0-1 Отступ от рамки объекта. Элемент padding сокращенно устанавливает значения для элементов paddingLeft, paddingTop, paddingRight, paddingBottom. Значения разделяются пробелами. Если задано одно значение, то отступ применяется для всех сторон. Если два, то первое значение применяется к верхней и нижней сторонам. Если три, то первое значение применяется к верхней стороне, второе - к левой и правой, а третье - к нижней. В случае, когда указаны все четыре значения, они применяются к верхней, правой, нижней, левой сторонам соответственно. Дополнительно в разделе "Отступ"
paddingLeft 0-1 Отступ, применяемый к левой стороне. Дополнительно в разделе "Отступ"
paddingTop 0-1 Отступ, применяемый к верхней стороне. Дополнительно в разделе "Отступ"
paddingRight 0-1 Отступ, применяемый к правой стороне. Дополнительно в разделе "Отступ"
paddingBottom 0-1 Отступ, применяемый к нижней стороне. Дополнительно в разделе "Отступ"
backgroundColor 0-1 Цвет фона. Описание формата строки, указывающей "Цвет"
textColor 0-1 Цвет текстовых данных. Описание формата строки, указывающей "Цвет"
font 0-1 Параметры шрифта
border 0-1 Настройка параметров рамки. Элемент border сокращенно устанавливает значения для элементов borderLeft, borderTop, borderRight, borderBottom. Применение значений к сторонам рамки, аналогично отступу. Дополнительно в разделе "Рамка"
borderLeft 0-1 Описание левой стороны рамки. Дополнительно в разделе "Рамка"
borderTop 0-1 Описание верхней стороны рамки. Дополнительно в разделе "Рамка"
borderRight 0-1 Описание правой стороны рамки. Дополнительно в разделе "Рамка"
borderBottom 0-1 Описание нижней стороны рамки. Дополнительно в разделе "Рамка"

toggle

Описание переключателя группировки.

Подчиненные элементы:

Наименование Количество Описание
state 1 Элемент state указывает, нужно ли рисовать раскрытие группировки, и если нужно, то в каком состоянии. Может принимать значения: none – не рисовать, close – рисовать закрытой, open – рисовать открытой. По умолчанию none
rowGroup 0-1 Номер группировки строк
columnGroup 0-1 Номер группировки колонок

details

Описывает расшифровку отдельного элемента отчета.

Подчиненные элементы:

Наименование Количество Описание
name 1 Наименование расшифровки
rowGroup 0-1 Содержит номер ячейки данных отчета в строке
columnGroup 0-1 Содержит номер ячейки данных отчета в колонке

font

Параметры шрифта.

Подчиненные элементы:

Наименование Количество Описание
fontFamily 0-1 Элемент является строкой и задает гарнитуру шрифта. По умолчанию используется гарнитура Arial
fontSize 0-1 Элемент задает размер шрифта. По умолчанию размер устанавливается в 10pt
fontStyle 0-1 Элемент является строкой и задает стиль начертания шрифта. Возможны варианты: normal, italic. Значением по умолчанию является normal
fontWeight 0-1 Элемент является строкой и задает толщину шрифта. Возможны варианты: normal, bold. Значением по умолчанию является normal
textDecoration 0-1 Элемент описывает, будет ли текст подчеркнут, зачеркнут, иметь линию над текстом или нет. Может принимать значения none, underline, overline, line-through. Значением по умолчанию является none

border, borderLeft, borderTop, borderRight, borderBottom

Свойства рамки.

Подчиненные элементы:

Наименование Количество Описание
borderSize 0-1 Элемент является строкой и задает толщину рамки
borderColor 0-1 Элемент задает цвет рамки
borderStyle 0-1 Элемент является строкой и задает стиль рисования рамки. Возможны варианты: none, doted, dashed, solid, double. Значением по умолчанию является normal

Размерность

Размерность указывается следом за величиной и может отделяться пробелом. Размерность может быть следующих вариантов:

Цвет

Цвет задается строкой либо как название цвета (предопределенные названия цветов Веб), либо в формате RGB. В формате RGB сначала идет символ '#', за которым следуют три шестнадцатеричных числа. Первые две цифры – красная составляющая, следующие две – зеленая, последние две цифры – синяя. Например, #FF0000 – красный, #008000 – lime, #00FF00 – зеленый.

Выравнивание

Выравнивание задает размещение содержания внутри элемента. Выравнивание может осуществляться по горизонтали и вертикали.

Для указания способа выравнивания по горизонтали используется элемент horizontalAlign. Он может содержать следующие значения:

Для указания способа выравнивания по вертикали используется элемент verticalAlign. Он может содержать следующие значения:

Отступ

Отступ – это расстояние между рамкой объекта и его содержанием. Отступы могут быть заданы для ячейки, текста и т. д.

Описание отступов может быть задано как в целом для всего элемента (элемент padding), так и по отдельным границам элемента. Отступы для отдельных границ элемента задаются элементами paddingLeft, paddingTop, paddingRight, paddingBottom. Если задано описание отступа в целом, а также и для отдельных границ одновременно, то приоритет имеет описание границы.

Отступы описываются числом и размерностью. По умолчанию отступа нет (=0).

Рамка

Описание рамки может быть задано как в целом для всего элемента (элемент border), так и по отдельным границам рамки. Рамка для отдельных границ задается элементами borderLeft, borderTop, borderRight, borderBottom. Если задано описание рамки для отдельных границ и для всей рамки одновременно, то приоритетом имеет описание границ рамки.

По умолчанию у элемента нет рамки, т. е. стиль рамки равен "none".

Стиль

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

Все установки стиля наследуются, кроме описания рамки.

Пример отчета без оформления

Копировать в буфер обмена
<v8:reportData xmlns:v8="http://v8.1c.ru/Вебreport/data/">
    <v8:filters>
        <v8:filter>
            <v8:dataPath>КоличествоОстаток</v8:dataPath>
            <v8:comparisonType>Great</v8:comparisonType>
            <v8:value>10</v8:value>
        </v8:filter>
    </v8:filters>
    <v8:fieldInfos>
        <v8:fieldInfo>
            <v8:name>Номенклатура</v8:name>
            <v8:presentation>Номенклатура</v8:presentation>
            <v8:owner>
      </v8:owner>
            <v8:ownerPresentation>false</v8:ownerPresentation>
            <v8:resource>false</v8:resource>
            <v8:typeDescription>СправочникСсылка_Номенклатура</v8:typeDescription>
            <v8:presentationLength>25</v8:presentationLength>
        </v8:fieldInfo>
        <v8:fieldInfo>
            <v8:name>НоменклатураПредставление</v8:name>
            <v8:presentation>
      </v8:presentation>
            <v8:owner>Номенклатура</v8:owner>
            <v8:ownerPresentation>true</v8:ownerPresentation>
            <v8:resource>false</v8:resource>
            <v8:typeDescription>string(0,Varying)</v8:typeDescription>
            <v8:presentationLength>32</v8:presentationLength>
        </v8:fieldInfo>
        <v8:fieldInfo>
            <v8:name>Склад</v8:name>
            <v8:presentation>Склад</v8:presentation>
            <v8:owner>
      </v8:owner>
            <v8:ownerPresentation>false</v8:ownerPresentation>
            <v8:resource>false</v8:resource>
            <v8:typeDescription>СправочникСсылка_Склады</v8:typeDescription>
            <v8:presentationLength>25</v8:presentationLength>
        </v8:fieldInfo>
        <v8:fieldInfo>
            <v8:name>СкладПредставление</v8:name>
            <v8:presentation>
      </v8:presentation>
            <v8:owner>Склад</v8:owner>
            <v8:ownerPresentation>true</v8:ownerPresentation>
            <v8:resource>false</v8:resource>
            <v8:typeDescription>string(0,Varying)</v8:typeDescription>
            <v8:presentationLength>32</v8:presentationLength>
        </v8:fieldInfo>
        <v8:fieldInfo>
            <v8:name>КоличествоОстаток</v8:name>
            <v8:presentation>КоличествоОстаток</v8:presentation>
            <v8:owner>
      </v8:owner>
            <v8:ownerPresentation>false</v8:ownerPresentation>
            <v8:resource>true</v8:resource>
            <v8:typeDescription>decimal(0,0,Any)</v8:typeDescription>
            <v8:presentationLength>32</v8:presentationLength>
        </v8:fieldInfo>
        <v8:fieldInfo>
            <v8:name>СкладКод</v8:name>
            <v8:presentation>Код</v8:presentation>
            <v8:owner>Склад</v8:owner>
            <v8:ownerPresentation>false</v8:ownerPresentation>
            <v8:resource>false</v8:resource>
            <v8:typeDescription>string(7,Fixed)</v8:typeDescription>
            <v8:presentationLength>7</v8:presentationLength>
        </v8:fieldInfo>
    </v8:fieldInfos>
    <v8:rowGroupInfos>
        <v8:rowGroupInfo>
            <v8:name>Номенклатура</v8:name>
            <v8:presentation>Номенклатура</v8:presentation>
        </v8:rowGroupInfo>
    </v8:rowGroupInfos>
    <v8:columnGroupInfos>
        <v8:columnGroupInfo>
            <v8:name>Склад</v8:name>
            <v8:presentation>Склад</v8:presentation>
        </v8:columnGroupInfo>
    </v8:columnGroupInfos>
    <v8:table>
        <v8:column>
            <v8:group>
      </v8:group>
            <v8:groupNumber>0</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>true</v8:isOpen>
            <v8:groupPart>Header</v8:groupPart>
        </v8:column>
        <v8:column>
            <v8:group>Склад</v8:group>
            <v8:groupNumber>1</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>false</v8:isOpen>
            <v8:groupPart>None</v8:groupPart>
        </v8:column>
        <v8:column>
            <v8:group>Склад</v8:group>
            <v8:groupNumber>2</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>false</v8:isOpen>
            <v8:groupPart>None</v8:groupPart>
        </v8:column>
        <v8:column>
            <v8:group>
      </v8:group>
            <v8:groupNumber>0</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>true</v8:isOpen>
            <v8:groupPart>Footer</v8:groupPart>
        </v8:column>
        <v8:row>
            <v8:group>
      </v8:group>
            <v8:groupNumber>0</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>true</v8:isOpen>
            <v8:groupPart>Header</v8:groupPart>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>148</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>1</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Основной склад</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>132</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>1      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>2</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395e-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Склад отдела продаж</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>16</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>2      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>148</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
        </v8:row>
        <v8:row>
            <v8:group>Номенклатура</v8:group>
            <v8:groupNumber>1</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>true</v8:hasChild>
            <v8:isOpen>false</v8:isOpen>
            <v8:groupPart>Header</v8:groupPart>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>6064392d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатуры</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>61</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>6064392d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатуры</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Основной склад</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>61</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>1      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Header</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>6064392d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатуры</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>61</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
        </v8:row>
        <v8:row>
            <v8:group>Номенклатура</v8:group>
            <v8:groupNumber>2</v8:groupNumber>
            <v8:level>1</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>false</v8:isOpen>
            <v8:groupPart>None</v8:groupPart>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>None</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>60643934-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатура Keyboard PS/2</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>14</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>None</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>60643934-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатура Keyboard PS/2</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Основной склад</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>14</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>1      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>None</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>None</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value>60643934-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value>Клавиатура Keyboard PS/2</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>14</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
        </v8:row>
        <v8:row>
            <v8:group>
      </v8:group>
            <v8:groupNumber>0</v8:groupNumber>
            <v8:level>0</v8:level>
            <v8:hasChild>false</v8:hasChild>
            <v8:isOpen>true</v8:isOpen>
            <v8:groupPart>Footer</v8:groupPart>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Footer</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>148</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Footer</v8:rowGroupPart>
                <v8:columnGroupNumber>1</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395d-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Основной склад</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>132</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>1      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Footer</v8:rowGroupPart>
                <v8:columnGroupNumber>2</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value>6064395e-497a-11d7-8c74-0048541c0980</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value>Склад отдела продаж</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>16</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value>2      </v8:value>
                </v8:field>
            </v8:cell>
            <v8:cell>
                <v8:rowGroupNumber>0</v8:rowGroupNumber>
                <v8:rowGroupPart>Footer</v8:rowGroupPart>
                <v8:columnGroupNumber>0</v8:columnGroupNumber>
                <v8:columnGroupPart>None</v8:columnGroupPart>
                <v8:field>
                    <v8:name>Номенклатура</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>НоменклатураПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>Склад</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладПредставление</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>КоличествоОстаток</v8:name>
                    <v8:value>148</v8:value>
                </v8:field>
                <v8:field>
                    <v8:name>СкладКод</v8:name>
                    <v8:value type="Null">
          </v8:value>
                </v8:field>
            </v8:cell>
        </v8:row>
    </v8:table>
</v8:reportData>

Пример отчета с оформлением

Копировать в буфер обмена
<v8:report xmlns:v8="http://v8.1c.ru/Вебreport/report/">
    <v8:styles>
        <v8:styleDescription>
            <v8:name>Report</v8:name>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Cell</v8:name>
            <v8:border>
                <v8:borderStyle>Solid</v8:borderStyle>
                <v8:borderColor>Black</v8:borderColor>
                <v8:borderSize>1px</v8:borderSize>
            </v8:border>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Склад</v8:name>
            <v8:textColor>#FFE0C0</v8:textColor>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Left</v8:name>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Right</v8:name>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Номенклатура</v8:name>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Header</v8:name>
            <v8:backgroundColor>#FFFFC0</v8:backgroundColor>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Detail</v8:name>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>Footer</v8:name>
            <v8:backgroundColor>#C0FFC0</v8:backgroundColor>
        </v8:styleDescription>
        <v8:styleDescription>
            <v8:name>rightAlign</v8:name>
            <v8:horizontalAlign>right</v8:horizontalAlign>
        </v8:styleDescription>
    </v8:styles>
    <v8:title>
        <v8:class>Report</v8:class>
    </v8:title>
    <v8:body>
        <v8:class>Report</v8:class>
        <v8:table>
            <v8:column/>
            <v8:column>
                <v8:class>Склад</v8:class>
            </v8:column>
            <v8:column>
                <v8:class>Склад</v8:class>
            </v8:column>
            <v8:column/>
            <v8:row>
                <v8:cell>
                    <v8:class>Cell Header Left</v8:class>
                    <v8:rowSpan>2</v8:rowSpan>
                    <v8:text>
                        <v8:value>Номенклатура</v8:value>
                    </v8:text>
                </v8:cell>
                <v8:cell>
                    <v8:class>Cell Header Склад Склад</v8:class>
                    <v8:text>
                        <v8:value>Основной склад</v8:value>
                    </v8:text>
                </v8:cell>
                <v8:cell>
                    <v8:class>Cell Header Склад Склад</v8:class>
                    <v8:text>
                        <v8:value>Склад отдела продаж</v8:value>
                    </v8:text>
                </v8:cell>
                <v8:cell>
                    <v8:class>Cell Header Right</v8:class>
                    <v8:rowSpan>2</v8:rowSpan>
                    <v8:text>
                        <v8:value>Итого</v8:value>
                    </v8:text>
                </v8:cell>
            </v8:row>
            <v8:row>
                <v8:cell>
                    <v8:class>Cell Header Left</v8:class>
                    <v8:text>
                        <v8:value>1      </v8:value>
                    </v8:text>
                </v8:cell>
                <v8:cell>
                    <v8:class>Cell Header</v8:class>
                    <v8:text>
                        <v8:value>2      </v8:value>
                    </v8:text>
                </v8:cell>
            </v8:row>
        </v8:table>
    </v8:body>
    <v8:footer>
        <v8:class>Report</v8:class>
    </v8:footer>
</v8:report>