Text
                    11©
БИБЛИОТЕКА РАЗРАБОТЧИКА
Е.Ю. Хрусталева
РАЗРАБОТКА СЛОЖНЫХ
ОТЧЕТОВ В 1 С:ПРЕДПРИЯТИИ 8
СИСТЕМА КОМПОНОВКИ ДАННЫХ
ПАБЛИШИНГ
УДК 658.012.011.56:004.42
ББК 65.29
Х95
Хрусталева Елена Юрьевна
Х95	Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных. -
М.: ООО «1С-Паблишинг», 2008. - 513 с.: ил. + 1 CD-ROM. - (Библиотека разработчика).
ISBN 978-5-9677-0963-0 («1С-Паблишинг»)
Данная книга адресована программистам и разработчикам прикладных решений в системе 1С:Предприятие 8. Она позволяет самостоятельно изучить возможности системы компоновки данных механизма, предназначенного для создания сложных аналитических отчетов в программах 1С:Предприятия 8.
Для начинающих разработчиков в книге описывается устройство системы компоновки данных, приводятся простые примеры создания отчетов, снабженные большим количеством иллюстраций и комментариев.
Значительная часть книги описывает выполнение практических примеров создания и настройки сложных отчетов. Эти примеры можно использовать для того, чтобы «попрактиковаться» и «набить руку» в создании и модификации отчетов, использующих систему компоновки данных.
Для опытных разработчиков книга содержит подробное описание отдельных возможностей системы компоновки данных. Эту часть книги можно использовать в качестве справочного пособия или для более глубокого изучения возможностей механизма.
Все примеры, рассматриваемые в книге, содержатся на прилагаемом компакт-диске. Для создания примеров использована платформа ^Предприятия версии 8.1.11.67.
Книга выпущена под редакцией Максима Радченко.
Компьютерная верстка и препресс: Ольга Шестакова.
Корректор: Елена Семененко.
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Полное или частичное копирование материалов книги без письменного разрешения фирмы «1С-Паблишинг» запрещается.
ISBN 978-5-9677-0963-0	© ООО «1С-Паблишинг», 2008.
Подписано в печать 19.09.2008. Формат 60x84 1/16. Усл.-печ. л. 29,82.
Дополнительный тираж 3000 экз. Заказ 197.
Налоговая льгота - общероссийский классификатор продукции
ОК 005-93, том 2; 95 3005 - литература учебная.
Фирма «1С»
123056, Москва, а/я 64, Селезневская ул., 21.
Тел.: (495) 737-92-57, факс: (495) 681-44-07, e-mail: 1c@1c.ru, URL: http://www.1c.ru
Издательство ООО «1С-Паблишинг»
127473, Москва, ул. Достоевского, 1/21, строение 1.
Тел.: (495) 681-02-21, факс: (495) 681-44-07, e-mail: publishing@1c.ru
Отпечатано с оригиналов ООО «1С-Паблишинг».
Отпечатано в ОАО ордена Трудового Красного Знамени «Чеховский полиграфический комбинат»
142300, г. Чехов Московской области
Оглавление
Предисловие..............................................7
Кому предназначена эта книга...........................7
Особенности............................................7
Как читать.............................................8
Структура..............................................9
Что находится на компакт-диске........................10
Глава 1. Простой отчет «без программирования»...........11
Добавление отчета.....................................12
Создание схемы компоновки данных......................13
Редактирование схемы компоновки данных................15
Добавление «источника» данных......................16
Создание запроса...................................17
Автоматическое заполнение доступных полей..........19
Создание стандартных настроек отчета..................20
Редактирование настроек отчета в режиме «1С:Предприятие».26
Глава 2. Устройство системы компоновки данных...........33
Получение данных для отчета...........................33
Общее устройство системы компоновки данных............34
Схема компоновки данных...............................37
Настройки отчета......................................48
Глава 3. Примеры основных возможностей системы компоновки данных.....................................55
Исходные данные для примеров..........................55
Пример 1. Набор данных - запрос....................57
Пример 2. Два связанных набора данных..............62
Связь таблиц в запросе.............................68
3
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Пример 3. Набор данных - объект............................73
Пример 4. Набор данных - объединение.......................80
Пример 5. Характеристики. Вывод данных в диаграмму.........88
Пример 6. Вложенный отчет..................................97
Пример 7. Вывод результата в сводную таблицу..............103
Глава 4. Примеры разработки отчетов..............................115
Пример 1. Возможности настройки различных элементов отчета................................115
Пример 2. Отчет по системным блокам.......................131
Пример 3. Отчет «Список номенклатуры». Программный запуск отчета.................................144
Пример 4. Программная установка значений параметров. Автоматическое формирование отчета «Отчет по системным блокам»...............................153
Пример 5. Отчет «Продажи номенклатуры»....................156
Пример 6. Отчет по продажам...............................176
Пример 7. Сборка системных блоков.........................188
Пример 8. Оказание услуг..................................201
Пример 9. Использование источников данных -объектов. Создание собственного макета оформления.........224
Пример 10. Работа с иерархией. Работа с расшифровкой.......247
Пример 11. Использование источников данных-объединений объектов. Программная настройка отчета. Программное описание схемы компоновки данных..............267
Пример 12. Создание схемы компоновки данных в текстовом редакторе. Сериализация объектов компоновки данных........284
Глава 5. Справочник разработчика................................293
Общие возможности...............................................293
Получение итогов по всем датам в выбранном	периоде....293
Характеристики............................................305
Иерархия....................................................................................... 318
Связи наборов данных......................................336
Расчет итогов.............................................340
Расшифровка...............................................344
Использование нескольких схем компоновки для одного отчета.........................................352
Многоязычные отчеты.......................................356
4
Оглавление
Поля..................................................363
Автоматическое заполнение полей наборов данных.....363
Использование автополей............................369
Переопределение представления поля набора данных...373
Вычисляемые поля...................................376
Пользовательские поля..............................380
Роли полей.........................................382
Ресурсы...............................................385
Параметры.............................................390
Использование дат..................................390
Использование стандартных периодов.................391
Макеты................................................394
Предопределенные макеты............................395
Макеты оформления..................................408
Настройки отчета......................................421
Использование конструктора настроек................421
Сохранение и загрузка настроек отчета..............424
Упорядочивание.....................................426
Отбор..............................................431
Расположение реквизитов............................437
Настройка группировок..............................439
Расположение ресурсов..............................453
Расположение группы выбранных полей................455
Заголовки выбранных полей..........................458
Расположение общих итогов..........................458
Отображение заголовков, параметров данных и отборов.463
Настройки диаграмм.................................467
Условное оформление................................469
Работа с системой компоновки средствами встроенного языка..................................473
Программная установка схемы компоновки данных......473
Программная работа с параметрами схемы компоновки данных................................475
Редактирование стандартных настроек................477
Редактирование настроек схемы компоновки...........478
5
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Вывод отчета средствами встроенного языка........478
Вывод отчета в дерево значений, таблицу значений для дальнейшей программной обработки.................480
Исполнение отчета................................481
Глава 6. Культура создания отчетов с использованием системы компоновки данных.............................497
6
Предисловие
Кому предназначена эта книга
Целью автоматизации хозяйственной деятельности любой фирмы в конечном итоге является формирование разнообразной отчетности, удовлетворяющей интересам бухгалтерского, финансового и административного учета. Для решения этой задачи в платформе 1С:Предприятия 8.1 используется специальный механизм построения аналитической отчетности - Система компоновки данных, который рассмотрен в этой книге.
Книга предназначена в первую очередь разработчикам, уже имеющим опыт работы в среде 1С:Предприятие8.1 и желающим освоить работу с системой компоновки данных. Однако тем, кто работает с более ранними версиями платформы - 1С:Пред-приятие 8.0 или 1С:Г1редприятие 7.7, эта книга также будет, безусловно, полезна и, возможно, явится для них одним из главных аргументов перехода на версию 8.1.
Особенности
При создании этой книги использовались различные источники информации:
•	материалы информационно-технологической поддержки (ИТС) фирмы «1С»;
•	материалы конференции партнеров-разработчиков с сайта http://partners.v8.1c.ru;
•	материалы независимых интернет-конференций, посвященных разработке в системе 1С:Предприятие 8.
7
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Как читать
В книге доступно, «шаг за шагом», описана работа с системой компоновки данных. Рассматривается ее общее назначение; на многочисленных примерах, основанных на реальных задачах и построенных по принципу «от простого к сложному», демонстрируются ее разнообразные свойства. Примеры содержатся в демонстрационной информационной базе, прилагающейся к книге. Кроме того, даны ответы на вопросы разработчиков, наиболее часто встречающиеся на партнерских конференциях и других интернет-форумах по данной теме.
Книгу можно читать как целиком, так и только отдельные главы, в зависимости от потребностей читателя.
Для достаточно опытных разработчиков, а также тех, кто не имеет времени и желания разбираться во всех деталях системы компоновки данных, будет полезна общая теоретическая информация о механизме из второй главы и информация обо всех возможностях и тонкостях системы компоновки из пятой главы (стр. 293).
Разработчикам, не знакомым с системой компоновки данных и имеющим мало опыта разработки в 1С:Предприятии, рекомендуется начинать читать книгу с первой главы, а также поупражняться в создании отчетов, описанных в третьей (стр. 55) и четвертой главах (стр. 115).
Читателям, желающим получить наиболее полное представление о системе компоновки данных и опыт работы с ней, советуем читать книгу последовательно и внимательно, подробно разбирая заинтересовавшие их примеры.
8
Предисловие
Структура
В первой главе подробно разбирается пример создания отчета с помощью системы компоновки данных. Он целиком основан на использовании визуальных средств разработки «без единой строчки кода». Здесь последовательно показываются и объясняются все действия разработчика по конструированию отчета. Поэтому книгу лучше изучать последовательно, так как некоторые повторяющиеся действия при разработке отчетов, детально описанные в этой главе, в дальнейшем лишь кратко перечисляются. Эта глава будет полезна как читателям, не знакомым с системой компоновки данных, так и тем, кто хочет вспомнить некоторые моменты процесса разработки отчетов.
Во второй главе содержится теоретическая информация о системе компоновки данных, описываются общие принципы работы этого механизма, рассматривается последовательность и назначение каждого этапа компоновки.
В третьей главе демонстрируются основные возможности системы компоновки данных. Изучение этой главы позволит разработчикам быстро и легко создавать свои собственные отчеты, не особенно вдаваясь в тонкости механизма.
Четвертая глава содержит набор практических примеров по созданию и модификации отчетов. Она будет полезна разработчикам, желающим получить реальные навыки по разработке отчетов с помощью системы компоновки данных.
Пятая глава посвящена детальному рассмотрению отдельных возможностей системы компоновки данных. Она предназначена в первую очередь разработчикам, уже знакомым с азами разработки отчетов и желающим получить более глубокую и конкретную информацию по тем или иным возможностям системы компоновки данных.
9
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В шестой главе рассказывается о культуре создания отчетов с использованием системы компоновки данных. Здесь приводятся рекомендации о том, как сделать отчет максимально удобным и интуитивно понятным для пользователя, как разработать простой, лаконичный и дружественный пользовательский интерфейс.
Что находится
на компакт-диске
setup.exe - комплект поставки демонстрационной базы с примерами отчетов, описанных в книге.
10
Глава 1
Простой отчет
«без программирования»
В данной главе мы подробно рассмотрим пример создания несложного отчета с помощью системы компоновки данных. Пример целиком основан на использовании визуальных средств разработки «без единой строчки кода». Здесь последовательно показываются и подробно объясняются все действия разработчика по визуальному конструированию отчета.
Заметим, что некоторые повторяющиеся действия при разработке отчетов, детально описанные в этой главе, в дальнейшем лишь кратко перечисляются. Поэтому эта глава будет полезна как разработчикам, не знакомым с системой компоновки данных, так и тем, кто хочет вспомнить некоторые моменты процесса разработки отчетов.
Практическое знакомство с системой компоновки данных начнем с простого отчета, который будет отражать приход, расход и остатки номенклатуры на складах.
11
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Добавление отчета
Для визуального конструирования отчетов с использованием системы компоновки данных предназначен объект конфигурации Отчет. Выделим в дереве объектов конфигурации ветвь Отчеты и добавим новый отчет (рис. 1.1).
Конфигурация	¥• X
Щ Конфигурация Общие
В ТР Константы
E-jJI Справочники
В-Документы
••• Журналы документов
В-{.Перечисления
Отчеты
Обработки Планы видов характеристик
•Tj Планы счетов
• •'1£ Планы видов расчета Регистры сведений Регистры накопления Регистры бухгалтерии
Э Регистры расчета Бизнес-процессы Задачи
Рис. 1.1. Создание нового отчета
ПРИМЕЧАНИЕ
Все действия, описанные в этой главе и далее, будут выполняться на основе конфигурации, находящейся на диске и приложенной к книге.
12
Глава 1. Простой отчет «без программирования»
Создание схемы компоновки данных
В появившемся окне редактирования зададим имя отчета Остат-киНоменклатуры и создадим схему компоновки данных отчета, нажав кнопку Открыть схему компоновки данных или кнопку открытия со значком лупы (рис. 1.2).
Рис. 1.2. Окно редактирования объекта конфигурации «Отчет»
ПРИМЕЧАНИЕ
Схема компоновки данных является основой для компоновки отчета. Она содержит описание наборов данных и используемых в отчете полей, связей между ними, параметров получения данных, итоговых полей и стандартных настроек, в которых задается структура отчета, отбор, порядок и другие.
13
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Так как у нашего отчета еще нет схемы компоновки данных, платформа предложит создать новую схему и откроет конструктор макета.
ПРИМЕЧАНИЕ
Схема компоновки хранится в макете отчета специального типа -Схема КОМПОНОВКИ данных. В дальнейшем ее можно будет вызвать и отредактировать на закладке свойств отчета Макеты наряду с другими макетами отчета. В открывшемся окне конструктора макета будет доступен для выбора единственный тип макета - Схема компоновки данных.
Здесь можно изменить имя схемы, так как в общем случае отчет может иметь несколько схем компоновки данных. Мы оставим имя схемы, предложенное по умолчанию, и нажмем кнопку Готово (рис. 1.3).
Рис. 1.3. Конструктор макета
14
Глава 1. Простой отчет «без программирования»
Платформа создаст макет отчета, содержащий схему компоновки данных (рис 1.4).
Рис. 1.4. Ветка макетов отчета в дереве конфигурации
Редактирование схемы компоновки данных
Затем конструктор макета откроет окно конструктора схемы компоновки данных. В нем происходит основная работа по визуальному конструированию отчета. Для этого конструктор предоставляет массу разнообразных возможностей. Но мы пока рассмотрим лишь те из них, которые понадобятся в нашем отчете. Остальные возможности по мере усложнения будут представлены в других примерах.
Любой отчет основывается на данных, извлекаемых из каких-либо «источников» по определенным условиям и параметрам.
15
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Мы рассмотрим наиболее простой случай, когда используется один набор данных. Он будет содержать Запрос к базе данных, сформулированный на специальном языке -языке запросов.
ПРИМЕЧАНИЯ
Набор данных описывает способ получения данных из информационной базы. Одна схема компоновки может содержать несколько «источников» данных и описывать их взаимную связь.
В системе компоновки данных используются не все возможности языка запросов, в частности, нет секции итогов, так как платформа самостоятельно рассчитывает итоги на основании настроек, сделанных разработчиком или пользователем. Также для системы компоновки данных разработано специальное расширение языка запросов, чтобы описывать дополнительные характеристики в отчетах.
Добавление «источника» данных
Итак, сначала создадим новый набор данных - Запрос. Для этого нажмем кнопку Добавить или вызовем контекстное меню ветки Наборы данных (рис. 1.5).
Рис. 1.5. Добавление набора данных
в окне конструктора схемы компоновки данных
В правом нижнем окне конструктора схемы компоновки данных (рис. 1.6) мы можем создавать и редактировать текст запроса.
16
Глава 1. Простой отчет «без программирования»
ПРИМЕЧАНИЕ
Текст запроса можно написать вручную, но гораздо проще сделать это с помощью конструктора запроса.
Создание запроса
Нажмем кнопку Конструктор запроса (рис. 1.6).
Рис. 1.6. Вызов конструктора запроса
Конструктор запроса позволяет визуального конструировать запрос. Даже пользователь, не знакомый с языком запросов, может с помощью конструктора создать синтаксически правильный запрос (рис. 1.7).
Рис. 1.7. Окно конструктора запроса
17
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Мы пока рассмотрим лишь основную закладку конструктора - Таблицы и поля. По мере усложнения будут представлены остальные возможности.
Сначала в списке База данных нам нужно выбрать таблицы, с которыми будет работать запрос. Раскроем ветку Регистры накопления. Здесь мы видим объектную таблицу ОстаткиНо-менклатуры, в которой накапливаются данные об остатках номенклатуры. Ниже находятся несколько виртуальных таблиц, созданных платформой. Так как в нашем отчете будут отражаться как остатки, так и данные о приходе и расходе номенклатуры, то, очевидно, нам нужна таблица Остатки Номенклатуры.Остат-киИОбороты. Выделим ее.
ПРИМЕЧАНИЕ
Выделенные элементы можно перенести из одного списка в другой, перетащив мышью или дважды щелкнув на них. Либо можно использовать кнопки в,я, и, И.
Перенесем выделенную таблицу в список Таблицы. Раскроем ее. Здесь отобразятся все доступные для выбора поля этой таблицы. Затем перенесем в список Поля нужные нам в отчете поля таблицы:
•	Номенклатура,
•	Склад,
•	КоличествоНачальныйОстаток,
•	КоличествоКонечныйОстаток,
•	КоличествоПриход,
•	КоличествоРасход.
18
Глава 1. Простой отчет «без программирования»
Итак, в результате наших действий окно конструктора запроса примет следующий вид (рис. 1.8):
Рис. 1.8. Выбор данных для запроса
Автоматическое заполнение доступных полей
Процесс создания нашего запроса завершен. Нажмем ОК и вернемся в конструктор схемы компоновки данных (рис. 1.9).
И-*!
B- Наборы данных
—ТО Ц	Д
ч? Отчет ОстаткиНоменклатуры ОсновнаяСхемаКомпоновкиДанных
КоличествоРасход
КоличествоНачальныйОстаток
КоличествоПриход
Номенклатура
О.
Q Конструктор эалроса
в 0
Склад
КоличествоРасход
Расход_____________________
КоличествоНачальныйОстаток
Начальный остаток КоличествоПриход Приход Номенклатура Номенклатура Склад
Склад____________
J2 □ JE
ВЫБРАТЬ
ОстаткиНоменклатурыОстаткхИОборота.Номенклатура, ОстаткиНомекклатурыОстаткиИОборота.Склад, ОстаткхНоменклатурмОстаткиИОборота.КолхчествоНачальимйОстаток, ОстаткхНоменклатурмОстаткИИОборота.КолхчествоКохечнкхОстаток, ОстаткхНоменклатурмОстатккИОборота.КолхчествоПрхход, ОстаткиНоменклатурыОстаткиИОборота.КоличествоРасход
РегистрНакопленхя.ОстаткхНоменклатуры.ОстаткхИОборота КАК ОстаткхНоменклатурмОстаткиИОборота
Автоэаполнеиие 0
....*....


С
л
Рис. 1.9. Конструктор схемы компоновки данных
19
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Итак, мы добавили набор данных - запрос и создали текст запроса, выбирающего данные из информационной базы 1С:Предприятия 8. Текст запроса отображается в поле Запрос. Здесь его можно вручную отредактировать или снова вызвать Конструктор запроса для внесения в него изменений. Так как свойство Автозаполнение включено, платформа автоматически заполнила список доступных полей текущего набора данных исходя из запроса.
ПРИМЕЧАНИЕ
Доступные поля - это те поля отчета, которыми оперирует схема компоновки данных. Они могут быть использованы в настройках отчета (сортировке, отборе и др.), участвовать в группировках отчета, формировании вычисляемых полей и пр.
Создание стандартных настроек отчета
Пока мы не будем рассматривать другие возможности конструктора компоновки данных, а приступим к настройке отчета, то есть к формированию его структуры и внешнего вида.
ПРИМЕЧАНИЕ
Стандартные настройки создаются разработчиком для того, чтобы, открыв отчет, пользователь мог бы сразу получить нужные данные и чтобы избавить пользователя от необходимости создавать эти настройки самому. Однако, при желании, пользовать может изменить настройки, пользуясь конструктором настроек или окном настроек. Если его не устроил результат этих изменений, он может вернуться к стандартным настройкам, сделанным разработчиком (стр. 424).
20
Глава 1. Простой отчет «без программирования»
Представим наш отчет в виде таблицы, где по строкам данные группируются по позициям номенклатуры, а по столбцам - по позициям складов. Групповые итоговые данные - Ресурсы, например остаток конкретного товара на конкретном складе, - расположены в ячейках таблицы. Поэтому для того, чтобы увидеть какие-либо значения в таблице, мы должны определить Ресурсы схемы компоновки данных.
ВНИМАНИЕ!
Для всех отчетов, где выводятся итоговые данные по каким-либо группировкам, нужно определить поля ресурсов отчета! Итоговые данные формируются на закладке Ресурсы.
На закладке Ресурсы схемы компоновки данных в списке Доступные поля расположены все поля из текущего набора данных отчета. Нажмем кнопку Jtd, чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги (рис. 1.10).
Рис. 1.10. Выбор ресурсов отчета
ПРИМЕЧАНИЕ
Поля в список ресурсов можно перенести из списка доступных полей перетаскиванием мышью или двойным щелчком на них. Либо можно использовать кнопки Щ ; , Ы, I50.
21
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В колонке Выражение здесь содержится выражение, по которому будет вычисляться значение ресурса. По умолчанию предлагается функция Сумма, но доступны и другие распространенные функции агрегирования данных (рис. 1.11).
Рис. 1.11. Список функций для расчета итогов по ресурсам
Для создания таблицы воспользуемся Конструктором настроек, который вызывается на закладке Настройки схемы компоновки данных (рис. 1.12).
Рис. 1.12. Настройки схемы компоновки данных
22
Глава 1. Простой отчет «без программирования»
Работа с конструктором представляет собой «пошаговый» процесс создания простых стандартных настроек, определяющих, как будет выводиться информация в отчет. На первом шаге выберем тип отчета Таблица (рис. 1.13).
Рис. 1.13. Конструктор настроек. Шаг 1
Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Перенесем из списка доступных полей все поля. Кнопками Вверх, Вниз можно затем поменять их порядок. Переместим поле КоличествоКонечныйОстаток в конец списка выбранных полей (рис. 1.14).
ПРИМЕЧАНИЕ
В список выбранных полей поля можно перенести, перетащив мышью или дважды щелкнув на них. Либо можно использовать кнопки И, Я, В, И.
23
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 1.14.
Конструктор настроек.
Шаг 2
Нажмем кнопку Далее. На следующем шаге определим поля для группировки строк и столбцов таблицы. Мышью перетащим из списка доступных полей в список Строки поле Номенклатура, а в список Колонки - поле Склад (рис. 1.15).
Рис. 1.15. Конструктор настроек. Шаг 3
24
Глава 1. Простой отчет «без программирования»
Нажмем кнопку Далее. Здесь выбираются поля для сортировки данных в отчете. Этот шаг мы пропустим, так как сортировка в данном случае нам не важна.
Нажмем ОК. В результате наших действий в окне настроек появилась таблица, в строках которой находится группировка Номенклатура, в колонках - группировка Склад, а также определен список выбранных полей. Аналогичный результат можно получить, самостоятельно создавая и настраивая нужные элементы настроек (группировки, таблицы, диаграммы). В данном случае «всю работу» сделал за нас конструктор настроек (рис. 1.16).
Рис. 1.16. Настройки схемы компоновки данных
Запустим отчет на исполнение в режиме 1С:Предприятие. Данные в отчете представлены в виде таблицы, строки которой сгруппированы по номенклатуре, а колонки - по складам, а также выйедены общие итоги по вертикали и горизонтали (рис. 1.17).
25
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 1.17. Результат отчета
Редактирование настроек отчета в режиме «1С: П ред п риятие»
Для графического представления данных продемонстрируем их вывод в диаграмму. Дополним настройки отчета, нажав кнопку Настройки в командной панели формы отчета. В открывшемся окне настроек добавим в структуру отчета элемент Диаграмма.
ПРИМЕЧАНИЕ
Иерархическая структура отчета содержит три основных элемента:
—	Группировка - для вывода информации в виде обычного линейного отчета.
—	Таблица - для вывода информации в виде таблицы.
—	Диаграмма - для вывода информации в виде диаграммы.
Для добавления нового элемента выделим в дереве структуры отчета корневой элемент Отчет и вызовем его контекстное меню. Можно также нажать кнопку Добавить, расположенную справа в командной панели окна, или клавишу Ins (рис. 1,18).
26
Глава 1. Простой отчет «без программирования»
Рис. 1.18. Добавление новой диаграммы в отчет
Логически Диаграмма является совокупностью Точек, Серий и значений серий в точке. В качестве значений выступает один из ресурсов отчета; в качестве точек - объекты, для которых мы получаем значения характеристик; в качестве серий - характеристики, значения которых нас йнтересуют.
нее новую группировку
Выделим ветку Точки и добавим в (рис. 1.19).
Рис. 1.19. Добавление новой группировки для элемента «Точки»
27
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ПРИМЕЧАНИЕ
Для выбора поля группировки нужно нажать кнопку выбора 0 в строке Поле и выбрать нужное поле из списка доступных полей (рис. 1.20). Также можно использовать механизм ввода по строке и ввести в строку Поле первые буквы имени поля, а платформа выполнит автоподстановку (рис. 1.21).
В появившемся окне выбора поля группировки укажем Склад, так как в точках диаграммы данные будут группироваться по складам (рис. 1.20).
Рис. 1.20. Выбор группировки по складам для точек диаграммы
Аналогичным образом для ветви Серии добавим группировку по полю Номенклатура, так как в сериях диаграммы данные будут группироваться по номенклатуре (рис. 1.21).
Рис. 1.21. Выбор группировки по номенклатуре для серий диаграммы
В результате окно настроек отчета должно выглядеть следующим образом (рис. 1.22).
Продемонстрируем некоторые настройки диаграммы.
ПРИМЕЧАНИЕ
Настройки могут относиться как ко всему отчету в целом, так и к его отдельным элементам - группировкам, таблицам, диаграммам. Последнее может быть полезно, чтобы выделить разные элементы индивидуальными стилями оформления, установить для каждого свой отбор, сортировку и т. д.
28
Глава 1. Простой отчет «без программирования»
Рис. 1.22. Окно настроек отчета
ВНИМАНИЕ!
При установке настроек отчета в средней части окна, под деревом структуры отчета, должна быть выделена кнопка, соответствующая режиму настроек. Кнопка Отчет - для настройки отчета в целом, или кнопка с именем группировки, например Номенклатура, если настройки относятся только к ней.
Выделим режим настроек Диаграмма и на закладке Выбранные поля перенесем из списка доступных полей ресурс Конеч-ныйОстаток, так как нас интересуют значения конечного остатка по номенклатуре. Поскольку Автополе для диаграммы имеет свойство разворачиваться в первый встреченный в списке ресурс отчета (в данном случае это НачальныйОста-ток), отключим признак его использования (рис. 1.23).
29
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 1.23. Выбор полей для диаграммы
Рис. 1.24. Настройка типа диаграммы
30
Глава 1. Простой отчет «без программирования»
ПРИМЕЧАНИЕ
Доступные поля можно добавить в список выбранных полей, перетащив их мышью, или дважды щелкнув на доступных полях, либо нажав кнопку Добавить справа от списка выбранных полей. Порядок выбранных полей можно изменить позже кнопками Вверх, ВНИЗ или перетаскиванием мышью.
На закладке Другие настройки установим тип диаграммы - Гистограмма объемная (рис. 1.24).
ПРИМЕЧАНИЕ
Для установки значения параметра настроек нужно выделить двойным щелчком поле Значение и, нажав кнопку выбора 0, выбрать из списка значений нужный вариант. Флаг использования значения при этом появится автоматически. Его можно также снять и поставить вручную.
После переформирования отчет примет следующий вид (рис. 1.25):
Рис. 1.25. Гистограмма отчета
31
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ПРИМЕЧАНИЕ
Тип диаграммы и другие ее настройки можно прменять затем в режиме настроек диаграммы.
Таким образом, мы быстро и легко создали простой отчет Остатки номенклатуры, представив данные в виде таблицы и диаграммы. На этом примере мы научились создавать и настраивать схему компоновки данных для нового отчета и рассмотрели следующие ее возможности:
•	создание набора данных на основе запроса, используя конструктор запроса;
•	создание иерархической структуры отчета - добавление таблицы и диаграммы в отчет;
•	определение ресурсов для расчета групповых итогов отчета;
Подробнее работа со схемой компоновки данных и возможности настройки отдельных элементов отчета будут рассмотрены в следующих главах.
32
Глава 2
Устройство системы компоновки данных
В данной главе описывается общее устройство системы компоновки данных, рассматривается последовательность и назначение каждого этапа компоновки. Подробно описываются все составляющие схемы компоновки данных, структура отчета и его настроек.
Система компоновки данных - мощный и гибкий инструмент для создания отчетов на основе их декларативного описания.
Получение данных для отчета
При исполнении отчета с помощью системы компоновки данных из «источника» данных, например из информационной базы данных, извлекаются данные для отчета. В базе данных они представлены в виде таблиц. Соответственно, все эти данные построчно можно вывести в отчет. Это детальные записи.
33
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Но, как правило, эти данные привязаны к некоторым иерархическим данным (например, в отчет выводятся остатки номенклатуры, где номенклатура содержит многоуровневые группы). Поэтому возникает желание сгруппировать записи в отчете и показать остатки номенклатуры по группам (например, сколько на складе телевизоров определенной марки и сколько телевизоров в целом). Для этого система компоновки данных может рассчитывать и добавлять в отчет записи, которые называются итоговыми. Этих записей в явном виде нет в базе данных, но они получаются в результате исполнения отчета, на основании некоторой обработки детальных записей, которую выполняет система компоновки данных.
Общее устройство системы компоновки данных
Система компоновки данных состоит из набора элементов, каждый из которых имеет свое декларативное описание, возможность программного доступа и сериализации, то есть сохранения в XML или загрузки из XML. Это позволяет гибко управлять всеми этапами выполнения отчета.
Формирование отчета с использованием системы компоновки данных разбивается на несколько этапов. При этом разбиение на этапы - не «логическое», а «физическое». То есть в каждый из этих этапов разработчик может вмешаться, программно или визуально, выполнять различные этапы компоновки данных в различных модулях и даже на различных компьютерах (рис. 2.1).
34
Глава 2. Устройство системы компоновки данных
Результирующий документ
Рис. 2.1. Схема взаимодействия объектов системы компоновки данных
На схеме представлены следующие этапы формирования отчета:
•	Разработчик создает схему компоновки данных и стандартные настройки компоновки, которые содержат полную информацию о компоновке.
•	На основе схемы компоновки данных и настроек компоновки компоновщик макета создает макет компоновки данных, который является уже готовым заданием для процессора компоновки.
•	Процессор компоновки данных в соответствии с макетом компоновки извлекает данные из информационной базы, агрегирует, оформляет эти данные и формирует результат компоновки. Результат компоновки состоит из массива элементов, которые можно получать последовательно, но в большинстве случаев результат компоновки получается целиком.
35
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Процессор вывода обрабатывает Результат компоновки и выводит его в различные форматы:
•	Табличный документ,
•	Таблица значений,
•	Дерево значений.
Процесс разработки отчета с помощью системы компоновки данных и его дальнейшего использования на практике реализуется следующим образом.
Исходя из прикладной задачи, для которой разрабатывается отчет, разработчик создает схему компоновки данных, в которой описывает наборы данных, связи между ними, определяет поля отчета, параметры получения данных и т. п., а также задает стандартные настройки компоновки данных -структуру отчета, порядок, отбор и другие.
Пользователь запускает отчет. Затем выполняется программная компоновка данных и вывод результатов компоновки пользователю. Данные в отчете выводятся в соответствии со стандартными настройками.
Однако пользователь может самостоятельно изменить настройки отчета и выполнить его. При этом данные будут представлены в соответствии с пользовательскими настройками.
Таким образом, на основе одной схемы компоновки данных может быть получено множество различных отчетов. Применение настроек компоновки данных, созданных разработчиком или измененных пользователем, к схеме компоновки данных и определяет конечный результат.
36
Глава 2. Устройство системы компоновки данных
Этот процесс может быть представлен с помощью следующей схемы (рис. 2.2):
Резул ьтирующий документ
Пользователь
Рис. 2.2. Схема разработки и использования отчета с помощью системы компоновки данных
Схема компоновки данных
Основой для компоновки отчета является схема компоновки данных. Она содержит перечисленные ниже разделы.
•	Наборы данных.
Наборы данных являются «источниками» данных для отчета и описывают способ получения этих данных. Данные можно получить из информационной базы или из некоторых объектов, находящихся в памяти (например, из таблицы значений). Один отчет может использовать одновременно несколько наборов данных, отбирая, объединяя и связывая между собой данные из разных наборов.
37
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Существуют различные виды наборов данных. Они отличаются тем, откуда получаются данные и как эти данные обрабатываются:
•	Запрос. Содержит запрос к базе данных на языке запросов с использованием дополнительных синтаксических элементов (расширений).
•	Объект. Содержит информацию о внешнем наборе данных, например, таблице значений.
•	Объединение. Объединяет информацию из нескольких наборов данных.
Разработчик, создавая схему компоновки данных, может добавить в нее наборы данных такого вида и в таком количестве, которые ему необходимы. В зависимости от вида набора данных нужно выполнить различные действия для того, чтобы отчет мог использовать данные этого набора.
Например, если используется набор данных - запрос, то в схеме компоновки данных нужно задать текст запроса, обращающегося к информационной базе 1С:Предприятия 8. Если используется набор данных — объект, то в схеме компоновки нужно описать поля этого набора данных, чтобы система компоновки знала, данные какого типа будут получены из этого набора, затем с помощью встроенного языка создать внешний набор данных и инициализировать им процессор компоновки данных. Если используется набор данных - объединение, то в схеме компоновки данных нужно описать наборы данных, которые входят в это объединение.
Типичные сценарии использования наборов данных содержатся в первых четырех примерах третьей главы (стр. 57).
•	Связи наборов данных.
Схема компоновки данных может содержать несколько наборов данных. В случае, когда требуется получить связанную 38
Глава 2. Устройство системы компоновки данных
информацию из этих наборов, в схеме компоновки данных описывается их связь по какому-то полю. При связывании наборов данных в схеме компоновки используется Левое соединение.
Однако в случае если требуется вывести в отчет все записи из обоих наборов данных, используется набор данных - объединение. Такой набор содержит два или более подчиненных набора данных, но информация в них не связывается, а объединяется. По аналогии с языком запросов в этом случае используется Объединение.
Отличие связывания и объединения наборов данных рассматривается в третьей главе (пример 2 на стр. 62, пример 4 на стр. 80).
•	Вычисляемые поля.
Отчет может содержать не только те поля, которые описаны в наборе данных, но и дополнительные поля, созданные разработчиком и вычисляющиеся на их основе (см. стр. 376). Значения этих полей получаются в результате вычисления выражений, написанных разработчиком в схеме компоновки данных, или в результате выполнения функций, описанных в общих модулях конфигурации. В приведенном примере выводится вычисляемое поле Прибыль как разница между полями СтоимостьПриход и СтоимостьРасход (рис. 2.3).
Отчет по системным блокам Параметры данных: Начало периода  01.01.2008 Конец периода = 31.08.2008					
	| Количество приход	Количество расход	Стоимость приход	Стоимость расход	^Прибыль
‘сновной	2	2	17 500 ДО	20 000ДО	2 500
Компьютер для дома		l|	1		9 000,00	10 000,00	1 000
Компьютеп для офиса	11	11	8 500,00	10 000,00	1 500
Итого	2	2		17 500ДО	20 000.00	к—г5°у
Рис. 2.3. Вывод в отчете вычисляемого поля
39
Разработка сложных отчетов в 1С:Г1редприятии 8. Система компоновки данных
•	Ресурсы.
Ресурсы являются групповыми итоговыми данными (стр. 385). Обычно данные в отчете группируются по каким-то позициям, например, по номенклатуре. Смысл группировки не только в определенном расположении данных, но и в выводе итоговых данных - ресурсов по этой группировке. На основании значений ресурсов формируются общие итоги отчета.
В приведенном примере детальные записи группируются по складам и выводятся групповые и общие итоги отчета (рис. 2.4).
Рис. 2.4. Вывод ресурсов в группировке
В таблице ресурсы выводятся как бы на пересечении соответствующей строки и колонки таблицы, например, остатки конкретного товара на конкретном складе. В приведенном примере в отчет выводится таблица, в которой в колонках данные сгруппированы по складам, а в строках - по номенклатуре (рис. 2.5).
В качестве значений диаграммы выводится первый ресурс отчета.
40
Глава 2. Устройство системы компоновки данных
Рис. 2.5. Вывод ресурсов в таблице
Таким образом, для вывода таблиц и диаграмм обязательно определение ресурсов для отчета. Отчет, выводящий данные в группировку, может и не содержать ресурсов. Например, в случае вывода простых списков, когда групповые итоги не нужны.
• Параметры.
Рис. 2.6. Вывод в отчете параметров отчетного периода
Параметры являются критериями получения данных для отчета (стр. 390). Параметры могут быть явно определены в запросе, например, вид номенклатуры, а могут быть параметрами вирту
41
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
альных таблиц базы данных, например, начало и конец отчетного периода. Как правило, параметры выводятся пользователю перед формированием отчета. Затем заданные пользователем значения параметров передаются в отчет, и отчет формируется заново, например, с новым отчетным периодом (рис. 2.6).
•	Макеты.
По умолчанию внешний вид отчета формируется системой автоматически. Но разработчик может задать собственное расположение и оформление различных областей отчета. Для этого в схеме компоновки данных создаются предопределенные макеты (стр. 394). В отличие от стандартных макетов оформления, предопределенные макеты «привязаны» к одному отчету, его конкретным полям и структуре. Можно создавать макеты отдельных полей, группировок, итоговых полей и ресурсов отчета. В приведенном примере группировка по номенклатуре оформлена с помощью предопределенного макета (рис. 2.7).
Рис. 2.7. Макет группировки «Номенклатура»
• Вложенные схемы.
Часто бывает, что нужно использовать данные одного отчета внутри другого. Разработав схему компоновки одного отчета, можно затем многократно использовать ее в других отчетах,
42
Глава 2. Устройство системы компоновки данных
связав родительский и вложенный отчеты по общему полю. В приведенном примере выводится список контрагентов с вложенными данными по продажам номенклатуры для каждого из них (рис. 2.8).
Рис. 2.8. Вывод вложенного отчета
Типичный пример использования вложенного отчета рассматривается в третьей главе (пример 6 на стр. 97).
•	Настройки.
В схеме компоновки данных разработчик задает стандартные настройки, которые определяют, как первоначально будет выглядеть отчет, определяет его иерархическую структуру и настройки отчета в целом и его отдельных элементов.
43
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Практически то же самое окно настроек, что и в схеме компоновки данных, будет доступно и пользователю при исполнении отчета в режиме 1 (^Предприятие. Оно вызывается кнопкой Настройки на командной панели отчета (рис. 2.9). Но пользоваться этим окном рекомендуется лишь очень опытному пользователю, понимающему, что он делает.
Иерархическая структура отчета состоит из следующих элементов:
•	Группировка - предназначена для вывода информации в виде обычного линейного отчета (рис. 2.9).
Рис. 2.9. Вывод группировки
•	Таблица - предназначена для вывода информации в виде таблицы (рис. 2.10).
Рис. 2.10. Вывод таблицы
44
Глава 2. Устройство системы компоновки данных
•	Диаграмма - предназначена для вывода информации в виде диаграммы (рис. 2.11).
Рис. 2.11. Вывод диаграммы
•	Вложенная схема - предназначена для вывода вложенного отчета (рис. 2.8).
На первый взгляд элементы структуры отчета Группировка и Таблица похожи. Но в таблице информация группируется по строкам и по столбцам, а на их пересечении выводятся групповые итоговые данные - ресурсы. А также рассчитываются общие итоги по вертикали и горизонтали. В группировке данные группируются по строкам, и общие итоги рассчитываются только по вертикали. Группировку можно вывести в табличном виде (горизонтально) и в виде вертикального списка.
45
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для каждого элемента структуры отчета и для всего отчета в целом существуют следующие режимы настроек:
•	Выбранные поля. В этом режиме разработчик или пользователь может определить список полей, выводящихся в отчет (рис. 2.12).
Пар»ч-	Выбранные поля [Стбос 1 CqgMHW UlQflMtf» Q&K*I			
	ИПпле		
Е- — Номенклатура	Д В- Выбранные поля			- W
Й — Склад	agT I-— Номенклатура "X		
доД I-	.	И	|-- Склад		
0 | Начальный остаток	0	i  | Начальный остаток		
. |+1| Приход	0	|” | Приход		1
Ё | Расход	0	г-1 Расход		
। Е и Системные поля	0	| Конечный остаток	У		
0 м Параметры			
Рис. 2.12. Настройка списка полей отчета
•	Отбор. В этом режиме разработчик или пользователь может определить условия фильтрации записей в отчете (рис. 2.13).
Поля группировки Выбранные поля | Отбор] Сортировка Уставное оформление Другие настройки .
Рис. 2.13. Настройка отбора
•	Порядок. В этом режиме разработчик или пользователь может определить порядок записей в отчете (рис. 2.14).
Поля группировки Выбранные поля Отбор | Сортировка | Условное оформление Другие настройки
Рис. 2.14. Настройка сортировки 46
Глава 2. Устройство системы компоновки данных
• Параметры данных. В этом режиме разработчик или пользователь может задать значения параметров отчета (рис. 2.15).
Параметры данных | Выбрамтые пола Отбор ' Сортккзвка Условное офоомлетые Пользовательские поля Другие настройки,
Параметр, , Начало периода Конец периода
|Значение
Произвольная дета | Произвольная дета
Рис. 2.15. Настройка параметров данных
• Пользовательские поля. В этом режиме пользователь может создать собственные дополнительные поля (рис. 2.16).
П^з^трыданных Вь*.. сныеполя jnfop Сортировка Услос—  оторт-ленит Пользовательские поля [ Другие настрочи
Рис. 2.16. Создание пользовательских полей
Условное оформление. В этом режиме разработчик или пользователь может задать условия оформления записей в отчете (рис. 2.17).
Поля группировки . Выбранные поля , Отбор , Сортировка | Условное оформление | Другие настройки i
Рис. 2.17. Настройка условного оформления
• Другие настройки. В этом режиме разработчик или пользователь может задать значения параметров вывода таких, как макет оформления, заголовок, расположение итогов и др. (рис. 2.18).
47
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 2.18. Настройка параметров вывода
Настройки отчета
Отчет, полученный с помощью системы компоновки данных, представляет собой сложную иерархическую структуру, куда входят и простые детальные записи, и группировки, и таблицы, и диаграммы. Например, отчет Остатки номенклатуры имеет такой вид (рис. 2.19).
XWcmw* ► Очмфомш	«чсцюяи» " t 9
Рис. 2.19. Отчет «Остатки номенклатуры», первоначально настроенный разработчиком
48
Глава 2. Устройство системы компоновки данных
Структура отчета, созданная разработчиком, имеет вид (рис. 2.20):’
В-Д^ Отчет
B-0E Таблица
Й-Строки
Номенклатура
Й- Колонки
L-0®a Склад В 0ft Диаграмма й" Точки
Склад Ё1-Серии
: Щп Номенклатура
Рис. 2.20. Структура отчета в окне настроек
В верхней таблице окна результата отчета представлены обычные детальные записи, полученные из информационной базы данных. Для вывода детальных записей используется элемент структуры отчета Группировка, но без указания поля группировки. Когда поле группировки указано, записи в отчете группируются по нему без более подробной детализации. Обычно это делается для вывода промежуточных групповых итогов. Создадим новую группировку отчета, укажем поле группировки Склад и сравним ее с группировкой Детальные записи (рис. 2.21,2.22).
Рис. 2.21. Выбор поля группировки
49
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 2.22. Детальные данные отчета «Остатки номенклатуры» и данные, сгруппированные по складам
Рис. 2.23. Данные отчета «Остатки номенклатуры», сгруппированные по складам
50
Глава 2. Устройство системы компоновки данных
Мы видим, что в нижней группировке (Склад) присутствуют только две записи, то есть данные в отчете сгруппированы по складам. Однако это не таблица, а группировка, представленная в табличном виде. Если задать значение параметра вывода Тип макета - Вертикально, то те же данные будут представлены в виде вертикального списка (рис. 2.23).
В средней части отчета находится элемент структуры отчета Таблица, где по строкам данные группируются по полю Номенклатура, а по столбцам - по полю Склад. На пересечении строк и столбцов, в ячейках таблицы, находятся групповые итоговые данные - ресурсы, например остаток конкретного товара на конкретном складе. Таким образом, элемент структуры отчета Таблица используется в случае, если требуется различным образом сгруппировать информацию по строкам и по столбцам, а на их пересечении вывести итоговые данные, а также вывести общие итоги по вертикали и горизонтали. В других случаях не имеет смысла создавать таблицу, а можно воспользоваться группировкой. В нее можно вложить подчиненную ей группировку. Добавим в группировку Склад вложенную группировку по полю Номенклатура. Для этого выделим группировку Склад в структуре элементов отчета, вызовем контекстное меню, добавим новую группировку и укажем поле группировки Номенклатура (рис. 2.24).
Рис. 2.24. Добавление вложенной группировки «Номенклатура»
в группировку «Склад»
В нижней части отчета находится Диаграмма, которая служит для более наглядного графического представления данных.
51
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
В режиме 1С:Г1редприятие, нажав кнопку Настройки на командной панели отчета, пользователь может изменить настройки отчета, его структуру, отбор, упорядочивание записей, оформление и т. п. Настройки отчета могут относиться как ко всему отчету в целом, так и к его отдельным элементам -группировкам, таблицам, диаграммам (стр. 28). Например, пользователь может для элемента отчета Номенклатура установить сортировку по полю Конечный остаток. У каждого элемента настроек есть признак использования в отчете - флаг слева от его названия. Допустим, пользователь не хочет видеть в отчете диаграмму. Для этого достаточно просто снять флаг использования у данного элемента структуры отчета. Аналогично можно отключить в настройках любое поле, отбор, параметр и т. п. В результате сделанных изменений настройки отчета примут следующий вид (рис. 2.25):
Рис. 2.25. Окно для редактирования пользовательских настроек 52
Глава 2. Устройство системы компоновки данных
Выполнение отчета с новыми настройками даст следующий результат (рис. 2.26):
Рис. 2.26. Изменение отчета с помощью пользовательских настроек
Очевидно, что таблицы очень схожи между собой. Но поскольку первая представляет собой результат вывода группировки Склад и вложенной в нее группировки Номенклатура, то данные в ней группируются только по строкам и общие итоги выводятся только по вертикали. В соответствии с новыми настройками внутри группировки Номенклатура записи первой таблицы отсортированы по возрастанию поля Конечный остаток и диаграмма в отчет не выводится.
Оценив результаты своих изменений, пользователь может сохранить новые настройки в файл, загрузить другие настройки из файла или восстановить стандартную настройку отчета, сделанную разработчиком, используя командную панель окна настроек (рис. 2.7). Однако следует иметь в виду, что окно настроек отчета, вызываемое кнопкой Настройки, предназначено лишь для хорошо подготовленного, опытного пользователя. Для большинства же пользователей следует разрабатывать более простые формы настроек (стр. 499) или сделать доступной только кнопку Конструктор настроек (стр. 421), расположенную в командной панели отчета.
53
Глава 3
Примеры основных возможностей системы компоновки данных
В данной главе рассмотрены самые основные, принципиальные возможности использования системы компоновки, на основе которых разработчик может решить стоящие перед ним несложные типовые задачи. За более конкретной информацией следует обращаться к четвертой и пятой главам.
Исходные данные для примеров
Разрабатываемые нами отчеты будут базироваться на данных о хозяйственной деятельности небольшой фирмы, которая оказывает услуги по сборке, ремонту и продаже компьютеров и комплектующих к ним.
55
Разработка сложных отчетов в 1 С: Предприятии 8. Система компоновки данных
Приобретение комплектующих отражается в документах При-ходнаяНакладная. Предоставление компьютерных услуг, продажа комплектующих и собранных системных блоков отражаются в документах РасходнаяНакладная. Оба эти документа формируют движения в регистре накопления ОстаткиНоменк-латуры, который имеет вид Остатки и содержит два Измерения - Номенклатура и Склад и Ресурсы - Количество и Цена.
Сборка готовых системных блоков отражается в документе СборкаКомпьютера, который формирует движения типа Приход в регистре накопления СобранныеСБ. Этот регистр имеет вид Остатки и содержит два Измерения - СБ и Склад, Ресурсы -Количество и Стоимость и Реквизит - Мастер. Одновременно при проведении этого документа формируются движения типа Расход в регистре ОстаткиНоменклатуры. Здесь отражаются комплектующие, которые были израсходованы при сборке.
Документы РасходнаяНакладная также формируют движения в регистре накопления Продажи. Этот регистр имеет вид Обороты и содержит два Измерения - Номенклатура и Контрагент и Ресурсы - Количество и Стоимость.
Документы ПриходнаяНакладная также формируют движения в регистре сведений Цены. Этот регистр является Периодическим и имеет Измерение - Номенклатура и Ресурс - Цена.
В базе данных также содержится регистр сведений Значе-нияСвойствОбъектов для хранения значений характеристик объектов. Этот регистр является Непериодическим и имеет два Измерения - Контрагент и Свойство и Ресурс - Значение.
56
Глава 3. Примеры основных возможностей системы компоновки данных
Пример 1. Набор данных - запрос
При разработке отчетов с помощью системы компоновки данных информация извлекается из различных «источников» данных различными способами. Данный пример иллюстрирует использование набора данных - запрос. Такой набор данных используется в том случае, когда нужно получить данные из информационной базы 1С:Предприятия 8. В процессе разработки отчета мы добавим набор данных - запрос, напишем текст запроса и выведем данные в табличный документ с помощью конструктора настроек.
Создадим отчет, отражающий информацию о последних ценах поступления товаров. Добавим новый объект конфигурации Отчет и назовем его ЦеныКомплектующих. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Текст запроса можно написать вручную, но мы для простоты воспользуемся Конструктором запроса, в котором можно визуально сконструировать запрос. Работа с конструктором запроса подробно описывалась в первой главе (стр. 17). В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Цены.СрезПоследних.
В список полей перенесем поля из этой таблицы (рис. 3.1):
•	Период,
•	Номенклатура,
•	Цена.
. штата мтаяют
г- U. ЦеныСрезПоследник.Номенклатура
..| ЦеныСрезП ос ледник. Цена
Рис. 3.1. Выбор данных для запроса
Нажмем ОК и вернемся в конструктор схемы компоновки данных (рис. 3.2).
57
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.2. Конструктор схемы компоновки данных
Итак, мы создали набор данных - запрос, и платформа автоматически создала текст запроса, с помощью которого источник будет получать данные из информационной базы 1С:Пред-приятия 8. Текст запроса платформа поместит в поле Запрос (листинг 3.1).
Листинг 3.1. Текст запроса
ВЫБРАТЬ
ЦеныСрезПоследних.Период,
ЦеныСрезПоследних.Номенклатура, ЦеныСрезПоследних.Цена ИЗ
РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
Так как свойство Автозаполнение (стр. 363) включено, платформа заполнила список доступных полей текущего набора данных исходя из запроса. Доступные поля - это поля отчета, которые могут быть использованы в настройках отчета -структуре, сортировке, отборе и др.
58
Глава 3. Примеры основных возможностей системы компоновки данных
Теперь, когда создано описание, как получать данные для отчета, осталось создать стандартные настройки для вывода информации в отчет. Самое простое - воспользоваться для этого Конструктором настроек, который вызывается на закладке Настройки схемы компоновки данных (рис. 3.3).
Рис. 3.3. Настройки схемы компоновки данных
Вызовем конструктор настроек и определим Тип отчета. Мы выберем тип Список, что соответствует элементу структуры отчета Группировка, где информация выводится по строкам (рис. 3.4).
Конструктор настроек компоновки данных	X
Тип отчета:
® |Список. Данные по всем измерениям отчета выводятся списком ]
q Таблица. Данные выводятся по измерениям, расположенный как по горизонтали, так и по вертикали.
Рис. 3.4.
Конструктор настроек. Шаг 1
59
Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных
Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Мышью перетащим из списка доступных полей следующие поля (рис. 3.5):
•	Номенклатура,
•	Период,
• Цена.
Рис. 3.5.
Конструктор настроек. Шаг 2
Нажмем кнопку Далее. На следующем шаге определяются поля для группировки записей в списке. Но мы не будем
ничего задавать, так как хотим представить записи в отчете в виде простого линейного списка без итогов. Такая группировка называется Детальные записи. Нажмем кнопку Далее. На следующем шаге определим поля для сортировки записей в отчете. Мышью перетащим из списка доступных полей поле Период (рис. 3.6).
Рис. 3.6.
Конструктор настроек. Шаг 4
60
Глава 3. Примеры основных возможностей системы компоновки данных
Нажмем ОК. В результате наших действий в окне настроек появилась группировка Детальные записи, определен список выбранных полей и задано поле сортировки (рис. 3.7).
Рис. 3.7. Настройки схемы компоновки данных
Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Запустим отчет на исполнение в режиме 1 (^Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 3.8).
Рис. 3.8. Результат отчета
Итак, на этом примере мы рассмотрели наиболее простой способ получения данных из информационной базы 1С:Пред-приятия с использованием набора данных - запрос. Затем мы вывели эти данные в табличный документ в виде простого детального списка.
61
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Пример 2. Два связанных набора данных
Отчет, разработанный с помощью системы компоновки данных, может использовать данные из нескольких (в нашем случае двух) наборов данных. Эти наборы данных описываются каждый по отдельности, а затем в схеме компоновки данных указывается, каким образом они связаны между собой.
Для демонстрации этой возможности системы компоновки данных немного усложним наш первый пример. Допустим, в отчете Цены комплектующих мы хотим видеть информацию о поставщиках, датах и номерах документов, которые произвели движения в регистре сведений Цены. Для этого создадим набор данных, получающий информацию из документов Приходная накладная, и свяжем его с исходным набором, получающим данные из регистра сведений Цены. Затем мы выведем полученные данные в табличный документ с помощью конструктора настроек.
Создадим новый объект конфигурации Отчет и назовем его ЦеныКомплектующихОтПоставщиков. Откроем конструктор схемы компоновки данных и добавим новый набор данных -запрос. Он будет назван по умолчанию НаборДанных1. Для большей наглядности назовем его Цены. Чтобы ввести новое имя набора данных, можно дважды щелкнуть по его названию. Откроем конструктор запроса. В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Цены.СрезПоследних. В список полей перенесем поля из этой таблицы (рис. 3.9):
•	Номенклатура,
•	Цена,
•	Регистратор.
62
Глава 3. Примеры основных возможностей системы компоновки данных
ЦеныСрезПоследних.Номенг натура
|—| ЦеныСрезПослешмсЦена
ЦеныСрезПоследних.Регистратор
Рис. 3.9. Выбор полей для запроса
Поле Регистратор нам понадобится в качестве ссылки на документ ПриходнаяНакладная, который произвел движения в регистре сведений Цены, чтобы установить связь со вторым набором данных. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Таким образом, в этом наборе данных мы получим информацию о последних ценах поступления товаров. Но нам нужна еще другая, связанная с ней более детальная информация из документов Приходная накладная.
Выделим корневой элемент дерева наборов данных и добавим еще один набор данных - запрос. Назовем его Поставщики. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа ПриходнаяНакладная. В список полей перенесем поля из этой таблицы (рис. 3.10):
•	Ссылка,
•	Номер,
•	Дата,
•	Контрагент.
П риходнаяН ак ладная. Ссы лка I
...— ПриходнаяНакладная. Номер
|..— ПриходнаяНакладная.Дата
...... — р риходнаяН ак ладная. Контрагент
Рис. 3.10. Выбор полей для запроса
Поле Ссылка нам понадобится в качестве ссылки на регистр сведений Цены, чтобы установить связь с первым набором данных. Нажмем ОК и вернемся в конструктор схемы компоновки данных.
63
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Если в схеме компоновки данных присутствуют несколько наборов данных, то между ними требуется установить связь (стр. 336). На закладке Связи наборов данных добавим новую строку. Связей в общем случае может быть несколько, даже если набора данных только два. В поле Источник связи, то есть в качестве родительского набора данных, укажем Цены, в поле Приемник связи, то есть в качестве зависимого набора данных, укажем Поставщики. В поле Выражение источник выберем из полей родительского набора поле Регистратор, а в поле Выражение приемник - поле зависимого набора данных — Ссылка (рис 3.11).
Рис. 3.11. Создание связи наборов данных
Все связи, созданные в схеме компоновки данных, считаются Левыми внешними соединениями, то есть в отчет будут включены записи из обоих наборов данных, удовлетворяющих условию связи Регистратор = Ссылка (рис. 3.12).
I	Набор данных Цены
и
Приходная накладная 000000002 от 18.03.2008 23:31:25
Приходная накладная 000000001 от 18.03.2008 23:32:36
Приходная накладная 000000003 от 19.03.200817:04:41
Набор данных Поставщики
В.03 2008 23.31.25
В .03.2008 23:32:36
9.03.200817:04:41
Материнская плата
7 000,00
2 000,00
1 200,00
3 000,00
Прихо на я накладная 000000001 от 18 03 2008 23 32
Приходная накладная 000000003 от 19 03 2008 17.04 41
000000002 ООО "Атлант" Приходная накладная 000000002 от 18 03 2008
000000001	ООО "Атлант"
000000003	ООО "Стандарт"
Рис. 3.12. Связь записей в наборах данных
64
Глава 3. Примеры основных возможностей системы компоновки данных
Кроме того, у родительского набора данных Цены будут отражаться в отчете все записи, независимо от того, найден ли соответствующий им документ в наборе данных Поставщики или нет. Поэтому при определении связей наборов данных требуется внимательно обдумать вопрос, какой из наборов данных будет родительским, а какой - зависимым.
Для быстрого создания стандартных настроек воспользуемся конструктором настроек (рис. 3.3). Сначала выберем тип отчета Список, что соответствует элементу структуры отчета Группировка, где информация выводится по строкам (рис. 3.4). Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Список доступных полей включает поля из обоих наборов данных. Мышью перетащим из него поля (рис. 3.13):
•	Номенклатура,
•	Контрагент,
•	Дата,
•	Номер,
• Цена.
Рис. 3.13. Конструктор настроек. Шаг 2
65
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Нажмем кнопку Далее. На следующем шаге определим поля для группировки записей в списке. Мышью перетащим из списка доступных полей поле Номенклатура (рис. 3.14).
Рис. 3.14. Конструктор настроек. Шаг 3
Нажмем кнопку Далее. На следующем шаге определим поля для сортировки записей в отчете. Мышью перетащим из списка доступных полей поле Дата (рис. 3.15).
Рис. 3.15. Конструктор настроек. Шаг 4
Нажмем ОК. В результате наших действий в окне настроек появилась группировка Номёнклатура и вложенная в нее груп-66
Глава 3. Примеры основных возможностей системы компоновки данных
пировка Детальные записи, определен список выбранных полей и задано поле сортировки (рис. 3.16).
Рис. 3.16. Настройки схемы компоновки данных
Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 3.17):
Отчет Цены комплектующих от поставщиков	_ О X
Действия* ► Сформировать ^Конструкторнастроен. Настрой^ k Ш -----
...________________________________,_____________,__________ч
ООО "Атлант”	|18.03.2008 23:32:36	[000000001	|	3 000,00
Материнская плат»	........................................
ООО Атлант"	|18.03.2008 23:31:25	[000000002	[	2 000,00
Монитор~1СР	__________________________ .
ООО “Стандарт"	|l 9 03.200817:04:41	[000000003	]	7 000,00
Память__________\	____________________________________
ООО "Атлант"	|l 8.03.2008 23:31:25	|000000002	|	1 200,00
Рис. 3.17. Результат отчета
Мы видим, что записи в отчете сгруппированы по полю Номенклатура, то есть для каждой позиции номенклатуры выводится 67
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
список с указанием поставщика, даты и номера документа Приходная накладная, в котором было учтено ее поступление. Цена номенклатуры заполняется из регистра сведений Цены. Внутри каждой группы записи упорядочены по полю Дата. Таким образом, данные в отчет выводятся с помощью группировки Номенклатура-ДетальныеЗаписи, представленной в табличном виде. Но это не таблица. Отличие структуры настроек Группировки и Таблицы было рассмотрено во второй главе (стр. 45).
Связь таблиц в запросе
Существуют различные варианты получения связанных данных из информационной базы:
•	создать два или более набора данных с простыми запросами и установить связь между ними в схеме компоновки;
•	создать один набор со сложным запросом (с левым соединением двух или более таблиц) и использовать его в схеме компоновки.
Первый вариант был рассмотрен нами выше.
Получим теперь те же данные альтернативным способом, используя связь двух таблиц (регистра сведений Цены и документа ПриходнаяНакладная) в запросе одного набора данных. Добавим в отчет новую схему компоновки данных (стр. 352). Для этого выделим ветку Макеты данного отчета в дереве конфигурации и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 3.18).
68
Глава 3. Примеры основных возможностей системы компоновки данных
Рис. 3.18. Создание новой схемы компоновки данных
Платформа создаст новый макет отчета. В нем мы зададим имя макета СхемаКомпоновкиДанных1 и выберем тип макета Схема компоновки данных. Нажмем кнопку Готово (рис. 3.19).
Рис. 3.19. Создание новой схемы компоновки данных
69
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В открывшемся конструкторе схемы компоновки данных добавим новый набор данных - запрос. Откроем конструктор запроса. В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Цены.СрезПослед-них и объектную (ссылочную) таблицу ПриходнаяНакладная.
В список полей перенесем поля из этих таблиц (рис. 3.20):
• Номер,
• Дата,
• Контрагент,
• Номенклатура,
• Цена.
Рис. 3.20. Определение данных для запроса
Перейдем на закладку Связи. Так как в запросе теперь участвуют несколько таблиц, требуется определить связь между ними. По умолчанию платформой уже будет создана связь между таблицами Регистратор = Ссылка. Флаг Все у таблицы Це-ны.СрезПоследних задает тип связи - Левое соединение, то есть в результат запроса будут включены записи обеих таблиц, удовлетворяющих условию связи. Кроме того, у таблицы Це-ны.СрезПоследних, которая будет слева в тексте запроса, будут отражаться в отчете все записи, независимо от того, найдено ли им соответствие в таблице справа ПриходнаяНакладная или нет (рис. 3.21).
70
Глава 3. Примеры основных возможностей системы компоновки данных
Рис. 3.21. Установка связей между таблицами запроса
На закладке Порядок зададим упорядочивание записей в запросе. Для этого перенесем из списка полей в список сортировки поле Дата. Направление сортировки - По возрастанию будет задано по умолчанию (рис. 3.22).
Рис. 3.22. Установка сортировки записей в запросе
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Текст запроса, сформированный платформой, примет вид (листинг 3.2).
Листинг 3.2. Текст запроса
ПриходнаяНакладная. Номер,
ПриходнаяНакладная.Дата КАК Дата,
ПриходнаяНакладная.Контрагент,
ЦеныСрезПоследних.Номенклатура,
ЦеныСрезПоследних.Цена
РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
ПО ЦеныСрезПоследних.Регистратор = ПриходнаяНакладная.Ссылка
УПОРЯДОЧИТЬ ПО Дата
71
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Настройки вызовем конструктор настроек (рис. 3.3). Повторим первые три шага, которые мы выполняли, настраивая основную схему компоновки данных отчета (рис. 3.4, 3.13, 3.14). Четвертый шаг пропустим, так как мы уже задали сортировку записей в самом запросе. Нажмем ОК.
Закроем СхемуКомпоновкиДанных1. Теперь для отчета Це-ныКомплектующихОтПоставщиков существуют две различные схемы компоновки данных. Выделим отчет в дереве конфигурации и вызовем диалог редактирования его свойств двойным щелчком мыши, или нажав кнопку Изменить на командной панели окна конфигурации. Установим СхемуКомпоновкиДан-ных1 в качестве основной для отчета (рис. 3.23).
Рис. 3.23. Выбор основной схемы компоновки данных для отчета
Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Мы видим, что отчет, выполненный на основе СхемыКомпоновкиДанных1, в точности соответствует отчету, сформированному на основе Основ-нойСхемыКомпоновкиДанных (рис. 3.17).
Итак, мы сформировали наш отчет двумя способами: с использованием двух связанных наборов данных и с использованием связи двух таблиц в запросе одного набора данных.
72
Гпава 3. Примеры основных возможностей системы компоновки данных
Первый вариант лучше использовать, когда получение данных одним запросом породит слишком сложный запрос, в том случае если необходимо выводить в отчет данные с расчетом итогов без учета дублирующихся записей, при выводе в результат данных из различных типов наборов данных (например, из запроса и таблицы значений).
Второй вариант более предпочтителен с точки зрения эффективности исполнения отчета за счет того, что соединение будет выполняться на сервере базы данных. В этом случае для повышения гибкости отчета не следует задавать в запросе отбор и упорядочивание записей, чтобы пользователь имел возможность самостоятельно менять эти настройки.
При выборе того или иного варианта необходимо помнить, что возможна ситуация, когда каждая запись может попадать в некоторые группировки по нескольку раз. В случае использования двух связанных наборов данных в системе компоновки она будет учтена при расчете итогов только один раз, что правильно. А в случае связи таблиц в запросе набора данных итоговые данные будут получаться для всех строк набора данных, что неверно (стр. 340).
Пример 3. Набор данных - объект
Набор данных - объект используется для вывода в отчет информации из некоторого объекта встроенного языка: таблицы значений, результата запроса, текущего документа и т. п. Этот «источник» данных описывается в схеме компоновки, затем он заполняется программным образом, например по нажатию какой-то кнопки, и в качестве внешнего набора данных передается в процессор компоновки. После выполнения компоновки отчет выводится программным способом на основании стандартных настроек, сделанных в схеме компоновки.
73
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Этот пример сложнее остальных примеров из этой главы, так как предусматривает работу с системой компоновки данных средствами встроенного языка. Мы не будем здесь детально останавливаться на этих вопросах. Более подробно они рассмотрены на конкретном примере четвертой главы (стр. 224) и в соответствующем разделе пятой главы (стр. 473).
Для примера создадим отчет, выводящий список продаж для контрагента, указанного в документе Расходная накладная.
Выделим ветку Макеты документа РасходнаяНакладная в дереве объектов конфигурации и вызовем ее контекстное меню или нажмем кнопку Добавить в командной панели окна конфигурации (рис. 3.24).
Конфигурация
? X
7D Конфигурация
Ё-fL Общие ёТ Константы [±1 Л Справочники
Документы
I	Нумераторы
|	Последовательности
0 § ПриходнаяНакладная
! EJ- “й РасходнаяНакладная Eg Реквизиты S -кЦ Табличные части
: В -Н СборкаКомпьютера
Журналы документов
Е { 1 Перечисления
Ё Г? Отчеты
Обработки
Рис. 3.24. Создание макета документа
В открывшемся конструкторе макета зададим имя макета Про-дажиКонтрагента и выберем тип макета Схема компоновки данных. Именно в этом макете будет содержаться описание «источника» данных и настройки для вывода данных.
В окне конструктора схемы компоновки данных добавим новый набор данных - объект (рис. 3.25).
74
Глава 3. Примеры основных возможностей системы компоновки данных
Рис. 3.25. Добавление набора данных - объект
В поле Имя объекта, содержащего данные зададим имя Продажи. Внешний набор с этим именем мы будем позже заполнять и использовать в компоновке данных. Этот набор данных будет отражать информацию о продажах для контрагента из нашего документа. Нажимая кнопку Добавить, создадим список полей набора данных со следующими именами (рис. 3.26):
• Номенклатура,
•	Цена,
•	Количество,
• Сумма.
Рис. 3.26. Добавление полей набора данных
75
Разработка сложных отчетов в 1 (^Предприятии 8. Система компо^эвки данных
ВНИМАНИЕ!
При программном заполнении полей набора данных их имена должны соответствовать именам полей в схеме компоновки данных.
На закладке Ресурсы схемы компоновки данных мышью перетащим в список ресурсов доступные поля отчета, по которым можно вычислять итоги, и вручную изменим функцию агрегирования Количество, предложенную по умолчанию, на Сумму (рис. 3.27).
Рис. 3.27. Выбор ресурсов для отчета
Рис. 3.28. Конструктор настроек. Шаг 2
76
Глава 3. Примеры основных возможностей системы компоновки данных
Для быстрого создания стандартных настроек воспользуемся конструктором настроек (рис. 3.3). Сначала выберем тип отчета Список, что соответствует элементу структуры отчета Группировка, где информация выводится по строкам (рис. 3.4). Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Перенесем из списка доступных полей все поля (рис. 3.28).
Нажмем кнопку Далее. На следующем шаге определим поля, для группировки записей в списке. Мышью перетащим из списка доступных полей поле Номенклатура (рис. 3.29).
Рис. 3.29. Конструктор настроек. Шаг 3
Нажмем кнопку Далее. Следующий шаг пропустим, так как сортировка в данном случае нам неважна.
Нажмем ОК. В результате наших действий в окне настроек появилась группировка Номенклатура и определен список выбранных полей (рис. 3.30).
На этом закончим работу со схемой компоновки данных. Теперь разместим в документе РасходнаяНакладная кнопку Продажи, при нажатии на которую будет исполняться программный код, заполняющий внешний набор данных и выполняющий компо
77
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
новку и представление отчета. Сначала создадим для документа новую форму с именем ФормаДокумента и типом Форма Документа и добавим в нее кнопку Продажи (рис. 3.31).
&? Документ РасходнаяНакладная ПродажиКонтрагента	_ П X
Наборы данных Связи наборов д. Вычисляемые п Ресурсы Параметры Макеты Вложенные схемы Настройки
Рис. 3.30. Настройки схемы компоновки данных
Рис. 3.31. Добавление в форму кнопки «Продажи»
В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки Продажи, в который мы внесем следующий текст (листинг 3.3).
78
Глава 3. Примеры основных возможностей системы компоновки данных
Листинг 3.3. Процедура обработчика события
нажатия кнопки «Продажи»
Процедура ПродажиНажатие(Элемент)
Запрос - Новый Запрос;
Запрос-Текст - "ВЫБРАТЬ
РасходнаяНакладнаяПереченьНоменклатуры.Номенклатура КАК Номенклатура, РасходнаяНакладнаяПереченьНоменклатуры.Количество КАК Количество РасходнаяНакладнэяПереченьНоменклатуры.Цена КАК Цена, РасходнаяНакладнаяПереченьНоменклатуры.Сумма КАК Сумма
ИЗ Документ.РасходнаяНакладная.ПереченьНоменклатуры
КАК РасходнаяНакладнаяПереченьНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная
КАК РасходнаяНакладная
ПО РасходнаяНакладнаяПереченьНоменклатуры
.Ссылка * РасходнаяНакладная.Ссылка
ГДЕ РасходнаяНакладная.Контрагент - &Контрагент";
Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);
Результат - Запрос.Выполнить();
СписокПродаж - Результат.Выгрузить();
ВнешниеНаборыДанных» Новый Структура;
ВнешниеНаборыДанных.Вставить("Продажи", СписокПродаж);
СхемаКомпоновкиДанных « ПолучитьМакет(’ПродажиКонтрагента");
Настройки - СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета - Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки - КомпоновщикМакета .Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных «Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать
(МакетКомпоновки, ВнешниеНаборыДанных);
ДокументРезультат * Новый ТабличныйДокумент;
ПроцессорВывода » Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ДокументРезультат.ОтображатьСетку * Ложь;
ДокументРезультат.ОтображатьЗаголовки - Ложь;
До ку ментРезультат. Показать();
КонецПроцедуры
79
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В процедуре определяется запрос для получения информации о продажах для контрагента в текущем документе. Затем создается внешний набор данных Продажи, в который добавляется таблица значений, содержащая данные для построения отчета. В нашем случае, для упрощения примера, эти данные получены запросом к информационной базе 1С:Предпри-ятия 8. Затем программно выполняется компоновка данных с использованием внешнего набора данных, который добавляется при инициализации процессора компоновки данных, и выдача результата в табличный документ. Запустим 1 (^Предприятие 8. Откроем документ Расходная накладная. Нажмем кнопку Продажи. На экране появится список продаж контрагенту, указанному в открытом документе (рис. 3.32).
		1 (ена	НЕЗ^В
Восстановление данных	_Л	5 000	5 000
Ремонт компьюте -а	"*		3 000	3 000
Сопутствующее услуги	।	2	500	1 000
Итоге 	 |	4		ВОТ	''000
Рис. 3.32. Результат отчета
Итак, мы создали отчет с использованием внешнего набора данных. Мы описали поля набора в схеме компоновки данных, определили ресурсы и стандартные настройки отчета. Затем мы программно заполнили этот набор данных, инициализировали им процессор компоновки данных, программно выполнили компоновку и вывели отчет по нажатию кнопки в документе.
Пример 4.
Набор данных - объединение
Набор данных - объединение предназначен для разработки отчета, содержащего объединенную информацию из различных наборов данных. Такой набор содержит два или более подчиненных набора данных, но информация в них не связывается, а объединяется.
80
Глава 3. Примеры основных возможностей системы компоновки данных
Во втором примере данной главы объяснялось, что при связывании наборов данных в схеме компоновки используется Левое соединение. То есть в отчете будут показаны все записи из левого набора данных, описанного в выражении связи, а из правого набора будут показаны только те записи, которые соответствуют условию связывания. Если же требуется вывести в отчет все записи из обоих наборов данных, используется набор данных - объединение.
Для примера создадим отчет, объединяющий информацию о поступлении и продаже номенклатуры. Затем мы сгруппируем полученные данные по позициям номенклатуры и выведем их в табличный документ с помощью конструктора настроек.
Создадим новый объект конфигурации Отчет и назовем его АнализПоступленияПродаж. Откроем конструктор схемы компоновки данных и добавим новый набор данных - объединение (рис. 3.33).
Рис. 3.33. Добавление набора данных - объединение
В схеме компоновки данных будет создан набор данных типа Объединение с именем НаборДанных1. Выделим его в дереве наборов данных и, вызвав его контекстное меню или нажав кнопку Добавить, добавим в него новый набор данных - запрос (рис. 3.34).
81
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.34. Добавление набора данных - запрос
Назовем его Поступление. Чтобы ввести новое имя набора данных, можно дважды щелкнуть по его названию. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа ПриходнаяНаклад-ная. В список полей перенесем поля из табличной части этого документа ПереченьНоменклатуры (рис. 3.35):
• Номенклатура,
• Количество,
• Цена.
Иочя
j — ПрихаднаяНакладнаяПереченьНоменклатуры.Номенклатура |..— П риходнаяН акладнаяП ереченьН оменк латуры. Количество
[ПриходнаяНакиаднаяПереченьНоьiohf натуры Цена
Рис. 3.35. Выбор полей для запроса
На закладке Объединения/Псевдонимы изменим имя у поля Количество на Поступило, Цена на ЦенаПоступления (рис. 3.36).
82
Глава 3. Примеры основных возможностей системы компоновки данных
Рис. 3.36. Изменение имен полей в конструкторе запроса
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Затем выделим родительский набор данных На-борДанных1 в дереве наборов данных и добавим в него еще один набор данных - запрос. Назовем его Расход. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа РасходнаяНаклад-ная. В список полей перенесем поля из табличной части этого документа ПереченьНоменклатуры (рис. 3.37):
•	Номенклатура,
•	Количество,
•	Цена.
Рис. 3.37. Выбор полей для запроса
На закладке Объединения/Псевдонимы изменим имя у поля Количество на Продано, Цена на ЦенаПродажи. Нажмем ОК и вернемся в конструктор схемы компоновки данных.
На закладке Ресурсы схемы компоновки данных в списке Доступные, поля расположены все поля из объединенного набора данных отчета. Нажмем кнопку S, чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги (рис. 3.38).
83
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.38. Выбор ресурсов для отчета
Для быстрого создания стандартных настроек воспользуемся конструктором настроек (рис. 3.3). Сначала выберем тип отчета Список, что соответствует элементу структуры отчета Группировка, где информация выводится по строкам (рис. 3.4). Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Список доступных полей включает поля из объединенного набора данных. Нажав кнопку Ш, выберем из него все поля (рис. 3.39).
Рис. 3.39. Конструктор настроек. Шаг 2
84
Глава 3. Примеры основных возможностей системы компоновки данных
Нажмем кнопку Далее. На следующем шаге определим поля для группировки записей в списке. Мышью перетащим из списка доступных полей поле Номенклатура (рис. 3.40).
Рис. 3.40. Конструктор настроек. Шаг 3
Нажмем кнопку Далее. Следующий шаг пропустим, так как сортировка в данном случае нам не важна.
Нажмем ОК. В результате наших действий в окне настроек появилась группировка Номенклатура и определен список выбранных полей (рис. 3.41).
Рис. 3.41. Настройки схемы компоновки данных
85
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 3.42):
Рис. 3.42. Результат отчета
Мы видим, что записи в отчете сгруппированы по полю Номенклатура, и для каждой позиции номенклатуры выводятся суммарные значения количества и цены ее поступления и продажи. Эти данные попадают в отчет путем объединения информации из документов Приходная накладная и Расходная накладная.
В заключение продемонстрируем отличие набора данных -объединение (на рисунке в центре) от связи этих же наборов данных в схеме компоновки (на рисунке слева и справа). Для наглядности мы вывели в отчет детальные записи и поочередно расположили слева в выражении связи наборы данных Поступление и Расход (рис. 3.43).
86
tiyr
Поступление левое Детальные записи
Объединение
Детальные записи
Расход левый
“------

Зещ.......Ц
Угюп	1/ПО
мог	1
гиде, ' |
ТРИОДИ 10WQJB
Детальные записи
I
Группировка по номенклатуре
1РЮ
довода
2/ШП
__'	3JQ00
=]—jgt
Ж| - -
1ЛЮ	7000.06*	М> 000,00
ада.
им
Рис. 3.43. Результат отчета с использованием объединения и связывания наборов данных
Глава 3. Примеры основных возможностей системы компоновки данных
а
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Пример 5. Характеристики.
Вывод данных в диаграмму
В платформе 1С:Предприятия есть специальный объект -План видов характеристик, с помощью которого можно создавать механизмы для того, чтобы пользователь имел возможность создавать и описывать произвольные характеристики для каких-либо объектов информационной базы. Например, для описания свойств номенклатуры пользователь может создать такие виды характеристик, как Цвет, Качество и т. п. и задать их значения.
Система компоновки данных позволяет использовать эти характеристики при разработке отчетов (стр. 305). То есть пользователь может отобразить поля характеристик в отчете, установить по ним отбор, условное оформление и т. д. Для извлечения характеристик из базы данных в языке запросов разработано специальное расширение, применяющееся только в системе компоновки данных.
В нашей конфигурации реализована возможность добавления дополнительных свойств к элементам справочника Контрагенты, таких как Надежный партнер? (да/нет) и Регион. Создадим отчет, отражающий информацию о продажах контрагентам, и отразим в отчете эти характеристики контрагентов. Затем мы выведем полученные данные в диаграмму с помощью конструктора настроек.
Создадим новый объект конфигурации Отчет и назовем его ПродажиКонтрагентам. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Откроем конструктор запроса. В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Прода-жи.Обороты. В список полей перенесем поля из этой таблицы (рис. 3.44):
•	Контрагент,
•	СтоимостьОборот.
88
Глава 3. Примеры основных возможностей системы компоновки данных
Б
L- | П родажиО бороты. СтоимостьО борот
Рис. 3.44. Выбор полей для запроса
Перейдем на закладку Характеристики. Нажмем кнопку Добавить и приступим к описанию полей характеристик. В поле Тип значения введем СправочникСсылка.Контрагенты - это тип данных, для которого описываются характеристики. Затем опишем источник списка характеристик. В нашем случае им является план видов характеристик СвойстваОбъектов. Поэтому в поле Источник выберем - Таблица, а в поле Список характеристик укажем ПланВидовХарактеристик.Свойст-ваОбъектов. Далее следует описать назначение полей источника, «поставляющего» список характеристик. В поле Идентификатор выберем Ссылка, в поле Имя - Наименование, а в поле Тип - Тип значения (рис. 3.45).
Рис. 3.45. Описание источника списка характеристик
Теперь опишем источник значений характеристик. В нашем случае им является регистр сведений ЗначенияСвойствОбъек-тов, поэтому в поле Источник укажем - Таблица, а в поле Значение характеристик - РегистрСведений.ЗначенияСвой-ствОбъектов. Далее опишем назначение полей регистра. В поле Объект выберем измерение регистра Контрагент, в поле Идентификатор - измерение регистра Свойство, а в поле Значение - ресурс регистра Значение (рис. 3.46).
89
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.46. Описание источника значений характеристик
Нажмем ОК. В результате текст запроса, сформированный платформой, примет вид (листинг 3.4).
Листинг 3.4. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
ПродажиОбороты.СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОборОТЫ {ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
СПИСОК ПланВидовХарактеристик.СвойстваОбъектов
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъектов
ОБЪЕКТ Контрагент
ХАРАКТЕРИСТИКА Свойство
ЗНАЧЕНИЕ Значение}
После ключевого слова ХАРАКТЕРИСТИКИ здесь следует секция, в которой для системы компоновки данных и описываются те характеристики, которые (^дут использованы в нашем отчете.
Для решения нашей задачи наиболее подходит вывод результата отчета в виде круговой диаграммы (стр. 467), чтобы наглядно продемонстрировать долю каждого контрагента в объеме продаж. Продемонстрируем эту возможность. Но сначала нам нужно определить ресурсы отчета (стр. 385).
90
Глава 3. Примеры основных возможностей системы компоновки данных
ВНИМАНИЕ!
Поля ресурсов необходимо определять в случаях, когда в отчете выводятся групповые или общие итоги, то есть практически всегда, за исключением вывода простого отчета, содержащего линейные записи. У диаграммы может быть только один ресурс.
На закладке Ресурсы перетащим мышью из доступных полей поле СтоимостьОборот (рис. 3.47).
Рис. 3.47. Определение ресурсов для отчета
На закладке Настройки вызовем конструктор настроек (рис. 3.3).
На первом шаге выберем тип отчета Диаграмма (рис. 3.48).
Рис. 3.48. Конструктор настроек. Шаг 1
91
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Мышью перетащим из списка доступных полей единственный ресурс СтоимостьОборот (рис. 3.49).
Рис. 3.49. Конструктор настроек. Шаг 2
Рис. 3.50. Конструктор настроек. Шаг 3
Нажмем кнопку Далее. На следующем шаге определим поля для группировки серий и точек диаграммы. Логически Диаграмма
92
Глава 3. Примеры основных возможностей системы компоновки данных
является совокупностью Точек, Серий и значений серий в точке. В качестве значений выступает один из ресурсов отчета, в качестве точек - объекты, для которых мы получаем значения характеристик, в качестве серий - характеристики, значения которых нас интересуют. Для круговой диаграммы, которую мы хотим вывести в отчет, достаточно определить серии. Мышью перетащим из списка доступных полей в поля Серии поле Контрагент (рис. 3.50).
Нажмем кнопку Далее. Четвертый шаг пропустим, так как сортировка в данном случае нам не важна. Нажмем кнопку Далее. На следующем шаге определим тип диаграммы. Выберем круговую объемную диаграмму (рис. 3.51).
Рис. 3.51. Конструктор настроек. Шаг 5
Нажмем ОК. В результате наших действий в окне настроек появилась диаграмма, в сериях которой находится группировка Контрагент, определен список выбранных полей (рис. 3.52).
93
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.52. Настройки схемы компоновки данных
Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Подробно об этом рассказывалось в первой главе (стр. 26). Откроем и выполним отчет в режиме 1С:Предприятие (рис. 3.53).
Рис. 3.53. Результат отчета
94
Глава 3. Примеры основных возможностей системы компоновки данных
Теперь мы видим графическое представление объемов продаж по контрагентам. Серии - наименования контрагентов отражаются справа. При наведении мыши на определенный сектор диаграммы отображается всплывающая подсказка с наименованием контрагента и значением ресурса. Однако пока мы не отразили в отчете дополнительные свойства контрагентов. Дело в том, что в процессе настройки отчета в режиме Конфигуратор мы не видим полей дополнительных характеристик - Регион и Надежный партнер. Применить их мы сможем только после запуска отчета из режима 1С:Г1редприятие. Это связано с тем, что сначала должен быть выполнен запрос, извлекающий характеристики из базы данных. Запустим еще раз конструктор настроек. Перейдем на второй этап и раскроем поле Контрагент в списке доступных полей. Здесь мы увидим две наши дополнительные характеристики-Регион и Надежный партнер. Перенесем в список полей поле Регион (рис. 3.54).
Рис. 3.54. Конструктор настроек. Шаг 2
95
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Нажмем ОК и сформируем отчет (рис. 3.55).
Рис. 3.55. Результат отчета
Мы видим, что характеристика контрагента Регион теперь отражается рядом с его наименованием.
Однако настройки, сделанные в режиме 1 (^Предприятие, не сохраняются в настройках по умолчанию схемы компоновки данных. Поэтому чтобы в дальнейшем использовать характеристики контрагентов в нашем отчете, нужно сохранить их, нажав соответствующую кнопку на командной панели отчета (рис. 3.55). В появившемся диалоге сохранения настроек нажмем ОК, и в дальнейшем отчет будет формироваться с учетом характеристик контрагентов (рис. 3.56).
Рис. 3.56.
Сохранение пользовательских настроек
96
Глава 3. Примеры основных возможностей системы компоновки данных
Итак, мы получили графическое представление объемов продаж по контрагентам в виде круговой диаграммы. А также мы вывели в отчет характеристику контрагентов Регион.
Пример 6. Вложенный отчет
Часто бывает, нужно использовать данные одного отчета внутри другого. Предположим, нам нужен список контрагентов с вложенными данными по продажам номенклатуры для каждого из них. И допустим, что отчет, выводящий данные продаж по контрагентам, уже разработан ранее. Вместо того чтобы создавать и связывать запросы в схеме компоновки, достаточно просто использовать отчет о продажах в качестве вложенного отчета в простой отчет, выводящий список контрагентов.
Для этого система компоновки данных предоставляет возможность работы с вложенными отчетами. Выведем в отчет список контрагентов. Информацию о продажах будем получать из Отчета по продажам.
Сначала откроем схему компоновки данных отчета От-четПоПродажам и сохраним ее в файл (стр. 116).
Создадим новый объект конфигурации Отчет и назовем его СписокКонтрагентов. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Не будем пользоваться конструктором запроса, а сразу внесем в поле Запрос следующий текст (листинг 3.5).
Листинг 3.5. Текст запроса
ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент
ИЗ
Справочник-Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ЭтоГруппа = Ложь
97
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Этот простой запрос выбирает из справочника Контрагенты все записи, кроме групп. Перейдем на закладку Вложенные схемы и добавим новую схему. Назовем ее Продажи и в поле Схема нажмем кнопку выбора (рис. 3.57).
Рис. 3.57. Добавление вложенной схемы
В качестве вложенной схемы загрузим файл XML с сохраненной ранее схемой - Схема_продажи (рис. 3.58).
Рис. 3.58. Выбор файла вложенной схемы
Нажмем ОК. Теперь нажмем кнопку выбора □ в поле Настройки и зададим связь вложенной схемы с родительской так, чтобы 98
Глава 3. Примеры основных возможностей системы компоновки данных
для каждого контрагента из основного отчета отражалась соответствующая информация из вложенного отчета. Добавим новый элемент отбора и нажмем кнопку выбора □ в поле Левое значение. В открывшемся окне выбора поля укажем поле вложенного отчета Контрагент (рис. 3.59).
Рис. 3.59. Задание условий отбора в настройках вложенной схемы
В поле Правое значение нажмем кнопку очистки Е, затем кнопку выбора типа данных 0 и выберем тип данных Поле компоновки данных. Теперь нажмем в поле ввода кнопку выбора S, в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец и выберем поле родительского отчета Контрагент (рис. 3.60).
Рис. 3.60. Задание условий отбора в настройках вложенной схемы
99
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В результате окно настроек вложенной схемы примет вид (рис. 3.61):
Рис. 3.61. Окно настроек вложенной схемы
Теперь определим структуру отчета вручную, не пользуясь конструктором настроек. На закладке Настройки в дереве структуры отчета выделим элемент Отчет, вызовем его контекстное меню и добавим новую группировку. Укажем поле группировки Контрагент (рис. 3.62).
Рис. 3.62. Добавление новой группировки в отчет
100
Глава 3. Примеры основных возможностей системы компоновки данных
Затем выделим эту группировку и в контекстном меню выберем пункт Новая вложенная схема. Обратите внимание, что пока мы не добавили вложенную схему в отчет, этот пункт был недоступен (рис. 3.63).
Рис. 3.63. Добавление вложенной схемы в отчет
Рис. 3.64. Окно настроек отчета
101
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Выберем схему Продажи. Вложенная схема вместе со своими настройками добавилась в основной отчет. Включим признак использования у элемента структуры Контрагент отчета Продажи и уберем его у элемента Диаграмма (рис. 3.64).
ВНИМАНИЕ!
Чтобы активизировать режим настроек основного отчета, нужно выделить одну из его ветвей или корневой элемент дерева структуры отчета. Для настройки вложенного отчета достаточно выделить одну из его ветвей в дереве структуры отчета. При установке настроек отдельной группировки основного или вложенного отчета в средней части окна, под деревом группировок отчета, должна быть выделена соответствующая ей кнопка.
Выделив ветку Продажи, настроим вложенный отчет. На закладке Другие настройки отключим вывод отбора для него, так как это не несет никакого смысла, а лишь указывает на его связь с основным отчетом (рис. 3.64).
Рис. 3.65.
Результат отчета с выделением вложенных отчетов
102
Глава 3. Примеры основных возможностей системы компоновки данных
Запустим отчет на исполнение в режиме 1С:Предприятие (рис. 3.65).
В результате мы вывели список контрагентов и данные о продажах номенклатуры по каждому из них, используя вложенный отчет Отчет по продажам. Стандартные настройки отчета мы создали вручную, используя такие элементы структуры, как Группировка и Вложенная схема.
Пример 7. Вывод результата в сводную таблицу
Результат можно представить разными способами в зависимости от структуры полученных данных и назначения отчета. В данном примере мы рассмотрим вывод данных в таблицу и в элемент формы отчета Сводная таблица. Эти варианты представления данных очень схожи, однако у сводной таблицы есть ряд преимуществ:
•	При выводе данных в сводную таблицу можно, не переформировывая отчет, изменить его структуру. Например, поменять местами строки и столбцы сводной таблицы.
•	Структура сводной таблицы меняется визуальными средствами, в том числе перетаскиванием мышью, не вызывая окно настроек. Окно настроек содержит много различных элементов, в которых легко запутаться неподготовленному пользователю.
•	Пользователям ранних версий этот вариант более привычен.
Создадим отчет, отражающий информацию о работе мастеров по сборке системных блоков, и продемонстрируем оба варианта вывода данных.
103
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Создадим новый объект конфигурации Отчет и назовем его Ра-ботаМастеров. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу регистра накопления СобранныеСБ. В список полей перенесем поля из этой таблицы (рис. 3.66):
•	СБ,
•	Мастер,
•	Количество, • Стоимость.
Рис. 3.66. Выбор полей для запроса
Перейдем на закладку Условия, раскроем таблицу СобранныеСБ и перетащим мышью поле ВидДвижения в список условий. Оставим предложенное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались данные из регистра с видом движения Приход (рис. 3.67).
Рис. 3.67. Создание условия запроса
104
Глава 3. Примеры основных возможностей системы компоновки данных
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Чтобы вывести данные отчета в виде таблицы, нам нужно определить ресурсы отчета, так как данные в таблице группируются по строкам и столбцам, а на их пересечении, в ячейках таблицы, находятся групповые итоги, то есть ресурсы (стр. 385).
На закладке Ресурсы перенесем из доступных полей все возможные ресурсы Количество и Стоимость (рис. 3.68).
Рис. 3.68. Определение ресурсов для отчета
На закладке Настройки вызовем конструктор настроек (рис. 3.3).
На первом шаге выберем тип отчета Таблица (рис. 3.69).
Рис. 3.69.
Конструктор настроек. Шаг 1
105
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Перенесем из списка доступных полей все поля (рис. 3.70).
Рис. 3.70. Конструктор настроек. Шаг 2
Нажмем кнопку Далее. На следующем шаге определим поля для группировки строк и столбцов таблицы. Мышью перетащим из списка доступных полей в поля Строки поле Мастер, а в поля Колонки - поле СБ (рис. 3.71).
Рис. 3.71. Конструктор настроек. Шаг 3 106
Глава 3. Примеры основных возможностей системы компоновки данных
Нажмем кнопку Далее. Четвертый шаг пропустим, так как сортировка в данном случае нам не важна.
Нажмем ОК. В результате наших действий в окне настроек появилась таблица, в строках которой находится группировка Мастер, в колонках - группировка СБ, а также определен список выбранных полей (рис. 3.72).
Рис. 3.72. Настройки схемы компоновки данных
Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Выполним отчет в режиме 1С:Предприятие (рис. 3.73).
Рис. 3.73. Результат отчета
107
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Теперь продемонстрируем взаимодействие системы компоновки данных со сводной таблицей. Для этого предназначен объект ИсточникДанныхСводнойТаблицыКомпоновкиДанных. Работа системы компоновки данных со сводной таблицей состоит из двух аспектов:
•	вывод отчета в сводную таблицу на основе настроек системы компоновки;
•	видоизменение пользователем отчета в сводной таблице и сохранение нового отчета в виде настроек системы компоновки данных.
Таким образом, при работе со сводной таблицей, выводящей данные на основе настроек, пользователь может изменить структуру настроек и состав выбранных полей первоначальных настроек.
Итак, создадим отчетную форму, вставим в нее сводную таблицу и выведем туда наш отчет. Выделим отчет РаботаМастеров в дереве объектов конфигурации и откроем его. На закладке Формы нажмем на кнопку просмотра у поля Основная форма отчета (рис. 3.74).
Рис. 3.74. Создание основной отчетной формы
108
Глава 3. Примеры основных возможностей системы компоновки данных
В запустившемся конструкторе формы отчета оставим предложенные по умолчанию тип формы и имя формы - Фор-маЬтчета. Нажмем кнопку Готово. В открывшейся форме отчета уже находится поле Результат, в которое будет выводиться отчет. Вставим в него сводную таблицу. Для этого выделим левую верхнюю ячейку поля Результат и выполним пункт главного меню Таблица - Вид - Только просмотр. Затем выполним команду Таблица - Встроенные таблицы -Вставить сводную таблицу. Окно отчетной формы примет вид (рис. 3.75).
Рис. 3.75. Диалог отчетной формы
Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткры-тии() и нажмем значок лупы справа от него (рис. 3.76).
109
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 3.76. Установка обработчика события при открытии формы
В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы. Внесем в него следующий текст (листинг 3.6):
Листинг 3.6. Процедуры модуля формы ПриОткрытии()
Процедура ПриОткрытии()
ИсточникСводнойТаблицы = Новый
ИсточникДанныхСводнойТаблицыКомпоновкиДанных;
ИсточникСводнойТаблицы.УстановитьСхему(СхемаКомпоновкиДанных);
ЭлементыФормы.Результат.ВстроенныеТаблицы.Сводная Таблица!
.ИсточникДанных « ИсточникСводнойТаблицы;
ИсточникСводнойТаблицы.УстановитьНастройки(КомпонОвщикНастроек .Настройки);
КонецПроцедуры
В данной процедуре создается новый объект ИсточникДан-ныхСводнойТаблицыКомпоновкиДанных. Метод Устано-витьСхему() инициализирует источник схемой компоновки данных. Метод УстановитьНастройки() инициализирует источник настройками компоновки данных.
110
Глава 3. Примеры основных возможностей системы компоновки данных
Также у источника сводной таблицы существует метод ПолучитьНастройки(), который получает состояние сводной таблицы в виде настроек компоновки данных (первоначальные настройки, измененные манипуляциями со сводной таблицей).
Выполним отчет в режиме 1 С:Предприятие (рис. 3.77).
Рис. 3.77. Результат отчета, выведенный в сводную таблицу
Отчет выводится в созданной нами отчетной форме. Сразу при ее открытии сводная таблица заполняется данными результата отчета. Сводная таблица содержит настройки, которые мы задали ранее в конструкторе настроек, и соответствует первоначальному результату отчета (рис. 3.72, 3.73). Теперь можно, не переформировывая отчет, изменить его структуру. Например, поменять местами строки и столбцы сводной таблицы (рис. 3.78).
Поля сводной таблицы можно перетаскивать мышью, а можно воспользоваться специальным диалогом. Чтобы скрыть или отобразить окно полей сводной таблицы, нужно выделить
111
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
любую ее ячейку и в контекстном меню выбрать пункт Отображать поля (рис. 3.79).
Рис. 3.78. Изменение структуры отчета
Рис. 3.79. Результат отчета, выведенный в сводную таблицу
Например, можно с помощью диалога полей сводной таблицы поместить поле Мастер в строки отчета (рис. 3.80).
112
Глава 3. Примеры основных возможностей системы компоновки данных
Рис. 3.80. Изменение структуры отчета
Итак, с помощью конструктора настроек мы вывели данные отчета в табличный документ в виде таблицы, расположенной в автоматически сгенерированной форме отчета. Затем мы создали собственную отчетную форму, поместили в нее сводную таблицу и программно связали настройки системы компоновки данных с этим элементом управления. В результате мы представили данные в виде сводной таблицы. Таким образом, разработчик может выбрать тот или иной вариант представления данных в зависимости от своего вкуса и предпочтений заказчика.
113
Глава 4
Примеры разработки отчетов
Данная глава содержит набор практических примеров, основанных на реальных задачах. Она будет полезна разработчикам, желающим углубить свои знания и навыки по разработке отчетов с помощью системы компоновки данных.
Пример 1. Возможности настройки различных элементов отчета
На примере отчета Остатки номенклатуры продемонстрируем несколько вариантов настройки различных элементов структуры отчета. Сначала создадим новую схему компоновки данных для этого отчета на основе уже имеющейся. Найдем созданную ранее ОсновнуюСхемуКомпоновкиДанных в ветке Макеты в дереве конфигурации объектов Отчеты, выделим ее и откроем двойным щелчком мыши (рис. 4.1).
115
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Конфигурация ж	? X
Действия- -g, t I В >
t~d Конфигурация
S-Jt Общие s-T Сонстангы El jj Справочники
Документы
•~Ц|| Журналы документов
□ {•2 Перечисления
Е' -jj. Отчеты
$ _ ч ОстаткиНоменклатуры
| -Я Реквизиты
I -=л Т абличные части
-Q Формы
Й"С|| Макеты
,  2 д амиид
Eg- jy? ОтчетПоСистемнымБлокам
Рис. 4.1. Открытие схемы компоновки данных
Сохраним открывшуюся схему в файл, нажав кнопку с иконкой Сохранить в левом нижнем углу окна конструктора схемы ком-
поновки данных (рис. 4.2).
Рис. 4.2. Сохранение схемы компоновки данных
В появившемся диалоговом окне зададим произвольное имя для схемы и нажмем кнопку Сохранить (рис. 4.3).
116
Глава 4. Примеры разработки отчетов
Рис. 4.3. Создание файла, содержащего схему компоновки данных
Как мы видим, файл, содержащий схему, имеет расширение XML. Этот файл в дальнейшем можно будет отредактировать и загрузить измененную схему. Подробнее об этом будет рассказано позже. Закроем открытую схему компоновки данных и добавим в отчет новую схему компоновки данных (стр. 352). Для этого выделим ветку Макеты данного отчета в дереве конфигурации и вызовем ее контекстное меню или нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.4).
Рис. 4.4. Создание новой схемы компоновки данных
Платформа создаст новый макет отчета. В нем мы зададим имя макета СхемаКомпоновкиДанных1 и выберем тип макета Схема компоновки данных. Нажмем кнопку Готово (рис. 4.5).
117
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Загрузим ранее сохраненную схему из файла, нажав кнопку с иконкой Открыть в левом нижнем углу окна схемы компоновки данных (рис. 4.6).
Конструктор макета	X
Рис. 4.5. Создание новой схемы компоновки данных
Рис. 4.6. Загрузка схемы компоновки данных
В появившемся диалоговом окне выберем файл, содержащий схему компоновки данных, и нажмем кнопку Открыть
(рис. 4.7).
Рис. 4.7. Открытие файла, содержащего схему компоновки данных
118
Глава 4. Примеры разработки отчетов
Итак, мы получили новую СхемуКомпоновкиДанных1, аналогичную ранее созданной основной схеме. Теперь перейдем на закладку Настройки и изменим настройки отчета Остатки номенклатуры. Мы видим, что структура отчета уже содержит таблицу, созданную нами ранее (в первой главе) с помощью конструктора настроек. Добавим в структуру отчета новый элемент Группировку и покажем возможности настройки отдельных элементов отчета.
Напомним, что иерархическая структура отчета содержит три основных элемента:
•	Группировка - для вывода информации в виде обычного линейного отчета;
•	Таблица - для вывода информации в виде таблицы;
•	Диаграмма - для вывода информации в виде диаграммы.
Элемент Группировка позволяет выводить в отчете не только сгруппированную каким-то образом информацию, но и обычные детальные записи, выбранные платформой из «источников» данных согласно нашему запросу.
Рис. 4.8. Добавление новой группировки в отчет
119
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Добавим в структуру отчета новую группировку. Для этого откроем контекстное меню элемента Отчет, выделив этот элемент и нажав правую клавишу мыши (рис. 4.8).
В появившемся окне выбора поля группировки оставим поле ввода Поле пустым, так как мы не хотим группировать записи в отчете. Такая группировка называется Детальные записи (рис. 4.9).
Теперь продемонстрируем возможности различных настроек отчета. Напомним, что настройки могут относиться как ко всему отчету в целом, так и к его отдельным элементам - группировкам, таблицам, диаграммам. Последнее может быть полезно, чтобы выделить разные элементы индивидуальными стилями оформления, установить для каждого свой отбор, сортировку и т. д.
Группировка	X
Поле? |МИВМ1ИИМИИММИИИИ1ММ1'”|х|
Тип: | Без иерархии	|.«|
|" ОК [ Отмена |
Рис. 4.9. Окно выбора группировки
ВНИМАНИЕ!
При установке настроек отчета в средней части окна, под деревом структуры отчета, должна быть выделена кнопка, соответствующая режиму настроек. Кнопка Отчет - для настройки отчета в целом, или кнопка с именем группировки, например Детальные Записи, если настройки относятся только к ней.
Сначала продемонстрируем настройки отчета в целом. Дадим заголовок отчету. Перейдем на закладку Другие настройки. В средней части окна настроек выделим кнопку Отчет и введем Остатки номенклатуры в строку Заголовок (рис. 4.10).
Установим для Макета оформления значение - Море (стр. 408), рис. 4.11.
120
Глава 4. Примеры разработки отчетов
Наборы данных Связи наборов данных Вычисляемые поля Ресурсы Параметры .Макеты ; Вложенные схемы | Настройки]
В--ё ? Отчет
Й0Е Таблица
Й-Строки
|	1...[7]вв Номенклатура
Й-Колонки
Детальные записи:
<
t
Настройки:
Рис. 4.10. Настройка заголовка отчета
Рис. 4.11. Настройка макета оформления отчета
Важным элементом настроек является присвоение более коротких и понятных для пользователя заголовков полей отчета. Это можно сделать на закладке Наборы данных.
121
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Поясним назначение некоторых граф окна Поля на этой закладке:
•	В колонке Поле отображается нередактируемое значение имени поля, которое платформа автоматически сформировала из текста запроса. Это внутреннее имя поля, использующееся только в тексте запроса.
•	В колонке Путь содержится строка, содержащая путь к данным, по которому к нему можно обратиться в других закладках конструктора схемы компоновки данных. Оно может быть отредактировано. Имена полей, описанные в этой колонке, появляются для разработчика на закладке выбора полей в отчете, описания вычисляемых полей, полей группировки и др., поэтому имеет смысл настроить их более понятными для себя.
•	Заголовок содержит название поля, под которым поле будет фигурировать в настойках отчета в режиме 1 С:Предприятие и в шапке отчета.
Поскольку ранее (в первой главе) мы формировали настройки отчета с помощью конструктора настроек, все нужные изменения уже сделаны конструктором (рис. 4.12).
Рис. 4.12. Установка заголовков полей
122
Глава 4. Примеры разработки отчетов
Закроем измененную схему. Теперь для отчета Остатки номенклатуры существуют две различные схемы компоновки данных. Выделим отчет в дереве конфигурации и вызовем диалог редактирования его свойств двойным щелчком мыши или нажав кнопку Изменить на командной панели окна конфигурации. Установим СхемуКомпоновкиДанных1 в качестве основной для отчета (рис. 4.13).
Рис. 4.13. Выбор основной схемы компоновки данных для отчета
Установить нужную схему компоновки данных для отчета можно также программным путем. Подробнее об этом будет рассказано позже. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 4.14).
Мы видим, что в отчет выведена таблица и группировка в виде простых детальных записей. Отчет имеет заголовок, и все его элементы оформлены макетом оформления Море.
123
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
। ” ю-ленклатуоы
Рис. 4.14. Результат отчета
Теперь продемонстрируем настройку отдельных элементов отчета. Настроим элемент отчета Детальные записи. Для этого выделим режим настроек отчета Детальные записи и на закладке Другие настройки установим значение Макета оформления (стр. 408) - Яркий, Расположение общих итогов по вертикали - Нет. Также дадим заголовок группировке - Список номенклатуры на складах (рис. 4.15).
Рис. 4.15. Редактирование настроек элемента отчета «Детальные записи»
124
Глава 4. Примеры разработки отчетов
На закладке Сортировка отсортируем записи группировки в порядке убывания конечного остатка номенклатуры. Для этого перенесем из списка доступных полей поле КоличествоКонечныйОстаток и установим направление сортировки - По убыванию (рис. 4.16).
Полягрупгъ ставки Выбранные поля Отбор Сортировка f Условное оформление Другие настройки
Рис. 4.16. Настройка сортировки элемента отчета «Детальные записи»
На закладке Условное оформление выделим цветом записи
группировки с конечным остатком, меньшим или равным единице. Для этого нажмем кнопку Добавить справа на командной панели окна (рис. 4.17).
Поля группировки Выбранные поля , Отбор , Сортировка] Условное оформление f Другие настройки ;
Рис. 4.17. Настройка условного оформления элемента отчета «Детальные записи»
Сначала выберем Область, то есть укажем, какие поля требуется выделить (рис. 4.18).
Оформляемые поля	X
W t 4
Рис. 4.18. Настройка условного оформления элемента отчета «Детальные записи»
125
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Затем укажем Отбор - условия для выделения полей (рис. 4.19).
Рис. 4.19. Настройка условного оформления элемента отчета «Детальные записи»
Затем выберем Оформление для выделения полей. В нашем случае - это цвет фона и цвет текста (рис. 4.20).

Редактирование параметров	X
Рис. 4.20. Настройка условного оформления элемента отчета «Детальные записи»
126
Глава 4. Примеры разработки отчетов
В результате окно условного оформления должно принять следующий вид (рис. 4.21):
Поля группировки I Выбранные поля Отбор Сортировка | Условное оформление ^Друш настройки ,
Рис. 4.21. Настройка условного оформления элемента отчета «Детальные записи»
Настроим элемент отчета Таблица. Для этого выделим режим настроек отчета Таблица и на закладке Другие настройки установим значение Макета оформления (стр. 408) - Античный, Расположение общих итогов по вертикали - Начало. Также дадим заголовок таблице - Остатки номенклатуры на складах (рис. 4.22).
Рис. 4.22. Редактирование настроек элемента отчета «Таблица»
127
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Перейдем к настройкам группировки Номенклатура, расположенной в строках таблицы, и на закладке Выбранные поля раскроем список полей Автополя (стр. 369). Для этого выделим его, вызовем его контекстное меню и выберем пункт Развернуть (рис. 4.23).
Рис. 4.23. Раскрытие списка полей «Автополя»
Здесь мы видим список полей ресурсов отчета и поле группировки строк таблицы. Так как начального остатка по номенклатуре у нас нет, уберем признак использования у поля КоличествоНа-чальныйОстаток или удалим его из списка (рис. 4.24).
То же самое проделаем для группировки колонок таблицы Склад.
ПРИМЕЧАНИЕ
Выделенные пиктограммы справа от элементов структуры отчета (рис. 4.24) отражают наличие настроек - выбранных полей, отбора, параметров и т. п. и настроек вывода конкретного элемента.
128
Глава 4. Примеры разработки отчетов
Рис. 4.24. Выбор полей для таблицы
На закладке Отбор установим отбор записей для группировки Номенклатура с конечным остатком больше единицы. Для этого выделим режим настроек отчета Номенклатура элемента отчета Таблица и на закладке Отбор перенесем из списка доступных полей поле КоличествоКонечныйОстаток. Установим Вид сравнения - Больше, а Правое значение - 1. Условие отбора примет вид (рис. 4.25):
Поля групп^овки Выоранные поля | Отбор [ Сортировка Условное оформление , Другие настройки
		
Номенклатура Й- — Склад		В-Отбор	
	0	КоличествоКонечныйОстаток
Й- 9 Й - 3 Количеством ачальныйОстагок Й-| Количеством риход Й"9 КоличествоРасхсд Й- м СистемныеПоля Й-И Параметры Данных		
Рис. 4.25. Настройка отбора для группировки «Номенклатура» элемента отчета «Таблица»
129
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В заключение отключим вывод общего заголовка отчета, так как теперь у каждого элемента отчета есть свой заголовок. Для этого выделим корневой элемент структуры отчета Отчет и снимем признак использования у строки Заголовок (рис. 4.26).
Параметры данных Выбранные поля , Отбор Сортировка У слоеное оформление Пользовательские поля |		Другие настройки |		
Параметр			(Значение			 4		<
□		Окантовка	ложь		к»
□ •Градиент	ложь		№
□		Шрифт	Шрифт диалогов и меню		[5
□ -Цвет Фона	 0,0,0		
□ Стиль линии	Нет линии		
П •Размещение легенды	Нет		
О 	Полосы измерительной диаграммы	Нет полос		
Q Выводить заголовок	Авто	"1	
I Т) Заголовок	| Остатки номенклатуры по складам		
7Т Выводить параметры данных	Авто		Щ	
0 Выводить отбор		Авто		я	
Рис. 4.26. Настройка вывода общего заголовка отчета
Запустим отчет на исполнение в режиме ЮПредприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 4.27).
Рис. 4.27. Результат отчета
Итак, мы видим результаты изменений настроек отчета по сравнению с настройкой отчета в целом (рис. 4.14). У каждого элемента структуры отчета теперь есть свой заголовок и макет оформления. Детальный список выводится без общих итогов, в порядке убывания конечного остатка номенклатуры. 130
Глава 4. Примеры разработки отчетов
Записи с остатком меньшим или равным единицы выделены цветом. В таблице отражаются только записи с конечным остатком номенклатуры больше единицы, и общие итоги по горизонтали расположены в начале.
На этом примере мы познакомились с индивидуальной настройкой каждого элемента структуры отчета. Мы научились устанавливать для них:
•	сортировку;
•	отбор;
•	условное оформление;
•	заголовок, макет оформления и другие.
Таким образом, применяя различные варианты настройки отчета, можно получить множество отчетных форм, использующих один и тот же набор данных.
Пример 2. Отчет по системным блокам
Дальнейшие возможности системы компоновки данных будем изучать на примере отчета, который будет отражать информацию по собранным и проданным системным блокам за указанный период (рис. 4.28).
Отчет по системным блокам Параметры данных: Начало периода » 01.01.2008 Конец периода  31.05.2008							
Склад	Количество приход	(Количество расход	Конечный остаток	Стоимость 1 приход	Стоимость | расход	|	Прибыль	Прмбыль.% | hs I
Ns I Системный блок п/ц [					,,	„ '							
Основной	2	. .... ?		17 500,00	20 000,00	2 500	100,00
11 Компьютер для дома	1	1		9000,00	10000,00?	1 000	40,00
2 j Компьютер для офиса	Г	1			8 500,00	10 000,00;	1500	
Итого	2	2	?	<	I 17 500.001	20000Л0|	2 500	1	100,00
							
Рис. 4.28. Требуемый вид отчета
131
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Создадим новый объект конфигурации Отчет и назовем его От-четПоСистемнымБлокам. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления СобранныеСБ.ОстаткиИОбо-роты. В список полей перенесем поля из этой таблицы (рис. 4.29):
•	КоличествоНачальныйОстаток,
•	КоличествоКонечныйОстаток,
•	КоличествоПриход,
•	КоличествоРасход,
•	СтоимостьПриход,
•	СтоимостьРасход,
•	СБ,
• Склад.
ДУД СобранныеСБ 0 стагкиИ 0 бороты, Количествен ачальныйО статок
...| СобранныеСБ 0 ст ат киИ 0 бороты. КоличествоКонечныйОстаток
...| СобранныеСБ 0 стагкиИ О бороты. КоличествоП риход
...| СобранныеСБ 0 стагкиИ 0 бороты. КоличествоРасход
СобранныеСБОстагкиИОбороты.СтоимостьПриход
g СобранныеСБ 0 стагкиИ 0 бороты. СтоимостьРасход
--L СобранныеСБ 0 стагкиИ 0 бороты. СБ
-L СобранныеСБОстагкиИОборотыСклад	РИС. 4.29. ВЫООр
----------------------------------------------------------- данных для запроса
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Изменим заголовки и пути полей на более понятные: Системный Блок (СБ), Начальный остаток, Конечный остаток. Напомним, что заголовки будут отражаться в шапке отчета и окне настроек пользователя, а пути - в настройках разработчика, в выражениях вычисляемых полей, ресурсов и т. п.
В отчете мы хотим видеть прибыль от продажи собранных системных блоков, то есть разницу между его продажной стоимостью (поле регистра СтоимостьРасход) и стоимостью 132
Глава 4. Примеры разработки отчетов
комплектующих и услуг, израсходованных на сборку компьютера (поле регистра СтоимостьПриход). Значит, для этого нам понадобится создать Вычисляемое поле (стр. 376). Перейдем на закладку Вычисляемые поля и добавим его кнопкой Добавить. Дадим ему имя (Путь к данным) - Прибыль, в колонку Выражение введем следующий текст (листинг 4.1).
Листинг 4.1. Выражение для расчета вычисляемого поля «Прибыль»
Заголовок для отображения в отчете формируется по умолчанию, но его можно изменить (рис. 4.30).
Рис. 4.30. Создание вычисляемого поля
Перейдем на закладку Ресурсы и определим поля ресурсов отчета (стр. 385). Обратите внимание, что созданное ранее вычисляемое поле Прибыль тоже добавилось в ресурсы отчета, так как по нему можно подсчитывать групповые итоги (рис. 4.31).
Рис. 4.31. Определение ресурсов отчета
133
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Теперь определим параметры отчета (стр. 390). Для этого перейдем на закладку Параметры. Мы видим, что платформа уже создала два параметра - НачалоПериода и КонецПериода. Эти параметры используются практически в каждом отчете, так как пользователя интересуют данные о хозяйственной деятельности за определенный период.
Первым параметром в отчет передается дата начала периода расчета итогов, вторым - конец периода. В результате отчет будет содержать только данные за указанный период. Мы можем также добавить свой параметр, но в данном случае нас устраивает список параметров, предложенный нам по умолчанию (рис. 4.32).
Рис. 4.32. Параметры компоновки данных
Рис. 4.33. Редактирование состава даты
134
Глава 4. Примеры разработки отчетов
Поле Заголовок можно изменить, так как эти заголовки выводятся при запросе параметров у пользователя. Мы оставим их по умолчанию, но изменим колонку Доступные типы. Дело в том, что если в отчет передается параметр, содержащий значение типа Дата, то дата всегда содержит и время с точностью до секунды. Однако пользователя, как правило, не интересуют данные в отчете с такой точностью. И ему незачем указывать еще и время при вводе даты. Поэтому в колонке Доступные типы нажмем кнопку выбора Вив нижней части окна редактирования типа данных установим Состав даты в значение Дата для обоих параметров (рис. 4.33).
Но в таком случае, если пользователь задаст даты периода как 01/03/2008 и 31/03/2008, итоги регистра будут рассчитаны с начала дня 01/03/2008 00:00:00 по начало дня 31/03/2008 00:00:00. То есть данные за 31-е число, отличные от начала дня, в отчет не попадут, а пользователь, конечно, подразумевал этот день включить. Чтобы этого избежать, внесем в поле Выражение для параметра КонецПериода следующий текст (листинг 4.2):
Листинг 4.2. Выражение для расчета параметра «КонецПериода»
КонецПериода(&КонецПериода, "День")
Это выражение, сформулированное на языке выражений системы компоновки данных, содержит функцию КонецПерио-да(), возвращающую дату, соответствующую концу какого-либо периода, например, дня. В результате окно параметров компоновки примет следующий вид. Заметим, что у параметров снят флаг Ограничение доступности. Это значит, что эти параметры будут видны в окне настроек пользователя (рис. 4.34).
Рис. 4.34. Параметры компоновки данных
135
Разработка сложных отчетов в 1 ^Предприятии 8. Система компоновки данных
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Склад. Выделим группировку Склад и добавим подчиненную ей группировку СистемныйБлок. Затем на закладке Выбранные поля перенесем из списка доступных полей поля (рис. 4.35):
•	Склад,
•	СистемныйБлок,
•	НачальныйОстаток,
•	КоличествоПриход,
•	КоличествоРасход,
•	КонечныйОстаток,
•	СтоимостьПриход,
•	СтоимостьРасход,
•	Прибыль.
Рис. 4.35. Определение полей и группировок отчета 136
Глава 4. Примеры разработки отчетов
На закладке Другие настройки дадим заголовок отчету -Отчет по системным блокам и установим Макет оформления (стр. 408) - Арктика. Запустим отчет на исполнение в режиме Ю’Предприятие. Перед тем как нажать кнопку Сформировать, откроем окно Настройки и на закладке Параметры данных зададим период отчета с 10/03/2008 по 26/03/2008 (рис. 4.36).
Рис. 4.36. Настройки отчета
Нажмем ОК и сформируем отчет. Он примет следующий вид (рис. 4.37):
Рис. 4.37. Результат отчета
137
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Поскольку в базе есть документы по сборке и продаже системных блоков за 26/03/2008, мы видим, что эти данные попали в отчет.
Немного усовершенствуем наш отчет. Уберем признак использования у поля НачальныйОстаток. Добавим в список выбранных полей отчета вычисляемое поле, сформированное платформой, показывающее процент прибыли по каждому системному блоку от ее общей суммы. Для этого раскроем поле Прибыль и перенесем поле ПроцентОбщий (рис. 4.38).
Рис. 4.38. Добавление поля «ПроцентОбщий» в отчет
Выделим режим настроек группировки СистемныйБлок и добавим нумерацию внутри нее. Для этого раскроем список Системные поля и перенесем поле НомерПоПорядку (рис. 4.39).
Запустим отчет на исполнение в режиме 1С:Предприятиё. Перед тем как нажать кнопку Сформировать, откроем окно Настройки и на закладке Параметры данных зададим период отчета с 10/03/2008 по 26/03/2008. Нажмем ОК и сформируем отчет. Он примет следующий вид (рис. 4.40). 138
Глава 4. Примеры разработки отчетов
Рис. 4.39. Добавление поля «НомерПоПорядку»
в группировку «СистемныйБлок»
Рис. 4.40. Результат отчета
Таким образом, на примере этого отчета мы научились:
•	создавать вычисляемые поля;
•	работать с параметрами отчета;
•	использовать в отчете системные поля.
139
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Теперь разработаем специальную отчетную форму, в которую пользователь будет вводить отчетный период непосредственно перед формированием отчета.
Выделим отчет ОтчетПоСистемнымБлокам в дереве объектов конфигурации и откроем его. На закладке Формы нажмем кнопку Добавить (рис. 4.41).
Рис. 4.41. Создание новой формы отчета
Рис. 4.42.
Конструктор формы отчета
140
Глава 4. Примеры разработки отчетов
В запустившемся конструкторе формы отчета оставим предложенные по умолчанию тип формы и имя формы - ФормаОт-чета. Нажмем кнопку Готово (рис. 4.42).
В открывшейся форме отчета уже находится поле Результат, в которое будет выводиться отчет (рис. 4.43).
Рис. 4.43. Форма отчета, созданная в конструкторе
Растянем форму отчета, сдвинем вниз поле Результат и выполним пункт основного меню Форма - Вставить элемент управления. Выберем тип элемента управления - Таблич-ноеПоле, дадим ему имя ТабличноеПолеПараметры и включим флаг Вставить командную панель. Этот флаг нужен для автоматического добавления командных панелей в форму для настройки полей параметров (рис. 4.44).
Вставка элемента управления	X
Рис. 4.44. Добавление табличного поля в форму
141
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Укажем место расположения табличного поля параметров в форме. Затем двойным щелчком мыши или через контекстное меню вызовем диалог его свойств (рис. 4.45).
Рис. 4.45. Диалог свойств табличного поля
Выделим строку Данные и зададим источник данных табличного поля как ОтчетОбъект.КомпоновщикНастроек.На-стройки.ПараметрыДанных (рис. 4.46).
Рис. 4.46. Выбор источника данных для табличного поля
Рис. 4.47. Форма отчета со вставленными элементами управления 142
Глава 4. Примеры разработки отчетов
Таким образом, мы связали элементы управления, расположенные в форме, с настройками системы компоновки данных нашего отчета - ПараметрыДанных. Форма отчета примет вид (рис. 4.47).
Запустим отчет на исполнение в режиме 1С:Г1редприятие. Зададим период отчета с 10/03/2008 по 30/04/2008. Нажмем кнопку Сформировать. Отчет примет следующий вид (рис. 4.48):
Рис. 4.48. Формирование отчета из режима «1 ^Предприятие»
Итак, мы разработали для отчета более удобный и дружественный пользовательский интерфейс, позволяющий вводить параметры отчета непосредственно в отчетной форме. Позднее мы рассмотрим примеры, задающие в форме другие настройки отчета - сортировку, отбор и т. д. Также мы научимся программно задавать значения настроек и передавать их в отчет. Но сначала познакомимся с работой системы компоновки данных с помощью встроенного языка.
143
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Пример 3. Отчет «Список номенклатуры». Программный запуск отчета
В этом примере мы разработаем отчет, отражающий список номенклатуры с остатками на складах, и реализуем его программный запуск из справочника номенклатуры (рис. 4.49).
Рис. 4.49. Требуемый вид отчета
Создадим новый объект конфигурации Отчет и назовем его СписокНоменклатуры. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем объектную ссылочную таблицу Номенклатура и виртуальную таблицу регистра накопления ОстаткиНоменклатуры.Остатки. Чтобы исключить неоднозначность имен в запросе, переименуем таблицу Номенклатура в спрНоменклатура. Для этого выделим ее в списке Таблицы и вызовем ее контекстное меню (рис. 4.50).
144
Глава 4. Примеры разработки отчетов
блицы	
Й-llg ОстеткиНом^	Добавить Удалить
	Переименовать таблицу.
	Заменить таблицу...
Рис. 4.50. Переименование таблицы в запросе
В список полей перенесем поля из этих таблиц (рис. 4.51):
•	Ссылка,
•	Родитель,
•	ВидНоменклатуры,
•	Склад,
•	КоличествоОстаток.
Толя
...— спрНоменклэтура. Ссылка
—— спрНоменклэтура. Родитель
...— спрНоменклэтура. ВидНоменклатуры
L ОстэткиНоменклетурыОстэтки.Склад
| 0 статкиН оменклэтурыО стэтки. КоличествоО стэток
Рис. 4.51. Выбор полей для запроса
Перейдем на закладку Связи. Так как в запросе теперь участвуют несколько таблиц, требуется определить связь между ними. По умолчанию платформой уже будет создана связь по полю Номенклатура. Но нам нужно снять флаг Все у таблицы ОстаткиНоменклатуры.Остатки и установить его у таблицы спрНоменклэтура. Тем самым мы задаем тип связи как Левое соединение, то есть в результат запроса будут включены записи обеих таблиц, удовлетворяющих условию связи по полю Номенклатура. Кроме того, у таблицы спрНомен-клатура, которая будет слева в тексте запроса, будут отражаться в отчете все записи, независимо от того, найдено ли им соответствие в таблице справа ОстаткиНоменклатуры.Остатки или нет. Это нужно потому, что в регистре ОстаткиНоменклатуры отражаются записи только по материалам, а отчет выводится по всем видам номенклатуры (рис. 4.52).
145
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 4.52. Определение связи между таблицами
Перейдем на закладку Условия и на уровне запроса установим отбор, чтобы наименования групп не попадали в отчет. Для этого раскроем таблицу спрНоменклатура, перетащим мышью поле ЭтоГруппа в список условий, установим флаг Произвольное и внесем в поле Условие следующий текст (листинг 4.3).
Листинг 4.3. Условие запроса
спрНоменклатура.ЭтоГруппа = Ложь
Закладка Условия примет следующий вид (рис. 4.53):
Рис. 4.53. Создание условия запроса
СОВЕТ
Отбор можно применять и в самом запросе, и в настройках отчета. То же касается и сортировки и группировки. Отбор лучше применять в запросе, если записи, не удовлетворяющие условию запроса, наверняка не понадобятся в отчете. Сортировку и группировку лучше применять уже в настройках отчета, чтобы сделать его более гибким.
146
Глава 4. Примеры разработки отчетов
На закладке Объединения/Псевдонимы изменим имена у полей запроса на более понятные (рис. 4.54).
Рис. 4.54. Установка псевдонимов полей запроса
СОВЕТ
Имена полей лучше изменять в запросе, так как в этом случае в схему компоновки данных они перенесутся сразу в три колонки: Поле, Путь И ЗаГОЛОВОК, и не надо будет лишний раз их изменять.
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Текст запроса, сформированный платформой, примет вид (листинг 4.4):
Листинг 4.4. Текст запроса
ВЫБРАТЬ
спрНоменклатура.Ссылка КАК Номенклатура,
спрНоменклатура.Родитель КАК Группа, спрНоменклатура.ВидНоменклатуры КАК Вид, ОстаткиНоменклатурыОстатки, Склад,
ОстаткиНоменклатурыОстатки.КоличесгвоОстаток КАК Остаток ИЗ
Справочник.Номенклатура КАК спрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
I ПО ОстаткиНоменклатурыОстатки.Номенклатура = спрНоменклатура.Ссылка ГДЕ
спрНоменклатура.ЭтоГруппа » Ложь
147
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для решения нашей задачи - вывода списка номенклатуры с остатками - мы выбрали вариант соединения двух таблиц в запросе, чтобы продемонстрировать эту возможность системы компоновки данных. Но эту же задачу можно решить с использованием двух связанных наборов данных - данных из справочника Номенклатуры и регистра накопления ОстаткиНоменклатуры.Остатки. Второй вариант предпочтительнее, и в дальнейшем мы будем использовать именно его.
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Группа. Выделим группировку Группа и добавим подчиненную ей группировку, не указывая группировочное поле, - Детальные записи. Затем на закладке Выбранные поля перенесем из списка доступных полей следующие поля (рис. 4.55):
•	Номенклатура,
•	Вид,
•	Склад,
•	Остаток.
Рис. 4.55. Определение полей и группировок отчета
148
Глава 4. Примеры разработки отчетов
На закладке Другие настройки установим Макет оформления (стр. 408) - Яркий. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 4.56):
Рис. 4.56. Результат отчета
Теперь реализуем вызов нашего отчета из формы справочника Номенклатура. Раскроем справочник Номенклатура в дереве объектов конфигурации. Выделим ветвь Формы и нажмем кнопку Добавить (рис. 4.57).
Конфигурация ж	¥ X
[ж конфигурация
Е Ж * Общие
ф-Т константы
Справочники Номенклатура 0S Реквизиты
5:5_ Табличные
! Макеты S ’Bi Контрагенты Eft Склад E-ft Сотрудники
Рис. 4.57. Создание новой формы у справочника
149
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В запустившемся конструкторе формы справочника оставим предложенные по умолчанию тип формы и имя формы - Фор-маСписка. Нажмем кнопку Готово (рис. 4.58).
Рис. 4.58.
Конструктор формы справочника
Будет создана форма списка справочника, в которую мы добавим кнопку Печать. Выполним пункт основного меню Форма - Вставить элемент управления. Выберем тип элемента управления - Кнопка и дадим ему имя Печать (рис. 4.59).
Рис. 4.59.
Добавление кнопки в форму
150
Глава 4. Примеры разработки отчетов
Укажем место расположения кнопки в форме. Форма примет следующий вид (рис. 4.60).
Рис. 4.60. Диалог формы
В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки Печать, в который мы внесем следующий текст (листинг 4.5):
Листинг 4.5. Процедура обработчика события нажатия кнопки «Печать»
Процедура ПечатьНажатие(Элемент)
Ц В качестве схемы компоновки данных используем
// макет отчета "Список Номенклатуры”.
СхемаКомпоновкиДанных  Отчеты.СписокНоменклатуры.ПолучитьМакет ("ОсновнаяСхемаКомпоновкиДанных");
// Получим настройки по умолчанию.
Настройки  ОоемаКомпоновкиДанных.НастройкиПоУмолчанию;
// Сформируем макет компоновки данных.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки - КомпоновщикМакета .Выполнить(СхемаКомпоновкиДанных. Настройки);
// Выполним компоновку данных.
ПроцессорКомпоновкиДанных» Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
// Выведем результат компоновки в табличный документ.
ДокументРезультат= Новый ТабличныйДокумент;
ПроцессорВывода - Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
151
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
!	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ДокументРезультат.ОтображатьСетку = Ложь;
ДокументРезультат.ОтображатьЗаголовки - Ложь;
ДокументРезультат.Показать();
КонецПроцедуры
Из комментариев в тексте обработчика видно, что здесь программно реализуются все этапы схемы обработки данных, которые были описаны во второй главе.
Запустим 1С:Предприятие. Откроем справочник Номенклатура и нажмем кнопку Печать. На экране появится наш отчет (рис. 4.61).
Рис. 4.61. Вывод отчета из справочника «Номенклатура»
Таким образом, на этом примере мы научились:
•	Объединять в запросе несколько таблиц и устанавливать связь между ними.
152
Глава 4. Примеры разработки отчетов
•	Создавать условия отбора, псевдонимы полей на уровне запроса.
•	Запускать и программно формировать отчет из формы справочника.
Пример 4. Программная установка значений параметров.
Автоматическое формирование отчета «Отчет по системным блокам»
Теперь на основе полученных знаний усовершенствуем отчет ОтчетПоСистемнымБлокам так, чтобы при его открытии задавались значения параметров по умолчанию и передавались в отчет. Также было бы удобно, чтобы отчет формировался автоматически, без нажатия кнопки Сформировать. Более подробно вопросы усовершенствования отчета, с точки зрения пользовательского интерфейса, рассмотрены на стр. 497.
Для этого раскроем ветвь Формы отчета ОтчетПоСистемнымБлокам в дереве объектов конфигурации. Выделим форму ФормаОтчета и откроем ее (рис. 4.62).
Конфигурация	¥• X
Действия* 'g < ’g t I g Ж
[г'З Конфигурация
Е*- Общие
Е-Т Константы
Ej Справочники
Е-Документы
Журналы документов
Е {.Л Перечисления
Bd£ Отчеты
Е ' ОстаткиНоменклатуры
ВД^ ОтчетПоСистемнымБлокам i-g Реквизиты р	Т абличные части
Формы
Макеты
СписокНоменклатуры
Рис. 4.62. Открытие отчетной формы
153
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткры-тии() и нажмем значок лупы справа от него (рис. 4.63).
Рис. 4.63. Установка обработчика события при открытии формы
В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы. Внесем в него следующий текст (листинг 4.6):
Листинг 4.6. Процедуры модуля формы ПриОткрытии()
Процедура ПриОткрытии()
СхемаКомпоновкиДанных = Отчеты.ОтчетПоСистемнымБлокам
.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанныхи);
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
УстановитьНастройки();
СформироватьОтчет();
КонецПроцедуры
Процедуры, вызывающиеся из нее, УстановитьНастройки() и СформироватьОтчет(), расположим в начале модуля (листинг 4.7).
154
Глава 4. Примеры разработки отчетов
Листинг 4.7. Процедуры модуля формы отчета
перем Настройки;
Процедура СформироватьОтчет() Экспорт
КомпоновщикМакета - Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета
’ .Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; Процессор КомпоновкиДанных.Ияициализировать(МакетКомпоновки);
ЭлементыФормы.Результат.0чистить();
ДокументРезультат « ЭлементыФормы.Результат;
ПроцессорВывода = Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Процедура УстановитьНастройки()
ПараметрДанныхНачалоПериода • КомпоновщикНастроек
.Настройки.ПараметрыДанных.Элементы[0];
ПараметрДанныхНачалоПериода.Значение =« НачалоГода(РабочаяДата); ПараметрДанныхНачалоПериода.Использование - Истина;
ПараметрДанныхКонецПериода « КомпоновщикНастроек
.Настройки.ПараметрыДанных.Элементы[1];
ПараметрДанныхКонецПериода.Значение - КонецМесяца(РабочаяДата); ПараметрДанныхКонецПериода.Использование = Истина;
Настройки - КомпоновщикНастроек. Настройки;
КонецПроцедуры	...л
Таким образом, в модуле формы мы создали процедуру ПриОт-крытии(), которая вызывается при открытии формы отчета. В ней определяется схема компоновки данных и настройки по умолчанию нашего отчета. Затем вызывается процедура УстановитьНастройки(), в которой мы устанавливаем значения параметров начала и конца отчетного периода и задаем для них признак использования. Эти настройки передаются в отчет.
155
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Дальше вызывается процедура СформироватьОтчет(), где компонуется и выводится сам отчет. Этот код уже знаком нам по предыдущему примеру. Отличие в том, что отчет выводится в элемент формы Результат, а не в табличный документ.
Запустим систему в режиме 1С:Предприятие и откроем наш отчет (рис. 4.64).
Как мы видим, отчет формируется сразу же при его открытии, и параметрам - начало и конец периода - по умолчанию присвоены значения - начало года и конец месяца. Дальше пользователь может произвольно их менять и переформировывать отчет, пользуясь кнопкой Сформировать.
Рис. 4.64. Открытие отчетной формы
Пример 5. Отчет
«Продажи номенклатуры»
Рассмотрим пример отчета, который будет отражать информацию по продажам номенклатуры за указанный период (рис. 4.65).
156
Глава 4. Примеры разработки отчетов
Продажи товаров и услуг
Контрагент, Регион Номенклатура			Количества	СТОИМбСГЬ
Пели.		
JOO “Автоматика", Королев		11 500,00
Диагностика компьютера	2	1 500,00
18 марта 2008 г.	1	1 000,00
26 марта 2008 г.	1	500,00
Компьютер для дома	1	10 000,00
26 марта 2008 г.	Г	10 000,00
ООО "Стиль”. Москва		10 000,00
Монитор LCD	1	10 000,00
19 марта 2008 г.	1	10 000,00
Итог..	*		
Рис. 4.65. Требуемый вид отчета
Для этого нам потребуется извлечь данные из оборотного регистра Продажи. Создадим новый объект конфигурации Отчет и назовем его ПродажиНоменклатуры. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Прода-жи.Обороты. Вызовем диалог параметров виртуальной таблицы. Для этого в списке Таблицы нужно нажать кнопку Параметры виртуальной таблицы (рис. 4.66).
ттел... Объединени... Порядок Компоновг
Рис. 4.66. Вызов диалога параметров виртуальной таблицы
В открывшемся окне параметров зададим значение параметра Периодичность - День (рис. 4.67).
Рис. 4.67. Установка параметра «Периодичность»
157
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В список полей перенесем поля из таблицы Продажи.Обороты (рис. 4.68):
•	Период,
•	Номенклатура,
•	Контрагент,
•	КоличествоОборот,
•	СтоимостьОборот.
I сля
IП род зжиО бороты. П ериод
...t- ПродажиОбороты-Номенклэтура
...L ПродажиОбороты.Контрагент
...| ПродажиОбороты.К.оличествоОборот
...| ПродажиОбороты-СтоимостьОборот
Рис. 4.68. Выбор полей для запроса
На закладке Объединения/Псевдонимы изменим имя у поля КоличествоОборот на Остаток и СтоимостьОборот на Стоимость (рис. 4.69).
Рис. 4.69. Установка псевдонимов полей запроса
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Обратите внимание, что в тексте запроса указана периодичность выбираемых данных - День (листинг 4.8).
Листинг 4.8. Задание периодичности виртуальной таблицы
РегистрНакопления.Продажи.Обороты(,, День,) КАК ПродажиОбороты
158
Глава 4. Примеры разработки отчетов
Благодаря этому мы можем указать в полях запроса поле Период.
Перейдем на закладку Ресурсы и определим доступные поля ресурсов отчета (стр. 385), рис. 4.70.
Рис. 4.70. Определение ресурсов отчета
На закладке Параметры (стр. 390) будем действовать так же, как и во втором примере (рис. 4.32—4.34). Для параметров НачалоПериода и КонецПериода в колонке Доступные типы нажмем кнопку выбора 0 и в нижней части окна редактирования типа данных установим Состав даты в значение Дата. Для параметра КонецПериода зададим значение колонки Выражение (листинг 4.9).
Листинг 4.9. Выражение для расчета параметра «КонецПериода»
В результате параметры компоновки данных примут вид (рис. 4.71):
Рис. 4.71. Параметры компоновки данных
159
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Контрагент. Затем добавим вложенную в нее группировку Номенклатура. Выделим группировку Номенклатура и добавим вложенную в нее группировку Период. Затем на закладке Выбранные поля перенесем из списка доступных полей поля Количество и Стоимость (рис. 4.72).
Рис. 4.72. Определение полей и группировок отчета
Теперь усовершенствуем немного внешний вид отчета. На закладке Другие настройки дадим заголовок отчету Продажи товаров и услуг. На закладке Ресурсы для ресурса Количество в колонке Рассчитывать по нажмем кнопку выбора В и укажем поле Номенклатура (рис. 4.73).
Рис. 4.73. Выбор поля группировки для расчета итогов
160
Глава 4. Примеры разработки отчетов
Это сделано для того, чтобы итоги по количеству выводились для конкретной номенклатуры, так как не имеет смысла складывать количество услуг с количеством комплектующих. На Закладке Наборы данных в списке доступных полей в колонке Оформление зададим Формат поля Количество (рис. 4.74).
Рис. 4.74. Формат поля «Количество»
Для этого можно воспользоваться конструктором (рис. 4.75).
Рис. 4.75. Выбор формата для поля «Количество»
161
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Аналогично зададим Формат поля Период (рис. 4.76).
Рис. 4.76. Формат поля «Период»
Для этого можно воспользоваться конструктором (рис. 4.77).
Рис. 4.77. Выбор формата для поля «Период»
Запустим отчет на исполнение в режиме 1С:Предприятие. Перед тем как нажать кнопку Сформировать, откроем окно Настройки и на закладке Параметры данных зададим период отчета с 10/03/2008 по 30/03/2008. Нажмем ОК и сформируем отчет. Он примет следующий вид (рис. 4.78).
162
Глава 4. Примеры разработки отчетов
Рис. 4.78. Результат отчета
Мы убедились, что формат представления даты и количества соответствует желаемому, а итоги по количеству подсчитываются отдельно для каждого вида номенклатуры. Однако, с точки зрения пользовательского интерфейса, лучше разработать специальную отчетную форму, в которую бы пользователь вводил нужные ему настройки перед формированием отчета. В этом примере, кроме окна для ввода параметров, мы разместим в отчетной форме такие элементы настроек, как Отбор и Пользовательское оформление. Для этого вернемся в конфигуратор и сначала создадим их в настройках схемы компоновки данных отчета. Откроем закладку Настройки.
На закладке Отбор установим отбор записей отчета по определенному виду номенклатуры. Для этого в списке доступных полей раскроем поле Номенклатура и выберем поле ВидНо-менклатуры. Остальные параметры отбора оставим по умолчанию - Вид сравнения - Равно, а Правое значение -
163
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Перечисление.ВидыНоменклатуры. Снимем у отбора отметку использования. Условие отбора примет вид (рис. 4.79):
Параметры данных Выбранные поля | Отбор | Сортировка Чсловьюе оформление Пользовательские поля Друие настройки
Рис. 4.79. Настройка отбора записей отчета
На закладке Условное оформление выделим цветом записи отчета со стоимостью продаж меньше 3 000 руб. Подробно про-цесс создания условного оформления описан в первом примере (рис. 4.17-4.21). Перечислим кратко наши действия. Нажмем кнопку Добавить справа на командной панели окна. Выберем Область — Стоимость, то есть укажем, какие поля требуется выделить. Зададим Отбор - условия для выделения полей (рис. 4.80).
Рис. 4.80. Настройка условного оформления отчета
Затем выберем Оформление для выделения полей. В нашем случае - это красный цвет текста. Обозначим его Представление как Мелкий заказ. В результате окно условного оформления должно принять вид (рис. 4.81):
Рис. 4.81. Настройка условного оформления отчета 164
Глава 4. Примеры разработки отчетов
Теперь создадим новую отчетную форму нашего отчета и зададим в ней связь с настройками отчета. Выполним действия, показанные во втором примере (рис. 4.41-4.47).
На закладке Формы нажмем кнопку Добавить, в открывшемся конструкторе форм создадим форму типа Форма отчета с именем ФормаОтчета. Обратите внимание, что эта форма по умолчанию становится основной формой отчета, которая будет вызываться при его открытии. Если форм несколько, можно установить в качестве основной другую форму, нажав кнопку выбора В. Если, наоборот, удалить выбранную строку, то при открытии отчета будет вызываться автоматически сгенерированная платформой отчетная форма (рис. 4.82).
Рис. 4.82. Установка основной формы отчета
Откроем форму отчета, растянем ее, сдвинем вниз поле Результат и выполним пункт основного меню Форма - Вставить элемент управления. Последовательно добавим в форму три элемента управления ТабличноеПоле с именами 165
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
ТабличноеПолеПараметры, ТабличноеПолеОтбор, Таблич-ноеПолеОформление. Расположим эти элементы управления в форме. Затем вызовем диалог свойств каждого поля и зададим для них источник данных в строке Данные. Выберем соответственно ОтчетОбъект.КомпоновщикНастроек.Настройки.Пара-метрыДанных для поля параметров, ОтчетОбъект.Компонов-щикНастроек.Настройки.Отбор для поля отбора и ОтчетОбъ-ект.КомпоновщикНастроек.Настройки.УсловноеОформление для поля оформления (рис. 4.83).
Рис. 4.83. Выбор источника данных для табличного поля «Отбор»
Таким образом, мы связали элементы управления, расположенные в форме, с настройками системы компоновки данных нашего отчета - Параметры данных, Условное оформление И Отбор. Форма отчета примет вид (рис. 4.84).
Рис. 4.84. Форма отчета со вставленными элементами управления 166
Глава 4. Примеры разработки отчетов
Заметим, что для элементов управления, связанных с настройками Выбранные поля, нужно выбрать источник данных ОтчетОбъект.КомпоновщикНастроек.Настройки.Выбор, а для настроек Сортировка - ОтчетОбъект.КомпоновщикНастро-ек.Настройки.Порядок. Запустим отчет на исполнение в режиме 1С:Предприятие. Так как полей настроек несколько, хорошо бы в форме расположить подсказки для пользователя, где что вводить. В верхнем левом окне зададим период отчета с 10/03/2008 по 30/03/2008. В верхнем правом окне находятся настройки условного оформления, которые пользователь может включить или выключить. Оставим их включенными.
Над окном вывода отчета расположено окно, где пользователь может указать критерий отбора записей в отчет, в нашем случае выбрать вид номенклатуры, или выключить использование отбора. Выберем вид номенклатуры - Комплекты. После этого нажмем кнопку Сформировать. Отчет примет следующий вид (рис. 4.85).
Рис. 4.85. Формирование отчета из режима «1С:Предприятие»
167
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В результате мы видим, что отчет сформирован с учетом только что введенных нами настроек. Правда, из-за отбора не видно записей с условным оформлением. Отключим отбор и увидим следующий результат (рис. 4.86).
Рис. 4.86. Результат отчета
Итак, мы научились размещать основные элементы настроек в отчетной форме и передавать их в отчет.
СОВЕТ
Для повышения удобства работы с отчетом рекомендуем также устанавливать значения настроек по умолчанию и автоматически формировать отчет при открытии формы, как это показано в четвертом примере. Более подробно вопросы усовершенствования отчета, с точки зрения пользовательского интерфейса, рассмотрены на стр. 497.
168
Глава 4. Примеры разработки отчетов
Теперь на примере отчета Продажи номенклатуры продемонстрируем работу с характеристиками объектов с помощью системы компоновки данных (стр. 305). Для извлечения этих характеристик из базы данных в языке запросов разработано специальное расширение, применяющееся только в системе компоновки данных. В нашей конфигурации реализована возможность добавления дополнительных свойств к элементам справочника Контрагенты, таких как Надежный партнер? (да/ нет) и Регион. Отразим их в нашем отчете.
Откроем конструктор схемы компоновки данных отчета Про-дажиНоменклатуры. Вызовем конструктор запроса и перейдем на закладку Характеристики. Нажмем кнопку Добавить и приступим к описанию полей характеристик. В поле Тип значения введем СправочникСсылка.Контрагенты - это тип данных, для которого описываются характеристики. Затем опишем источник списка характеристик. В нашем случае им является план видов характеристик СвойстваОбъектов. Поэтому в поле Источник выберем - Таблица, а в поле Список характеристик укажем ПланВидовХарактеристик.Свойст-ваОбъектов. Далее следует описать назначение полей источника, «поставляющего» список характеристик. В поле Идентификатор выберем Ссылка, в поле Имя - Наименование, а в поле Тип - Тип значения (рис. 4.87).
Рис. 4.87. Описание источника списка характеристик
169
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Теперь опишем источник значений характеристик. В нашем случае им является регистр сведений ЗначенияСвойствОбъ-ектов, поэтому в поле Источник укажем - Таблица, а в поле Значение характеристик - РегистрСведений.ЗначенияСвой-ствОбъектов. Далее опишем назначение полей регистра. В поле Объект выберем измерение регистра Контрагент, в поле Идентификатор - измерение регистра Свойство, а в поле Значение - ресурс регистра Значение (рис. 4.88).
Рис. 4.88. Описание источника значений характеристик
Нажмем ОК. В результате текст запроса, сформированный платформой, примет вид (листинг 4.10):
Листинг 4.10. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.Контрагент,
ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость
РегистрНакопления.Продажи.Обороты(,, День,) КАК ПродажиОбороты
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
СПИСОК ПланВидовХарактеристик.СвойстваОбъектов
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений-ЗначенияСвойствОбъектов
ОБЪЕКТ Контрагент
ХАРАКТЕРИСТИКА Свойство
ЗНАЧЕНИЕ Значение}
7
I

170
Глава 4. Примеры разработки отчетов
После ключевого слова ХАРАКТЕРИСТИКИ здесь следует секция. В ней для системы компоновки данных и описываются те характеристики, которые будут использованы в нашем отчете. Однако применить их мы сможем только после запуска отчета из режима ЮПредприятие. Это связано с тем, что сначала должен быть выполнен запрос, извлекающий характеристики из базы данных.
Откроем отчет в режиме ЮПредприятие. Зададим период отчета с 10/03/2008 по 30/03/2008, остальные элементы настроек оставим по умолчанию. Для использования в отчете дополнительных свойств контрагентов вызовем диалог настроек. Нажмем кнопку Настройки в командной панели отчета. В открывшемся окне настроек перейдем в режим настройки группировки Контрагент. На закладке Выбранные поля раскроем поле Контрагент в списке доступных полей. Здесь мы увидим две наши дополнительные характеристики - Регион и Надежный партнер. Перенесем в список полей поле Регион (рис. 4.89).
Рис. 4.89. Диалог настроек
171
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Нажмем ОК и сформируем отчет (рис. 4.90).
Рис. 4.90. Результат отчета
Мы видим, что характеристика контрагента Регион теперь отражается рядом с его наименованием. Поскольку дополнительные характеристики аналогичны другим реквизитам поля Контрагент, то управлять их выводом можно на закладке Другие настройки (стр. 437), рис. 4.91.
172
Глава 4. Примеры разработки отчетов
Поля группировки Выбранные поля Отбор Сортировка Ус			ловное оформление | Другие настройки |			
		Параметр		в	
		Расположение итогов	Авто		&
	□	Расположение полей группировок	Вместе		
		Расположение группировок	Начало		&
	□	(Расположение реквизитов	Вместе с владельцем		
	□	Расположение ресурсов	Вместе		
	□	Расположение общих итогов по вертикали	Отдельно				
	□	Т ип заголовка полей	Вместе с владельцем		
	□	Тип диаграммы	|В специальной позиции	к	
Рис. 4.91. Диалог настроек
Теперь используем в отборе характеристику Надежный партнер. Перейдем в режим настроек глобального отчета. На закладке Отбор создадим новый элемент отбора по полю Надежный партнер со значением Да (рис. 4.92).
Рис. 4.92. Диалог настроек
Нажмем ОК и сформируем отчет (рис. 4.93).
Мы видим, что из отчета исчезли данные по контрагенту ООО «Система», так как в его дополнительных свойствах указано значение характеристики Надежный партнер - Нет (рис. 4.94).
173
Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных
Рис. 4.93. Результат отчета
Рис. 4.94. Диалог настроек
Однако настройки, сделанные в режиме 1С:Предприятие, не сохраняются в настройках по умолчанию схемы компоновки данных. Поэтому, чтобы в дальнейшем использовать характеристики контрагентов в нашем отчете, нужно сохранить их,
174
Глава 4. Примеры разработки отчетов
нажав соответствующую кнопку на командной панели отчета (рис. 4.93). В появившемся диалоге сохранения настроек нажмем ОК, и в дальнейшем отчет будет формироваться с учетом характеристик контрагентов (рис. 4.95).
Сохранение настройки	X
Наименование настройки:
Рис. 4.95. Диалог сохранения настроек
Обратите внимание, что отбор, добавленный нами в окне настроек, появился в отчетной форме. Его можно было бы добавить и в самой форме, выделив поле отбора и нажав клавишу Ins, или воспользоваться командной панелью элемента управления отбора. Однако в целях экономии места мы не поместили ее в форме. Также можно было бы поместить в форме отчета и список выбранных полей, тогда в нем отобразилось бы поле Регион для группировки Контрагент. Но мы исходили из того принципа, что в отчетной форме должны располагаться только доступные и простые в использовании элементы настроек.
Таким образом, на примере этого отчета мы научились:
•	Задавать периодичность для виртуальной таблицы в запросе.
•	Устанавливать поля группировок для расчета ресурсов отчета.
•	Определять формат для представления полей в отчете.
•	Отображать в форме настройки для отбора и условного оформления записей отчета.
•	Получать в запросе характеристики объектов и использовать их в настройках отчета.
175
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Пример 6. Отчет по продажам
Создадим отчет, который будет отражать объем продаж по контрагентам с детализацией данных за указанный период (рис. 4.96).
Параметры данных: Период = 01.01.2008 - 30.06.2008
Контрагент Период месяц Период день	Стоимость	1 Сто им ость. % 01) щи и
(000000001) ООО "Автоматика” 			_11 500,00	25,56
Март.2008		11 500,00	25,56
18.03.2008	1 000,00	2,22
26.03.2008	10 500,00	23,33
(000000004) 000 ’Система"	10 000,00	22,22
Март.2008	10 000,00	22,22
24.03.2008	10 000,00	22,22
(000000005) ООО "Атлант1*	9 000,00	20,00
Апрель.2008	9 000,00	20,00
22.04.2008	9 000,00	20,00
(000000006) 000’Стандарт"	4500,00	10,00
Апрель.2008	4500,00	10,00
22.04.2008	4 500,00	10,00
(000000007) ООО 'Стиль”	10 000,00	22,22
Март.2008		10 000,00	22,22!
19.03.2008			 10 000,00		22,22
| Итого	45 000,00	100,00 |
Рис. 4.96. Требуемый вид отчета
Для этого нам потребуется извлечь данные из оборотного регистра Продажи. Создадим новый объект конфигурации Отчет и назовем его ОтчетПоПродажам. Откроем конструкторсхемыкомпоновкиданныхидобавимновыйнабордан-ных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Продажи.Обороты. Вызовем диалог параметров виртуальной таблицы. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы.
В открывшемся окне параметров зададим значение параметра Периодичность - Авто (рис. 4.97).
176
Глава 4. Примеры разработки отчетов
Рис. 4.97. Установка параметра «Периодичность»
В список полей перенесем поля из таблицы Продажи.Обороты (рис. 4.98):
•	ПериодДень,
•	ПериодМесяц,
•	Контрагент,
•	СтоимостьОборот.
ЩЯ
! П рода кии бороты П ериодДень
•••••- ПродажиОборотыЛериодМесяц
—L. ПродажиОбороты.Контрагент
••••• | П родажиО бороты. СтоимостьО борот
Рис. 4.98. Выбор полей для запроса
На закладке Объединения/Псевдонимы изменим имя у поля СтоимостьОборот на Стоимость. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Мы видим, что на основании запроса платформа заполнила доступные поля набора данных и для полей, являющихся измерениями регистра, задала вид роли Измерение, а для полей, связанных с детализацией по периодам, - вид роли Период. Напомним, что это обусловлено тем, что свойство Автозаполнение (стр. 363) включено, рис. 4.99.
177
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.99. Автозаполнение доступных полей набора данных и их свойств Рассмотрим свойства Роли (стр. 382) у поля ПериодМесяц (рис. 4.100).
Рис. 4.100. Окно свойств роли поля-периода
178
Глава 4. Примеры разработки отчетов
Здесь установлено, что поле является периодом. Его порядковый номер - 2, так как самое «младшее» поле, в нашем случае ПериодДень, имеет порядковый номер 1, его родительский период - 2 и т. д. Тип периода может быть основным и дополнительным. Установка типа периода в значение Дополнительный говорит о том, что поле не должно обязательно использоваться в компоновке, если в отчете использованы его дочерние периоды. Иначе при использовании в отчете дочернего поля в группировке должен присутствовать и его родительский период. В колонке Оформление зададим Формат поля ПериодДень, чтобы дата отображалась без времени (рис. 4.101).
Рис. 4.101. Формат поля «ПериодДень»
Для этого можно воспользоваться конструктором, а можно это сделать вручную, отредактировав строку Формат. Так, для поля ПериодМесяц введем выражение (листинг 4.11):
Листинг 4.11. Формат поля «ПериодМесяц»
,Ф = ММММ.уууу
Система компоновки данных позволяет определять выражения для представления полей в отчете (стр. 373). Например, мы хотим отображать код контрагента в скобках слева от его наименования.
179
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для поля Контрагент в колонку Выражение представления введем следующий текст (листинг 4.12):
Листинг 4.12. Выражение для представления в отчете поля «Контрагент»
“(’+ Контрагент.Код +")"+ Контрагент.Наименование
В результате выражение представления для поля Контрагент примет следующий вид (рис. 4.102):
Поле	Путь	□ граничение поля				Роль	
	Заголовок	Ограничение рек... По...1Уе...!Гр... }Уп...					Выражения упорядочивания
Период День	Период День Период день	□ □ □ □ й й й й				Период, 1, Доп	
ПериодМесяц	ПериодМесяц Период месяц	□ □ □ □ йене				Период, 2, Доп	
Контрагент	Контрагент	q	q	□	q	Измерение	'^Контрагент. Код+'')
	Контрагент	□	□	□	□		' '+Контрагент. Н аименование
Номенклатура	Номенклатура Номеамотчра	й □ й й 1^1 П Г71 W					
Рис. 4.102. Выражение представления для поля «Контрагент»
В выражении для представления можно также использовать функции из общих модулей. Для использования функции в схеме компоновки данных необходимо, чтобы в ее описании присутствовало ключевое слово Экспорт и в свойствах модуля был включен флаг Глобальный.
Перейдем на закладку Ресурсы и определим доступные поля ресурсов отчета (стр. 385), рис. 4.103.
Рис. 4.103. Определение ресурсов отчета
180
Глава 4. Примеры разработки отчетов
Продемонстрируем использование стандартного периода для указания периода отчета (стр. 390). На закладке Параметры добавим параметр с именем Период типа СтандартныйПери-од, а для параметров НачалоПериода и КонецПериода укажем Выражение для расчета и запретим их редактирование пользователем (листинг 4.13).
Листинг 4.13. Выражение для расчета параметров «НачалоПериода» и «КонецПериода»
&Период.ДатаНачала
&Период.ДатаОкончания
Заметим, что даты начала и конца стандартного периода также содержат и время. Однако здесь, в отличие от параметров НачалоПериода и КонецПериода, начальная дата имеет время 00:00:00, а конечная дата - 23:59:59. Таким образом, последний день включается в отчет, и не нужно использовать функцию КонецПериода(). В результате параметры компоновки данных примут вид (рис. 4.104):
Рис. 4.104. Определение параметров отчета
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Контрагент. Затем добавим вложенную в нее группировку ПериодМесяц. Выделим группировку ПериодМесяц и добавим вложенную в нее группировку ПериодДень.
181
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Выбранные поля перенесем из списка доступных полей поля Стоимость и Стой мосты ПроцентОбщий (рис. 4.105):
Рис. 4.105. Определение полей и группировок отчета
На закладке Параметры данных установим значение параметра Период - Прошлый месяц (рис. 4.106).
Параметры данных fВыбранные поля , Droop , Сортировка Условное оформление , Пользовательские поля Другие настройки
Рис. 4.106. Настройка периода отчета
Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. Пользоваться стандартным периодом отчета удобно, когда пользователь регулярно выполняет отчет за определенный интервал времени, например текущий месяц.
182
Глава 4. Примеры разработки отчетов
Тогда можно заранее установить в настройках нужный период, и пользователю не придется задавать его перед формированием отчета. В нашем случае нам нужны данные за прошлый месяц.
ПРИМЕЧАНИЕ
Использованный в книге стандартный период в момент выполнения примера может измениться и не содержать данных для отчета. В этом случае его нужно откорректировать.
На закладке Другие настройки установим макет оформления (стр. 408) отчета Море. Выполним отчет (рис. 4.107).
Рис. 4.107. Результат отчета
Мы видим, что представление поля Контрагент и формат полей периодов соответствуют заданному. Однако в отчете выводятся только те дни, которые имеют ненулевые записи в регистре накопления Продажи. Для детализации данных в отчете система компоновки данных позволяет указывать для группировок дополнение периодов с заданной периодичностью в указанном интервале (стр. 293). Для большей наглядности динамики объема продаж контрагентам воспользуемся диаграммой типа График. А прежние настройки отключим.
183
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Настройки выделим корневой элемент Отчет и добавим диаграмму (стр. 467). Затем выделим ветку Серии и добавим в нее группировку по полю Контрагент, а в ветку Точки - группировку ПериодДень (рис. 4.108).
[Контрагент
Втф* Отчет !___________________
i Й-0*йи ПериодМесяц
| L-p|gB ПериодДень
Й- 0 U Диаграмма
ф- Точки
1 !--[7]взз ПериодДень
□••Серии
“••0«за Контрагент
Рис. 4.108. Настройка структуры отчета
Перейдем в режим настроек диаграммы. На закладке Выбранные поля развернем Автополе (стр. 369) и убедимся, что оно содержит поле Стоимость (рис. 4.109).
Рис. 4.109. Выбор полей диаграммы
На закладке Другие настройки дадим диаграмме заголовок Динамика объема продаж и установим ее тип - График (рис. 4.110).
184
Глава 4. Примеры разработки отчетов
Выбранные поля Условное оформление | Другие настройки |
Рис. 4.110. Настройка типа и заголовка диаграммы
Выполним отчет (рис. 4.111).
Отчет Отчет по продажам	— П X
Действия’ > Сформировать ^Конструкторнастроек. Настройки *, х ?
Рис. 4.111. Результат отчета
185
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Как видно, дни, за которые отсутствовали движения, в отчет не выводятся. Поэтому сложно визуально оценить динамику изменения продаж в отчетном периоде. Чтобы изменить ситуацию, введем Дополнение для группировки диаграммы ПериодДень. Для этого достаточно выделить ее и двойным щелчком мыши вызвать диалог редактирования ее свойств. Укажем Тип дополнения - Неделя (рис. 4.112).
Рис. 4.112. Установка типа дополнения группировки «ПериодДень»
После этого следует указать, в каком периоде будет выполняться это дополнение. В поля, расположенные строчкой ниже, можно ввести даты начала и окончания этого периода. Но вряд ли стоит задавать эти даты в явном виде, так как пользователь может получить отчет за произвольный период. И нам нужно, чтобы дополнение выполнялось именно в этом, заданном пользователем периоде. Для этого войдем в режим редактирования поля Начальная дата периода, дважды кликнув на нем. Нажмем кнопку очистки S, затем кнопку выбора типа данных 0 и выберем тип данных Поле компоновки данных (рис. 4.113).
Рис. 4.113. Выбор типа данных
186
Глава 4. Примеры разработки отчетов
Теперь нажмем в поле ввода кнопку выбора □ и в открывшемся окне выбора поля укажем параметр НачалоПериода (рис. 4.114).
Рис. 4.114. Выбор поля
Аналогичным образом укажем, что Конечная дата периода дополнения будет получена из параметра КонецПериода (рис. 4.115).
Поля группировки	X
t ♦
Рис. 4.115. Настройка группировки «ПериодДень»
Теперь выполним отчет и увидим диаграмму, отражающую динамику продаж по контрагентам с периодичностью в неделю (рис. 4.116).
Таким образом, на примере этого отчета мы научились:
•	Указывать роль поля в схеме компоновки данных.
•	Определять выражение для представления полей в отчете.
•	Использовать стандартный период для параметров периода отчета.
187
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
• Указывать дополнения периодов для детализации данных в отчете и представлять эти данные в виде диаграммы типа График.
Рис. 4.116. Результат отчета
Пример 7. Сборка системных блоков
На примере этого отчета мы продемонстрируем использование в схеме компоновки данных информации из двух (нескольких) наборов данных, а также передачу параметров в объектную (ссылочную) таблицу запроса. Отчет должен отражать информацию о сборке системных блоков за период с детализацией информации по номеру, дате й мастеру сборки (рис. 4.117).
188
Глава 4. Примеры разработки отчетов
Сборка системных блоков
Системный блок	Количество	Стоимость
Мастер		
Дата	|Номер		
Компьютер для дома		1	9 000,00
Ильин Сергей		9 090.00
26.03.2008	,000000002	1	9 000,00
Компьютер для офиса		Г	8 500,00
Соколов Андрей	1	8 500,00
19.03.2008	000000001	1	8 500,00
Итого	2	17 500,00
Рис. 4.117.
Требуемый вид отчета
Создадим новый объект конфигурации Отчет и назовем его СборкаСистемныхБлоков. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Он будет назван по умолчанию НаборДанных1. В качестве источника данных для запроса выберем объектную таблицу регистра накопления СобранныеСБ. В список полей перенесем поля из этой таблицы (рис. 4.118):
• СБ,
• Количество,
• Стоимость,
• Мастер,
• Регистратор.
•g СобранныеСБ.Количество
-g СобранныеСБ.Стоимость
•••••« СобранныеСБ.Мастер
СобранныеСБ. Регистратор
Рис. 4.118. Выбор полей для запроса
Поле Регистратор нам понадобится в качестве ссылки на документ СборкаКомпьютера, который произвел движения в регистре накопления СобранныеСБ, чтобы установить связь со вторым набором данных. Перейдем на закладку Условия,
189
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
раскроем таблицу СобранныеСБ и перетащим мышью поле ВидДвижения в список условий. Оставим предложенное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались данные из регистра с видом движения Приход (рис. 4.119).
Рис. 4.119. Создание условия запроса
На закладке Объединения/Псевдонимы изменим имя у поля СБ на СистемныйБлок. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Таким образом, в этом наборе данных мы получим информацию о собранных системных блоках, их количестве, стоимости, мастере, выполнившем сборку. Но нам нужна еще другая, связанная с ней более детальная информация из документов по сборке системных блоков. Есть несколько путей осуществления этой задачи, но мы будем получать эти данные из связанного набора данных. Добавим еще один набор данных - запрос. Он будет назван НаборДанных2. Чтобы добавление стало доступным, нужно выделить корневой элемент дерева наборов данных (рис. 4.120).
Рис. 4.120. Добавление нескольких наборов данных
190
Глава 4. Примеры разработки отчетов
В качестве источника данных для запроса выберем объектную таблицу документа СборкаКомпьютера. В список полей перенесем поля из этой таблицы (рис. 4.121):
•	Дата,
•	Номер,
•	Ссылка.
Толя
| Сборкагкомпьютера Дата I
— СборкаКомпыотераНомер
1..- СборкаКомпьютера. Ссылка
Рис. 4.121. Выбор полей для запроса
Поле Ссылка нам понадобится в качестве ссылки на регистр накопления СобранныеСБ, чтобы установить связь с первым набором данных. Нажмем ОК и вернемся в конструктор схемы компоновки данных. В текст запроса добавим условие с параметром Ссылка, в который будет помещено значение связи набора данных - источника. В результате набор данных -приемник ДокументСБ будет получать только те документы СборкаКомпьютера, которые произвели движения в регистре накопления СобранныеСБ (листинг 4.14).
Листинг 4.14. Текст запроса для получения набора данных ДокументСБ
ВЫБРАТЬ
СборкаКомпьютера.Дата,
СборкаКомпьютера.Номер,
СборкаКомпьютера.Ссылка
ИЗ
Документ.СборкаКомпьютера КАК СборкаКомпьютера
ГДЕ
СборкаКомпьютера.Ссылка В (&Ссылка)
Если в схеме компоновки данных присутствуют несколько наборов данных, то между ними требуется установить связь (стр. 336). Для большей наглядности назовем первый набор данных РегистрСБ, второй - ДокументСБ. Чтобы ввести новое имя набора данных, можно дважды кликнуть по его названию.
191
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Связи наборов данных добавим новую строку. В поле Источник связи, то есть в качестве родительского набора данных, укажем РегистрСБ. В поле Приемник связи, то есть в качестве зависимого набора данных, укажем ДокументСБ. В поле Выражение источник выберем из полей родительского набора поле Регистратор, а в поле Выражение приемник - поле зависимого набора данных - Ссылка (рис. 4.122).
Рис. 4.122. Создание связи наборов данных
Все связи, созданные в схеме компоновки данных, считаются Левыми внешними соединениями, то есть в отчет будут включены записи из обоих наборов данных, удовлетворяющих условию связи Регистратор = Ссылка. Кроме того, у родительского набора данных РегистрСБ будут отражаться в отчете все записи, независимо от того, найден ли соответствующий им документ в наборе данных ДокументСБ или нет. Поэтому при определении связей наборов данных требуется внимательно обдумать вопрос, какой из наборов данных будет родительским, а какой зависимым.
Перейдем на закладку Ресурсы и определим доступные поля ресурсов отчета (стр. 385), рис. 4.123.
Рис. 4.123. Определение ресурсов отчета 192
Глава 4. Примеры разработки отчетов
На закладке Параметры (стр. 390) мы видим параметры компоновки данных, созданные платформой (рис. 4.124).
Рис. 4.124. Параметры компоновки данных, созданные платформой
Параметру ВидДвижения по умолчанию присвоено значение Приход, и установлена его недоступность для пользователя. Это нас устраивает, но мы не видим здесь автоматически созданных параметров начала и конца периода, так как в обоих наборах данных мы использовали объектные, а не виртуальные таблицы. В этом случае мы должны явно задать эти параметры в запросе родительского набора данных. Откроем конструктор запроса набора РегистрСБ и перейдем на закладку Условия. Раскроем таблицу СобранныеСБ и перетащим в список условий поле Период. Отметим, что условие является Произвольным и внесем в поле Условие следующий текст (листинг 4.15):
Листинг 4.15. Условие запроса для параметра «НачалоПериода»
СобранныеСБ.Период > = &НачапоПериода
Аналогично добавим еще одно условие (листинг 4.16):
Листинг 4.16. Условие запроса для параметра «КонецПериода»
•анныеСБ.Период < - ЛКонецПериода
193
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Закладка Условия примет вид (рис. 4.125):
Рис. 4.125. Использование параметров в условиях запроса
Нажмем ОК. Зададим настройки параметров, как и в предыдущих примерах. На закладке Параметры для параметров НачалоПериода и КонецПериода в колонке Доступные типы нажмем кнопку выбора Вив нижней части окна редактирования типа данных установим Состав даты в значение Дата. Для параметра КонецПериода зададим значение колонки Выражение (листинг 4.17).
Листинг 4.17. Выражение для расчета параметра «КонецПериода»
КонецПериода(&КонецПериода, "День")
Снимем флаг Ограничение доступности у этих параметров, так как они будут задаваться пользователем при формировании отчета. В результате параметры компоновки данных примут следующий вид (рис. 4.126):
Рис. 4.126. Параметры компоновки данных
194
Глава 4. Примеры разработки отчетов
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю СистемныйБлок. Затем добавим вложенную в нее группировку Мастер. Выделим группировку Мастер и добавим вложенную в нее группировку без указания группировочного поля Деталь-ныеЗаписи. Затем на закладке Выбранные поля перенесем из списка доступных полей поля (рис. 4.127):
•	Дата,
•	Номер,
•	Количество,
•	Стоимость.
Рис. 4.127. Определение полей и группировок отчета
На закладке Сортировка зададим порядок сортировки записей в отчете. Для этого перенесем мышью из списка доступных полей поля Дата и Номер. Тем самым мы установили, что внутри группировки детальные записи будут сортироваться
195
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
по дате, а в пределах одной даты - по номеру документа. Поля группировок автоматически упорядочиваются по группировоч-ному полю (рис. 4.128).
Параметры данных Выбранные поля Отбор] Сортировка j Условное Оформлен... Пользовательские п... Другие настройки
аправление сортировки '	"
i-— Мастер i--— Номер 0- — Регистратор 0-- — СистемныйБлок Й-— Ссылка
ф-1 Количество
0 3 Стоимость
По возрастанию
,По возрастанию
BI- Номер
Рис. 4.128. Выбор полей сортировки записей отчета
Усовершенствуем внешний вид отчета. Выделим набор данных ДокументСБ и в колонке Оформление зададим формат поля Дата, чтобы дата отображалась без времени. Вызовем диалог Формат поля и в строку Формат введем выражение (листинг 4.18):
Листинг 4.18. Формат поля «Дата»
ДФ = dd.MM.yyyy
На закладке Другие настройки установим заголовок отчета Сборка Системных Блоков, а макет оформления (стр. 408) отчета - Арктика.
Теперь разработаем специальную отчетную форму для ввода пользовательских настроек (периода отчета и сортировки) и автоматического формирования отчета, без нажатия кнопки Сформировать. На закладке Формы нажмем кнопку Добавить, в открывшемся конструкторе форм создадим форму типа Форма отчета с именем ФормаОтчета. Откроем форму отчета, растянем ее, сдвинем вниз поле Результат и добавим надписи для пояснения расположения элементов настроек - Период отчета и Сортировка (рис. 4.129).
196
Глава 4. Примеры разработки отчетов
Рис. 4.129. Добавление надписей в форму
Затем выполним пункт основного меню Форма - Вставить элемент управления. Последовательно добавим в форму два элемента управления - ТабличноеПоле с именами Таблич-ноеПолеПараметры и ТабличноеПолеПорядок и включим при этом флаг Вставить командную панель для автоматического добавления командных панелей этих элементов (рис. 4.130).
Рис. 4.130. Добавление табличного поля в форму
Расположим эти элементы управления в форме. Затем вызовем диалог свойств каждого табличного поля и зададим для них источник данных в строке Данные. Выберем соответственно ОтчетОбъект.КомпоновщикНастроек.Настройки. ПараметрыДанных для поля параметров, ОтчетОбъект.Ком-
197
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
поновщикНастроек.Настройки.Порядсж для поля сортировки (рис. 4.131).
Рис. 4.131. Выбор источника данных для табличного поля «Порядок»
Таким образом, мы связали элементы управления, расположенные в форме, с настройками системы компоновки данных нашего отчета - Параметры данных и Сортировка. Форма отчета примет вид (рис. 4.132):
Рис. 4.132. Форма отчета со вставленными элементами управления 198
Глава 4. Примеры разработки отчетов
Для автоматического запуска отчета и инициализации параметров при открытии формы выполним действия, описанные в четвертом примере. Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткрытии() и нажмем значок лупы справа от него. В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы.
Внесем в него следующий текст (листинг 4.19):
Листинг 4.19. Процедуры модуля формы ПриОткрытии()
Процедура ПриОткрытии()
СхемаКомпоновкиДанных >= Отчеты.СборкаСистемныхБлоков.
ПолучитьМакет(*ОсновнаяСхемаКомпоновкиДанных”);
Настройки - СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
УстановитьНастройки();
СформироватьОтчет();
КонецПроцедуры
Процедуры, вызывающиеся из нее, УстановитьНастройки() и СформироватьОтчет(), расположим в начале модуля (листинг 4.20):
Листинг 4.20. Процедуры модуля формы отчета _________________________
перем Настройки;
Процедура СформироватьОтчет() Экспорт
КомпоновщикМакета » Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета
.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных: ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
ЭлементыФормы.Результат.0чистить();
ДокументРёзультат • ЭлементыФормы.Результат;
ПроцессорВывода = Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
199
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Процедура УстановитьНастройки()
ПараметрДанныхНачалоПериода = КомпоновщикНастроек
.Настройкм.ПараметрыДанных.Элементы[1];
ПараметрДанныхНачалоПериода.Значение
= НачалоМесяца(ДобавитьМесяц(РабочаяДата, -1));
ПараметрДанныхНачалоПериода.Использование = Истина;
ПараметрДанныхКонецПериода = КомпоновщикНастроек
.Настройки.ПараметрыДанных.Элементы[2];
ПараметрДанныхКонецЛериода.Значение
= КонецМесяца(ДобавитьМесяц(РабочаяДата, -1));
ПараметрДанныхКонецПериода.Использование • Истина;
ПорядокНомер = КомпоновщикНастроек.Настройки.Порядок.Элементы[1];
ПорядокНомер.Использование - Ложь;
Настройки >» КомпоновщикНастроек.Настройки;
КонецПроцедуры
Рис. 4.133. Открытие отчетной формы
200
Глава 4. Примеры разработки отчетов
Этот код уже знаком нам по четвертому примеру. Отличие в том, что параметры НачалоПериода и КонецПериода имеют в коллекции настроек параметров данных порядковые номера 1 и 2, так как первый элемент с индексом 0 - это параметр ВидДвижения, который скрыт от пользователя. А также, пользуясь средствами встроенного языка, параметрам отчетного периода мы присвоили значения начала и конца прошлого месяца и отключили использование в сортировке поля Номер. Его индекс в коллекции настроек сортировки равен 1.
Запустим конфигурацию в режиме 1С:Предприятие и откроем наш отчет (рис. 4.133).
Он будет сформирован автоматически со значениями настроек, заданными по умолчанию при открытии формы.
Таким образом, на примере этого отчета мы научились:
•	Использовать в схеме компоновки несколько наборов данных и задавать связь между ними.
•	Передавать параметры в объектные таблицы на уровне запроса.
•	Отображать в форме настойки сортировки отчета.
•	Автоматически запускать отчет при открытии формы.
•	Задавать значения настроек по умолчанию при открытии формы и программно передавать их в отчет.
Пример 8. Оказание услуг
На примере этого отчета мы продемонстрируем другие, не рассмотренные ранее возможности системы компоновки данных, а также использование в схеме компоновки вложенного отчета. Разработаем простой отчет, представляющий список услуг фирмы и соответствующую информацию из отчета продаж номенклатуры для каждой услуги (рис. 4.134).
201
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Список услуг
<од
Ьименован^
000000014
Ремонт компьютера
Рис. 4.134. Требуемый вид отчета
Создадим новый объект конфигурации Отчет и назовем его Ока-заниеУслуг. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем объектную таблицу справочника Номенклатура. В список полей перенесем поля из этой таблицы (рис. 4.135):
•	Ссылка,
•	Код,
•	Наименование.
Номенклатура. Код
НоменклатураНаименование
[Номен> натура СсЫль а
Рис. 4.135. Выбор полей для запроса
Поле Ссылка нам понадобится в качестве ссылки на вложенную схему компоновки данных. Перейдем на закладку Условия, раскроем таблицу Номенклатура и перетащим мышью поле ВидНоменклатуры в список условий. Оставим предложен-202
Глава 4. Примеры разработки отчетов
ное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались только услуги из справочника номенклатуры (рис. 4.136).
Таблмцыип... । Груга»с«м | Ыслоаия [Дополнигел.. ООьаямнсти.. , Порядок Комлоиоекд... Хкмктдрс., Пакйтмд»,.,
ЕНВ Номенклатура
—— Ссылка
—— ПометкаУдаления
••••— Предопределенный Родитель
™- ЭтоГруппа
-•••- Код
Наименование
ВидНоменг натуры
Её* 1	Litakii Е Далее» ] | ОК ~~| Отмена 1 [Справка'
Рис. 4.136. Создание условия запроса
Нажмем ОК и вернемся в конструктор схемы компоновки данных. На закладке Параметры мы видим параметры компоновки данных, созданные платформой. Параметру ВидНо-менклатуры по умолчанию присвоено значение Перечисле-ние.ВидыНоменклатуры.Услуга, и установлена его недоступность для пользователя (рис. 4.137).
Рис. 4.137. Параметры компоновки данных, созданные платформой
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим группировку без указания группировочного поля ДетальныеЗаписи.
203
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Затем на закладке Выбранные поля перенесем из списка доступных полей поля Код и Наименование (рис. 4.138):
Рис. 4.138. Определение полей и группировок отчета
На закладке Сортировка укажем, что данные в отчете будут упорядочиваться по полю Наименование. Для этого перенесем это поле из списка доступных полей в список сортировки. Но вместо стандартного представления для этого поля на закладке Наборы данных мы зададим собственное выражение, по которому и будет проводиться упорядочивание записей в отчете (стр. 426). Нажав кнопку выбора □ для поля Наименование, в колонке Выражение упорядочивания, вызовем диалог его свойств, который содержит:
•	Выражение - текст выражения на языке выражений системы компоновки данных;
•	Тип упорядочивания - по убыванию или по возрастанию;
•	Необходимость упорядочивания — флаг для определения упорядочивания ссылочных полей.
204
Глава 4. Примеры разработки отчетов
Нажмем кнопку Добавить и введем в колонку Выражение следующий текст (листинг 4.21):
Листинг 4.21. Выражение для упорядочивания поля «Наименование»
бор
Когда Наименование
Тогда 1
Иначе 2
« "Ремонт компьютера"
Конец
Укажем Тип упорядочивания - По возрастанию. Нажмем еще раз кнопку Добавить и выберем в колонке Выражение поле Код. Укажем Тип упорядочивания - По убыванию. Таким образом, мы установили, что первой в списке услуг должна располагаться услуга с наименованием Ремонт компьютера, а остальные записи в отчете должны располагаться по мере убывания кода услуги. В результате окно диалога примет вид (рис. 4.139):
Рис. 4.139. Задание выражения упорядочивания
В результате выражение упорядочивания для поля Наименование примет вид (рис. 4.140).
Рис. 4.140. Выражение упорядочивания для поля «Наименование»
205
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Система компоновки данных позволяет определять в отчете Пользовательские поля, используя либо собственные выражения, либо наборы вариантов с условиями их выбора. На закладке Пользовательские поля нажмем кнопку Добавить и добавим новое поле - Выбор. Зададим собственный заголовок поля и создадим условия отбора для различных вариантов его представления (рис 4.141).
Рис. 4.141. Добавление пользовательского поля выбора
Добавим еще одно пользовательское поле - Выражение. Зададим собственный заголовок поля и выражение на языке выражений компоновки данных для отображения детальных записей. Нажмем кнопку Добавить и введем в колонку Выражение детальных записей следующий текст (листинг 4.22):
Листинг 4.22. Выражение детальных записей
для пользовательского поля - выражения «Популярная услуга»
Выбор
Когда Наименование = "Ремонт компьютера" Или Код = "000000007"
Тогда "да"
Иначе "нет"
Конец
 „ .
206
Глава 4. Примеры разработки отчетов
В результате окно пользовательского поля выражения примет вид (рис 4.142):
Рис. 4.142. Добавление пользовательского поля выражения
ВНИМАНИЕ!
В выражениях пользовательских полей не могут быть использованы функции общих модулей.
Теперь добавим новые пользовательские поля в отчет. На закладке Выбранные поля раскроем список Пользовательские поля и перенесем из списка доступных полей поля Популярная услуга и В составе сборки (рис 4.143).
Выбранные поля | Отбор Сортировка , Условное оформление , Пользовательские поля Другие настройки ,
— - Код -•••- Наименование [] — Ссылка E-JM СисгемныеПоля Б д-1 ПарамегрыДанных ЁН-11 Пользовательские поля 1— — В составе сборки 1—— HESS	|gj	щ]	Выбранные пиля		
				--- Код	
	|о|			Наименование	
	fol			Популярная услуга	
	И			•••• — В составе сборки	
					
Рис. 4.143. Добавление пользовательских полей в отчет
207
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Другие настройки установим заголовок отчета Список услуг, а макет оформления (стр. 408) отчета - Яркий. Выполним отчет (рис. 4.144).
Рис. 4.144. Результат отчета
Мы видим, что записи в отчете расположены в заданном порядке и пользовательские поля отражаются в соответствии с условиями их представления.
Теперь вернемся в конфигуратор, в режим настроек схемы компоновки данных отчета. Зададим группу условий отбора. На закладке Отбор добавим новую группу, укажем тип логической связки ИЛИ, а внутри нее - два элемента. Заметим, что в группе условий отбора могут участвовать несколько разных полей, в нашем случае Код и Наименование. Если мы просто последовательно добавим в отбор несколько элементов, не включенных в группу, то они будут соединены логическим союзом И (рис. 4.145).
Выбранные поля | Отбор [ Сортировка Условное оформление Пользовательские поля Друие настройки
Рис. 4.145. Добавление группы условий отбора 208
Глава 4. Примеры разработки отчетов
Выполним отчет (рис. 4.146).
Рис. 4.146. Результат отчета
Мы видим, что записи в отчете отфильтрованы с учетом отбора, но пока отключим его, чтобы продемонстрировать работу с вложенными отчетами (рис. 4.147).
Выбранные поля | Отбор | Сортировка Условное оформление Пользовательские поля Другие настройки
|	— Наименование Ссылка ф -м ПараметрыДанных E -JM Пользовательские пол!		Т ип группы	(Режим отоб... (Представление	lj|Ik JqTI	|| Подробно |
		В Отбор	
	3	11В-Труппа Или	| Быстрый до... |	
	и	(••••— Код	Равно 000000006	Быст...	
	0	L~— Наименование Равно Ремонт компьютера Быст..	
			
ш		пн			
Рис. 4.147. Отключение группы условий отбора в настройках отчета
В нашем отчете мы хотим видеть список услуг из справочника номенклатуры с вложенными данными из отчета Прода-жиНоменклатуры для каждой услуги. В действительности всю эту информацию можно получить прямо из отчета по продажам номенклатуры. Но данная задача позволит нам продемонстрировать еще одно интересное свойство системы компоновки данных - работу с вложенными отчетами.
209
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Сначала откроем схему компоновки данных отчета Прода-жиНоменклатуры и сохраним ее в файл, как было описано в первом примере. Вернемся в схему компоновки нашего отчета, перейдем на закладку Вложенные схемы и добавим новую схему. Назовем ее ПродажиНоменклатуры и в поле Схема нажмем кнопку выбора (рис. 4.148).
Рис. 4.148. Добавление вложенной схемы в отчет
В качестве вложенной схемы выберем файл XML с сохраненной ранее схемой - Схема_продажи_номенклатуры (рис. 4.149).
Рис. 4.149. Выбор файла вложенной схемы
210
Глава 4. Примеры разработки отчетов
Нажмем ОК. Теперь нажмем кнопку выбора •• в поле Настройки и зададим связь вложенной схемы с родительской так, чтобы для каждой услуги из нашего отчета отражалась соответствующая информация из вложенного отчета. Добавим новый элемент отбора и нажмем кнопку выбора • в поле Левое значение. В открывшемся окне выбора поля укажем поле вложенного отчета Номенклатура (рис. 4.150).
Рис. 4.150. Задание условий отбора в настройках вложенной схемы
В поле Правое значение нажмем кнопку очистки 0, затем кнопку выбора типа данных 0 и выберем тип данных Поле компоновки данных (рис. 4.151).
Рис. 4.151. Задание условий отбора в настройках вложенной схемы
211
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Теперь нажмем в поле ввода кнопку выбора Н, в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец и выберем поле родительского отчета Ссылка (рис. 4.152).
Рис. 4.152. Задание условий отбора в настройках вложенной схемы
В результате окно настроек вложенной схемы примет вид (рис. 4.153).
Рис. 4.153. Окно настроек вложенной схемы
Теперь добавим вложенную схему в структуру отчета. На закладке Настройки в дереве структуры отчета выделим элемент Детальные записи и в контекстном меню выберем пункт Новая вложенная схема. Обратите внимание, что пока мы не добавили вложенную схему в отчет, этот пункт был недоступен (рис. 4.154).
212
Глава 4. Примеры разработки отчетов
Рис. 4.154. Добавление вложенной схемы в отчет
Выберем схему ПродажиНоменклатуры. В результате окно настроек нашего отчета примет вид (рис. 4.155).
Рис. 4.155. Окно настроек отчета
213
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ВНИМАНИЕ!
Вложенная схема вместе со своими настройками добавилась в основной отчет. Чтобы активизировать режим настроек основного отчета, нужно выделить одну из его ветвей или корневой элемент дерева структуры отчета. Для настройки вложенного отчета достаточно выделить одну из его ветвей в дереве структуры отчета. При установке настроек отдельной группировки основного или вложенного отчета в средней части окна, под деревом группировок отчета, должна быть выделена соответствующая ей кнопка.
Выделив ветку ПродажиНомеклатуры, настроим вложенный отчет. На закладке Другие настройки уберем признак использования его заголовка (рис. 4.156).
Рис. 4.156. Настройка вложенного отчета
На закладке Условное оформление уберем признак использования его условного оформления (рис. 4.157).
214
Глава 4. Примеры разработки отчетов
Параметры да... Выбранные поля Отбор Сортировка | Условное офор... [ Пользовательс... Другие настро...
Отбор —	~ ' [Оформление ' [Представлен
Стоимость Меньше "3 0... | Цвет текста	[Мелкий заказ
ЩОблаеть [I ^Стоимость
t I
< «
Рис. 4.157. Настройка вложенного отчета
Выделив ветку Детальные записи, настроим основной отчет. На закладке Выбранные поля уберем признак использования его полей Популярная услуга и В составе сборки (рис. 4.158).
Рис. 4.158. Настройка основного отчета
Выполним отчет (рис. 4.159).
215
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.159. Результат отчета
Рис. 4.160. Настройка отбора основного отчета
216
Глава 4. Примеры разработки отчетов
Мы видим, что услуги располагаются в заданном ранее для основного отчета порядке, отбор и пользовательские поля отключены, а каждой услуге соответствуют записи вложенного отчета по продажам номенклатуры. Но, прокрутив вниз полученный отчет, мы видим, что в отчете присутствует услуга Сборка компьютера, для которой отсутствуют записи вложенного отчета, так как эта услуга не учитывается в регистре Продажи. Поэтому в режиме настроек основного отчета включим отбор, но отключим в группе второй элемент, а в первом изменим Вид сравнения на Не равно (рис 4.160).
Выделим в дереве отчета элемент ПродажиНоменклатуры и на закладке Другие настройки отключим вывод отбора у вложенного отчета, так как это не несет никакого смысла, а лишь указывает на его связь с основным отчетом (рис. 4.161).
Рис. 4.161. Настройка вывода отбора вложенного отчета
Аналогично можно отключить вывод отбора и у основного отчета. Выполним отчет (рис. 4.162).
217
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.162. Настройка вывода отбора основного отчета
Мы можем ограничить вывод данных вложенного отчета, задав его период в окне настроек режима 1 С:Предприятие (рис. 4.163).
Рис. 4.163. Настройка вывода отбора вложенного отчета
218
Глава 4. Примеры разработки отчетов
Переформируем отчет. Данные вложенного отчета будут ограничены заданным периодом. Но поскольку здесь пользователю будет очень сложно разобраться, где ему нужно вводить период отчета, то мы сначала организуем передачу параметров из основного во вложенный отчет, а затем выведем окно для ввода периода отчета в форму.
Сначала на закладке Параметры (стр. 390) добавим параметры ДатаНачала и ДатаОкончания в основной отчет. В колонке Доступные типы нажмем кнопку выбора Нив нижней части окна редактирования типа данных установим Состав даты в значение Дата. Для параметра ДатаОкончания зададим значение колонки Выражение (листинг 4.23).
Листинг 4.23. Выражение для расчета параметра «ДатаОкончания»
КонецПериода(&ДатаОкончания, "День")
Снимем флаг Ограничение доступности у этих параметров, так как они будут задаваться пользователем при формировании отчета. В результате параметры компоновки данных примут следующий вид (рис. 4.164):
Рис. 4.164. Параметры компоновки данных
Затем на закладке Вложенные схемы откроем для редактирования вложенную схему компоновки данных, нажав кнопку выбора  (рис. 4.148). На закладке Параметры для параметра КонецПериода удалим Выражение для расчета, так как мы
219
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
определим его значение через параметр основного отчета (рис. 4.165).
Рис. 4.165. Параметры компоновки данных вложенной схемы
Перейдем на закладку Настройки, выделим вложенный отчет ПродажиНоменклатуры и установим значение параметра Начало периода. В поле Значение нажмем кнопку очистки 0, затем кнопку выбора типа данных 0 и выберем тип данных Поле компоновки данных. Теперь нажмем в поле ввода кнопку выбора В и в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец - ПараметрыДанных и выберем поле родительского отчета ДатаНачала (рис. 4.166).
Рис. 4.166. Настройка параметров вложенного отчета 220
Глава 4. Примеры разработки отчетов
Аналогично зададим значение для параметра КонецПериода. В результате окно настроек параметров вложенного отчета примет вид (рис 4.167).
Параметры да... | Выбранные поля Отбор Сортировка Неловкое оФор... ПользоветеЛьс... Друие насгро.,.
ЯПараметр	1	Значение
jv<| Начало периода	1 - ОбьектНастройкиВладелец.ПараметрыДанных.ДатаНачала
[7 | Конец периода	— 0 бъектН астройкиВ ладе лец. П араметрыД энных. Д етаО кончания
я
|5>
Рис. 4.167. Настройка параметров вложенного отчета
В режиме настроек вложенного отчета на закладке Другие настройки отключим вывод параметров у вложенного отчета, так как это не несет никакого смысла, а лишь указывает на их связь с основным отчетом.
Теперь разработаем отчетную форму для ввода периода отчета перед его формированием. Эти действия мы уже не раз выполняли в предыдущих примерах. На закладке Формы нажмем кнопку Добавить. В открывшемся конструкторе форм создадим форму типа Форма отчета с именем ФормаОтчета. Откроем форму отчета, растянем ее, сдвинем вниз поле Результат и выполним пункт основного меню Форма - Вставить элемент управления. Выберем элемент управления - ТабличноеПоле с именем ТабличноеПолеПараметры. Расположим табличное поле в форме. Затем вызовем диалог его свойств и зададим для него источник данных в строке Данные - ОтчетОбъект.Ком-поновщикНастроек.Настройки.ПараметрыДанных. Таким образом, мы связали элемент управления, расположенный в форме, с настройками системы компоновки данных нашего отчета - Параметры данных.
В нашем примере нужно обязательно задать начальные значения параметров основного отчета, иначе вложенный отчет завершится с ошибкой (рис. 4.168).
221
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.168. Установка значений параметров основного отчета
Рис. 4.169.
Результат отчета
222
Глава 4. Примеры разработки отчетов
Запустим отчет на исполнение в режиме 1 С: Пред приятие. Нажмем кнопку Сформировать. Отчет примет вид как на рис. 4.169.
Параметры периода отчета заданы по умолчанию как начало и конец следующего месяца. Причем эти даты будут автоматически меняться в зависимости от даты запуска отчета. Однако пользователь всегда может изменить значения отчетного периода в форме перед запуском отчета. Параметры отчета передаются во вложенный отчет, поэтому мы не видим данных за март, причем данные за 01/05/2008 входят в отчет, в соответствии с заданным выражением параметра Дата окончания.
Теперь, когда мы убедились, что все работает правильно, можно скрыть от пользователя настройку параметров вложенного отчета. Для этого на закладке Вложенные схемы откроем для редактирования вложенную схему компоновки данных, нажав кнопку выбора  (рис. 4.148), и на закладке Параметры выставим для них флаг Ограничение использования (рис. 4.170).
Рис. 4.170. Параметры компоновки данных вложенной схемы
Таким образом, на примере этого отчета мы научились: • Задавать выражение упорядочивания для поля.
223
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Задавать пользовательские поля выражения и поля выбора.
•	Задавать группу условий отбора, использовать в отборе несколько полей.
•	Использовать в отчете вложенные схемы, управлять настройками основного и вложенного отчета.
•	Передавать параметры во вложенный отчет.
Пример 9. Использование источников данных - объектов.
Создание собственного макета оформления
На этом примере мы продемонстрируем использование в качестве источника данных объектов встроенного языка. Ими могут быть:
•	наборы записей регистров,
•	таблицы значений,
•	табличная часть,
•	результат запроса,
•	область ячеек табличного документа,
•	прикладной объект.
Наборов данных, получающих информацию из объектов встроенного языка, в схеме компоновки данных может быть несколько. Их можно связывать и объединять между собой.
Разработаем свою печатную форму документа СборкаКомпью-тера, используя систему компоновки данных, и покажем на ней использование собственного макета оформления (рис. 4.171).
224
Глава 4. Примеры разработки отчетов
Сборка системных блоков № 000000002 от 26.03.08
Системный блок: "Компьютер для дома" собрал мастер: Ильин Сергей склад: Основной
№ Номенклатура Количество Цена Сумма!
1	Жесткий диск	1	3 300	3 300
2	Материнская плата	1	3 000	3 000
3	Память	1	1 500	1 500
4	Сборка компьютера	1	1 200	1 200
Итого: 9 000				
Рис. 4.171. Требуемый вид печатной формы документа
Конечно, эту задачу можно решить гораздо проще, разработав макет табличного документа для печати и задав ему нужное оформление. Но для демонстрации заявленных возможностей системы компоновки данных нам эта задача вполне подходит. Сначала создадим схему компоновки данных, позволяющую сформировать печатную форму документа нужного вида. Затем программно заполним используемые в ней наборы данных. Далее с помощью встроенного языка осуществим компоновку данных. Последняя задача уже знакома нам по предыдущим примерам.
Выделим ветку Макеты документа СборкаКомпьютера в дереве объектов конфигурации и вызовем ее контекстное меню или нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.172).
Рис. 4.172. Создание макета документа
225
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В открывшемся конструкторе макета зададим имя макета ПечатьСборки и выберем тип макета Схема компоновки данных. Нажмем кнопку Готово (рис. 4.173).
___________________________________ м
Конструктор макета	X
Рис. 4.173. Создание схемы компоновки данных документа
В окне конструктора схемы компоновки данных добавим новый набор данных - объект (рис. 4.174).
Рис. 4.174. Добавление набора данных - объект
Назовем его СоставСБ и такое же имя зададим в поле Имя объекта, содержащего данные. Этот набор данных будет отражать информацию из табличной части нашего документа. Нажимая кнопку Добавить, создадим список полей набора данных с аналогичными именами (рис. 4.175):
•	Номенклатура,
•	Цена,
226
Глава 4. Примеры разработки отчетов
•	Сумма,
•	Количество.
Рис. 4.175. Список полей набора данных
Затем, выделив корневой элемент дерева наборов данных, добавим еще один набор данных - объект. Назовем его ДокументСБ и такое же имя зададим в поле Имя объекта, содержащего данные. Этот набор данных будет отражать информацию о реквизитах нашего документа. Нажимая кнопку Добавить, создадим список полей набора данных с аналогичными именами (рис. 4.176):
•	Дата,
•	Номер,
•	Мастер,
•	СистемныйБлок (Продукция),
•	Склад.
227
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.176. Список полей набора данных
Дальше выполним уже знакомые действия по формированию настроек схемы компоновки данных. Сначала определим поле ресурсов (стр. 385) Сумма для подсчета общего итога по табличной части документа. По умолчанию для расчета выражения ресурса нам будет предложено Количество(Сумма). Изменим его на Сумма(Сумма) (рис. 4.177).
Рис. 4.177. Определение ресурса «Сумма»
228
Глава 4. Примеры разработки отчетов
На закладке Настройка определим вид печатной формы нашего документа. Добавим в отчет группировку - составную из полей реквизитов документа:
•	Номер,
•	Дата,
• СистемныйБлок,
• Мастер, • Склад.
Чтобы это сделать, можно добавить группировку без указания группировочного поля Детальные записи. Затем выделить режим настроек этой группировки и на закладке Поля группировки мышью перетащить в список группировки нужные поля (рис. 4.178).
Поля группировки I Выбранные поля Отбор Сортировка Условное оформление Другие настройки					
			Поле	Т ип группировки	
			^|ЦЦЩ^ЦЦЦ||Ц|ЦЦ||ЦЦ^Бесиерар><ии		
	I •••— Количество		@ | — Дата	Без иерархии	
	|	— Мастер		0| - СистемныйБлок	Без иерархии	t
	Номенклатура		0] — Мастер	Без иерархии	
	Номер		0| — Склад	Без иерархии	
	i	— СистемныйБлок |	— Склад ;	— Цена			
Рис. 4.178. Определение списка полей группировки
Затем на уровне глобального отчета добавим еще группировку - без указания группировочного поля Детальные записи. На закладке Выбранные поля перенесем в список выбранных полей поля табличной части документа:
• Номенклатура,
• Количество,
• Цена,
• Сумма.
229
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
И выберем еще из системных полей поле НомерПоПорядку (рис. 4.179).
Рис. 4.179. Добавление полей в отчет
Выделим режим настроек первой, составной, группировки и на закладке Другие настройки установим значения параметров вывода Тип макета - Вертикально (стр. 444) и Расположение итогов - Нет (стр. 458). Тем самым мы зададим вывод реквизитов документа в виде вертикального списка без итогов (рис. 4.180).
Поля группировки Выбранные поля , Отбор Сортировка Условное оформление | Другие настройки |
Рис. 4.180. Определение списка полей группировки 230
Глава 4. Примеры разработки отчетов
Теперь разместим в документе СборкаКомпьютера кнопку Печать, при нажатии на которую будет исполняться программный код, выполняющий компоновку данных и представление отчетной формы документа. Создадим форму документа, так как до этого мы пользовались формой, автоматически сгенерированной платформой.
На закладке Формы нажмем кнопку Добавить, в открывшемся конструкторе форм создадим форму типа Форма документа с именем ФормаДокумента. Откроем форму и добавим кнопку Печать в командную панель Основные действия формы (рис. 4.181).
Рис. 4.181. Добавление в форму документа кнопки «Печать»
В свойствах кнопки, в строке Действие, создадим обработчик события нажатия на эту кнопку (рис. 4.182).
231
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
I Свойства: Элеме	НТ I	панели		
|Х ’-Основные:				
Имя		Печать			
Т ипКнопки		Действие		▼
Доступность		0		
|| Действие		0 сновные ДействияФ ормыП ечать		
КнопкаПоУмолчанию □ Изменяет Данные □ Пометка	□ г Представление:						
Текст	Печать			
Подсказка	Печать Формы			
Пояснение	Печать Формы				
Картинка				X
Отображение	Надпись			▼
СочетаниеКлавиш				X
				
Рис. 4.182. Создание обработчика события
В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки Печать, в который мы внесем следующий текст (листинг 4.24):
Листинг 4.24. Процедура обработчика события нажатия кнопки «Печать»
Процедура ОсновныеДействияФормыПечать(Кнопка)	|
Запрос = Новый Запрос;
Запрос.Текст-"ВЫБРАТЬ
СборкаКомпыотера.Дата,
СборкаКомпьютера.Номер,
СборкаКомпьютера.Масгер,
СборкаКомпьютера.Продукция КАК СистемныйБлок, СборкаКомпьютера.Склад
ИЗ
Документ.СборкаКомпьютера КАК СборкаКомпьютера
ГДЕ
СборкаКомпьютера.Ссылка - &Ссылка";
Запрос.УстановитьПараметр("Ссылка",ДокументОбъект.Ссылка);
Результат « Запрос.Выполнить();
ШапкаДок = Результат. Выгрузить();
ВнешниеНаборыДанных * Новый Структура;
ВнешниеНаборыДанных.Вставить("СоставСБ",ДокументОбъект
.ПереченьНоменклатуры);
232
Глава 4. Примеры разработки отчетов
ВнешниеНаборыДанных.Вставить(” ДокументСБ", ШапкаДок); СхемаКомпоновкиДанных - ЛолучитьМакетСПечатьСборки1'); Настройки » СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки - КомпоновщикМакета
. Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных. Инициализировать(МакетКомпоновки
, ВнешниеНаборыДанных);
ДокументРезультат - Новый ТабличныйДокумент;
ПроцессорВывода « Новый ПроцессорВывода
РезулътатаКомпоновкиДанныхВТабличныйДокумент:
ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ДокументРезультат.ОтображатьСетку=Ложь;
ДокументРезультат.ОтображатьЗаголовки - Ложь;
ДокументРезультат. Показать();
КонецПроцедуры
Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора реквизитов текущего документа. Поле документа Продукция в запросе представлено как Сис-темныйБлок. В качестве параметра запроса используется ссылка на документ. Затем создаются два внешних набора данных - СоставСБ и ДокументСБ. Набор СоставСБ заполняется данными табличной части документа. Набор ДокументСБ заполняется данными результата выполнения определенного ранее запроса. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. Запустим систему в режиме 1С:Предприятие. Откроем документ СборкаКомпьютера. Нажмем кнопку Печать. На экране появится разработанная нами печатная форма документа (рис. 4.183).
233
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Т аблица
_ □ X
К яичество
000000002
26.03.200815:09:13
Компьютер для дома Ильин Сергей Основной
Номер
Дата
Системный Блок
Мастер Склад
3 300,
3 000
1 500
1 200
II
Жесткий диск
Материнская плата
Память__________
Сборка компьютера
3 300
3 000
1 500
1 200
9000
Рис. 4.183. Печатная форма документа
Теперь продемонстрируем оформление полученной печатной формы с помощью собственного макета оформления. Для этого возможно два решения:
•	создать предопределенный макет оформления непосредственно в схеме компоновки данных макета документа;
•	создать свой макет оформления, добавив его в Общие макеты объектов конфигурации, и использовать его при настройке отчетов.
Рис. 4.184. Добавление макета оформления
234
Глава 4. Примеры разработки отчетов
Второй вариант более универсален, так как может применяться в дальнейшем для различных отчетов, но может понадобиться и индивидуальный макет оформления для конкретного отчета.
Рассмотрим вариант создания общего макета оформления (стр. 408). Раскроем ветвь Общие дерева объектов конфигурации. Выделим ветку Общие макеты и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.184).
В открывшемся конструкторе макета создадим макет типа Макет оформления компоновки данных с именем Радуга (рис. 4.185).
Рис. 4.185.
Создание нового макета оформления
Нажмем кнопку Готово. Откроется редактор макета оформления с загруженным новым макетом, в котором мы можем отредактировать цвета фона, текста и границы, шрифты областей макета оформления и т. п. (рис. 4.186).
235
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Конфигурация Конфигурация: Радуга	_ О X
Области.	'•Sttit * Пример:
Рис. 4.186. Редактор макета оформления
Выделив в верхнем левом окне нужную область макета, мы можем изменить элементы ее оформления в нижнем левом окне и сразу увидеть результат оформления этой области в правом окне редакторе макета. При этом названия областей, содержащих оформление, выделяются жирным шрифтом. При выделении в списке областей макета нужной позиции двойным щелчком мыши одновременно выделяется соответствующая ей область результата оформления, при условии что для этой области задано специфическое оформление. И наоборот. Для каждой области макета существует возможность создать несколько уровней оформления. Это можно сделать, выделив нужную область и нажав кнопку Добавить над списком областей. В нижнем правом углу редактора есть возможность сохранения и загрузки макета в XML-формате. Кроме того, можно в любой момент Очистить макет или загрузить предопределен
236
Глава 4. Примеры разработки отчетов
ный Стандартный макет. Это полезно в случае если вы не хотите разрабатывать свой макет оформления с нуля или чтобы получить недостающий опыт в оформлении макетов. Тогда вы берете за основу какой-либо стандартный вариант оформления, например Зеленый, и меняете необходимые области.
Поясним все вышеизложенное на конкретном примере. Откроем макет ПечатьСборки документа СборкаКомпьюте-ра на закладке Настройки и изучим еще раз структуру нашей печатной формы (рис. 4.179). Первой, составной из реквизитов документа группировке мы придали вид вертикального списка. Найдем в окне результата оформления пример группировки списка, выделим его двойным щелчком мыши. Мы видим, что в списке областей макета выделилась строка Заголовок группировки списка. Установим для нее в нижнем окне элементы оформления - цвет текста и шрифт (рис. 4.187).
£ Конфигурация Конфигурация Радуга
Области:
ЧИЯЖИ * Пример:
..Подвал группировки
—Заголовок иерархической группировки
..Подвал иерархической группировки
Заголовок группировки списка
..Подвал группировки списка
..Заголовок иерархической группировки списка
Е- Подвал иерархической группировки списка
Уровень 1
—Заголовок группировки колонки
—Подвал группировки колонки
Итого
Пример списка
Оформление:
ИИпе^егр^
foil
I
•••Цвет Фона
..Цвет текста
Цвет границы
Е-Стиль границы
 0.0,0  0,128,0  0,0,0 Нет линии
Группировка!
Ресурс
Группировка2 Ресурс
-•Шрифт
..Отступ
18
□ ы Станаартный макет... О чистить макет
Группировка2 Ресурс
__________ГруппировкаЗ-1
________ГруппировкаЗИерархия
Группировка2 -1________
Гру ппировка2Иерархия
Группировка!- 2
Группировка! -1 10
Группировка2Иерархия 10
Группировка2 -1 6
^1
_ □ X
я

< Й3 (51

Рис. 4.187. Оформление группировки списка
Вторая группировка, отражающая табличную часть документа, будет выводиться в виде обычной таблицы с итоговой строкой. Найдем в окне результата оформления пример шапки группи
237
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ровки, выделим его двойным щелчком мыши. Мы видим, что в списке областей макета выделилась строка Заголовоктаблицы. Установим для нее в нижнем окне элементы оформления - цвет фона, текста, границы, стиль границы и шрифт (рис. 4.188).
Д' Конфигурация Конфигурация Радуга
_ □ X
Области.
ФЧЕЖ11 1 Пример:
-Итог по ресурсам подвала группировки А
•••Итог по ресурсам заголовка иерархической гру...
—Итог по ресурсам подвала иерархической групп...
—Итог по ресурсам детальных записей
Обшме итоги по вертикали
Обжив итоги по вертикали списка
Заюловок таблицы
—По умолчанию
- Заголовок Информация
Оформление
и IS] Io] IS] IS]
Параметр-----------['Знание..........~В]
, -Цвет Фона	ЙЙ 255,204,153
" Цвет текста	И153,51,0____________
—Цвет границы 153,51,0________________
[ 3 -Стиль границы	Сплошная____________
—Шрифт________________________________i
—Отступ
| Стандартный макет... | Очистить макет

Рис. 4.188. Оформление шапки группировки
Аналогично, выделив в примере группировки строку детальных записей, установим элементы оформления для соответствующей выделенной области макета Детальные записи. Выделив итоговую строку в примере группировки, установим оформление для области макета Общие итоги по вертикали. Мы пока, для простоты, не использовали возможность создания нескольких уровней оформления для областей макета. Но в случае вложенных друг в друга группировок это свойство желательно использовать для большей наглядности отчета.
Проверим результат. На закладке Другие настройки установим макет оформления - Радуга. Запустим систему в режиме 1С:Предприятие и откроем документ СборкаКомпьютера. Нажмем кнопку Печать. Документ будет оформлен созданным нами макетом оформления.
238
Глава 4. Примеры разработки отчетов
СОВЕТ
Чтобы приобрести необходимый опыт, можно после оформления каждой области проверять получившийся результат. Если вы указали оформление не той области, которая отображается в отчете, она будет выводиться без оформления либо в виде оформления области по умолчанию, если оно задано.
Чтобы создать универсальный макет оформления, применяемый к разным отчетам, нужно заполнить остальные области макета, не использованные в нашем примере. В первую очередь это области заголовка отчета и информации об отборе и параметрах, которые содержатся в областях макета Заголовок и Информация. Далее, применяя новый макет оформления для других отчетов, содержащих таблицы и вложенные группировки, путем нескольких итераций нужно заполнить те области макета, которые остались без оформления.
4^ Документ СборкаКомпьютера ПечалгьСборки	« О X
Рис. 4.189. Установка имени группировки
Теперь рассмотрим пример создания предопределенного макета оформления непосредственно в схеме компоновки данных (стр. 394). Откроем макет ПечатьСборки документа СборкаКомпью-
239
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
тера на закладке Макеты. Как видно, макет представлен в виде обычного табличного документа, областям которого можно задать нужное оформление. Но сначала мы должны установить имена группировок, чтобы использовать их в макетах оформления. На закладке Настройки выделим нужную группировку и вызовем ее контекстное меню. Выберем в нем пункт Установить имя (рис. 4.189).
Первой, составной из реквизитов документа группировке зададим имя Шапка, а группировке Детальные записи - имя Табличная часть. Перейдем на закладку Макеты и создадим макет оформления для группировки с именем Шапка (рис. 4.190).
Рис. 4.190. Добавление макета группировки
Как видно, можно создать следующие типы макетов:
•	Макет поля используется для оформления определенных выводимых полей.
•	Макет группировки используется для оформления группировки.
240
Глава 4. Примеры разработки отчетов
•	Макет заголовка группировки используется для оформления имен выводимых в группировке полей.
•	Макет ресурсов используется для оформления ресурсов таблицы, т. е. данных, расположенных в ячейках таблицы.
Выберем пункт Макет группировки. В открывшемся диалоге выберем либо имя группировки Шапка, либо список полей этой группировки и тип макета Заголовок, который используется для оформления значений группировки, выводящихся в начале группировки (рис. 4.191).
Макет группировки	X
Рис. 4.191. Выбор имени и типа макета группировки
В правом окне, как и для обычного макета печатной формы, настроим свойства ячеек области макета, где будет располагаться шапка документа. Так, для ячейки R2C1 в строку Текст введем следующее выражение (листинг 4.25):
Листинг 4.25. Шаблон для ячейки макета R2C1
Сборка системных блоков № [Номер] от [Дата]
Укажем вариант заполнения Шаблон и элементы оформления ячейки: шрифт, цвет текста и границы (рис. 4.192).
241
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.192. Свойства ячейки группировки «Шапка»
В этом шаблоне использованы параметры Номер и Дата. Для ячейки R3C1 в строку Текст введем следующее выражение (листинг 4.26):
Листинг 4.26. Шаблон для ячейки макета R3C1
Системный блок: "[СистемныйБлок]" собрал мастер: [Мастер]
Укажем вариант заполнения Шаблон и элементы оформления ячейки. В этом шаблоне использован параметр СистемныйБлок. Для ячейки R4C1 в строку Текст введем следующее выражение (листинг 4.27):
Листинг 4.27. Шаблон для ячейки макета R4C1
склад: [Склад]
Укажем вариант заполнения Шаблон и элементы оформления ячейки. В этом шаблоне использован параметр Склад. Теперь зададим границы области макета оформления группировки Шапка. Вызовем окно настройки диапазона границ и, не закрывая это окно, выделим мышью в правом окне нужную область. Сохраним диапазон, нажав в его окне кнопку выбора. После этого в левом нижнем окне появится список параметров, определенных для макета (рис. 4.193).
242
Глава 4. Примеры разработки отчетов
Рис. 4.193. Определение границ области макета
По умолчанию платформа присвоит выражения для расчета значений параметров. Переопределим выражение для параметра Дата, чтобы дата документа отражалась в привычном формате (листинг 4.28):
Листинг 4.28. Выражение для параметра «Дата»
Формат(Дата, "ДФ = ’dd.MM.yy"')
ВНИМАНИЕ!
Список параметров, заданных для макета, появится в окне «Параметры макета» только после определения границ диапазона области. При переопределении диапазона список параметров формируется заново, и выражения параметров заменяются значениями по умолчанию.
Для группировки с именем Табличная часть потребуется создать три макета оформления:
•	Макет заголовка группировки - для вывода шапки группировки.
243
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Макет группировки - для вывода значений группировки.
•	Макет группировки - для вывода общих итогов группировки.
Добавим макет заголовка группировки для вывода шапки группировки (рис. 4.190). В открывшемся диалоге выберем имя группировки - Табличная часть и тип макета - Заголовок. Зададим элементы оформления ячеек заголовка группировки - шрифт, цвет текста, фона и границы. У всех ячеек в строке Текст укажем произвольный текст шапки, а в строке Заполнение - Текст (рис. 4.194).
Определим границы диапазона области заголовка группировки. Для этой области мы не использовали параметры.
Рис. 4.194. Свойства ячейки заголовка группировки «Табличная часть»
244
Глава 4. Примеры разработки отчетов
Добавим макет группировки для вывода значений группировки (рис. 4.190). В открывшемся диалоге выберем либо имя группировки Табличная часть, либо список полей этой группировки и тип макета Заголовок. Зададим элементы оформления ячеек значений группировки - шрифт, цвет текста, фона и границы. У всех ячеек в строке Заполнение укажем Параметр, а в строке Параметр - имя конкретного параметра (рис. 4.195).
Рис. 4.195. Свойства ячейки группировки «Табличная часть»
Определим границы диапазона области заголовка группировки. Платформа сформирует список параметров для этой области и заполнит значениями по умолчанию. Так как для поля порядкового номера не найдено соответствия, зададим его значение, нажав кнопку выбора (рис. 4.196).
245
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.196. Установка выражения для параметра «Порядок»
Добавим макет группировки для вывода итогов по группировке (рис. 4.190). В открывшемся диалоге выберем имя группировки Табличная часть и тип макета Общий итог заголовок, который используется для оформления итогов группировки, выводящихся в начале группировки. Зададим элементы оформления ячеек итоговой строки группировки - шрифт, цвет текста, фона и границы. Зададим ячейку Итого с заполнением Текст и ячейку Сумма с заполнением Параметр. Определим границы диапазона области заголовка группировки. Параметр этой области Сумма определится автоматически.
Чтобы предопределенные макеты не влияли на макет нашего документа, в режиме настроек на закладке Другие настройки установим макет оформления Без оформления (стр. 408). Запустим систему в режиме 1С:Предприятие и откроем документ СборкаКомпьютера. Нажмем кнопку Печать. Документ будет оформлен созданным нами макетом оформления (рис. 4.197).
246
Глава 4. Примеры разработки отчетов
Таблица
_ □ X
Сборка системных блоков № 000000001 от 19.03.08
Системный блок: "Компьютер для офиса" собрал мастер: Соколов Андрей склад: Основной
No	Номенклатура	Количество	Цена	Сумма I
1	Жесткий диск	1	3 500	3 5001
2	Материнская плата	1	2 500	2 500
3	Память	1	1 500	1 500
4	Сборка компьютера	1	1 000	1 000
			Итого:	8 600
L-

Рис. 4.197. Печать документа «Сборка компьютера»
Таким образом, на этом примере мы научились:
•	Использовать в схеме компоновки наборы данных -объекты.
•	Заполнять объекты встроенного языка данными и осуществлять программную компоновку отчета, используя внешние наборы данных.
•	Разрабатывать предопределенный общий макет оформления.
•	Разрабатывать предопределенный индивидуальный макет оформления в схеме компоновки данных.
Пример 10. Работа с иерархией.
Работа с расшифровкой
Работу с иерархией продемонстрируем на примере отчета Продажи номенклатуры. Более подробно о работе с иерархией рассказывается на стр. 318.
247
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Допустим, пользователю, нужно видеть информацию в отчете с промежуточными итогами:
•	по группам номенклатуры, созданным в иерархическом справочнике;
•	по другому признаку иерархии, построенному произвольным способом.
Для решения первой задачи откроем отчет в режиме 1С:Пред-приятие. Вызовем окно настроек и два раза щелкнем на группировке Номенклатура. В открывшемся окне поля группировки укажем Тип группировки - Иерархия (рис. 4.198).
Рис. 4.198. Настройка иерархической группировки
Нажмем ОК и сформируем отчет. Информация в отчете представлена с промежуточными итогами по группам справочника Номенклатура - Комплектующие, Услуги, Собранные компьютеры (рис. 4.199).
248
Глава 4. Примеры разработки отчетов
Продажи товаров и услуг
Отбор:	Контрагент. Надежный партнер Равно “Да"
Контрагент, Регион	Количество
Номенклатура _______________~|
Пе; ио .	_	\	,1. ,________
ООО "Автоматика", Королев	___
Собранные компьютеры_____________________
Компьютер для дома_____________________
_______26 марта 2008 г.___________
Услуги___________________________________
Диагностика компьютера_________________
_______18 марта 2008 г.____________________
_______26 марта 2008 г.________________
ООО “Стиль", Москва	________
Комплектующее____________________________
Монитор LCD
Стоимость
11 500.00
10 000,00
1	10	000,00
1	10	000,00
_________1	500,00 2________1	500,00
1	1	000,00
1	500,00
10000,00
_________10 000,00
1]	10 000,00
19 марта 2008 г.	Г 10 000,00,
итого	
Рис. 4.199. Результат отчета с иерархической группировкой по номенклатуре
Теперь рассмотрим пример построения собственной иерархии. Создадим отчет, который будет отражать поступление товаров по складам с иерархией номенклатуры, построенной по собственному принципу (рис. 4.200).
Рис. 4.200.
Требуемый вид отчета
Для этого в справочнике Номенклатура создадим еще один реквизит МойРодитель, указав тип данных СправочникСсыл-ка.Номенклатура (рис. 4.201).
249
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.201. Создание поля для построения иерархии
В режиме 1С:Предприятие создадим в справочнике Номенклатура новую группу Моя иерархия для хранения списка элементов собственной иерархии. Внутри этой группы создадим элементы и заполним у них поле Мой родитель (табл. 4.1).
Таблица 4.1. Заполнение поля «Мой родитель» у элементов группы «Моя иерархия» справочника «Номенклатура»
Наименование	Значение поля «Мой родитель»
Товары для сборки	
Мониторы	Товары для сборки
ОЗУ	Товары для сборки
Основные детали	Товары для сборки
Далее откроем группу Комплектующие и заполним у них поле Мой родитель (табл. 4.2).
Таблица 4.2. Заполнение поля «Мой родитель» у элементов группы «Комплектующие» справочника «Номенклатура»
Наименование	Значение поля «Мой родитель»
Жесткий диск	Основные детали
Материнская плата	Основные детали
Память	ОЗУ
Монитор LCD	Мониторы
250
Глава 4. Примеры разработки отчетов
Таким образом, мы подготовили данные для построения новой иерархии. Конечно, можно было организовать такую иерархию с. помощью групп и получить отчет, используя стандартную иерархию справочника, но мы хотим показать пример, который можно использовать для любого, в том числе неиерархического объекта данных.
Теперь перейдем к созданию самого отчета. Добавим новый объект конфигурации Отчет и назовем его Поступление Товаров. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Назовем его Приход. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления ОстаткиНоменклатуры. Обороты. В список полей перенесем поля (рис. 4.202):
•	Склад,
•	Номенклатура,
•	КоличествоПриход.
г- U ОстагкиНоменклатурыОбороты.Склад
Г" t— ОстеткиНоменклатурыОбороты.Номенклэтура
?ОстаткиНоменклатурыОбороты КоличествоПриход
Рис. 4.202. Выбор полей для запроса
На закладке Объединения/Псевдонимы изменим имя у поля КоличествоПриход на Приход. Из этого запроса мы будем получать нужные нам данные о поступлении товаров. Нажмем ОК и вернемся в конструктор схемы компоновки данных.
Чтобы выполнить иерархическую группировку, процессору компоновки данных требуется информация об источнике данных для построения иерархии. Поэтому нам необходимо создать набор данных, содержащий информацию о текущем элементе справочника Номенклатура и его родителе, с последующим указанием связи набора к самому себе. Выделив
251
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
корневой элемент наборов данных, добавим набор данных -запрос. Назовем его Иерархия. В качестве источника данных для запроса выберем объектную таблицу справочника Номенклатура. В список полей перенесем поля Ссылка, МойРодитель (рис. 4.203):
ЮЛЯ
[Номенк натура. С ы лк. а
: — НоменклетураМойРодигель
Рис. 4.203. Выбор полей для запроса
Перейдем на закладку Условия, раскроем таблицу Номенклатура и перетащим мышью поле Ссылка в список условий. В предложенном по умолчанию условии выберем вид сравнения - В (рис. 4.204).
Рис. 4.204. Создание условия запроса
На закладке Объединения/Псевдонимы изменим имя у поля Ссылка на Номенклатура. Это важно, так как мы будем использовать это поле для связи наборов данных, и оно должно в обоих наборах иметь одинаковый путь (рис. 4.205).
252
Глава 4. Примеры разработки отчетов
Рис. 4.205. Изменение псевдонима поля в запросе
Нажмем ОК и вернемся в конструктор схемы компоновки данных. Текст запроса набора Иерархия примет вид (листинг 4.29):
Листинг 4.29. Текст запроса
ям'МПГ tmr~
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
Номенклатура.МойРодитель
ИЗ
Справочник.Номенклатура КАК Номенклатура ГДЕ
Номенклатура.Ссылка В(&Ссылка)
На закладке Связи наборов данных необходимо добавить связь:
•	между наборами данных Приход и Иерархия по полю Номенклатура;
•	для набора данных Иерархия нужно установить связь к самому себе от поля МойРодитель к полю Номенклатура. Это условие позволит последовательно получить всех родителей элемента.
В настройках связи зададим параметр Ссылка, который был определен для запроса набора данных Иерархия. В этот параметр будет помещено значение связи источника (рис. 4.206).
253
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ч? Отчет ПоступлениеТоваров ОсновнаяСхемаКомпоновкиДанных	_ □ X
Наборы данных | Связи наборов... | Вычисляемые п. Ресурсы Параметры Макеты В ложенные схе... Настройки
'Приход	[Приемник связи	Выражение ист..	Вьюажение при...	Параметр	Список пар..
	| Иерархия	Номенклатура	Номенклатура	Ссылка	0
Иерархия	| Иерархия	МойРодитель	Номенклатура	Ссылка	0
Условие - (Началь... |Обя:
Рис. 4.206. Установка связей наборов данных
ВНИМАНИЕ!
Поле для связи наборов данных обязательно должно иметь одинаковое имя в обоих наборах, иначе наименования родителей в отчете будут пустыми!
На закладке Ресурсы определим ресурсы отчета (стр. 385), рис. 4.207.
Рис. 4.207. Окно ресурсов отчета
На закладке Параметры (стр. 390) мы видим параметры компоновки данных, созданные платформой. Для параметра Ссылка по умолчанию установлена недоступность для пользователя. Мы будем использовать стандартный период для указания периода отчета. Добавим параметр с именем Период типа СтандартныйПериод, а для параметров НачалоПериода и КонецПериода укажем Выражение для расчета и запретим их редактирование пользователем (листинг 4.30).
254
Глава 4. Примеры разработки отчетов
Листинг 4.30. Выражение для расчета параметров «НачалоПериода» и «КонецПериода»
Лериод-ДатаНачала
Лериод.ДатаОкончания
В результате параметры компоновки данных примут вид (рис. 4.208):
Рис. 4.208. Установка параметров отчета
Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Склад. Затем добавим вложенную в нее группировку Номенклатура. При выборе поля группировки укажем тип группировки Иерархия. На закладке Выбранные поля перенесем из списка доступных полей поле Приход (рис. 4.209).
Рис. 4.209. Определение полей и группировок отчета
255
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
На закладке Параметры данных установим значение параметра Период - Это полугодие (рис. 4.210).
Параметры дайн.-| Выбранные поля Отбор Сортировка Условное оформ,- Пользовагельст... Другие настройки
	Параметр	ннн
	Дета начала	Дета окончания
0	Период	
	01.01.2008	30.06.2008
		
Рис. 4.210. Настройка периода отчета
Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. На закладке Другие настройки установим макет оформления (стр. 408) отчета Радуга и заголовок отчета Поступление товаров. Выполним отчет (рис. 4.211).
Отчет Поступление товаров	— П X
Действия* ► Сформировать ; Конструктор настроек Настройки
Поступление товаров
Параметры данных:	Период = 01.01.2008 - 30.06.2008
в
в
В
Номен!
Приход
Товары для сборки
ОЗУ__________
Память
Основные детали Жесткий диск Материнская плата
Товары для сборки
Мониторы
Монитор LCD ИТОГО
ИМ&
13,000
5,000
5,000 _8,000
3,000
5,000
2 000
2,000
2,000
2,000
15,000
ЙЕ
Рис. 4.211. Результат отчета
Мы видим, что данные в отчете выводятся с заданной нами новой иерархией, кроме того, отчет оформлен созданным нами в предыдущем примере макетом оформления.
Продемонстрируем теперь на этом же примере работу с расшифровкой (стр. 344). Предположим, мы хотим иметь возможность
256
Глава 4. Примеры разработки отчетов
открывать из отчета первичные документы по поступлению товаров. Для этого нам нужно детализировать записи в отчете по полю Регистратор, то есть документу, который произвел движения о поступлении товаров в регистре накопления ОстаткиНоменклатуры. Откроем схему компоновки данных на закладке Наборы данных и вызовем конструктор запроса набора данных Приход. Вызовем диалог параметров виртуальной таблицы ОстаткиНоменклатуры.Обороты. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы. В открывшемся окне параметров зададим значение параметра Периодичность - Регистратор (рис. 4.212).
Параметры виртуальной таблицы	X
НачалоПериода
КонецПериода
Периодичность
Условие
Рис. 4.212. Установка параметра «Периодичность»
Рис. 4.213. Добавление группировки «Детальные записи»
и поля «Регистратор» в отчет
257
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В список полей запроса добавим поле Регистратор. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Поле Регистратор появится в списке доступных полей набора данных Приход. Теперь добавим его в структуру отчета. На закладке Настройки выделим группировку Номенклатура (Иерархия) и добавим вложенную в нее группировку Детальные записи без указания группировочного поля. На закладке Выбранные поля перенесем из списка доступных полей поле Регистратор (рис. 4.213).
Выполним отчет. Записи в нем будут детализированы по документу-регистратору. Двойным щелчком на этом поле мы можем вызвать выпадающее меню расшифровки и открыть в нем первичный документ поступления товаров (рис. 4.214).
Рис. 4.214. Результат отчета
258
Глава 4. Примеры разработки отчетов
Таким образом, если мы хотим расшифровывать информацию по какому-либо детальному полю, мы должны добавить его в список доступных полей отчета. Заметим, что если отчет выполняется стандартной процедурой Сформировать, данные расшифровки заполняются по умолчанию. Однако в отчетах, где мы использовали собственную процедуру программной компоновки данных - Отчет по системным блокам (пример 4) и Сборка системных блоков (пример 7), нужно явно указывать объект Данные расшифровки для заполнения информации о расшифровке при формировании отчета. Откроем в модуле формы этих отчетов процедуру СформироватьОтчет() и отредактируем фрагмент кода следующим образом (листинг 4.31):
Листинг 4.31. Фрагмент процедуры СформироватьОтчет()
КомпоновщикМакета - Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить
(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки
, ВнешниеНаборыДанных, ДанныеРасшифровки);
Тогда при двойном щелчке мыши на поле отчета вызывается стандартное меню расшифровки, которое состоит из возможных действий над расшифровкой: Расшифровать, Открыть, Отфильтровать, Упорядочить, Сгруппировать, Оформить. Действие Расшифровать недоступно, если данный элемент расшифровки - Детальные записи, кроме случая, когда он содержит поля-ресурсы. Однако разработчик может реализовать и свой, нестандартный, вариант расшифровки. Продемонстрируем этот вариант на примере отчета Сборка системных блоков. Откроем форму отчета. Двойным щелчком на поле Результат или через контекстное меню вызовем диалог его свойств, найдем событие ОбработкаРасшифровки и нажмем значок лупы справа от него (рис. 4.215).
259
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 4.215. Обработчик события «ОбработкаРасшифровки» для поля табличного документа «Результат»
В модуле формы будет автоматически создан шаблон обработчика события ОбработкаРасшифровки, которое будет вызываться двойным щелчком на поле отчета. Внесем в него следующий текст (листинг 4.32).
Листинг 4.32. Процедура обработчика события обработки расшифровки для поля «Результат»
Процедура Результат0бработкаРасшифровки(ЭЛемент
, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие;
// Запретим стандартную обработку расшифровки. СтандартнаяОбработка « Ложь;
// Создадим и инициализируем обработчик расшифровки.
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновки Данных(ДанныеРасшифровки, Новый ИсточникДоступных НастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ДоступныеДействия = Новый Массив{);
ДоступныеДействия.Добавить(ДействиеОбработки
РасшифровкиКомпоновкиДанных.ОткрытьЗначение);
260
Глава 4. Примеры разработки отчетов
ДостулныеДействия .Добавить (ДействиеОбработки
РасшифровкиКомпоновкиДанных.Упорядочить);
Доступ ныеДействия .Добавить(ДействиеОбработки
РасшифровкиКомпоновкиДанных.Расшифровать);
// Осуществим выбор действия расшифровки пользователем.
Настройки » ОбработкаРасшифровки.Выполнить(Расшифровка
, ВыполненноеДействие, ДостулныеДействия);
Если Настройки о Неопределено Тогда
Ц Пользователь выбрал действие, для которого нужно менять настройки. Если ВыполненноеДействие
ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); СформироватьОтчет();
Иначе
// При других действиях - создадим новый отчет, // откроем форму, сформируем отчет в ней.
Отчет == 0тчеты.С6оркаСистемныхБлоков.Создать();
Форма  Отчет.ПолучитьФорму("ФормаОтчета");
Форма.Открыть();
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); Форма.СформироватьОтчет();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Здесь мы отменяем стандартную обработку расшифровки, создаем новый обработчик расшифровки - объект Обработ-каРасшифровкиКомпоновкиДанных, затем задаем список доступных действий расшифровки - ОткрытьЗначение, Упорядочить, Расшифровать, выполняем выбор действия расшифровки, загружаем настройки для выбранной расшифровки в компоновщик настроек и переформировываем отчет. Чтобы компоновка проводилась с новыми настройками, в начало процедуры СформироватьОтчет() запишем следующий фрагмент кода (листинг 4.33).
261
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Листинг 4.33. Фрагмент процедуры СформироватьОтчет()
Настройки = КомпоновщикНастроек.Настройки;
Выполним отчет. Двойным щелчком на поле отчета мы можем вызвать меню собственной расшифровки и выполнить перечисленные в нем действия расшифровки (рис. 4.216).
Сборка системных блоков
Тараметры данных Начало периода » 01.01.2008 Конец периода « 31.05.2008
Количество (Стоимость
]Номер
Системный блок
Мастер Вата
Компьютерлля дома Ильин Сергей ______
26.03.2008	<000000002
9 000,00
0000,00
9 000,00
0 500,00
Расшифровать...
Открыть "Системный блок « Компьютер для офиса"
Упорядочить
8 500,00
8 500,00!
500,00|
1
1
Рис. 4.216. Результат отчета
Однако в случае, когда мы выводили результат отчета не в форму, а в простой табличный документ, как, например, при выводе списка номенклатуры из справочника номенклатуры (пример 3), расшифровка работать не будет. Поэтому сначала мы поместим результат отчета в поле табличного документа, расположенного в форме. Откроем объект конфигурации справочник Номенклатура, на закладке Формы нажмем кнопку Добавить, в открывшемся конструкторе форм создадим форму типа Произвольная форма с именем ФормаОтчета. Откроем эту форму и выполним пункт основного меню Форма - Вставить элемент управления. Выберем элемент управления - Поле табличного документа и дадим ему имя Результат. Расположим поле результата отчета в форме. Откроем теперь другую форму справочника Фор-маСписка.
262
Глава 4. Примеры разработки отчетов
В модуле этой формы в начало процедуры ПечатьНажатие() запишем следующий фрагмент кода (листинг 4.34):
Листинг 4.34. Фрагмент процедуры ПечатьНажатие()
Форма = Справочники.Номенклатура.ПолучитьФорму("ФормаОтчета");
Форма.Заголовок - "Список номенклатуры";
Форма.Открыть();
Возврат;
Тем самым по нажатии кнопки Печать мы вызываем специальную форму отчета, в которой и будет формироваться результат. Откроем форму ФормаОтчета. Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткрытии() и нажмем значок лупы справа от него. В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы. Внесем в него следующий текст (листинг 4.35):
Листинг 4.35. Процедура модуля формы ПриОткрытии()
Процедура ПриОткрытии()
СхемаКомлоновкиДанных « Отчеты.СписокНоменклатуры.ПолучитьМакет ("ОсновнаяСхемаКомпоновкиДанных");
Настройки - СхемаКонпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета • Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки « Новый ДанныеРасшифровкиКомпоновкиДанных; МакетКомпоновки - КомпоновщикМакета.Выполнить
(СхемаКомлоновкиДанных, Настройки , ДанныеРасшифровки);
ПроцессорКомпоновкиДанных « Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки
,, ДанныеРасшифровки);
ДокументРезультат = ЭлементыФормы.Результат;
ПроцессорВывода = Новый ПроцессорВыводаРезультата КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
263
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Двойным щелчком на поле Результат или через контекстное меню вызовем диалог его свойств, найдем событие Выбор и нажмем значок лупы справа от него (рис. 4.217).
Рис. 4.217. Обработчик события «Выбор» для поля табличного документа «Результат»
В модуле формы будет автоматически создан шаблон обработчика события Выбор(), которое будет вызываться двойным щелчком на поле отчета. Внесем в него следующий текст (листинг 4.36):
Листинг 4.36. Процедура обработчика события Выбор() для поля «Результат»
Процедура РезультатВыбор(Элемент, Область, СтандартнаяОбработка) ИндексРасшифровки - Число(Область.Расшифровка);
ОбработкаРасшифровки « Новый ОбработкаРасшифровкиКомпоновки Данных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроек
КомпоновкиДанных(СхемаКомпоновкиДанных));
ЭлементРасшифровкиДанных « ДанныеРасшифровки
.Элементы[ИндексРасшифровки];
264
Глава 4. Примеры разработки отчетов
ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных .ЛолучитьПоля()[0];
ОбработкаРасшифровки.ОткрытьЗначение(ЭлементРасшифровкиДанных .Идентификатор, Новый ПолеКомпоновкиДанных (ЭлементРасшифровкиДанныхПоля.Поле));
КонецПроцедуры
В начало модуля внесем определение переменных (листинг 4.37):
Листинг 4.37. Определение переменных
Перем ДанныеРасшифровки, СхемаКомпоновкиДанных;
Прокомментируем текст модуля. В модуле формы мы создали процедуру ПриОткрытии(), которая вызывается при открытии формы отчета. В ней определяются схема компоновки данных и настройки по умолчанию нашего отчета. Затем компонуется отчет и выводится в элемент формы Результат, а не в табличный документ, как было ранее. В модуле формы мы также создали процедуру РезультатВыбор(), которая вызывается при двойном щелчке мыши на поле отчета. Именно здесь нужно определять действия по расшифровке, так как стандартная расшифровка и событие ОбработкаРасшифровки() вызываются только для форм типа Форма отчета. В процедуре РезультатВыборО мы создаем объект ОбработкаРасшифровкиКомпоновкиДанных, затем получаем ЭлементРасшифровкиДанных и ЭлементРасшифровкиДанныхПоля и выполняем действие расшифровки ОткрытьЗначение для выбранного поля.
В режиме 1С:Предприятие откроем справочник номенклатуры и нажмем кнопку Печать. Двойным щелчком на поле отчета мы можем открыть элемент справочника (рис. 4.218).
265
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 4.218. Результат отчета
Таким образом, на этом примере мы научились:
•	Выводить данные в отчете, отражающие структуру иерархического справочника.
•	Задавать собственную иерархию по произвольному реквизиту и отображать ее в отчете.
•	Выводить данные с детализацией по первичному документу-регистратору.
•	Заполнять данные расшифровки при программном формировании отчета.
•	Создавать собственные обработчики события расшифровки отчета.
266
Глава 4. Примеры разработки отчетов
Пример 11. Использование источников данных - объединений объектов.
Программная настройка отчета. Программное описание схемы компоновки данных
В этом примере мы продолжим работать с объектами встроенного языка и рассмотрим их объединение в наборе данных. Такое решение нам подходит, так как мы хотим разработать отчет, содержащий объединенную информацию о поступлении и расходе комплектующих на сборку системных блоков. Этот отчет будет вызываться из документа СборкаКомпьютера и представлять информацию о списке комплектующих, содержащихся в документе (рис. 4.219).
Анализ цен комплектующих
Номенклатура	। Поступили		। Собрано		Выручка
	^ОЛИЧнСТВО	Цен?	I h ОЛИЧшСТВО	(е -а	
Жесткий диск	з!	3 000	з1	3 600	1 8001
Материнская плата	5	2 000	3	2 833	2 500
Замять	5	1 200	3	1 667	1 400
Рис. 4.219. Требуемый вид отчета
компонов-настройку
Решив поставленную задачу средствами схемы ки данных, мы затем осуществим программную и компоновку отчета. Итак, сначала создадим схему компоновки данных, позволяющую получить нужный отчет. Затем программно заполним используемые в ней наборы данных. Далее с помощью встроенного языка осуществим компоновку данных. Затем попробуем выполнить программную настройку отчета и программное описание схемы компоновки данных.
Выделим ветку Макеты документа СборкаКомпьютера в дереве объектов конфигурации и нажмем кнопку Добавить в командной панели окна конфигурации. В открывшемся конструкторе макета зададим имя макета АнализЦенКомплектующих и выберем тип
267
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
макета Схема компоновки данных. Нажмем кнопку Готово. В окне конструктора схемы компоновки данных добавим новый набор данных - объединение (рис. 4.220).
Рис. 4.220. Добавление набора данных - объединения
Затем выделим его и добавим два вложенных в него набора -набор данных - объект. Назовем первый набор ЦеныСбор-ки и такое же имя зададим в поле Имя объекта, содержащего данные. Этот набор данных будет отражать информацию о расходе комплектующих, указанных в документе, на сборку системных блоков. Нажимая кнопку Добавить, создадим список полей набора данных с аналогичными именами (рис. 4.221):
• Номенклатура,
• ЦенаСборки (Цена),
• Собрано (Количество).
Рис. 4.221. Список полей набора данных 268
Глава 4. Примеры разработки отчетов
Второй набор назовем ЦеныПоступления и такое же имя зададим в поле Имя объекта, содержащего данные. Этот набор данных будет отражать информацию о поступлении комплектующих, указанных в документе, на сборку системных блоков. Нажимая кнопку Добавить, создадим список полей набора данных с аналогичными именами (рис. 4.222):
• Номенклатура,
• ЦенаПриход (Цена),
• Поступило (Количество).
Рис. 4.222. Список полей набора данных
ПРИМЕЧАНИЕ
Обратите внимание, что имена полей (Цена, Количество) табличной части документов СборкаКомпьютера и Приход-наяНакладная, данными которых будут заполняться объекты, одинаковы, но мы дали им разные имена, чтобы использовать их в ресурсах и настройках отчета.
Дальше выполним уже знакомые действия по формированию настроек схемы компоновки данных. На закладке Вычисляемые поля добавим поле Выручка, но не будем указывать выражение для его расчета, так как мы зададим его позже при определении полей ресурсов (стр. 385). На закладке Ресурсы перетащим 269
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
в список ресурсов доступные поля отчета и введем вручную Выражения для них (табл. 4.3).
Таблица 4.3. Заполнение полей ресурсов и выражений для их расчета
Поле ресурса	Выражение
ЦенаПриход	Среднее(ЦенаПриход)
ЦенаСборки	Среднее(ЦенаСборки)
Выручка	Сумма(Собрано) * (Среднее(ЦенаСборки) -Среднее(ЦенаПриход))
Собрано	Сумма(Собрано)
Поступило	Сумма(Поступило)
Тем самым мы указали, что будем группировать данные по полю Номенклатура, а в итогах по группировке хотим получать суммарные сведения о количестве и средние сведения о ценах поступления и расходования комплектующих. Ресурс Выручка рассчитывается как произведение разницы между ценами сборки и поступления на сумму комплектующих, израсходованных на сборку. В результате окно ресурсов схемы компоновки данных примет вид (рис. 4.223):
Рис. 4.223. Определение ресурсов отчета
На закладке Настройка добавим в отчет группировку по полю Номенклатура, так как по этому признаку будут группироваться данные о количестве и ценах поступления и расходования комплектующих. На закладке Выбранные поля создадим многоуровневую структуру полей отчета. Сначала, нажав кнопку Добавить, создадим две группы: Поступило и Собрано. Затем в первую группу из списка доступных полей перетащим поля 270
Глава 4. Примеры разработки отчетов
Поступило и ЦенаПриход, во вторую - Собрано и ЦенаСбор-ки. В заключение перетащим в основной уровень отчета поле Выручка (рис. 4.224).
Рис. 4.224. Определение полей и группировок отчета
На закладке Другие настройки установим заголовок отчета -Анализ цен комплектующих и параметр вывода Расположение общих итогов по вертикали - Нет. На закладке Наборы данных изменим заголовки у полей ЦенаПриход и ЦенаСборки на Цена, Собрано и Поступило на Количество, так как мы ввели для них в шапке отчета поясняющее общее поле (рис. 4.225).
Рис. 4.225. Определение заголовков полей в шапке отчета
271
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для полей ЦенаПриход и ЦенаСборки на закладке Наборы данных и поля Выручка на закладке Вычисляемые поля в колонке Оформление зададим формат, чтобы значения отображались без копеек. Вызовем диалог Формат поля и в строку Формат введем выражение (листинг 4.38).
Листинг 4.38. Формат полей «ЦенаПриход», «ЦенаСборки», «Выручка»
ЧЦ-6; ЧДЦ-0
На этом закончим работу со схемой компоновки данных. Теперь поместим в документ СборкаКомпьютера кнопку Анализ Цен, при нажатии на которую будет исполняться программный код, заполняющий внешние наборы данных и выполняющий компоновку и представление отчета. Откроем форму документа ФормаДокумента, созданную нами ранее, и добавим кнопку Анализ Цен в командную панель Основные действия формы (рис. 4.226).
Рис. 4.226. Добавление в форму документа
кнопки «Анализ Цен»
В свойствах кнопки, в строке Действие, создадим обработчик события нажатия на эту кнопку (рис. 4.227).
272
Глава 4. Примеры разработки отчетов
Рис. 4.227. Создание обработчика события
В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки АнализЦен, в который мы внесем следующий текст (листинг 4.39):
Листинг 4.39. Процедура обработчика события нажатия кнопки
«АнализЦен»
Процедура ОсновныеДействияФормыАнализЦен(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст - "ВЫБРАТЬ
(ПриходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
(ПриходнаяНакладнаяТовары.Количество Как Поступило, (ПриходнаяНакладнаяТовары.Цена КАК ЦенаПриход
|ИЗ
(Документ. Приходная Накладная. ПереченьНомен клатуры
КАК ПриходнаяНакладнаяТовары
f (ГДЕ
(Номенклатура в (&СписокНоменклатуры)”г
Запрос.УстановитьПараметрС'СпиеокНоменклатуры’', ПереченьНоменклатуры . ВыгрузитьКолонку(" Номен клатура"));
Результат » Запрос.Выполнить();
Поступление = Результат.Выгрузить():
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
273
Разработка сложных отчетов в 1С:Г1редприятии 8. Система компоновки данных
СборкаКомпьютераТовары.Номенклатура КАК Номенклатура, СборкаКомпьютераТовары.Количество КАК Собрано, СборкаКомпьютераТовары.Цена КАК ЦенаСборки ИЗ
Документ.СборкаКомпьютера.ПереченьНоменклатуры
КАК СборкаКомпьютераТовары 1ДЕ
Номенклатура в (&СписокНоменклатуры) И
Номенклатура.ВидНоменклатуры » &ВидНоменклатуры";
Запрос.УстановитьПараметр("СписокНоменклатуры", ПереченьНоменклатуры .ВыгрузитьКолонкуС'Номенклатура"));
Запрос.УстановитьПараметр(”ВидНоменклатуры", Перечисления .ВидыНоменклатуры.Материалы);
Результат - Запрос.Выполнить();
Сборка “ Результат.ВыгрузитьО;
ВнешниеНаборыДанных « Новый Структура;
ВнешниеНаборыДанных.Вставить("ЦеныПоступления", Поступление);
ВнешниеНаборыДанных.Вставить("ЦеныСборки", Сборка);
СхемаКомпоновкиДанных • ПолучитьМакет("АнализЦенКомплектующих"); Настройки • СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета •* Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки - Новый ДанныеРасшифровкиКомпоновкиДанных; МакетКомпоновки - КомпоновщикМакета.Выполнить(СхемаКомпоновки
Данных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки , ВнешниеНаборыДанных, ДанныеРасшифровки);
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывесги(ПроцессорКомпоновкиДанных);
ДокументРезультат.ОтображатьСетку = Ложь;
ДокументРезультат.ОтображатьЗаголовки - Ложь;
ДокументРезультат.Показать();
КонецПроцедуры
274
Глава 4. Примеры разработки отчетов
Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора поступлений комплектующих из документов ПриходнаяНакладная. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаПриход и Поступило. В качестве параметра запроса используется список номенклатуры табличной части текущего документа. Затем определяется запрос для выбора расхода комплектующих из документов СборкаКомпьютера. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаСборки и Собрано. В качестве параметров запроса используется список номенклатуры табличной части текущего документа и вид номенклатуры - Материалы, так как в отчете нужно отображать только комплектующие. Затем создаются два внешних набора данных - ЦеныПоступления и Це-ныСборки и заполняются результатами запросов. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. Запустим системуврежиме 1С:Предприятие. Откроем документ СборкаКомпьютера. Нажмем кнопку АнализЦен. На экране появится наш отчет (рис. 4.228).
Рис. 4.228. Результат отчета
Теперь продемонстрируем возможность программной настройки нашего отчета. Для этого сначала удалим все настройки, которые мы сделали в схеме компоновки данных.
275
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
СОВЕТ
Советуем перед удалением настроек сохранить схему компоновки данных в файл.
На закладке Настройки нажмем кнопку L3 Стандартная настройка, расположенную на командной панели справа в окне. На запрос конфигуратора о подтверждении потери текущих настроек ответим утвердительно. В результате все сделанные нами настройки будут очищены, а мы восстановим их программным образом.
В модуле формы документа откроем процедуру обработчика события нажатия на кнопку АнализЦен и отредактируем фрагмент кода следующим образом (листинг 4.40).
Листинг 4.40. Фрагмент процедуры обработчика события нажатия кнопки «АнализЦен»
СхемаКомлоновкиДанных = ПолучитьМакет("АнализЦен Комплектующих");
УстановитьНастройки ();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Как видим, мы добавили вызов процедуры УстановитьНастрой-ки(), в которой будут программно установлены настройки отчета. Затем добавим эту процедуру в модуль формы и объявим переменные в начале модуля (листинг 4.41).
Листинг 4.41. Процедура объявления переменных
Перем СхемаКомлоновкиДанных, Настройки;
Процедуру УстановитьНастройки() будем вносить и комментировать по частям для лучшего восприятия материала. Сначала получим настройки по умолчанию схемы компоновки данных, которые мы предварительно очистили. Создадим группировку по полю Номенклатура и назначим для нее автовыбор полей (листинг 4.42).
276
Глава 4. Примеры разработки отчетов
Листинг 4.42. Процедура программной установки настроек
Процедура УстановитьНасгройки()
Настройки «= СхемаКомпоновкиДанных.НасгройкиПоУмолчанию;
ГруппировкаНоменклатура = Настройки, Структура.Добавить(Тип(Труппировка КомпоновкиДанных"));
ГруппировкаНоменклатура.Использование » Истина;
ПолеНоменклатура - ГруппировкаНоменклатура.ПоляГруппировки.Элементы .Добавить(Тип(яПолеГруппировкиКомпоновкиДанных"));
ПолеНоменклатура.Использование = Истина;
ПолеНоменклатура.Поле «• Новый ПолеКомпоновкиДанных ("Номенклатура");
ВыбранныеПоляДляНоменклатуры » ГруппировкаНоменклатура.Выбор
.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных”));
ВыбранныеПоляДляНоменклатуры,Использование * Истина;
В общем списке выбранных полей создадим группу Поступило и добавим в нее поля Поступило с заголовком Количество и ЦенаПриход с заголовком Цена. Затем создадим группу Собрано и добавим в нее поля Собрано с заголовком Количество и ЦенаСборки с заголовком Цена. Затем в общий список выбранных полей добавим поле Выручка (листинг 4.43).
Листинг 4.43. Процедура программной установки настроек
ГруппаВыбранныхПолей «= Настройки. Выбор.Элементы
.Добавить(Тип('ТруппаВыбранныхПолейКомпоновкиДанных”)); ГруппаВыбранныхПолей.Использование « Истина;
ГруппаВыбранныхПолей.Заголовок »’'Поступило";
Поле! = ГруппаВыбранныхЛолейЗлементы
.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ПолеХ.Использование » Истина;
Поле1.3аголовок = ’’Количество”;
Поле1.Поле * Новый ПолеКомпоновкиДанных("Поступило");
Поле2 « ГруппаВыбранныхЛолейЗлементы
.Добавить(Тип(”ВыбранноеПолеКомпоновкиДанных" ")); Поле2.Использование » Истина;
Полег .Заголовок» ’’Цена";
Полег.Поле » Новый ПолеКомпоновкиДанных(’’ЦенаПриход");
ГруппаВыбранныхПолей * Настройки.Выбор.Элементы
.Добавить(Тип(ТрулпаВыбранныхПолейКомпоновкиДанных”)); ГруппаВыбранныхПолей.Использование * Истина;
ГруппаВыбранныхПолей.Заголовок = "Собрано”;
Поле! * ГруппаВыбранныхЛолей.Элементы
,Дoбaвить(Tип(”BыбpaннoeПoлeKoмпoнoвкиДaнныx,'));
277
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Поле1.Использование * Истина;
Поле1.3аголовок *"Количество";
Поле1.Поле « Новый ПолеКомпоновкиДанных(”Собрано’’);
Полей » ГруппаВыбранныхПолей.Элементы
.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных”)):
Полей.Использование = Истина;
ПолеЙ.Заголовок == ’’Цена”;
Полей.Поле = Новый ПолеКомпоновкиДанных(”ЦенаСборки”);
ВыбранныеПоля « Настройки.Выбор.Элементы
.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных”));
ВыбранныеПоля.Использование - Истина;
ВыбранныеПоля.Заголовок « "Выручка";
ВыбранныеПоля.Поле = Новый ПолеКомпоновкиДанных("Выручка");
Настроим параметры вывода Заголовок и ВертикальноеРас-положениеОбщихИтогов. Обратите внимание, что названия некоторых параметров вывода не совпадают с названиями в окне настроек схемы компоновки данных. Список имен параметров для программного использования можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Настройки компоновки данных - Значе-нияПараметровВыводаКомпоновкиДанных (листинг 4.44).
Листинг 4.44. Процедура программной установки настроек
ПараметрВывода = Настройки.ПараметрыВывода .НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных( " Верти кал ьноеРаспол ожен иеОбщих Итогов”));
ПараметрВывода.Использование * Истина;
ПараметрВывода.Значение -
РасположениеИтоговКомпоновкиДанных.Нет;
ПараметрВывода - Настройки.ПараметрыВывода
*НайтиЗначениеПараметра(Новый
ПараметрКомпоновкиДанных(’’Заголовок"));
ПараметрВывода.Использование w Истина;
ПараметрВывода.Значение «"Анализ цен комплектующих”;
КонецПроцедуры
278
Глава 4. Примеры разработки отчетов
Чтобы продемонстрировать программную настройку отбора, уберем отбор по виду номенклатуры на уровне запроса для набора данных ЦеныСборки. В модуле формы документа откроем процедуру обработчика события нажатия на кнопку АнализЦен и отредактируем фрагмент кода следующим образом (листинг 4.45).
Листинг 4.45. Фрагмент процедуры обработчика события нажатия кнопки «АнализЦен»
(ГДЕ
(Номенклатура в (&СписокНоменклатуры)";
// (Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
Запрос.УстановитьПараметрС'СписокНоменклатуры", ПереченьНоменклатуры
.ВыгрузитьКолонку("Номенклатура"));
//Запрос.УстановитьПараметр("ВидНоменклатуры", // Перечисления.ВидыНоменклатуры.Материалы);
Как видим, мы закомментировали использование в отборе параметра ВидНоменклатуры. Запустим систему в режиме 1 (^Предприятие. Откроем документ СборкаКомпьютера. Нажмем кнопку АнализЦен. В отчете будет присутствовать услуга Сборка компьютера, которой не должно быть по условию задачи. Поэтому мы добавим отбор в процедуру УстановитьНа-стройки() так, чтобы в отчет попадала только номенклатура из группы Комплектующие, и отключим вывод информации об отборе (листинг 4.46).
Листинг 4.46. Процедура программной установки настроек
ЭлементОтбора * Настройки.Отбор.Элементы
.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора-ЛевоеЗначение - Новый ПолеКомпоновкиДанных("Номенклатура"); ЭлементОтбора.ВидСравнения«ВидСравненияКомпоновкиДанных.ВИерархии; ЭлементОтбора.ПравоеЗначение = Справочники.Номенклатура
.НайтиПоНаименованию("Комплектующие'');
ПараметрВывода • Настройки.ПараметрыВывода .НайтиЗначениеПараметра(Новый Параметр КомпоновкиДанных("ВыводитьОтбор"));
ПараметрВывода.Использование  Истина;
ПараметрВывода.Значение  ТипВыводаТекстаКомпоновкиДанных
.НеВыводить;
КонецПроцедуры
279
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Проверим результат. Вид отчета в точности соответствует разработанному ранее в схеме компоновки данных отчету (рис. 4.228).
Попробуем теперь программно описать саму схему компоновки данных, ее наборы данных, поля, ресурсы и вычисляемые поля, используемые затем в настройке отчета. Хотя эта задача довольно трудоемкая, но полезная с точки зрения освоения методов и свойств объектов системы компоновки данных. Информацию о них можно увидеть в разделе Синтакс-Помощника: Общие объекты - Система компоновки данных - Схема компоновки данных...
В модуле формы документа откроем процедуру обработчика события нажатия на кнопку АнализЦен и отредактируем фрагмент кода следующим образом (листинг 4.47):
Листинг 4.47. Фрагмент процедуры обработчика события нажатия кнопки «АнализЦен»
 // СхемаКомпоновкиДанных» ПолучитьМакет("АнализЦенКомплектующих");
УстановитьСхему();
УстановитьНастройки();
Как видим, мы закомментировали использование схемы компоновки данных АнализЦенКомплектующих и добавили вызов процедуры УстановитьСхемуО, в которой будет программно создана и описана новая схема компоновки. Затем добавим эту процедуру в модуль формы. Процедуру УстановитьСхему() будем вносить и комментировать по частям для лучшего восприятия материала. Сначала создадим новую схему компоновки данных. Добавим локальный источник данных информационной базы. Затем создадим НаборДанныхОбъединение с именем На-борДанных1 и два его элемента - НаборДанныхОбъект с именами ЦеныСборки и ЦеныПоступления. Обратите внимание, что имена наборов и их полей должны совпадать с
280
Глава 4. Примеры разработки отчетов
указанными именами в процедуре их программного заполнения при нажатии на кнопку АнализЦен (листинг 4.48).
Листинг 4.48. Процедура программной установки схемы компоновки
Процедура УстановитьСхему()
СКД - Новый СхемаКомпоновкиДанных;
ИД - СКД.ИсточникиДанных.Добавить();
ИД.Имя - "ИсточникДанных";
ИД.ТипИсточникаДанных »"Local";
НаборДанных - СКД.НаборыДанных
.Добавить(Тип("НаборДанныхОбъединениеСхемыКомпоновкиДанных"));
НаборДанных.Имя - "НаборДанныхГ;
Набор! = НаборДанных.Эле менты
.Добавить(Тип(“НаборДанныхОбъектСхемыКомпоновкиДанных"));
Набор!.Имя = "ЦеныСборки’';
Набор!. ИмяОбъекта - "ЦеныСборки";
Набор!.ИсточникДанных = "ИсточникДанных";
Набор2 = НаборДанных.Элементы
.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
Набор2.Имя - 'ЦеныПоступления";
Набор2.Имя0бъекта »"ЦеныПоступления";
Набор2, ИсточникДанных - "ИсточникДанных";
В первый набор-объект добавим поле Номенклатура, Це-наСборки с заголовком Цена и Собрано с заголовком Количество. Во второй набор-объект добавим поле Номенклатура, ЦенаПриход с заголовком Цена и Поступило с заголовком Количество. Обратите внимание, что имя поля и путь к данным у полей внешних наборов данных совпадают (листинг 4.49).
Листинг 4.49. Процедура программной установки схемы компоновки
Поле! • Набор!. Поля.Добавить (Тип(’ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле!.Поле = "Номенклатура";
Поле1.ПутьКДанным - "Номенклатура";
Поле!.3аголовок = "Номенклатура";
Поле2 = Набор!. Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле2.Поле - "ЦенаСборки";
Поле2.ПутьКДанным - "ЦенаСборки",*
Поле2.3агоповок = "Цена":
ПолеЗ = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеЗ.Поле - "Собрано";
ПолеЗ.ПутьКДаниым - "Собрано";
281
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
ПолеЗ.Заголовок «“Количество8;
Поле1» Набор2,Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных”)): ПолеЪПоле « “Номенклатура";
Поле1.ПутьКДанным - "Номенклатура”;
Поле13аголовок «“Номенклатура”;
Поле2«Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле2.Поле «"ЦенаПриход";
Поле2.ПутьКДанным «"ЦенаПриход”;
Поле23аголовок * “Цена";
ПолеЗ «Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеЗ.Поле = "Поступило";
ПолеЗ. ПутьКДанным «= "Поступило"; ПолеЗЗаголовок “Количество";
Далее добавим вычисляемое поле Выручка и зададим его формат без вывода дробной части. Затем добавим поля ресурсов ЦенаПриход, ЦенаСборки, Поступило, Собрано и Выручка и зададим выражения для их расчета (листинг 4.50).
Листинг 4.50. Процедура программной установки схемы компоновки
ВычПоле » СКД.ВычисляемыеПоля.Добавить();
ВычПоле.ПутьКДанным =*"Выручка";
ВычПолеЗаголовок * "Выручка";
ФорматПоля « ВычПоле.Оформление.НайтиЗначениеПараметра(Новый
ПараметрКомпоновкиДанных("Формат”));
ФорматПоля.Использование « Истина;
ФорматПоляЗначение - "ЧЦ « б; ЧДЦ « 0";
ПолеРесурса » СКД*ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным = "ЦенаПриход";
ПолеРесурса. Выражение »"Среднее(ЦенаПриход)";
ПолеРесурса - СКД.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным «"ЦенаСборки";
ПолеРесурса.Выражение = "Среднее(ЦенаСборки)";
ПолеРесурса ® СКД.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным »"Поступило”;
ПолеРесурса.Выражение ® “Сумма(Поступило)";
ПолеРесурса « СКД.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным ® "Собрано";
ПолеРесурса.Выражение »“Сумма(Собрано)";
ПолеРесурса * СКД.ПоляИтога.Добавить();
282
Гпава 4. Примеры разработки отчетов
ПолеРесурса.ПутьКДанным «"Выручка";
ПолеРесурса.Выражение = "Сумма(Собрано) * (Среднее(ЦёнаСборки) * СрёДнее(ЦенаПриход))*;
В заключение нам осталось задать формат полей ЦенаПриход и ЦенаСборки также без вывода дробной части. Но поскольку на уровне наборов данных - объектов нет возможности задать оформление, эти поля сначала нужно добавить в набор данных - объединение. Автоматически, как в конструкторе компоновки данных, в родительский набор они не добавляются (листинг 4.51).
Листинг 4.51. Процедура программной установки схемы компоновки
ПолеЦены = НаборДанных.Поля
.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных”));
ПолеЦены.Поле = "ЦенаСборки”;
ПолеЦены. ПутьКДанным = "ЦенаСборки";
ФорматПоля » ПолеЦены.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Формат"));
ФорматПоля.Использование - Истина;
ФорматПоля.Значение »”ЧЦ - 6; ЧДЦ = О";
ПолеЦены « НаборДанных.Поля
.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеЦены.Поле « "ЦенаПриход";
ПолеЦены.ПутьКДанным -"ЦенаПриход";
ФорматПоля « ПолеЦены.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Формат"));
ФорматПоля.Использование = Истина;
ФорматПоля.Значение *"ЧЦ « 6; ЧДЦ « О";
СхемаКомпоновкиДанных = СКД;
КонецПроцедуры
Проверим результат. Мы получили абсолютно такой же отчет, как и при использовании схемы компоновки данных (рис. 4.228). Таким образом, мы убедились, что каждый этап процесса компоновки данных можно сформировать программным образом. Стоит ли это делать, зависит от конкретной задачи и подхода
283
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
разработчика. В большинстве случаев при разработке отчетов можно обойтись интерактивными возможностями платформы.
Итак, на этом примере мы научились:
•	Использовать в схеме компоновки наборы данных - объединения объектов.
•	Выполнять программную настройку отчета.
•	Программно создавать и описывать схему компоновки данных.
у
Пример 12. Создание схемы компоновки данных
в текстовом редакторе. Сериализация объектов компоновки данных
До сих пор мы рассматривали создание схемы компоновки данных с помощью конструктора, используя визуальные возможности конфигуратора. Теперь продемонстрируем пример создания схемы компоновки данных в текстовом редакторе, ее последующей сериализации и вывода результатов компоновки данных. Ранее, при сохранении схемы компоновки данных из окна конструктора, мы видели, что файл, содержащий схему, имеет расширение XML.
(extensible Markup Language, или расширяемый язык разметки) - это язык описания документов, во многом похожий на язык разметки гипертекста HTML. XML-документ представляет собой обычный текстовый файл, в котором при помощи специальных маркеров (тегов) создаются элементы данных, последовательность и вложенность которых определяют структуру документа и его содержание. В коде XML, как и в HTML, используются теги, заключенные в угловые скобки (<item>), а команды и метки начинаются открывающим тегом (например, <DataSource>) и заканчиваются закрывающим 284
Глава 4. Примеры разработки отчетов
(</DataSource>). XML-документы могут редактироваться любым тестовым процессором и позволяют создавать структурированную информацию, которую хорошо «понимают» компьютеры.
Поскольку создавать полностью схему компоновки данных с «нуля» - очень трудоемкое занятие, мы отредактируем схему компоновки отчета Продажи номенклатуры и выполним программную компоновку данных в форме созданной нами обработки. Объект конфигурации Обработка практически не отличается от отчета. Отчет обычно используется для визуального представления данных, а обработка для выполнения каких-либо действий над информационной базой.
Откроем схему компоновки данных отчета ПродажиНоменклатуры, сохраним ее в файл под именем Схема_продажи_номенклатуры. Найдем файл с этим именем и расширением XML и откроем его двойным щелчком мыши. По умолчанию откроется программа Windows Internet Explorer с загруженным в нее XML-файлом (рис. 4.229).
Выберем из меню пункт Редактировать в XML Editor, и схема откроется для редактирования. Рассмотрим структуру данного XML-файла.
•	Между тегами <?> и </?> располагается служебный комментарий.
♦	Тег <DataCompositionSchema> открывает описание схемы компоновки данных. Сначала идет описание типа схемы компоновки данных в пространстве имен 1С:Предприятия.
•	Между открывающим и закрывающим тегом <dataSource> находится описание источника данных схемы компоновки.
•	Тег <dataSet> открывает описание набора данных схемы компоновки. Здесь определяется имя набора, список полей и текст запроса. Описание полей, их имени, роли, формата представления и т. п. заключено между открывающими и закрывающими тегами <field>. Найдем описание поля 285
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Период. Удалим его и добавим вместо него новое поле Регистратор (листинг 4.52).
«?xml verstor>=’1.0" encoding="OTF-8" ?>
- «OataComposibonSchema xmlns=*hnp://v8.1c.ru/8.1/data-composition-system/schema,> xrWns:xsd=*http://www.w3.org/2001/XMLSchema* xrnlne:xsi=,,http://www.w3.org/20Ql/XMLSchema-instance* xmlns:dcsset=,http://v8.1c.ru/B.l/data-composldon-system/setdngs" xmins:dcscom=“http://v8.1c.ru/8.1/data-compositlon-system/common’ xmlns:dcscor-*http://v8.1c.ru/8.1/data-composition-system/core* xntfns:v8=”http://v8.1c.nj/8.1/data/core">
-	«datasource >
«патле >Источнж(Данных1 «/name >
<dataSourceType»Local</dataSourceType>
«/datasource»
-	«dataSet xsi: type=”DataSetQuery°>
«name >НаборДанных1 «/name >
- «field xsi:type=*DataSetFteMField”>
«datapath »Колмчество</da taPa th >
«Ье1с1»Количест во «/field»
- «title xsi: type =*v8:LocalStringType’>
- <v8:item>
«v8: lang >ru </v8: lang >
«v8:content>Ko*M«4ecTao«/v8:content>
«/v8:item>
«/title»
- «appearance»
- <dcecor:item>
<dcscor:parameter»Format«/dcscor:parameter>
- <dcscor:vakre xsi:type="v8:LocalStringType">
- «v8:item>
<v8:lang>ni </v8:lang>
«v8: content »ЧЦ= 15«/v8: content»
</v8:item>
«/dcscor: value»
</dcscor:item>
«/appearance»
«/field»
- «field xsi:type="DataSetFteUFteld*>
«datapath Жонтрагент «/datapath»
f«Md»KoHrpareHT «/field»
- «title xsr.type=”v8:LocalStringType’>
- <v8:item>
«v8:lang»ru«/v8:lang>
<vB: сопТепТЖомтрагент </v8: content»
«/v8:ttem>
«/tide»
- «role»
«dcscom:cfimension>true«/dcscom:dimension>
«/role»
/field»
Рис. 4.229. Просмотр схемы компоновки данных
в программе Internet Explorer
Листинг 4.52. Описание поля «Регистратор»
в XML-файле схемы компоновки данных
«field xsi :type * "DataSetFieldField”*
«dataPath>PerncTpaTop«/dataPath>
<field>PerncTpaTop</field>
«title xsi :type ® l,v8:LocalStringTypef,>
«v8:item>
«v8:lang>ru«/v8:lang>
<v8:content>PerncTpaTop</v8:content>
«/v8:item>
«/title>
«role*
«dcscom:periodNumber>l«/dcscom:periodNumber>
«dc$com:periodType>Main«/dcscoin:periodType>
«/role*	<
</field>
286
Глава 4. Примеры разработки отчетов
•	Между открывающим и закрывающим тегом <query> находится описание текста запроса набора данных. Заменим этот текст на следующий (листинг 4.53):
Листинг 4.53. Описание текста запроса в XML-файле
схемы компоновки данных
<query>BblBPATb ПродажиОбороты.Номенклатура, ПродажиОбороты.Контрагент
, ПродажиОбороты.КоличествоОборот КАК Количество
, ПродажиОбороты.СтоимостьОборот КАК Стоимость
, ПродажиОбороты.Регистратор ИЗ РегистрНакопления
.Продажи.Обороты(,, Регистратор,) КАК ПродажиОбороты</диегу>
•	Тег </dataSet> закрывает описание набора данных схемы компоновки.
•	Между открывающими и закрывающими тегами < total Field > находится описание полей ресурсов схемы компоновки данных.
•	Между открывающими и закрывающими тегами < parameter > находится описание параметров схемы компоновки данных.
•	Тег <defaultSettings> открывает описание настроек по умолчанию схемы компоновки данных.
•	Между открывающими и закрывающими тегами <dcsset: selection > находится описание списка выбранных полей настроек схемы компоновки данных.
•	Между открывающими и закрывающими тегами <dcsset: filter> находится описание условий отбора настроек схемы компоновки данных. Удалим его.
•	Между открывающими и закрывающими тегами <dcsset: conditionalAppearance> находится описание условного оформления настроек схемы компоновки данных. Удалим его.
287
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Между открывающими и закрывающими тегами <dcsset: outputParameters> находится описание настроек вывода схемы компоновки данных. Добавим в него следующий фрагмент (листинг 4.54):
Листинг 4.54. Описание настроек вывода - макета оформления и расположения общих итогов по вертикали в XML-файле схемы компоновки данных
<dcscor:item>
<dcscor:parameter>AppearanceTemplate</dcscor: parameter
<dcscor:value xsktype » "xsd:string">Green</dcscor:value>
e/dcscor:item>
<dcscor:item>
<dc$cor:parametei>VerticalOverallPlacement</dcscor:parameter>
<dcscor:value xsktype - "dcscor.-DataCompositionTotal Placement">BeginAndEnd</dcscor:value>
</dcscor.item>
•	Между открывающими и закрывающими тегами <dcsset: item> находится описание элементов структуры настроек схемы компоновки данных. Поменяем местами описание группировок Номенклатура и Контрагент. В описании группировки Период изменим имя поля на Регистратор (листинг 4.55).
Листинг 4.55. Описание поля группировки «Регистратор»
в XML-файле схемы компоновки данных
<dcsset:field>PerncTpaTop</dcsset:field>
•	Тег </defaultSettings> закрывает описание настроек по умолчанию схемы компоновки данных.
•	Тег </DataCompositionSchema> закрывает описание схемы компоновки данных.
Сохраним сделанные изменения. Таким образом, мы отредактировали схему компоновки данных отчета Продажи
288
Глава 4. Примеры разработки отчетов
номенклатуры так, чтобы видеть в этом отчете данные с детализацией по полю Регистратор, убрали у отчета условное оформление и отбор, установили значения параметров вывода Макет оформления - Зеленый и Расположение общих итогов по вертикали - В начале и в конце. Мы также поменяли местами группировки Контрагент и Номенклатура, а группировку по полю Период заменили на группировку Регистратор. Теперь проверим результат.
Создадим новый объект конфигурации Обработка с именем ЗагрузкаСхемыХМЬ. На закладке Формы создадим основную форму обработки с именем Форма (рис. 4.230).
Рис. 4.230.
Создание основной формы обработки
Откроем эту форму и выполним пункт основного меню Форма - Вставить элемент управления. Выберем элемент управления - Поле табличного документа и дадим ему имя Результат. Расположим поле результата отчета в форме. Двойным щелчком на заголовке формы или через контекстное меню вызовем
289
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
диалог ее свойств, найдем событие ПриОткрытии() и нажмем значок лупы справа от него. В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии() которое будет вызываться при открытии формы. В модуль формы внесем следующий текст (листинг 4.56):
Листинг 4.56. Процедуры модуля формы обработки
Процедура КнопкаВыполнитьНажатие()
// Выбор схемы
Режим *= РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла « Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла ”*;
Фильтр «"Схема компоновки данных(*.хт1)|*.хтГ;
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.Заголовок = "Выберите схему компоновки данных*;
Если ДиалогОткрытияФайла.Выбрать() Тогда
МассивФайлов « ДиалогОткрытияФайла.ВыбранныеФайлы;
Для Каждого ИмяФайла Из МассивФайлов Цикл
ВыбФайл  Новый Файл(Имяфайла);
Если Не ВыбФайл.Существует() Тогда
Сообщить(”Невозможно найти файл схемы компоновки данных");
Возврат;
КонецЕсли;
КонецЦикла;
Иначе
Предупреждение("Файл не выбран!");
КонецЕсли;
// Прочитать схему
ЧтениеХМ1 = Новый ЧтениеХМЕ;
Попытка
Чте н иеХМ ЬОткрытьФайл (И мяФайл а);
Исключение
Сообщить("Невозможно открыть файл схемы компоновки данных*);
Возврат;
КонецПопытки;
СхемаКомпоновкиДанных ® СериализаторХОТО.ПрочитатьХМЦЧтениеХМЕ Лип(’’СхемаКомпоновкиДанных*));
ЧтениеХМ1.3акрыть();
290
Глава 4. Примеры разработки отчетов
Ц Выполнить компоновку данных
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета •* Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки » Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки • КомпоновщикМакета
.Выпвлнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных - Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать{МакетКомпоновки
,, ДанныеРасшифровки);
ЭлементыФормы.Результат.0чистить();
ДокументРезультат » ЭлементыФормы.Результат;
ПроцессорВывода » Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановигьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//ДокументРезультат,ПоказатьУровеньГруппировкиСтрок(0);
КонецПроцедуры
Процедура ПриОткрытии()
КнопкаВыполнитьНажатие();
КонецПроцедуры
В модуле формы мы создали процедуру ПриОткрытии(), которая запускает процедуру КнопкаВыполнитьНажатие(). В ней вызывается диалог выбора схемы компоновки данных, затем выбранная схема сериализуется из файла XML и выполняется программная компоновка данных, уже знакомая нам по предыдущим примерам. Последняя строка процедуры КнопкаВыполнитьНажатие() отражает возможность сворачивания групп в отчете до указанного уровня, в данном случае до верхнего уровня.
Запустим.обработку в режиме 1С:Предприятие. Выберем файл, содержащий схему компоновки данных, который мы редактировали, Схема_продажи_номенклатуры.хш1. Сравним результат
291
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
нашего отчета с исходным отчетом Продажи номенклатуры (рис. 4.231).
Мы видим, что группировка Контрагент теперь вложена в группировку Номенклатура и данные отчета детализированы по полю Регистратор. Отчет оформлен зеленым макетом оформления, а общий итог выводится в начале и в конце отчета. Именно эти изменения мы и вносили в XML-файл, содержащий схему компоновки данных. Нажимая кнопку Выполнить, можно загружать другие схемы компоновки данных и выполнять отчет на их основе.
Рис. 4.231. Результат обработки 292
Глава 5
Справочник разработчика
В данной главе подробно рассматриваются отдельные возможности работы с системой компоновки данных. Поэтому ее можно использовать как для того, чтобы узнать все особенности конкретной «возможности», так и в качестве справочника. Конкретные во*зможности системы компоновки рассматриваются здесь не в контексте какого-то законченного примера отчета, а вырваны из этого контекста, поэтому их легко сразу найти и понять.
Общие возможности
Получение итогов по всем датам в выбранном периоде
При разработке отчетов с использованием системы компоновки данных, имея детальные записи, мы можем надстраивать над ними итоговые записи, формируя их по какому-то признаку. Если детальные записи обладают периодичностью (например, имеют поле Дата), то мы можем формировать итоговые записи, суммируя значения детальных записей, например, за каждый 293
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
день. При этом отчет будет выглядеть «красиво» только в том случае, если у нас есть детальные записи для каждого дня. В противном случае итоговые записи будут сформированы только для тех дней, для которых есть детальные записи (рис. 5.1).
Рис. 5.1. Группировка по периоду без дополнения
Обычно пользователи хотят видеть отчет, в котором итоговые записи присутствуют в отчете для всех дней, независимо от того, есть ли внутри детальные записи или нет (рис. 5.2).
Для решения этой задачи система компоновки данных позволяет указывать для группировок дополнение периодов с заданной периодичностью в указанном интервале. Для примера рассмотрим Отчет по продажам, который выводит информацию о продажах номенклатуры за указанный период. Например, необходимо получать данные о продажах по дням, вне зависимости от того, были ли движения за эти дни.
294
Глава 5. Справочник разработчика
Рис. 5.2. Группировка по периоду с дополнением «День» в интервале 10.03 - 20.04.2008
295
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В отчет будем выдавать группировку по контрагентам с вложенными в нее группировками ПериодМесяц и ПериодДень и диаграмму с группировкой в сериях по полю Контрагент, а в точках по полю ПериодДень (рис. 5.3).
Отчет
Контрагент Периодмесяц
Периоддень ixi*
Й Точки
:-0е Периоддень Eh Серии
! Контрагент
Рис. 5.3. Структура отчета
Результат отчета с группировкой по периоду без дополнения будет выглядеть следующим образом (рис. 5.4, 5.5).
Рис. 5.4. Группировка по периоду без дополнения
296
Глава 5. Справочник разработчика
Рис. 5.5. Диаграмма с группировкой по периоду без дополнения
Как видно, дни, за которые отсутствовали движения, не выводятся в отчет, что не позволяет оценить динамику продаж. Чтобы включить данные о продажах за любые периоды, воспользуемся дополнением периодов. Для этого двойным щелчком мыши вызовем диалог редактирования свойств группировки ПериодДень и установим тип дополнения День (рис. 5.6).
Поля группировки
% t <
X
Поле___________________
Начальная дагга.периода - Периоддень___________
| ОК || Отмена
Рис. 5.6. Установка дополнения группировки
297
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Выполним отчет. В нем выводятся данные о продажах с периодичностью в день, даже если за эти дни не было движений (рис. 5.7).
Рис. 5.7. Группировка по периоду с дополнением «День»
Однако, как мы видим, периоды дополняются только в интервале дат, за которые были движения. Чтобы изменить ситуацию, можно указать фиксированный интервал, в котором будут дополняться периоды. Для этого нужно ввести даты в колонки Начальная дата периода и Конечная дата периода (рис. 5.8).
Рис. 5.8. Установка интервала дополнения периодов
298
Глава 5. Справочник разработчика
При этом периоды будут дополняться не только в интервале дат, полученном из набора данных, но и с начальной до конечной даты (рис. 5.9).
Рис. 5.9. Группировка «ПериодДень» с дополнением «День»
в интервале 10.03 - 25.04.2008
299
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В качестве начальных и конечных дат периода можно использовать не только даты, но и перечисление ТипДопол-ненияПериодаКомпоновкиДанных (день, неделя, месяц, год и т. п.), а также Поле компоновки данных, например, поля параметров отчета. Для выбора типа следует очистить содержимое поля и воспользоваться кнопкой выбора типа. Подробнее об этом рассказывалось в примере 6 «Отчет по продажам» на стр. 176. Рассмотрим эти варианты на примере диаграммы этого отчета. Установим для группировки диаграммы Период-День тип дополнения Неделя и выберем тип Поле компоновки данных (рис. 5.10).
Рис. 5.10. Выбор типа данных
для указания интервала дополнения
Если в качестве начальной и/или конечной дат периода используется поле компоновки данных, то дополнение будет осуществляться до даты, полученной из этого поля. Им может быть поле параметра или поля отчета-владельца (в случае если дополнение происходит во вложенном отчете). К примеру, для установки интервала дополнения воспользуемся параметрами Начало периода и Конец периода (рис. 5.11).
300
Глава 5. Справочник разработчика
Рис. 5.11. Установка интервала дополнения периодов с помощью полей компоновки данных - параметров
При этом результат будет дополняться в том периоде, который
указан в параметрах данных отчета, то есть интервал дополнения периодов будет динамически меняться в соответствии с тем, какой период формирования отчета задаст пользователь (рис. 5.12).
Рис. 5.12. Диаграмма по периоду с дополнением «Неделя» в интервале отчетного периода
301
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Если в качестве границы интервала используется значение, имеющее тип ТипДополненияПериодаКомпоновкиДанных, то дополнение будет осуществляться до ближайшей границы выбранного типа периода. Так, если в качестве начальной и конечной дат периода выбрать Месяц, то дополнение будет осуществляться с начала месяца первой даты, присутствующей в группировке, и до конца месяца последней даты, присутствующей в группировке.
Установим для группировки ПериодДень дополнение День и в качестве границ интервала выберем значение Месяц, имеющее тип ТипДополненияПериодаКомпоновкиДанных (рис. 5.13, 5.14).
Рис. 5.13. Выбор типа данных для указания интервала дополнения
Рис. 5.14. Установка интервала дополнения периодов
с помощью перечисления «ТипДополненияПериодаКомпоновкиДанных»
302
Глава 5. Справочник разработчика
Выполним отчет. В результате дополнение произойдет по дням в пределах месяца, хотя отчетный период задан с 10/03/08 -27/03/08 (рис. 5.15).
Рис. 5.15. Группировка «ПериодДень» с дополнением «День» в интервале «Месяц»
303
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Если выбрать в качестве границ значение Неделя, то периоды будут дополняться с начала недели и до конца недели (рис. 5.16).
Рис. 5.16. Установка интервала дополнения периодов с помощью перечисления «ТипДополненияПериодаКомпоновкиДанных»
Выполним отчет. Диаграмма будет выглядеть следующим образом (рис. 5.17):
Рис. 5.17. Диаграмма по периоду с дополнением «Неделя»
304
Глава 5. Справочник разработчика
Существует следующая особенность для отчетов, в которых группировка по периоду вложена в группировку по объемлющему периоду. Если для дочерней группировки установить в качестве начальной и конечной даты конкретные даты, то дополнение произойдет в рамках указанного периода, то есть в отчет могут попасть данные, которые вовсе не находятся в родительской группировке. Для того чтобы дополнение дочерней группировки происходило только в интервале родительской группировки, нужно указать в качестве начальной и конечной дат дополнения периода тип дополнения периода -период родительской группировки.
Характеристики
В платформе 1С:Предприятия 8 есть специальный объект -План видов характеристик, с помощью которого можно создавать механизмы для того, чтобы пользователь имел возможность создавать и описывать произвольные характеристики для каких-либо объектов информационной базы. Например, для описания свойств номенклатуры пользователь может создать такие виды характеристик, как Цвет, Качество и т. п. и задать их значения.
Система компоновки данных позволяет использовать эти характеристики при разработке отчетов. То есть пользователь может отобразить поля характеристик в отчете, установить по ним отбор, условное оформление и т. д. Однако применить характеристики можно только после запуска отчета из режима 1С:Предприятие. Это связано с тем, что сначала должен быть выполнен запрос, извлекающий характеристики из базы данных.
Для визуального описания характеристик в системе компоновки данных используется конструктор запросов, закладка Характеристики (рис. 5.18).
305
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.18. Описание характеристик в конструкторе запроса
В описании характеристики указываются:
•	тип, для которого определяются характеристики;
•	описание списка характеристик;
•	описание значений характеристик.
Характеристики описываются для определенного типа. Например, можно описать характеристики для типа Спра-вочник.Контрагенты или Справочник.Номенклатура. Самый распространенный случай, когда список характеристик хранится в плане видов характеристик, а значения характеристик - в регистре сведений.
Описание списка характеристик
Для того чтобы система компоновки данных выдала пользователю список полей-характеристик, необходимо описать, откуда получать список характеристик.
О каждой характеристике системе необходимо знать следующую информацию:
•	Из какой таблицы или запроса получать список характеристик.
•	Идентификатор - внутренний идентификатор характеристики. По данному свойству характеристика будет находиться
306
Глава 5. Справочник разработчика
в списке значений характеристик. Идентификатор может иметь любой тип, для которого может использоваться сравнение в языке запросов.
•	Имя характеристики - имя, под которым пользователь вводил характеристику. Например, масса, длина, рост и т. п. Значение этого свойства будет использоваться в качестве имени поля, создаваемого для характеристики.
•	Тип значения характеристики - значения какого типа могут содержаться в характеристике. Данная информация используется в отборе для фильтрации по полю-характеристике.
Описание значений характеристик
При выполнении отчета системе компоновки необходимо получать значения выбранных пользователем характеристик.
Для получения характеристик системе необходима следующая информация:
•	Из какой таблицы или запроса получать значения характеристик.
•	Идентификатор характеристики. В данном поле будет искаться значение идентификатора, полученного в списке характеристик.
•	Объект, для которого требуется получить значение характеристики.
•	Значение характеристики. Из данного поля будет получаться значение характеристики. Если поле-значение не указано, то значение характеристики будет иметь значение Истина, если в таблице будет найдена запись для характеристики объекта, и Ложь в противном случае.
307
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В приведенном примере характеристики описываются для типа Справочник.Контрагенты, список характеристик .получается из таблицы ПланВидовХарактеристик.СвойстваОбъектов, в качестве идентификатора характеристики используется поле Ссылка, в качестве имени характеристики - поле Наименование, в качестве типа - поле ТипЗначения. Значения характеристик получаются из таблицы РегистрСведений.Зна-ченияСвойствОбъектов. Идентификатором характеристики в данной таблице является поле Свойство, объектом - поле Контрагент, а значение находится в поле Значение (рис. 5.19).
Рис. 5.19. Связь объектов конфигурации и описания характеристик в конструкторе запроса
308
Глава 5. Справочник разработчика
В результате визуального описания характеристик в конструкторе запроса платформа добавит в запрос секцию описания характеристик, начинающуюся с ключевого слова ХАРАКТЕРИСТИКИ. В следующем запросе описываются характеристики для полей типа Справочник.Контрагенты (листинг 5.1).
Листинг 5.1. Текст запроса с использованием характеристик у.-.jy. Г—*~~~	«Ч.
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
П родажиОбороты .Стой мостьОборот
ИЗ
РегистрНакопления.Лродажи.Обороты КАК ПродажиОбороты (ХАРАКТЕРИСТИКИ
ТИП(Слравочник.Кантрагенты)
СПИСОК ПланВидовХарактеристик.СвойстваОбъектов ИДЕНТИФИКАТОР Ссылка ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТилЗначения
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъекгов
ОБЪЕКТ Контрагент
ХАРАКТЕРИСТИКА Свойство
В предложении ХАРАКТЕРИСТИКИ тип указывается в скобках после ключевого слова ТИП. Типы, входящие в составной тип, перечисляются через запятую.
Список характеристик описывается при помощи ключевых слов СПИСОК, ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ. После ключевого слова СПИСОК идет имя таблицы, из которой получается список характеристик, либо в скобках - текст запроса, при помощи которого получается список характеристик. После ключевых слов ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ указываются имена полей для получения идентификатора, имени и типа значений характеристики соответственно.
Значения характеристик описываются при помощи ключевых слов ЗНАЧЕНИЯ, ОБЪЕКТ, ХАРАКТЕРИСТИКА, ЗНАЧЕНИЕ.
ЗНАЧЕНИЕ Значение)
309
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
После ключевого слова ЗНАЧЕНИЯ указывается имя таблицы, из которой будут получаться значения характеристики, или, в скобках, текст запроса, при помощи которого будут получаться значения. После ключевого слова ОБЪЕКТ указывается имя поля, в котором содержится объект. После слова ХАРАКТЕРИСТИКА указывается поле-идентификатор характеристики, а после ЗНАЧЕНИЕ - имя поля, из которого будут получаться значения характеристики.
В данном примере список характеристик можно напрямую получать из плана видов характеристик, а значения характеристик - из регистра сведений. Но возможны более сложные случаи, когда, например, значения характеристик могут храниться не в регистре сведений. Или в плане видов характеристик может храниться список характеристик не только для одного нужного нам типа данных, но и для других типов. Тогда следует воспользоваться запросом, который получает нужные данные.
В приведенном примере список характеристик формируется при помощи запроса, в котором получаются только записи, у которых не установлена пометка удаления. Указание полей происходит так же, как и в случае с таблицей, только используются не поля таблицы, а поля запроса (листинг 5.2).
Листинг 5.2. Получение списка характеристик с помощью запроса
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
ПродажиОбороты, СтоимостьОборот
ИЗ
РегистрНакопления.Продажи .Обороты КАК ПродажиОбороты
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
СПИСОК (ВЫБРАТЬ
СвойстваОбъектов.Ссылка,
СвойстваОбъектов.Наименование,
СвойстваОбъектов.ТипЗначения
ИЗ
ПланВидовХарактеристик.СвойсТваОбъектов КАКСвойсгваОбьектов
310
Глава 5. Справочник разработчика
д. .... -	.	”• - ШМ ; ‘	.-• • - •' > □
ГДЕ
СвойстваОбьектов.ПометкаУдаления = Ложь)
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъектов
ОБЪЕКТ Контрагент
ХАРАКТЕРИСТИКА Свойство
ЗНАЧЕНИЕ Значение}
Для описания запроса при описании списка характеристик в конструкторе запроса следует указать в качестве источника списка Запрос и, нажав на кнопку выбора, создать запрос (рис. 5.20, 5.21).
Рис. 5.20. Создание полей запроса для получения списка характеристик
Рис. 5.21. Создание условий запроса для получения списка характеристик
311
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Аналогичным образом можно указать запрос и в качестве источника значений характеристик.
В результате закладка Характеристики в конструкторе запроса примет вид (рис. 5.22).
Рис. 5.22. Создание запроса для получения списка характеристик
На основе списка характеристик система автоматически создаст для объекта Контрагент два дополнительных поля - Регион и Надежный партнер.
В режиме 1С:Предприятие откроем окно настроек отчета Продажи номенклатуры. На закладке Выбранные поля характеристики отображаются в списке реквизитов поля Контрагент и ничем не отличаются от обычных реквизитов. Управлять их выводом можно на закладке Другие настройки (стр. 437). Перенесем в список полей поле Регион (рис. 5.23).
Рис. 5.23. Список доступных полей в отчете с использованием характеристик контрагентов 312
Глава 5. Справочник разработчика
Теперь используем в отборе характеристику Надежный партнер. На закладке Отбор создадим новый элемент отбора по полю Надежный партнер со значением Да (рис. 5.24).
Параметрыдан. Выбранные поля | Отбор | Сортировка Условное офор Пользовательс Другие настрой
Рис. 5.24. Использование характеристик в отборе
Выполним отчет с этими настройками. В результате характеристика контрагента Регион теперь отражается рядом с его наименованием и в отчете отражаются только контрагенты, в свойствах которых характеристика Надежный партнер принимает значение Да (рис. 5.25).
Продажи товаров и услуг
Контрагент.Надежный партнер Равно "Дау
КонтрагенС^ёгион Э (Количество
Номенклатура _____
Пермад _	. __~1-----------------
ООО "Автоматика"фэролев}!	___
Диапюстика компьютера	Г __________2
18 марта 2008 г.	|	1
26 марта 2008 г.	1
Стоимость
Компьютер для дома
26 марта 2ППН-.Г ООО "Стиль'^оскб ауГ
Монитор LCD_______
19 марта 2008 г.
Итог*.
11 500,00
1 500,00
1 000,00
500,00
11	10 000,00
1	10 000,00
________10000,00
1	10 000,00
1	10 000до
21 500,03
Рис. 5.25. Результат отчета
с использованием характеристик контрагентов
313
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Использование категорий
При помощи механизма характеристик системы компоновки данных можно описывать и категории-характеристики, не имеющие значений, а имеющие лишь признак наличия/отсутствия.
Для примера добавим в план видов характеристик категорию Лучший покупатель и выведем ее в отчете Список контрагентов.
Откроем схему компоновки данных отчета и в конструкторе запроса опишем характеристики (рис. 5.26).

Конструктор запроса ж	П X
Таблицы и поля Группировка Условия Дополнительно Объединения/Пс... Порядок Компоновка дан... | Характеристики | Пакет запросов
Запрос |
| < Назад ~| | Далее > | | ОК ] | Отмена | | Справка
Рис. 5.26. Описание характеристик в тексте запроса
В результате будет создан следующий запрос (листинг 5.3):
Листинг 5.3. Получение категорий контрагентов
ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент ИЗ
Справочник.Контрагенты КАК Контрагенты
1ДЕ
Контрагеиты-ЗтоГруппа - Ложь
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Контрагенты)
СПИСОК ПланВидовХарактеристик-СвойсгваОбъектов
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбьектов
ОБЪЕКТ Контрагент
ХАРАКТЕРИСТИКА Свойство}
314
Глава 5. Справочник разработчика
Как видно, в описании характеристик не указано поле ТипЗна-чения. В этом случае считается, что характеристика имеет логический тип. Кроме того, не указано поле, из которого будет получаться значение характеристики. В таком случае считается, что значение характеристики Истина, если характеристика для объекта присутствует в таблице значений характеристик, и Ложь в противном случае.
Запустим систему в режиме 1С:Предприятие. В план видов характеристик Свойства объектов добавим категорию Лучший покупатель (рис. 5.27).
Рис. 5.27. Создание новой характеристики в плане видов характеристик
В справочнике контрагентов добавим эту характеристику для контрагентов ООО «Автоматика» и ООО «Стандарт» (рис. 5.28).
Рис. 5.28. Добавление характеристики в свойства контрагентов
315
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В регистре сведений Значения свойств объектов появятся соответствующие записи (рис. 5.29).

Список Значения свойств объектов	_ П X
LT0	IООО ''Автоматика"	[Свойство	Значение	:	
		[Регион	Королев	
ЕЗ	ООО "Автоматика"	Надежный партнер	Да	
g	trOO "Автоматика"	Лучший покупатель		э	
|/У-|	ООО "Система"	Регион	Москва		
£53	ООО "Система"	Надежный партнер	Нет	
В	ООО "Атлант"	Регион	Санкт-Петербург	
l/y-|	ООО "Стандарт"	Регион	Санкт-Петербург rj	
И?	ООО "Стандарт"	Лучший покупатель		О	
И	ООО "Стиль"	Регион	Москва	
|rv|	ООО "Стиль"	Надежный партнер	Да		
V*				
Рис. 5.29. Записи регистра сведений
Откроем окно настроек отчета Список контрагентов. На закладке Выбранные поля в списке реквизитов поля Контрагент появилась категория Лучший покупатель. Перенесем ее в список полей отчета. Отключим использование вложенного отчета Продажи, чтобы в отчет выводился только список контрагентов и их категории (рис. 5.30).
Рис. 5.30. Окно настроек отчета 316
Глава 5. Справочник разработчика
На закладке Другие настройки зададим значение параметра Расположение реквизитов - Отдельно, чтобы категория контрагента выводилась в отдельной колонке (рис. 5.31).
ВыбранныеПоля Отбор Сортировка Условное оформление Пользовательские поля | Друие настройки |
	Параметр	 *fe	
□	Макет оформления	Основной		0
□	Расположение итогов	Авто	
□	Расположение полей группировок	Вместе	
п	Расположение группировок	Начало		
Й	Расположение реквизитов	сДЦНтдельнс		
□I	Расположение ресурсов	Г оризонтально	
о.	Расположение общих итогов по горизонтали	Авто	я
Рис. 5.31. Настройка вывода реквизитов
Выполним отчет. Мы видим, что значение категории Лучший покупатель интерпретируется как Истина или Ложь в зависимости от ее наличия в свойствах контрагента (рис. 5.32).
Рис. 5.32. Результат отчета
Теперь используем в отборе характеристику Лучший покупатель. На закладке Отбор создадим новый элемент отбора по полю Лучший покупатель со значением Истина (рис. 5.33).
Выбранные поля | Отбор | Сортировка Условное оформление Пользовательские поля Друие настройки
Рис. 5.33. Настройка отбора с использованием категории контрагента
317
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В результате в отчет выводятся только два контрагента, в свойства которых мы добавили категорию Лучший покупатель (рис. 5.34).
Рис. 5.34.
Результат отчета
Иерархия
Система компоновки данных позволяет выводить в отчет иерархические данные. Иерархия может строиться:
• Для групп иерархического справочника (рис. 5.35).
Рис. 5.35. Вывод группировки «Контрагент» с иерархией справочника «Контрагенты»
•	Для произвольного иерархического набора данных (рис. 5.36).
318
Глава 5. Справочник разработчика
Рис. 5.36. Вывод группировки «Номенклатура» с собственной иерархией
•	Для детальных записей иерархического справочника (рис. 5.37).
Рис. 5.37. Вывод группировки «Детальные записи» иерархического справочника «Номенклатура»
319
Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных
Иерархические группировки
Для примера рассмотрим отчет Продажи контрагентам, который выводит информацию об объемах продаж по контрагентам. Справочник Контрагенты имеет следующую иерархическую структуру (рис. 5.38):
* Справочник Контрагенты	_ П X
Рис. 5.38. Структура справочника «Контрагенты»
Для начала посмотрим, как будет выглядеть отчет без иерархии. Откроем отчет в режиме 1С:Предприятие. В настройках отчета отключим вывод диаграммы и добавим группировку по полю Контрагент. Тип иерархии оставим без изменения (рис. 5.39).
Отчет
Диаграмма
Й-Серии	t 1
:....Ы  Контрагент	-	__								
Р1«’ Вт	— fe-e - --- -	; ЧТип группировки	


| ОК 11 Отмена

Рис. 5.39. Добавление группировки «Контрагент» без иерархии
Выполним отчет. Отчет примет вид (рис. 5.40):
Рис. 5.40. Результат отчета
320
Глава 5. Справочник разработчика
Существуют следующие типы иерархии для группировок отчета:
•	Без иерархии - в группировке выводятся только неиерархические записи.
•	Иерархия - в группировке выводятся как неиерархические, так и иерархические записи.
•	Только иерархия - в группировке выводятся только иерархические (родительские) записи.
Изменим тип иерархии. Вызовем окно настроек и два раза кликнем на группировке Контрагент. В открывшемся окне поля группировки укажем Тип группировки - Иерархия (рис. 5.41).
Рис. 5.41. Установка типа иерархии группировки
Выполним отчет. Теперь результат отчета будет дополнен иерархическими записями - родительскими записями для выводимых в отчет контрагентов (рис. 5.42).
Рис. 5.42.
Результат отчета
321
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Изменим тип иерархии. Вызовем окно настроек и два раза щелкнем на группировке Контрагент. В открывшемся окне поля группировки укажем Тип группировки - Только иерархия (рис. 5.43).
Рис. 5.43. Установка типа иерархии группировки
Выполним отчет. В отчет будут выведены только группы контрагентов, то есть записи, имеющие иерархию (рис. 5.44).
Рис. 5.44. Результат отчета
Отбор «В группе»
Система компоновки данных позволяет отбирать записи, которые находятся в иерархии некоторого элемента. Для этого в системе предусмотрен вид сравнения В группе (во встроенном языке данный вид сравнения называется ВИерархии). При установке данного отбора в результат будут выводиться записи, имеющие значение, равное указанному, и все записи, располагающиеся ниже по иерархии.
Вызовем окно настроек и на закладке Отбор установим отбор Контрагент в группе «Покупатели» (рис. 5.45).
322
Глава 5. Справочник разработчика
	Левое значение	' Е ид мен-ния	j Правое значение		
	В-Отбор		
3	Контрагент	В группе	[у	Покупатели
		Равно Не равно В списке В группе из списка		
		В группе	
		1 Не в списке	
Рис. 5.45. Установка отбора
Установим для группировки Контрагент тип иерархии -Иерархия (рис. 5.41). Выполним отчет. В результат будут выводиться только записи в иерархии элемента Покупатели (рис. 5.46).
Рис. 5.46. Результат отчета
Описание иерархических наборов данных
Для иерархических справочников система компоновки данных автоматически создает специальные наборы данных, при помощи которых и достраивается иерархия. Однако встречаются ситуации, в которых нужно построить иерархию самостоятельно.
Для примера рассмотрим отчет Поступление товаров, который отражает поступление товаров по складам с иерархией номенклатуры, построенной не по группам справочника Номенклатура (полю Родитель), а по его полю Мой родитель. Для хранения списка элементов собственной иерархии в справочнике создана
323
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
группа Моя иерархия, на которую ссылаются элементы других групп. Например, в группе Моя иерархия создан элемент Мониторы, для которого поле Мой родитель задано как Товары для сборки. Этот элемент группы Моя иерархия является корневым. Затем в группе Комплектующие для элемента Монитор LCD поле Мой родитель задано как Мониторы. Таким образом, наша иерархия будет двухуровневой (рис. 5.47, 5.48).
Рис. 5.47. Элементы группы «Моя иерархия»
Рис. 5.48. Элементы группы «Комплектующие»
324
Глава 5. Справочник разработчика
Создадим набор данных Приход, получающий данные о поступлении товаров при помощи запроса (листинг 5.4).
Листинг 5.4. Текст запроса
ОстаткиНоменклатурыОбороты.Склад,
ОстаткиНоменклатурыОбороты.Номенклатура,
ОстаткиНоменклатурыОбороты.КоличествоПриход КАК Приход
РегистрНакопления.ОстаткиНоменклатуры.Обороты
КАК ОстаткиНоменклатурыОбороты
Чтобы выполнить иерархическую группировку, процессору компоновки данных требуется информация об источнике данных для построения иерархии. Поэтому нам необходимо создать набор данных, содержащий информацию о текущем элементе справочника Номенклатура и его родителе. Для построения иерархии создадим набор данных Иерархия (листинг 5.5).
Листинг 5.5. Текст запроса
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура, Номенклатура.МойРодитель
Справочник.Номенклатура КАК Номенклатура
Номенклатура.Ссылка В(&Ссылка)
Для того чтобы данный набор данных получал по иерархии всех родителей, опишем связь набора к самому себе. В конструкторе схемы компоновки данных это делается на закладке Связи наборов данных. В качестве выражения-источника укажем МойРодитель, а в качестве выражения-приемника - Номенклатура. Таким образом, из каждой записи набора данных будет получено значение поля МойРодитель, будет осуществлен поиск полученного значения в поле Номенклатура в этом же наборе данных, и система рекурсивно получит все записи по иерархии. Так как в запросе записи получаются только для номенклатуры, 325
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
переданной в параметре Ссылка, то в связи укажем, что следует использовать этот параметр. Так как параметр может принимать список значений, обозначаем это в связи, установив соответствующий флажок. В этот параметр будет помещено значение связи источника.
Теперь создадим связь между наборами данных Приход и Иерархия по полю Номенклатура (рис. 5.49).
Рис. 5.49. Установка связей наборов данных для построения иерархии
Рис. 5.50. Установка доступности полей
ВНИМАНИЕ!
В иерархическом наборе данных поле, с которым осуществляется связь основного набора, должно называться так же, как и в основном наборе. Так, в приведенном выше примере в иерархическом наборе данных связуемое поле должно иметь имя Номенклатура.
326
Глава 5. Справочник разработчика
СОВЕТ
Поскольку поля иерархического набора данных нужны только для построения иерархии, имеет смысл скрыть их от пользователя. Для этого следует отключить у этих полей доступность настройки. Делается это на закладке Наборы данных конструктора схемы компоновки данных (рис. 5.50).
На закладке Настройки в структуру отчета добавим группировку по полю Номенклатура с типом Иерархия (рис. 5.51).
В-1^ Отчет
□•0 «зя Склад
Поля группировки	X
t >	
Поле		 [Тип группировки		
0 — Номенклатура
[		J
| OK 11 Отмена |
РИС. 5.51.
Настройка иерархической группировки
Выполним отчет. Результат отчета с иерархической группировкой примет следующий вид (рис. 5.52):
Рис. 5.52.
Результат отчета
327
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Набор данных для проверки иерархии
В схеме компоновки данных можно также определить и набор данных, при помощи которого будет осуществляться проверка иерархии. Так, в предыдущем примере можно определить набор данных, при помощи которого пользовать сможет использовать иерархические виды сравнения с элементами построенной нами иерархии. Функционально это аналог отбора «В группе» для обычного иерархического справочника.
В предыдущем примере мы вывели в отчет Поступление товаров иерархическую группировку Номенклатура. При этом иерархия строилась не по группам справочника Номенклатура (полю Родитель), а произвольным образом - по полю справочника Мой родитель.
Запустим отчет в режиме 1С:Предприятие. Откроем окно настроек и на закладке Отбор установим отбор Номенклатура в группе Комплектующие (рис. 5.53).
	Зевов значение ~	1равое значение		
	□Отбор		
	Номенклатура	В группе	[▼	Комплектующие
		Равно Не равно В списке В группе из списка	
В группе
Не в списке
Не в группе из списка
Не в группе
Рис. 5.53. Установка отбора
В результате мы получим тот же отчет, что и раньше (рис. 5.52). То есть мы использовали отбор В группе по стандартной иерархии.
Теперь мы хотим использовать в отборе иерархические виды сравнения с элементами нашей произвольной иерархии. Но в данном случае отбор В группе произвольной иерархии, например Номенклатура в группе Основные детали, не даст никаких данных. Для решения данной задачи нужно определить в схеме компоновки данных набор данных для проверки иерархии.
328
Глава 5. Справочник разработчика
Создадим в схеме компоновки новый набор данных Провер-каИерархии (листинг 5.6).
Листинг 5.6. Текст запроса
Номенклатура.Ссылка КАК ПроверкаИерархииНоменклатуры,
Номенклатура.МойРодитель КАК РодительИерархииНоменклатуры ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.МойРодитель В(&ПроверкаИерархииНоменклатуры)
Для набора данных определим связь самого к себе. Выражение источник ПроверкаИерархииНоменклатуры, приемник РодительИерархииНоменклатуры. Параметр связи ПроверкаИерархииНоменклатуры, с возможностью использования списка (рис. 5.54).
Рис. 5.54. Установка связей наборов данных для проверки иерархии
Теперь следует указать данный набор как набор данных проверки иерархии поля Номенклатура набора данных Приход. Это делается на закладке Наборы данных в таблице полей набора данных (рис. 5.55).
Рис. 5.55. Установка набора данных и параметра для проверки иерархии
329
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Запустим отчет в режиме 1С:Предприятие. Откроем окно настроек и на закладке Отбор установим отбор Номенклатура в группе Основные детали (рис. 5.56).
Рис. 5.56. Установка отбора
Выполним отчет. В результат будут выводиться только записи в иерархии элемента Основные детали, при этом сохранится вся построенная нами иерархическая структура отчета (рис. 5.57).
Рис. 5.57.
Результат отчета
Таким образом, мы показали пример построения собственной иерархии для любого, в том числе неиерархического объекта.
Иерархия детальных записей
Система компоновки данных позволяет выводить в отчет иерархические детальные записи. Иерархия детальных записей нужна, чтобы вывести в отчет группировку Детальные записи как бы с типом Иерархия. Например, можно вывести в отчет иерархический справочник номенклатуры, используя только его детальные записи.
330
Глава 5. Справочник разработчика
При выводе в результат детальных записей система анализирует наличие у выводимого набора данных связи к самому себе. В случае если такая связь обнаружена, система рекурсивно выполняет связь для получения вложенных записей.
Создадим набор данных Номенклатура при помощи запроса (листинг 5.7).
Листинг 5.7. Текст запроса
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура. Родитель,
Номенклатура.Код,
Номенклатура.Наименование, Номенклатура.ЭтоГруппа
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЩЕ . .
Номенклатура.Родитель В(&Родители)
... . ' .......‘ .
При помощи данного запроса будут получаться записи с указанным родителем. Если параметр Родитель будет содержать пустую ссылку, то будут получены записи, у которых родителей нет, то есть корневые записи.
Для обеспечения вывода иерархии на закладке Связи наборов данных конструктора схемы компоновки данных опишем связь набора данных Номенклатура к самому себе. Укажем в качестве выражения-источника поле Ссылка, а в качестве выражения-приемника - поле Родитель. Таким образом, для каждой записи набора данных в наборе данных будут искаться записи, у которых поле Родитель имеет значение поля Ссылка родительской записи. Так как запрос получает данные с фильтрацией по родителю, в связи укажем параметр связи Родители. И так как параметр может принимать список значений, обозначаем это в связи, установив соответствующий флажок. В этот параметр будет помещено значение связи источника.
331
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Справочник Номенклатура имеет иерархию групп и элементов. При этом дочерние записи могут существовать только у групп. Поэтому для того чтобы система не осуществляла поиск дочерних записей не у групповых записей, укажем в связи условие связи ЭтоГруппа. Далее нужно указать, с какого значения
система должна начинать получать иерархические записи. Делается это при помощи свойства связи Начальное значение связи. Нам нужно, чтобы на первом уровне отчета выдавались записи, у которых родитель отсутствует. Поэтому
в качестве начального значения связи укажем выражение Значение(Справочник.Номенклатура.ПустаяСсылка). Таким образом, при первом получении данных из набора данных система будет получать записи, у которых значение поля Родитель равно пустой ссылке, то есть корневые записи (рис. 5.58).
Рис. 5.58. Связь иерархического набора данных с самим собой
Рис. 5.59. Настройка структуры и полей отчета 332
Глава 5. Справочник разработчика
На закладке Настройки добавим в структуру отчета группировку Детальные записи и перенесем в список выбранных полей поля Код и Наименование (рис. 5.59).
Выполним отчет. В результат выводятся детальные записи с иерархией по полю Родитель (рис. 5.60).
Рис. 5.60. Результат отчета
Возможность вывода одного элемента в нескольких родительских записях
При построении иерархии система компоновки данных позволяет выводить один элемент в нескольких родительских записях.
Например, в конфигурации созданы два справочника: Филиалы и Сотрудники. В справочнике Сотрудники имеются записи: Алексеева' Дарья, Соколов Андрей, Ильин Сергей. В справочнике Филиалы имеются записи: Основной и Дополнительный.
333
Разработка сложных отчетов в 1С:Г1редприятии 8. Система компоновки данных
В конфигурации создан регистр сведений МестаРаботы с измерениями Филиал типа Справочник.Ссылка.Филиалы и Сотрудник типа Справочник.Ссылка.Сотрудники (рис. 5.61).
Рис. 5.61. Регистр сведений «Места работы»
Создадим набор данных Филиалы, получающий список филиалов при помощи запроса (листинг 5.8).
Листинг 5.8. Текст запроса
ВЫБРАТЬ”	, Т“'i~ ‘ | ~
Филиалы.Ссылка как Филиал
ИЗ
Справочник.Филиалы как Филиалы
Для построения иерархии создадим набор данных Иерархия (листинг 5.9).
Листинг 5.9. Текст запроса
ВЫБРАТЬ	“	г
МестаРаботы.Филиал,
МестаРаботы.Сотрудник
ИЗ
РегистрСведений.МестаРаботы как МестаРаботы
ЩЕ
МестаРаботы.Филиал В(&Филиал)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Сотрудники.Ссылка,
NULL
ИЗ	_	. <*	1	‘
Справочник.Сотрудники КАК Сотрудники
ЩЕ
Сотрудники.Ссылка В(&Филиал)
334
Глава 5. Справочник разработчика
Первое объединение запроса выбирает сотрудников, работающих в филиалах. Вторая часть запроса выбирает сотрудников, так как иерархический набор должен содержать и сами иерархические записи.
Опишем связи между наборами данных. В качестве источника связи укажем набор данных Филиалы, приемника - набор данных Иерархия. Выражение-источник - поле Филиал, выражение-приемник - поле Филиал. Параметр связи - поле Филиал, и укажем, что возможен список параметров.
Опишем иерархическую связь набора с самим собой. В качестве выражения-источника укажем поле Сотрудник, а в качестве выражения-приемника - Филиал. Параметр связи - поле Филиал, и укажем возможность списка параметров (рис. 5.62).
Рис. 5.62. Установка связей наборов данных для построения иерархии
Рис. 5.63. Настройка иерархической группировки
335
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
ВНИМАНИЕ!
В иерархическом наборе данных поле, с которым осуществляется связь основного набора, должно называться так же, как и в основном наборе. Так, в приведенном выше примере в иерархическом наборе данных связуемое поле должно иметь имя Филиал.
На закладке Настройки в структуру отчета добавим группировку по полю Филиал с типом Иерархия (рис. 5.63).
Выполним отчет. В результате филиал Основной будет выведен для двух сотрудников (рис. 5.64).
Рис. 5.64. Результат отчета
Связи наборов данных
При разработке отчетов часто требуется получить информацию из нескольких наборов данных. При этом между ними нужно установить связь. Пусть для анализа информации о движении номенклатуры в схеме компоновки данных создано два набора.
Набор данных Поступление, получающий данные о поступлении номенклатуры при помощи запроса (листинг 5.10).
Листинг 5.10. Текст запроса
ВЫБРАТЬ
ПриходнаяНакладнаяПереченьНоменклатуры.Номенклатура,
ПриходнаяНакладнаяПереченьНоменклатуры.Количество КАК Поступило, ПриходнаяНакладнаяПереченьНоменклатуры.Цена КАК ЦенаПоступления ИЗ
Документ.ПриходнаяНакладная.ПереченьНоменклатуры
КАК ПриходнаяНакладнаяПереченьНоменклатуры
336	' '
Глава 5. Справочник разработчика
Набор данных Расход, получающий данные о расходе номенклатуры при помощи запроса (листинг 5.11).
Листинг 5.11. Текст запроса
РасходнаяНакладнаяПереченьНоменматуры.Номенклатура, РасходнаяНакладнаяПереченьНоменклатуры.Количество КАК Продано, РасходнаяНакладнаяПереченьНоменклатуры.Цена КАК ЦенаПродажи из
Документ.РасходнаяНакладная.ПереченьНоменклатуры
КАК РасходнаяНакладнаяПереченьНоменклатуры
В схеме компоновки данных на закладке Связи наборов данных добавим связь между наборами данных и опишем ее. В качестве источника связи укажем набор данных Поступление, приемника-набора данных Расход. Выражение-источник -поле Номенклатура, выражение-приемник - поле Номенклатура (рис. 5.65).
Наборы данных | Связи наборов д... | Вычисляемые п... , Ресурсы Параметры Макеты Вложенные схемы Настройки
риемник связи [Выражение ист...[Выражение лр„. Параметр Расход
Номенклатура Номенклатура
Список параме...{Условие связи Нг
Е
□
1
Рис. 5.65. Описание связи наборов данных
При описании связей между наборами данных существует ряд особенностей:
•	Набор данных, от которого идет связь, будет считаться родительским, а набор данных, к которому идет связь, будет считаться зависимым от него.
•	В схеме компоновки данных нет описания типа связи. Все связи считаются Левыми внешними соединениями, то есть у родительского набора данных будут отражаться в отчете все записи, независимо от того, найдены ли соответствующие им данные в зависимом наборе данных или нет. Исключение составляет случай, когда на поле зависимого отбора данных 337
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
наложен глобальный (на уровне всего отчета) отбор. Тогда все связи наборов данных, генерируемые системой компоновки, данных будут иметь тип Внутренняя.
Продемонстрируем на примере, как изменится результат отчета, в зависимости от того, какой набор выбран родительским, а какой - зависимым.
При описании связи наборов данных набор Поступление указан в качестве родительского набора. Поэтому в результате отражены все поступления номенклатуры и только та номенклатура из набора Расход, которая есть в наборе Поступление (рис. 5.66).
Поступление номенклатуры
Рис. 5.66. Результат отчета
Теперь укажем набор данных Расход в качестве родительского набора (рис. 5.67).
Наборыдашых | Связи наборов дТ~1 Вычисляемые п.„ Ресурсы Параметры Макеты Вложение схемы Настройки'
Рис. 5.67. Описание связи наборов данных
В результате отражены все записи о расходе номенклатуры и только та номенклатура из набора Поступление, которая есть в наборе Расход (рис. 5.68).
338
Глава 5. Справочник разработчика
Расход номенклатуры
.	ЙППоступипо		Продано	Цена поступления	Цена
[Восстановление данных		1,000		5 000,00
Диагностика компьютера		3.0001		2 000,00
Компьютер для дома		1,000		10 000,00
Компьютер Для офиса		1.000		10 000ДО
Монитор LCD	2,000	1,000	7 000,00	10 000,02,
Ремонт компьютера		2Д001		6 000,00
Сопутствующее услуги		4,000		1 000,00
Итого	2,000	.13,ОСО	• ОСЮ 0	44 600,00
Рис. 5.68. Результат отчета
Создадим отбор на уровне всего отчета на поле зависимого набора Поступление (рис. 5.69).
Выбранные поля | Отбор | Сортировка Условное оформление Пользовательские поля Другие настройки
		Левое значение	[Виа сравнения	
0 — Номенклатура		В-Отбор		
	0	— Поступило [Меньше	JHBHHNMMHKSU	
— Продано г- — Цена поступления *	« Цена продажи			t * < S
Рис. 5.69. Отбор отчета по полю зависимого набора данных
В результате в отчет попадут только связанные по полю Номенклатура записи из обоих наборов данных, то есть тип связи будет Внутренним соединением (рис. 5.70).
------ 1-----------------
Расход номенклатуры
Отбор: Поступило Меньше "3"
Номенклатура	[Поступило Продано	Цена поступления	Цена п-. дажи
Монитор LCD	2.0001	1,000	7 00000	10 000,00
Итого	2 UC	1,000	’006 .00	
Рис. 5.70.
Результат отчета
С точки зрения эффективности исполнения отчета лучше получать в дочернем наборе сразу только те записи, которые удовлетворяют условию связи наборов данных. Для этого нужно указать в запросе дочернего набора параметр связи и исполь-339
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
зовать его в схеме компоновки при описании связи (см. главу 4 пример 7). Иначе в дочернем наборе будет получено много лишних записей, которые затем будут откидываться как не удовлетворяющие условию связи.
•	Если родительский и зависимый наборы данных содержат поле с одинаковым именем, то данные поля будут извлекаться из родительского набора. Несвязанные наборы данных не могут содержать поля с одинаковыми именами.
•	Данные зависимого набора не могут быть получены без получения данных из родительского набора.
•	Если ни одно поле зависимого набора данных не участвует в настройках системы компоновки данных, то этот набор не будет включен в макет компоновки данных.
•	В случае если в группировке используются данные из нескольких наборов данных, при исполнении компоновки осуществляется обход по последнему зависимому набору данных.
Расчет итогов
Система компоновки позволяет выводить в отчет данные из нескольких наборов. При этом в некоторые группировки могут попадать записи некоторого набора данных по нескольку раз. Однако в случае использования связанных наборов данных, при расчете итога, каждая запись будет учтена только один раз. Если отчет получен с использованием связи двух таблиц в запросе, общий итог будет содержать суммы по всем строкам, что неверно.
Для примера рассмотрим вывод отчета с использованием двух связанных наборов данных.
340
Глава 5. Справочник разработчика
Создадим набор данных, получающий остатки номенклатуры при помощи запроса (листинг 5.12).
Листинг 5.12. Текст запроса
ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.Склад,
ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки
КАК ОстаткиНоменклатурыОстатки
Укажем ресурс отчета - КоличествоОстаток. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Склад, КоличествоОстаток (рис. 5.71).
Наборы данных Связи наборов данных Вычисляемые тюля Ресурсы Параметры Макеты Вложенные схемы | Настройки |
< Детальные записи»	*
<
______________ < $
Настройки: [Отчет] Отчет
Параметры данных | Выбранные поля [ Отбор Сортировка Условное оФормле... Пользовательские Другие настройки
t
I
Й-- Склад
Й 3 КоличествоОстаток
Й ж СистемныеПоля
Й-Bi ПараметрыДанных
И. и а
В Выбранные поля i--— Номенклатура
].- Склад
Рис. 5.71. Настройки отчета
Выполним отчет (рис. 5.72).
Рис. 5.72. Результат отчета
Создадим набор данных, получающий продажи номенклатуры при помощи запроса (листинг 5.13).
341
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Листинг 5.13. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Укажем ресурсы отчета - КоличествоОборот и СтоимостьОбо-рот. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, КоличествоОборот, СтоимостьОборот (рис. 5.73).
Наборы данных Связи н у	данных Вычисляемые поля Ресурсы Параметры Макеты Вложенные схемы | Настройки |
=....£/] ша < Детальные записи>

<
4 ¥
Настройки: Отчет Отчет
Параметрыданных | Выбранные поля | Отбор Сортировка , Условное оФормле. Пользовательские, Другие настройки
Рис. 5.73. Настройки отчета
Выполним отчет (рис. 5.74).
Рис. 5.74. Результат отчета
Свяжем два указанных выше набора данных по полю Номенклатура (рис. 5.75).
342
Глава 5. Справочник разработчика

Наборы данных | Связи наборов данных | Вычисляемые поля Ресурсы Пар^'втры , Макеты Вложенные схемы Настройки
Источник, связи	Пр.--мник связи	'Выражение источни		р	СпиСи'- пара.Условие св |Нача<
Набор Данных1	НаборДанных2	[Номенклатура				о _L	I 
Рис. 5.75. Связь наборов данных
Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, Склад, Количест-воОстаток, КоличествоОборот, СтоимостьОборот (рис. 5.76).
Наборы данных Сс язи н хоров данных Вычисляемые поля Ресурсы Параметры Макеты Вложен» схемы | Настройки |
Отчет
Детальные записи:
Н астройки:	Отчет < Детальные записи>
Рис. 5.76. Настройки отчета
Выполним отчет (рис. 5.77).
Контрагент
Монитор LCD
Монитор LCD
Склад
ООО "Автоматика"
ООО "Стиль"
Монитор LCD
Монитор LCD
Итоге
ООО "Автоматика"
ООО "Стиль"
Розничный Розничный Основной Основной
Кот мчество	t Количество
остаток оборот
1,000 _1
1,000
2,000 '
2,000
3 000
Стоимость оборот
12 000,00
10 000,00
12 000,00
10 000,00
1,00
1,00
1,00	IUUUU,UU
2.00	?2 P.O
Рис. 5.77. Результат отчета
Мы видим, что за счет соединения записи из обоих наборов данных выводятся в результат по нескольку раз. Однако общий итог по таблице рассчитан правильно за счет того, что в расчете итогов каждая запись участвует только один раз.
343
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Получим теперь такой же отчет с использованием связи двух таблиц в запросе (листинг 5.14).
ИЗ
Листинг 5.14. Текст запроса
ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.Склад,
ОстаткиНоменклатурыОстатки.КоличествоОстаток,
ПродажиОбороты.Контрагент,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот
РегистрНакопления.ОстаткиНоменклатуры.Остатки
КАК ОстаткиНоменклатурыОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты
КАК ПродажиОбороты
ПО ОстаткиНоменклатурыОстатки.Номенклатура =
ПродажиОбороты.Номенклатура
I
Создадим такие же ресурсы и настройки отчета, как и в предыдущем случае (рис. 5.76). Выполним отчет (рис. 5.78).
	| Контрагент	Склад	Количество I?статок	Количе во аБорсп	Сто имеет., оборот
Монитор LCD	ООО "Автоматика"	Розничный	1.000	1.00	12 000,00
Монитор LCD	ООО "Стиль"	Розничный	1.000	1,00	10 000,00
Монитор LCD	ООО "Автоматика"	Основной	2.000	1,00	12 000,00
Монитор LCD	ООО "Стиль"	Основной	2.000	1,00	10 000,00
Итого			6.000		
Рис. 5.78. Результат отчета
Мы видим, что итоговые значения содержат суммы по всем строкам. В данном случае - это неверный результат.
Расшифровка
Система компоновки данных предоставляет возможность расшифровать информацию, содержащуюся в отчете. То есть, выполнив отчет и выделив одну из его ячеек, пользователь может получить другой отчет, связанный со значением, находящимся в этой ячейке.
344
Глава 5. Справочник разработчика
Например, более подробный отчет, показывающий, из каких именно показателей получилась эта сумма в ячейке. Или открыть и посмотреть тот документ, который указан в этой ячейке. Или отобрать, отсортировать данные этого отчета по значению в этой ячейке и т. п.
Например, получив отчет по продажам номенклатуры, можно двойным щелчком мыши на поле вызвать меню расшифровки (рис. 5.79).
Продажи товаров и услуг
Отбор: Услуги
- нпмгент _____________
Номенклатура___________
Период
Э-Х> “Автоматика*'_
Диагностика компьютера
18 марта 2008 г.___
26 марта 2008 г.
ООО "Атлант*
. Количество Стоимость
Расшифровать
Открыть "Номенклатура = Диагностика компьютера"
Отфильтровать
Восстановление данных 22 апреля 2008 г.
Ремонт компьютера
22 апреля 2008 г.
Сопутствующее услуги
22 апреля 2008 г.___
Х»О "Стандарт”__________
Диагностика компьютера
22 апреля 2008 г.
Ремонт компьютера
22 апреля 2008 г. Сопутствующее услуги
22 апреля 2008 г.
Итого
Упорядочить
Сгруппировать
Оформить
1_________500,00
_1_________500,00
1	3000,00
1	3 000,00
2	1 000,00
2]	1 000,00
15 000 ДО
Рис. 5.79. Вызов меню расшифровки
Далее выбрать пункт Расшифровать и поле, по которому нужно расшифровать данные (рис. 5.80).
Рис. 5.80. Выбор поля расшифровки
345
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В результате будет получен отчет, содержащий более конкретную информацию по выделенной ячейке и расшифровывающий ее по выбранному полю, в данном случае Период (рис. 5.81).
Продажи товаров и услуг
Отбор: Услуги И
Контрагент Равно "ООО "Автоматика"" И
Номенклатура Равно "Диагностика компьютера"
бериод	количество	тоимость
18 марта 2008 г.	1	1 000,00
Ж марта 2008 г.	1	500,00
Итого	2	1 500 ДО
Рис. 5.81. Результат отчета
Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных. Он позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета-расшифровки.
При формировании табличного документа с помощью системы компоновки данных в расшифровку ячейки помещаются специальные объекты типа ИдентификаторРасшифровки. При этом самих значений полей и полей группировок в табличном документе нет. Получить значения полей можно из объекта ДанныеРасшифровки, который был заполнен при выводе отчета.
Для того чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных. Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект.
Для того чтобы данные расшифровки заполнились при формировании результата, необходимо передать объект ДанныеРасшифровки в метод Инициализировать) процессора компоновки данных.
346
Глава 5. Справочник разработчика
Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки. Однако в отчетах, где используется собственная процедура программной компоновки данных Отчет по системным блокам (стр. 153) и Сборка системных блоков (стр. 176), нужно явно указывать объект Данные расшифровки для заполнения информации о расшифровке при формировании отчета (листинг 5.15).
Листинг 5.15. Фрагмент процедуры СформироватьОтчет()
КомпоновщикМакета - Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки • Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета
.Выполнить(СхемаКомпоновкиДанных
, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных - Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки
,ВнешниеНаборыДанных
, ДанныеРасшифровки);
к	™ ’ шЛямМв яви	а» ' 
Тогда при двойном щелчке мыши на поле отчета вызывается стандартное меню расшифровки, которое состоит из возможных действий над расшифровкой: Расшифровать, Открыть, Отфильтровать, Упорядочить, Сгруппировать, Оформить. Действие Расшифровать не доступно, если данный элемент расшифровки - Детальные записи, кроме случая, когда он содержит поля-ресурсы. Однако разработчик может реализовать и свой, нестандартный, вариант расшифровки. В этом случае он может изменить список доступных действий расшифровки, выполнить другие процедуры и т. п.
Продемонстрируем собственный вариант расшифровки на примере отчета Сборка системных блоков. Для этого в форме отчета нужно создать обработчик события ОбработкаРасшиф-ровки() для поля Результат (рис. 5.82).
347
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.82.
Обработчик события «ОбработкаРасшифровки» для поля табличного документа «Результат»
В модуле формы внесем следующий текст в процедуру обработчика события ОбработкаРасшифровки (листинг 5.16).
Листинг 5.16. Процедура обработчика события обработки
расшифровки для поля «Результат»
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка
, СтандартнаяОбработка) Перем ВыполненноеДействие;
// Запретим стандартную обработку расшифровки СтандартнаяОбработка - Ложь;
// Создадим и инициализируем обработчик расшифровки
ОбработкаРасшифровки - Новый ОбработкаРасшифровкиКомпоновки Данных(ДанныеРасшифровки, Новый ИсточникДоступных НастроекКомпоновкиДан ных(СхемаКом поновкиДан них));
ДостулныеДействия - Новый Массив();
ДоступныеДействия.Добавить(ДействиеОбработки
РасшифровкиКомпоновкиДанных.ОткрытьЗначение);
ДоступныеДействия,Добавить(ДействиеОбрабогки
Расшифровки Компонов к и Данных .Упорядоч ить);
ДоступныеДействия.Добавить(ДействиеОбработки
РасшифровкиКомпоновкиДанных.Расшифровать);
Ж	И
//Осуществим выбор действия расшифровки пользователем Настройки - ОбработкаРасшифровкиВьтполнить(Расшифровка , ВыполненноеДействие, ДостулныеДействия):
I
348
Глава 5. Справочник разработчика
Если Настройки <> Неопределено Тогда
I Ж *	>
// Пользователь выбрал действие,
И для которого нужно менять настройки
Если ВыполненноеДействие = ДействиеОбработкиРасшифровки
КомпоновкиДанных.Упорядочить Тогда
КомпоновщикНасгроек.ЗагрузитьНастройки(Настройки); СформироватьОтчет();
Иначе
// При других действиях создадим новый отчет, [] откроем форму, сформируем отчет в ней. Отчет = Отчеты.СборкаСистемныхБлоков.Создать(); Форма = Отчет.ПолучитьФорму("ФормаОтчета");
Форма.Открыть();
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); Форма.Сформ ироватьОтчет();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Здесь мы отменяем стандартную обработку расшифровки, создаем новый обработчик расшифровки - объект Обработ-каРасшифровкиКомпоновкиДанных, затем задаем список доступных действий расшифровки - ОткрытьЗначение, Упорядочить, Расшифровать, выполняем выбор действия расшифровки, загружаем настройки для выбранной расшифровки в компоновщик настроек и переформировываем отчет. Чтобы компоновка проводилась с новыми настройками, в начало процедуры СформироватьОтчет() запишем следующий фрагмент кода (листинг 5.17):
Листинг 5.17. Фрагмент процедуры СформироватьОтчет()
.. -•»***	&&	йГ"'	.
Настройки • КомпоновгцикНастроек. Настройки:
Выполним отчет. Двойным щелчком на поле отчета мы можем вызвать меню собственной расшифровки и выполнить перечисленные в нем действия расшифровки (рис. 5.83).
349
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Сборка системных блоков
Параметры данных
Начало периода = 01.01.2008
Конец периода = 31.05.2008
Системный блок Количество Стоимость
Мастер_______________________
Дата ~7 |Номер '; .......______________________________
Компьютер для дома	____1|__	9 000,00
Ильин Сергей	1'	9 000.00
72603.2008	'000000002	if........ '9000,00
[Компьютер даДиДИЗД	1	8 500,00
Расшифровать..	8 500’00J
8 500,00
Открыть "Системный блок = Компьютер для офиса"	500 001
Упорядочить
Рис. 5.83.
Результат отчета
Однако в случае, когда мы выводили результат отчета не в форму, а в простой табличный документ, как, например, при выводе списка номенклатуры из справочника номенклатуры (пример 3, стр. 144), расшифровка работать не будет. Поэтому сначала нужно создать специальную форму и вывести результат отчета в поле табличного документа, расположенного в этой форме. Более подробно об этом рассказывалось в главе 4. Затем в этой форме нужно создать обработчик события Выбор для поля Результат (рис. 5.84).
Свойства Поле табличного документа
* X
Основные
Имя
| Результат
Изменяет Данные ПропускатьПриВводе ПервыйВГ руппе Видимость Рамка ЦветРамки
ВертикальнаяПолосаПрокругки 0
ГоризонтальнаяПолосаПрокрутки 0
□
□
□
0_______________________
□ стиль: Рамка элементов управленр ...
И стиль: Рамка
Доступность
АвтоКонгекстноеМ еню КонтекстноеМеню
* События: ^Выбор
ОбработкаРасшиФровки ПриАктивизацииОбласти
Н ачалоП ерегаскивания ПроверкаПеретаскивания О.^нчан днер«л-ас>.иьа...ы
0
Рис. 5.84. Обработчик события Выбор() для поля табличного документа «Результат»
350
Глава 5. Справочник разработчика
В модуле формы внесем следующий текст в процедуру обработчика события Выбор() (листинг 5.18).
Листинг 5.18. Процедура обработчика события Выбор()
для поля «Результат»
Процедура РезультатВыборрлемент, Область, СтандартнаяОбработка) ИндексРасшифровки = Число(Область.Расшифровка);
ОбработкаРасшифровки - Новый ОбработкаРасшифровкиКомпоновки
Данных(ДанныеРасшифровки, Новый ИсточникДоступных НастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ЭлементРасшифровкиДанных - ДанныеРасшифровки
.Элементы[ИндексРасшифровки];
ЭлементРасшифровкиДанныхПоля - ЭлементРасшифровкиДанных .ПолучитьПоля()[01;
ОбработкаРасшифровки.ОткрытьЗначение(ЭлементРасшифровкиДанных .Идентификатор, Новый ПолеКомпоновкиДанных
(ЭлементРас шифровкиДанныхПоля. Поле)); КонецПроцедуры
В начало модуля внесем определение переменных (листинг 5.19).
Листинг 5.19. Определение переменных
Перем ДанныеРасшифровки, СхемаКомпоновкиДанных;
В модуле формы мы создали процедуру РезультатВыбор(), которая вызывается при двойном щелчке мыши на поле отчета. Здесь мы создаем объект ОбработкаРасшифровкиКомпонов-киДанных, затем получаем ЭлементРасшифровкиДанных и ЭлементРасшифровкиДанныхПоля и выполняем действие расшифровки ОткрытьЗначение для выбранного поля.
Таким образом, щелкнув два раза на поле результата при запуске отчета из справочника номенклатуры, мы можем открыть элемент справочника (рис. 5.84).
351
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.85. Результат отчета
ВНИМАНИЕ!
В случае использования произвольных форм для вывода результата отчета нужно определять действия по расшифровке в обработчике события Выбор() для поля Результат, так как стандартная расшифровка и событие ОбработкаРаСШИфрОВКИ() вызываются только для форм типа Форма отчета.
Использование нескольких схем компоновки для одного отчета
Каждый отчет может иметь несколько схем компоновки данных. Иногда бывает нужно выполнить один и тот же отчет, по-разному представив данные в нем, в зависимости от ситуации. Например, в одной схеме компоновки данные для отчета получаются при помощи запроса к информационной базе, а в другой -352
Глава 5. Справочник разработчика
заполняются программно из таблицы значений. Затем нужная схема компоновки может быть программно или визуально установлена для отчета.
Чтобы создать для отчета новую схему компоновки, нужно раскрыть его в дереве отчетов конфигурации, выделить ветвь Макеты, нажать кнопку Добавить в командной панели окна конфигурации (рис. 5.86).
Конфигурация
? X
Действия
I'1"! Конфигурация |+]-|U Общие И У Константы Е-3 Справочники Е--щ| Документы
nit♦ё
•Щ Журналы документов
Е {J Перечисления
Е-Отчеты
ЁОстаткиНоменклагуры
Ё , Г ОтчетПоСистемнымБлокам
Е •" СписокНоменклэтуры Я Реквизиты
; -=:S Т абличные части
4 J ОсновнаяСхемаКомпоновкиДанных
I | Схема ИерархмяДетальныхЗаписей
Рис. 5.86. Создание новой схемы компоновки данных
Либо можно открыть отчет двойным щелчком мыши и на закладке Макеты нажать кнопку Добавить в командной панели отчета (рис. 5.87).
Рис. 5.87.
Создание новой схемы компоновки данных
353
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В открывшемся конструкторе макета нужно ввести имя схемы компоновки данных, выбрать тип макета Схема компоновки данных и нажать Готово (рис. 5.88).
Рис. 5.88. Создание новой схемы компоновки данных
Чтобы при вызове из меню Отчеты отчет выполнялся в соответствии с новой схемой компоновки данных, нужно установить ее в качестве основной схемы для отчета на закладке Основные (рис. 5.89).
Рис. 5.89. Установка основной схемы компоновки данных для отчета
354
Глава 5. Справочник разработчика
Теперь отчет Список номенклатуры будет выполняться из меню Отчеты в соответствии со схемой компоновки данных Схе-ма_ИерархияДетальныхЗаписей (рис. 5.90).
Рис. 5.90. Результат выполнения отчета из меню «Отчеты»
Однако этот же отчет программно вызывается из формы справочника номенклатуры. При его программной компоновке в обработчике события ПриОткрытии() используется Основ-наяСхемаКомпоновкиДанных (листинг 5.20).
Листинг 5.20. Процедура модуля формы ПриОткрытии()
Процедура ПриОткрытии()
СхемаКомпоновкиДанных « Отчеты.СписокНоменклатуры
.ПолучитьМакет(пОсновнаяСхемаКомпоновкиДанных");
Настройки « СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КонецПроцедуры
Таким образом, при выполнении в этом случае отчет будет иметь другой вид (рис. 5.91).
355
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.91. Результат выполнения отчета из справочника номенклатуры
Многоязычные отчеты
Система компоновки данных поддерживает работу в многоязычной среде. Дело в том, что с одной и той же информационной базой могут работать пользователи, родным языком для которых является не русский, а другой, например, английский.
В этом случае хотелось бы, чтобы пользователь видел отчет (вернее «оформление» этого отчета) на привычном ему языке. При этом мы не рассматриваем вопрос того, как хранить собственно данные на двух языках (например, русское и английское название номенклатуры). Здесь мы рассматриваем задачу, как предоставить англоязычному пользователю, например, возможность видеть заголовок, шапку отчета на английском языке, пользоваться возможностями отборов, сортировки, настройки отчета также на своем родном языке.
356
Глава 5. Справочник разработчика
Для работы с разными языками в конфигурации можно определить несколько языков и затем каждому пользователю информационной базы в его настройках указать тот язык, который должна использовать система. При этом она автоматически сформирует пользователю все системные меню на его родном языке. Но о том, что касается конкретного прикладного решения (например, конкретного отчета), разработчик должен позаботиться самостоятельно, так как система заранее «не знает», что именно и как нужно представлять на другом языке.
Для этого в системе компоновки данных есть возможность задавать названия полей, заголовков отчета, параметров, вычисляемых и пользовательских полей, представлений отбора и оформления, макетов полей и т. п. на нескольких языках.
Для примера добавим в конфигурацию еще один язык. Раскроем ветвь Общие дерева объектов конфигурации. Выделим ветку Языки и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 5.92).
Конфигурация
? X
t»g ж
Г I Конфигурация в* Общие “ЧХ. Подсистемы --ЦЦ Общие модули •- Параметры сеанса
$4 Роли
Планы обмена
-	§2 Критерии отбора у*. Подписки на события
-	Регламентные задания
-	О| Общие формы
 Ж Интерфейсы
Ы Г"_ Общие макеты Общие картинки Пакеты XDTO Web-сервисы WS -ссылки Стили
’“’иЙ Русский Константы ,
Е1 Документы
Журналы документов Перечисления Отчеты
Рис. 5.92. Добавление языка
357
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Дадим ему имя Английский (рис. 5.93).
Рис. 5.93. Установка свойств языка
Кроме имени обязательно надо задать и код языка. Именно по нему система будет определять принадлежность тех или иных интерфейсных надписей к конкретному языку.
ВНИМАНИЕ!
При смене кода языка все введенные названия полей, параметров, заголовков отчета и т. п. нужно будет продублировать, выполнив команду конфигуратора «Правка» - «Редактирование текстов интерфейсов».
Откроем отчет Отчет по продажам. На закладке Основные мы увидим кнопку открытия со значком лупы, появившийся справа у поля Синоним. В случае использования нескольких языков этот значок появляется у всех элементов отчета, для которых можно задать названия на нескольких языках. Нажав на значок лупы, зададим синоним отчета на английском языке - Sales report, который будет отображаться в меню Отчеты (рис. 5.94).
Рис. 5.94. Установка синонима отчета на английском языке
358
Глава 5. Справочник разработчика
Откроем схему компоновки данных отчета. На закладке Наборы данных в поле Заголовок вводятся имена полей, которые будут отражаться в шапке отчета и в окне настроек для пользователя. Выделив нужный заголовок двойным щелчком мыши и нажав на значок лупы, зададим заголовки полей на английском языке (рис. 5.95).
Рис. 5.95. Установка заголовка поля на английском языке
Также можно задать англоязычный заголовок отчета или его отдельных элементов, в данном случае диаграммы (рис. 5.96).
Рис. 5.96. Установка заголовка отчета на английском языке
Аналогично можно задать англоязычные заголовки вычисляемых и пользовательских полей, заголовки выбранных полей и их групп, полей параметров (рис. 5.97, 5.98).
359
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.97. Установка заголовка параметра на английском языке
Рис. 5.98. Установка заголовка вычисляемого поля на английском языке
Также можно задать англоязычные представления для именованного отбора и условного оформления в колонке Представление (рис. 5.99).
, Параметры даьных Выбранные поля | Отбор [ Сортировка Условное оформле... , Пользовательские.,. Друг ие настройки
4 «
В Отбор________________
;.— Ном... [Равно
FоличествоI
[Перечисление. В... [Быстрый дТЯИГ
0
Е™— Контрагент
[]••• Номенклатура
Период
..— Стоимость
Е -и Параметры Данных
Рис. 5.99. Установка представления отбора на английском языке
В случае если для отчета создан предопределенный макет, система компоновки данных позволяет задавать многоязычные заголовки макетов полей и группировок. Для примера откроем
360
Глава 5. Справочник разработчика
схему компоновки ПечатьСборки документа СборкаСистем-ныхБлоков. На закладке Макеты выделим ячейку, имеющую тип заполнения Текст или Шаблон, вызовем окно редактирования ее свойств и, нажав кнопку открытия со значком лупы, введем заголовок на английском языке (рис. 5.100).
Теперь запустим 1 ^Предприятие 8 командной строкой "C:\Program Files\1cv81\bin\1cv8.exe" /1еп для англоязычного интерфейса от имени пользователя, для которого установлен английский язык. Чтобы установить для пользователя английский язык, выполним в меню конфигуратора пункт Администрирование - Пользователи, выберем в списке пользователя и в открывшемся окне, на закладке Прочие, укажем для него свойство Язык.
Выполним Отчет по продажам, выделив в списке отчетов его синоним на английском языке (Sales report), введенный нами ранее.
Вызовем окно настроек отчета кнопкой Settings, включим использование группировки Customer и изменим начало отчетного периода на 01/03/2008 (рис. 5.101).
361
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.101. Результат отчета в англоязычной среде
Сформируем отчет кнопкой Generate. В результате заголовки полей отчета, параметров и заголовок диаграммы будут выведены в англоязычном варианте (рис. 5.102).
Рис. 5.102.
Результат отчета в англоязычной среде
362
Глава 5. Справочник разработчика
Вызовем печать документа Сборка компьютера, для которого ранее мы создали предопределенный макет и задали заголовки полей табличной части на английском языке (рис. 5.103).
# Nomenclature Times Price Total
"Т	Жесткий диск	Г	4 UUU	4 Udo
2	Материнская плата	1	3 000	3 000
	3	Память	1	2 000	2 000
	4	Сборка компьютера	1	1 500	1 500
10 500
Рис. 5.103. Печать документа, использующего предопределенный макет в англоязычной среде
Поля
Автоматическое заполнение полей
наборов данных
В конструкторе схемы компоновки данных на закладке Наборы данных находится флаг, который позволяет управлять свойством Автозаполнение (рис. 5.104).
Рис. 5.104. Автоматическое заполнение полей наборов данных
363
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
При создании набора данных типа Запрос данный флаг включен по умолчанию. Свойство Автозаполнение указывает, что система должна самостоятельно сформировать состав полей, доступных для схемы компоновки данных, на основании текста запроса, содержащегося в наборе данных.
Доступные поля - это те поля отчета, которыми оперирует схема компоновки. Они могут быть использованы в настройках отчета (сортировке, отборе и др.), участвовать в группировках отчета, формировании вычисляемых полей и пр. Затем мы можем поставить флаг ограничения доступности у поля на его участие в отображаемых полях отчета (колонка Поля), создании условий (Условие), группировке (Группа), сортировке (Упорядочивание). И тогда данное поле не будет участвовать в этих настройках (рис. 5.104).
При автоматическом заполнении полей наборов данных действуют следующие правила:
1.	Поля списка выборки запроса верхнего уровня становятся доступными для настроек отчета: отбора, сортировки, выбора, группировки. Заметим, что доступность поля будет определяться по его типу. Например, поле неограниченной длины не может быть использовано в качестве поля группировки.
2.	Поля виртуальных таблиц, на которые можно наложить условия в параметрах этих таблиц, становятся доступными для отбора.
3.	Параметры виртуальных таблиц становятся доступными параметрами. Также становятся доступными все параметры, явно указанные в запросе.
Для примера рассмотрим отчет Отчет по продажам. Набор данных для него получается с помощью следующего запроса (листинг 5.21):
Листинг 5.21. Текст запроса
ВЫБРАТЬ
ПродажиОбороты. ПериодДень,
ПродажиОбороты.ПериодМесяц,
364
Глава 5. Справочник разработчика
ПродажиОбороты .Контрагент,
ПродажиОборотьг.СтоимостьОборот КАК Стоимость
ИЗ
РегистрНакопленияЛродажи.Обороты(,, Авто,) КАК ПродажиОбороты
В соответствии с первым правилом поля Контрагент, Пери-одДень, ПериодМесяц, Стоимость будут доступны для отбора, сортировки, группировки, выбора (рис. 5.104).
В данном запросе все поля верхнего уровня. Но для описания набора данных мы используем следующий запрос (листинг 5.22).
Листинг 5.22. Текст запроса
ВЫБРАТЬ
ПриходнаяНакладная.Номер,
ПриходнаяНакладная.Дата,
Приходная Накладная. Контрагент,
ПриходнаяНакладная.ПереченьНоменклатуры.
(Номенклатура, Количество, Цена)
Друмент.ПриходнаяНакладная КАК ПриходнаяНакладная
В список доступных полей попадут только поля верхнего уровня запроса Номер, Дата и Контрагент (рис. 5.105).
Рис. 5.105. Автоматическое заполнение полей наборов данных
365
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В соответствии со вторым правилом поле Номенклатура, хотя явно не присутствует в запросе, будет доступно для отбора, так как на него можно наложить отбор в параметрах виртуальной таблицы (рис. 5.106).
Рис. 5.106. Доступные поля для отбора в схеме компоновки данных
В соответствии с третьим правилом в доступные параметры из данного запроса попадут параметры НачалоПериода и КонецПериода, так как их можно указывать в виртуальной таблице (рис. 5.107).
Рис. 5.107. Доступные параметры в схеме компоновки данных
Проиллюстрируем эти два правила на примере. В конструкторе запроса схемы компоновки данных Отчета по продажам вызовем диалог параметров виртуальной таблицы. В этом диалоге мы увидим параметры НачалоПериода и КонецПериода, которые становятся доступны при автозаполнении. Вызовем диалог для создания условия виртуальной таблицы. В этом диалоге мы увидим поля Контрагент и Номенклатура, которые становятся доступны для отбора при автозаполнении.
366
Глава 5. Справочник разработчика
То есть если бы поле Контрагент не было указано в выбранных полях запроса и не попало бы в список доступных полей в соответствии с первым правилом автозаполнения, то оно стало бы доступно для отбора в соответствии со вторым правилом (рис. 5.108).
Рис. 5.108. Поля и параметры виртуальной таблицы в конструкторе запроса
В случае если в запросе в виртуальной таблице указаны имена параметров, то доступны будут параметры именно с указанными именами (листинг 5.23).
Листинг 5.23. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.ПериодДень,
ПродажиОбороты.ПериодМесяц,
ПродажиОбороты.Контрагент,
ПродажиОбороты.СтоимостьОборот КАК Стоимость
ИЗ
РегистрНакопления.Продажи.Обороты({&Начало), {&Конец}, Авто,) КАК ПродажиОбороты
367
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
При автозаполнении полей на основе приведенного выше запроса доступными будут параметры Начало и Конец вместо НачалоПериода и КонецПериода (рис. 5.109).
Рис. 5.109. Доступные параметры в схеме компоновки данных
Все параметры, явно указанные в запросе, также становятся доступными (листинг 5.24).
Листинг 5.24. Текст запроса
ВЫБРАТЬ
СобранныеСБ.СБ КАК СистемныйБлок,
СобранныеСБ.Количество,
СобранныеСБ.Стоимость,
СобранныеСБ.Масгер,
СобранныеСБ.Регисгратор
ИЗ
РегистрНакопления.СобранныеСБ КАК СобранныеСБ ЩЕ
СобранныеСБ.ВидДвижения - &ВидДвижения
И СобранныеСБ.Период > - &НачалоПериода
И СобранныеСБ.Лериод < = &КонецПериода
На основе приведенного выше запроса доступными будут параметры НачалоПериода, КонецПериода и ВидДвижения (рис. 5.110).
Наборы данных Связи наборов д... Вычисляемые п... Ресурсы | Параметры | Макеты Вложенные схемы . Настройки
Рис. 5.110. Доступные параметры в схеме компоновки данных
368
Глава 5. Справочник разработчика
Использование автополей
При разработке отчетов система компоновки данных генерирует Автополе для списка выбранных полей и списка сортировки группировок. При формировании отчета Автополе будет преобразовано в набор полей группировки.
Формирование набора автополей группировки происходит следующим образом. Берутся используемые выбранные поля со следующими условиями:
•	они доступны для использования в полях группировки;
•	не являются ресурсами;
•	не зависят от других выбранных полей;
•	не зависят от уже существующих полей группировки.
Если поле уже включено в набор автополя группировки, повторно оно не добавляется.
Автополе можно использовать как есть, а можно раскрыть, чтобы посмотреть, какие поля система туда включила, и при желании их изменить. Чтобы раскрыть список автополя, нужно выделить его, вызвать его контекстное меню и выбрать пункт Развернуть.
? Поля группировки ] Выбранные поля [ Отбор . Сортировка . Условное оформление Другие настройки
Рис. 5.111. Раскрытие списка полей автополя
369
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для примера рассмотрим отчет Остатки номенклатуры. Перейдем в режим настроек группировки Детальные записи и развернем список автополя (рис. 5.111).
Мы видим здесь поля, выбранные для отображения в отчете (рис. 5.112).
Рис. 5.112. Список полей, содержащихся в автополе для детальных записей
Перейдем в режим настроек группировки Номенклатура таблицы отчета и развернем список автополя. В автополе группировки помещается само поле группировки Номенклатура плюс выбранные поля отчета. Поэтому поле группировки не обязательно помещать в список выбранных полей, но если оно там есть, то при формировании отчета оно не дублируется (рис. 5.113).
370
Глава 5. Справочник разработчика
Рис. 5.113. Список полей, содержащихся в автополе для группировки таблицы
Перейдем в режим настроек диаграммы отчета и развернем список автополя. Поскольку автополе для диаграммы содержит первый встреченный в списке ресурс отчета, важно установить здесь то поле ресурса, которое нужно отобразить в диаграмме. Для этого в запросе нужный ресурс должен быть указан первым. Если это не так, можно развернуть автополе и указать нужное поле или же удалить автополе и добавить свое (рис. 5.114).
Перейдем в режим настроек группировки Склад диаграммы отчета и развернем список автополя. Здесь присутствует только само поле группировки (рис. 5.115).
371
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.114. Список полей, содержащихся в автополе для диаграммы
Рис. 5.115. Список полей, содержащихся в автополе для группировки диаграммы 372
Глава 5. Справочник разработчика
Рассмотрим использование автополей при сортировке записей группировки отчета. Записи в группировке по умолчанию сортируются по возрастанию значений поля группировки. Перейдем в режим настроек группировки Номенклатура таблицы отчета на закладку Сортировка и развернем список автополя (рис. 5.116).
Рис. 5.116. Список полей, содержащихся в автополе для группировки таблицы
Переопределение представления поля набора данных
Система компоновки данных предоставляет возможность переопределения представления для полей набора данных. Для переопределения представления поля в конструкторе схемы компоновки данных на закладке Наборы данных следует ввести соответствующее выражение в колонку Представление для поля набора данных или вычисляемого поля (рис. 5.117).
373
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных


Заголовок
ПерисдДень
ПериодМесяц
ПерисдДень Период день ПериодМесяц Период месяц
-------— „......	[Выражения горядочивания пгедж 	 --------
□ ПОП Период,!,
Доп
Период, 2, Доп
Измерение / ''+Конграгент.Код+‘') X \ ^Контрагент. Н аименование J
[Контрагент
контрагент контрагент
-	Номенклатура	Номенклатура Номенклатура	SI □ 0 El й □ 0 й		
—	Стоимость	Стоимость Стоимость	□ □ □ □ 0 0 0 й		
Рис. 5.117.
Выражение представления для поля «Контрагент»
в.яа и □ ....... ...□ □ □ □ □
Если выражение представления установлено, то в результат отчета будет выводиться не основное представление поля, а результат этого выражения.
Для примера рассмотрим отчет Отчет по продажам. Для поля Контрагент в колонку Выражение представления введем следующий текст (листинг 5.25):
Листинг 5.25. Выражение для представления в отчете поля «Контрагент»
”(” + Контрагент.Код +") “ + Контрагент.Наименование
Рис. 5.118. Результат отчета
374
Глава 5. Справочник разработчика
В результате выполнения отчета код контрагента будет отражаться в скобках слева от его наименования (рис. 5.118).
В выражении для представления можно также использовать функции из общих модулей. Чтобы функцию можно было использовать в схеме компоновки данных, необходимо чтобы в ее описании присутствовало ключевое слово Экспорт. Например, в общем модуле ФункцииДляОтчетов есть функция ПредставлениеРегистратора(Регистратор) (листинг 5.26).
Листинг 5.26. Функция общего модуля
Функция ПредставлениеРегистратора(Номер, Дата) Экспорт
Возврат" № ” + СТРОКА(Номер) ♦ ” от ” + ФОРМАТ(Дата, ”ДФ = dd.MM.yyyy"); КонецФункции
Тогда в выражении представления для поля можно воспользоваться следующим выражением (листинг 5.27):
Листинг 5.27. Выражение для представления поля
с использованием функции общего модуля
ФункцииДляОтчетов.ПредставлениеРегистратора(Регистратор
.Номер, Регистратор.Дата)
В результате выполнения отчета поле регистратора будет отражено в следующем виде (рис. 5.119):
Склад	Приход
Номенклатура	
Регистратор	
Основной		_ ИИ
Товары для сборки		13,000
ОЗУ	5,000
Память	- -	5,000
С NS 000000002 от 18.03.2008	5,000
Основные детали	8,000
Жесткийлиск.	3,000
С №000000001 от 18.03.2008	3,000
	5,000
С_МгООМОД0О2 от 10 03 2008		5,000
	<0001
Товары для сборки	2,000
Мониторы	2,000
Монитор LCD	2,000
£ № 000000003 от 19.03.2008	2,000
ИТОГО		 _		J	
Рис. 5.119. Результат отчета
375
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Вычисляемые поля
При разработке отчетов не всегда хватает полей, определенных в наборе данных. Довольно часто бывает нужно отразить какие-то другие поля, которые рассчитываются на основе имеющихся по определенному алгоритму. Например, выручку как разницу между доходами и расходами и т. п.
Для этого в системе компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы, значения которых будут вычисляться по некоторой формуле. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных.
Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Оно описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение: в нем нельзя использовать вычисляемые поля. В остальном ограничений нет-можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, а также функции общих модулей конфигурации.
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление так же, как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс. Для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Для примера рассмотрим отчет Отчет по системным блокам. Откроем схему компоновки данных и на закладке Вычисляе-376
Глава 5. Справочник разработчика
мне поля добавим вычисляемое поле. Дадим ему имя (Путь к данным) - Прибыль, в колонку Выражение введем следующий текст (листинг 5.28):
Листинг 5.28. Выражение для расчета вычисляемого поля «Прибыль»
Заголовок вычисляемого поля, который будет отображаться в шапке отчета, задается по умолчанию, но можно его изменить или задать в случае использования в конфигурации нескольких языков (рис. 5.120).

Отчет ОтчетПоСистемнымБлокам: ОсновнаяСхемаКомпоновкмДанных	_ О X
Наборы данных Связи наборов данных | Вычисляемые поля ] Ресдесы Параметры Макеты Вложенные схемы Настройки
Рис. 5.120. Создание вычисляемого поля
Вычисляемое поле можно добавить в ресурсы отчета, чтобы вычислять по нему групповые и общие итоги (рис. 5.121).
Рис. 5.121. Добавление вычисляемого поля в ресурсы отчета
В результате выполнения отчета в поле Прибыль будет отражаться прибыль от продажи собранных системных блоков, то есть разница между его продажной стоимостью и стоимостью 377
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
комплектующих и услуг, израсходованных на сборку компьютера (рис. 5.122).
Отчет по системным блокам
Тараметры данных: Начало периода « 01.01.2008 Конец периода - 30 06.2008
Склаь		Количество
Nt п/п	Системный блок	приход
Основной 1; Компьютер для дома			—
2 Компьютер для офиса		
Итого		
2
[Стоимость -[При пыль	Прибыль.%
расход	обцим
17 500,00	20 000,00Г
---™	~100Q00Q^
9 000,00
8 500,00	10 000,00
17 500,00[	20 000,00
1 000
1 500
7500?
100,00
«.OP ____ 60,00' . Wl
2
Ж

Рис. 5.122. Результат отчета
Однако не всегда простым суммированием можно получить правильные итоги по вычисляемому полю. В таких случаях требуется задать собственное выражение для расчета ресурса. Как, например, в схеме компоновки данных АнализЦенКомп-лектующих для поля Выручка (рис. 5.123).
Рис. 5.123. Расчет итога для вычисляемого поля
Суммарная выручка будет получена как произведение количества ушедших в сборку комплектующих на разницу средних цен сборки и поступления по каждому из них. В этом случае следует задать следующее выражение для расчета ресурса Выручка (листинг 5.29).
Листинг 5.29. Выражение для расчета ресурса «Выручка»
Сумма(Собрано) * (Среднее(ЦенаСборки) -Среднее(ЦенаПриход))
378
Глава 5. Справочник разработчика
В выражении вычисляемого поля можно также использовать функции из общих модулей. Чтобы функцию можно было использовать в схеме компоновки данных, необходимо чтобы в ее описании присутствовало ключевое слово Экспорт. Например, в общем модуле ФункцииДляОтчетов есть функция ВВерхнийРегистр(Наименование) (листинг 5.30).
Листинг 5.30. Функция общего модуля
Тогда в выражении вычисляемого поля можно воспользоваться следующим выражением (листинг 5.31):
Листинг 5.31. Выражение вычисляемого поля с использованием функции общего модуля
ФункцииДляОтчетов.ВВерхнийРегистр(Наименование)
В результате описание вычисляемого поля в схеме компоновки данных примет вид (рис. 5.124):
Рис. 5.124. Выражение для расчета вычисляемого поля
Список услуг
Код	Наименование
000000014	РЕМОНТ КОМПЬЮТЕРА
000000016	ВОССТАНОВЛЕНИЕ ДАННЫХ
000000015	СОПУТСТВУЮЩИЕ УСЛУГИ
000000007	ДИАГНОСТИКА КОМПЬЮТЕРА
В результате выполнения отчета название услуг будет выведено в следующем виде (рис. 5.125).
Рис. 5.125. Результат отчета
379
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Пользовательские поля
Система	компоновки	данных
позволяет определять в отчете Пользовательские поля, используя либо собственные выражения, либо наборы вариантов с условиями их выбора. Пользовательские поля являются аналогом вычисляемых полей, но в упрощенном варианте. Они могут задаваться как в режиме Конфигуратор, так и в режиме 1С:Предприятие, но в выражениях пользовательских полей нельзя использовать функции общих модулей. Поэтому пользовательские поля предназначены скорее для пользователя, чем для разработчика.
Для примера рассмотрим отчет Оказание услуг. Откроем закладку Настройки схемы компоновки данных и на закладке Пользовательские поля нажмем кнопку Добавить. Добавим новое поле - Выбор. Зададим собственный заголовок поля и создадим условия отбора для различных вариантов его пред-
Добавим еще одно пользовательское поле- Выражение. Зададим собственный заголовок поля и выражение на языке выражений компоновки данных для отображения детальных записей. Нажмем кнопку Добавить и введем в колонку Выражение детальных записей следующий текст (листинг 5.32).
380
Глава 5. Справочник разработчика
Листинг 5.32. Выражение детальных записей для пользовательского поля - выражения «Популярная услуга»
Выбор
Когда Наименование «’’Ремонт компьютера” Или Код « ’'000000007"
Тогда "да”
Иначе "нет"
Конец
В результате окно пользовательского поля-выражения примет вид (рис. 5.127):
Рис. 5.127. Добавление пользовательского поля-выражения
Добавим новые пользовательские поля Популярная услуга и В составе сборки в список выбранных полей и выполним отчет (рис. 5.128).
Рис. 5.128.
Результат
отчета
381
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Мы видим, что пользовательские поля в отчете отражаются в соответствии с условиями их представления.
Роли полей
В системе компоновки данных можно задать Роль для каждого поля набора данных. Роль поля указывает, каким образом следует интерпретировать поле при компоновке отчета. Некоторые свойства роли платформа задает автоматически. Для их редактирования в конструкторе схемы компоновки данных на закладке Наборы данных нужно нажать кнопку выбора в поле Роль нужного поля набора данных (рис. 5.129).
Рис. 5.129. Редактирование роли поля
382
Глава 5. Справочник разработчика
У роли поля могут быть следующие свойства:
•	Без роли - роль у поля отсутствует.
•	Период - число, содержащее номер периода в случае, если поле является полем-периодом. Значение 0 означает, что данное поле периодом не является. Самый младший период должен иметь номер 1. Его родительский период - 2 и т. д. Например, для запроса, получающего данные из виртуальной таблицы Остатки и обороты, поле Период должно иметь номер периода 3, поле Регистратор - 2, поле НомерСтро-ки - 1. На основании данной информации платформа будет рассчитывать итоги по полям остатка.
•	Дополнительный - признак того, что данное поле-период не является обязательным. Установка данного признака говорит о том, что поле не обязательно должно использоваться в компоновке в том случае, когда в отчете использованы его дочерние периоды. В противном случае использование дочернего поля-периода говорит о необходимости использования в группировке и данного поля.
•	Измерение - признак того, что поле является измерением. Информация о том, что поле является измерением, используется при расчете итогов по полям остатка.
•	Счет - признак того, что поле является полем счета. Данная информация используется при расчете итогов по полям бухгалтерских остатков.
•	Вид - строка, содержащая выражение, при помощи которого будет получаться вид счета. Результатом выражения должно быть значение перечисления ВидСчета (Активный, Пассивный, Активно/Пассивный) либо число. Значение числа 0 соответствует активному счету, 1 - пассивному, 2 - активно-пассивному. Выражение записывается на языке выражений системы компоновки данных. Данная инфор-383
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных мация используется при расчете по полям бухгалтерских остатков.
•	Остатки - признак того, что поле является полем остатка.
•	Имя - строка, содержащая имя группы полей остатка. Например: "Сумма", "Количество".
•	Тип - тип остатка (НачальныйОстаток, КонечныйОстаток, Нет (поле не является остатком)).
•	Бух. тип - тип бухгалтерского остатка (Дебет, Кредит, Нет (поле не является бухгалтерским остатком)).
•	Поле счета - имя поля-счета, для которого рассчитываются остатки.
•	Игнорировать значения NULL-признак того, что в результат не нужно включать групповые записи по данному полю в случае, если поле содержит значение NULL.
•	Обязательное - указывает необходимость обязательного добавления данного поля в набор данных макета компоновки данных в случае, если в настройках используется хотя бы одно поле из набора данных.
При включенном свойстве Автозаполнение платформа, как правило, самостоятельно заполняет роли полей на основании информации из запроса. Для полей, являющихся измерениями регистров платформа заполняет свойство роли полей Измерение. А также у полей-периодов платформа заполняет свойство роли Период и Дополнительный. Более подробную информацию об этом можно прочитать в четвертой главе, пример 6 на стр. 176.
Иногда разработчику требуется самому установить нужные роли, например, в случае получения данных из объектов встроенного языка.
384
Глава 5. Справочник разработчика
Ресурсы
Под полями-ресурсами в системе компоновки данных подразумеваются поля, значения которых рассчитываются на основании детальных записей, входящих в группировку. По сути, ресурсы являются групповыми или общими итогами отчета. В приведенном примере в отчет выводятся ресурсы Количество и Стоимость (рис. 5.130).
Продажи товаров и услуг
Контрагент, Регион
Номенклатура
Количество
Стоимость
Рис. 5.130. Вывод ресурсов отчета
Во встроенном языке поля-ресурсы схемы компоновки данных представляются свойством ПоляИтога объекта СхемаКом-поновкиДанных. В конструкторе схемы компоновки данных добавление поля в список полей-ресурсов осуществляется на закладке Ресурсы.
Для каждого поля-ресурса указывается:
•	Выражение - формула, по которой будет рассчитано значение ресурса. Например, выражение Сумма(Стоимость) обозначает, что для вычисления значения поля будет использоваться агрегатная функция Сумма, применяемая для поля Стоимость. Для выбора доступны и другие распространенные функции агрегирования, а также собственные функции на языке выражений системы компоновки данных.
385
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Рассчитывать по... - перечисление группировок, для которых будет рассчитываться данный ресурс.. В случае если свойство не заполнено, выражение ресурса будет использоваться для всех группировок отчета. Если же в данном свойстве указано некоторое поле группировки, то ресурс считается доступным только в данной группировке, для остальных же группировок данный ресурс выводиться не будет (рис. 5.131).
Рис. 5.131. Ресурсы отчета
Например, в приведенном выше примере ресурс Количество отчета Продажи номенклатуры будет рассчитываться только для группировки Номенклатура и вложенных в нее группировок. Для других группировок он выводиться не будет. Это свойство требуется устанавливать в случаях, когда итоги по разным группировкам или общие итоги не имеют смысла (рис. 5.132).
Продажи товаров и услуг
Контрагент, Регион
1 юыенкДАТ, । je Период
количество * •-•имость
Монитор LCD
Итого
ХЮ "Стиль", Москва
19 марта 2008 г.
26 марта 2008 г. Компьютер для дома 26 марта 2008 г.
X) "Автоматика , Короле!
Диагностика компьютера
18 марта 2008 г.
11 500,00
1 500,00
1 000,00
500,00 10 000,00 10000,00 10000,00 _ 10 000,00 10 000,00   
Рис. 5.132. Результат отчета
386
Глава 5. Справочник разработчика
В результате мы видим, что ресурс Количество рассчитывается только по номенклатуре и не выводится для группировки Контрагент и в общих итогах. Дело в том, что контрагенту могут быть проданы разные виды номенклатуры, и не имеет смысла складывать количество услуг с количеством комплектующих.
Отметим, что ресурс не считается доступным для иерархических записей группировки, по которой разрешили его рассчитывать. В предыдущем примере поле Количество не будет выводиться в иерархических записях группировки Номенклатура. Внешний вид отчета и порядок записей изменен, так как в отчет выведена группировка по номенклатуре с типом Иерархия, хотя отчет основан полностью на тех же данных, что и в предыдущем случае (рис. 5.133).
Продажи товаров и услуг
\онт| агент. Регион , ~ „ I	Количество	Стоимость
1оменкпату!эё		
1ериод		
ХХ> "Автоматика", Королев		11500,00
Собранные компьютеры		10 000,00
Компьютер для дома	1	10 000,00
26 марта 2008 г.	1	10 000,00
Услуги		1 500,00
Диагностика компьютера	2	1 500,00
18 марта 2008 г.	1	1 000,00
26 марта 2008 г	1	500,00
Юб “Стиль", Москва		10000,00
Комплектующее		10 000,00
Монитор LCD	1	10 000,00
19 марта 2008 г.	1	10 000,00
4того		21 600 СЮ
Рис. 5.133. Результат отчета
Однако в случае если в отборе отчета будет установлен отбор на поле Номенклатура с типом сравнения Равно, значение ресурса также будет выводиться во все группировки отчета (рис. 5.134).
387
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Продажи товаров и услуг
Отбор: Номенклатура Равно “Диагностика компьютера"
Южтртент, Регион__________
Номенклатура______________
I 1 А______
>Х) "Автоматика", Королев
Диагностика компьютера
18 марта 2008 г,_______
26 марта 2008 г.
ООО "Стандарт", Санкт-Петербург
Диагностика компьютера
। Количеств з	IС гоимость
I____________2I	1 500,00
’ 2___________ТГ	1 ооо,оо
’	1 500,00
1	500,00
J 500,00
22 апреля 2008 г.
1	500,00
Рис. 5.134. Результат отчета
Кроме полей группировок в свойстве Рассчитывать по... можно указывать специальную группировку ОбщийИтог, В таком случае выражение будет использоваться для вывода общего итога.
Каждое поле может присутствовать в списке ресурсов несколько раз, для различных полей группировок. То есть можно указать разные формулы расчета Количество для группировок по полю Номенклатура и Контрагент. Это требуется в случаях, когда итог подсчитывается по-разному для разных группировок (рис. 5.135). Однако указание различных выражений одного поля-ресурса для одной и той же группировки недопустимо.
В приведенном примере задано, что ресурс Количество будет рассчитываться только для специальной группировки Общий итог. Для ресурса Стоимость установлены различные выражения расчета: для группировки Контрагент как Максимум(Стоимость) и группировок Номенклатура и Общий итог как Сумма(Стоимость), рис. 5.135.
388
Глава 5. Справочник разработчика
Рис. 5.135. Установка различных выражений для расчета ресурса
В результате общее количество продаж выводится только в итоге отчета, а стоимость продаж для контрагентов рассчитывается как максимальная сумма продаж этому контрагенту. Стоимость продаж по номенклатуре и в общем итоге рассчитывается как суммарная стоимость всех продаж по данной номенклатуре или по всем записям отчета (рис. 5.136).
Продажи товаров и услуг
Гонтруент
номенклатур
ХЮ "Автоматика"_______
Диагностика компьютера 18 марта 2008 г.
26 марта 2008 г.
Компьютер для дома 26 марта 2008 г.
300 "Стиль" _______2
Монитор LCD ~ 19 марта 2008 г.
Ит > о
Количество
I Стоимость
I 
1 500,00
1 000,00
500,00 10 000,00 10 000 00 Ю 000.00 10 000,00 10 000,00 21 8ооро
Рис. 5.136. Результат отчета
389
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Параметры
Пользователя, как правило, интересуют данные о хозяйственной деятельности за определенный период. Поэтому практически в любом отчете используются параметры, задающие начало и конец отчетного периода. В схеме компоновки данных параметры отчета задаются на закладке Параметры. При использовании свойства Автозаполнение параметры виртуальных таблиц и параметры, указанные в запросе, автоматически добавляются в список параметров отчета.
Использование дат
Для примера рассмотрим отчет Отчет по системным блокам. Мы видим, что платформа по умолчанию добавила два параметра -НачалоПериода и КонецПериода и в колонке Доступные типы задала для них значение Дата (рис. 5.137).
Рис. 5.137. Параметры компоновки данных
Заметим, что если в отчет передается параметр, содержащий значение типа Дата, то дата всегда содержит и время с точностью до секунды. Однако пользователя, как правило, не интересуют данные в отчете с такой точностью. Чтобы пользователь имел возможность ввести даты начала и окончания отчетного периода без времени, в колонке Доступные типы нажмем кнопку выбора и в нижней части окна редактирования типа данных установим Состав даты в значение Дата для обоих параметров (рис. 5.138).
390
Глава 5. Справочник разработчика
Редактирование типа данных
X

□ Составной тип данных
□181 Число
-□*4 Строка
—H13EES
СтандаргныйПериод
Булево
•-□4 ХранилищеЗначения
Ш"□^ СправочникСсылка
Е -Пг^] ДокументСсылка
ПеречислениеСсылка
ПланВидовХарактеристикСсылка
ЕЙг ПланСчетовСсылка
• □^ ПланВидовРасчетаСсылка •ПД БизнесПроцессСсылка
2d
I ок
Рис. 5.138. Редактирование состава даты
Но в таком случае, если пользователь задаст даты периода как 01/03/2008 и 31/03/2008, итоги регистра будут рассчитаны с начала дня 01/03/2008 00:00:00 по начало дня 31/03/2008 00:00:00. То есть данные за 31-е число, отличные от начала дня, в отчет не попадут. Чтобы этот день включить, внесем в поле Выражение для параметра КонецПериода следующий текст (листинг 5.33):
Листинг 5.33. Выражение для расчета параметра «КонецПериода»
КонецПериода(&КонецПериода, "День")
Это выражение, сформулированное на языке выражений системы компоновки данных, содержит функцию КонецПерио-да(), возвращающую дату, соответствующую концу какого-либо периода, например, дня.
Использование стандартных периодов
Система компоновки данных позволяет использовать стандартные периоды для указания периода отчета.
391
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для примера рассмотрим отчет Отчет по продажам. На закладке Параметры добавим параметр с именем Период типа СтандартныйПериод, а для параметров НачалоПериода и КонецПериода укажем Выражение для расчета и запретим их редактирование пользователем (листинг 5.34).
Листинг 5.34. Выражение для расчета параметров «НачалоПериода» и «КонецПериода»
&Период.ДатаНачала
&Период.ДатаОкончания
Даты начала и конца стандартного периода также содержат и время. Однако здесь, в отличие от параметров НачалоПериода и КонецПериода, начальная дата имеет время 00:00:00, а конечная дата - 23:59:59. Таким образом, последний день включается в отчет, и не нужно использовать функцию КонецПериода(). В результате параметры компоновки данных примут вид (рис. 5.139):
Рис. 5.139. Определение параметров отчета
При запуске отчета в режиме 1С:Предприятие пользователь будет редактировать стандартный период в окне настроек. При выборе стандартного периода ему предоставляется большой выбор значений: Этот месяц, Следующий месяц, Прошлый месяц, Эта неделя, Следующая неделя, Прошлая неделя и пр. (рис. 5.140).
392
Глава 5. Справочник разработчика
	Параметр	
	Дата начала	Дата окончания	-;Х. .		
а	Период	Это полугодие	
	01.01.2008	Это полугодие	Д|
		С начала этой недели Прошлый месяц Этот месяц Произвольный период Сегодня Эта неделя Эта декада Этот месяц Этот квартал	£
		
Рис. 5.140. Выбор стандартного периода
Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. Пользоваться стандартным периодом отчета удобно, когда пользователь регулярно выполняет отчет за определенный интервал времени, например текущий месяц. Тогда можно заранее установить в стандартных настройках нужный период, и пользователю не придется задавать его перед формированием отчета.
Для повышения удобства работы пользователя имеется возможность скрывать параметры отчета от пользователя, используя свойства (рис. 5.137, 5.139):
•	ВключатьВДоступныеПоля - если флаг установлен, то параметры будут включены в список доступных полей и видны в настройках пользователя.
•	ОграничениеДоступности - если флаг установлен, то параметры не будут видны в настройках пользователя на закладке Параметры.
Если параметр, указанный в запросе, доступен в настройках пользователя, то есть у него снят флаг ОграничениеДоступности, то пользователь может указать значение параметра
393
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
перед формированием запроса. В противном случае система компоновки данных сгенерирует другой внутренний запрос к информационной базе без учета данного параметра.
Макеты
Понятие «макеты» очень часто встречается в системе компоновки данных. Существует макет как элемент системы компоновки существуют предопределенные макеты, существуют макеты оформления...
По умолчанию внешний вид отчета формируется системой автоматически. «Внешне» отчет состоит из набора стандартных областей, которые система сама располагает, в зависимости от вида отчета. Но разработчик может задать собственное расположение и оформление различных областей. Это и есть предопределенные макеты.
Система самостоятельно оформляет стандартные области отчета. Но разработчик может задать собственные правила, по которым будут оформляться эти стандартные области. Для этого ему потребуется создать свой макет оформления.
Таким образом, задать свой вариант оформления можно в обоих случаях. Но в предопределенных макетах можно также изменить расположение полей отчета, задать их размеры, изменить порядок следования, тип заполнения, используя шаблон ячейки, в которой расположено поле, задать события для ячейки и т. п. Но в отличие от макетов оформления, предопределенные макеты «привязаны» к одному отчету, его конкретным полям и структуре.
394
Глава 5. Справочник разработчика
Предопределенные макеты
Предопределенные макеты могут создаваться при помощи конструктора схемы компоновки данных. Для этого предназначена закладка Макеты. Макет представлен в виде обычного табличного документа, областям которого можно задать нужное оформление.
Для примера рассмотрим отчет Остатки номенклатуры. Откроем схему компоновки данных ПредопределенныйМа-кет. Сначала мы должны установить имена группировок, чтобы мы могли самостоятельно указать, в какую именно область нашего макета будет выводиться эта группировка. На закладке Настройки выделим нужную группировку и вызовем ее контекстное меню. Выберем в нем пункт Установить имя и зададим имена группировок (рис. 5.141).
Рис. 5.141. Установка имени группировки
Перейдем -на закладку Макеты и нажмем кнопку Добавить макет.
395
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Существуют следующие типы предопределенных макетов (рис. 5.142):
• Макет поля,
• Макет группировки.
• Макет заголовка группировки,
• Макет ресурсов.
Рис. 5.142. Добавление макета
Макет поля
Данный макет предназначен для оформления выводимых полей (рис. 5.143).
определенных
- •-			Ш| Н ач * пьный |остаток		|Г’.рихцг 15 000	• Fa- ‘tад !	? CW	Конечный остаток 8 Г;
I Основной	I 	:		13,0001	6,000		'7,0001
} Комплектующее		13,000	6,000	7,000
Жесткий диск		3,000	2,000	1,000
Материнская плата		5,000	2,000	3,000
Память		5,000	2,000	3,000
	1 '	'	2J3OO	1 000		1,000
И kcunjwTVP^	I	 '	2,000	1,000	1,000
[ Монитор LCD	[	2,000	1,000	1.000
ИТОГО		15 000	7,000	еда
Рис. 5.143. Макет поля «Склад»
396
Глава 5. Справочник разработчика
При создании данного макета необходимо указать поле, для которого создается предопределенный макет. Создадим макет для поля Склад. Зададим ячейку Склад с заполнением Параметр. Зададим оформление ячейки - размер и начертание шрифта. Определим границы диапазона области. Для этого вызовем окно настройки диапазона границ, и, не закрывая это окно, выделим мышью в правом окне нужную область. Сохраним диапазон, нажав в его окне кнопку выбора. После этого в левом нижнем окне появится список параметров, определенных для макета. Более подробно этот процесс рассмотрен в 4-й главе (пример 9 на стр. 224), рис. 5.144.
Рис. 5.144. Создание макета поля «Склад»
Выполним отчет. Значения поля Склад выводятся с заданным оформлением (рис. 5.145).
397
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.145. Результат отчета
Макет группировки
Данный макет предназначен для оформления значений группировки (рис. 5.146).
	(Начальный При* ед		Расход	Конечный
Итоге	остаток	15,000	7.000	остаток 8ДЮ
			6000	7 000
Комплектующее		13,000	6,000		7ДО
Жесткий диск		3,000	2,000	1,000
Материнская плата		5,000	2,000	3,000
и—_Память		5.000	2.000	3.000
Розничный		2,000	1,000	1,000
Комплектующей^		2.000	1,000	"ТТО1
Монитор LCD		2ДО0	1.000	1 000
		ТГТг	' 1 ,иш	ЭД-Псг
Рис. 5.146. Макет группировки «Номенклатура»
При создании данного макета необходимо указать либо имя группировки, либо поля группировки, для которой создается макет. Также необходимо указать тип макета. Существуют следующие типы предопределенных макетов (рис. 5.147):
•	Заголовок - данный макет предназначен для оформления заголовка группировки. Заголовок группировки выводится в начале группировки. В случае если группировка содержит вложенные группировки, то заголовок группировки выводится перед записями вложенной группировки.
398
Глава 5. Справочник разработчика
Рис. 5.147. Типы макетов
•	Подвал - данный макет предназначен для оформления подвала группировки. Подвал группировки выводится в конце группировки. В случае если группировка содержит вложенные группировки, то подвал группировки выводится после записей вложенной группировки. Если данный макет не задан, то используется макет заголовка.
•	Заголовок иерархии - данный макет предназначен для оформления заголовка иерархической группировки. Данный заголовок выводится в начале иерархической группировки. Если данный макет не задан, то используется макет заголовка;
•	Подвал иерархии - данный макет предназначен для оформления подвала иерархической группировки. Данный подвал выводится в конце иерархической группировки. Если данный макет не задан, то используется макет заголовка иерархии.
•	Общий итог заголовок - данный макет предназначен для оформления области отчета, отображающей общий итог по группировке, и выводится в начале группировки.
399
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Общий итог подвал - данный макет предназначен для оформления области отчета, отображающей рбщий итог по группировке, и выводится в конце группировки. Если данный макет не задан, то используется макет общего итога заголовка.
Создадим макет группировки с именем Номенклатура. В открывшемся диалоге выберем имя группировки Номенклатура и тип макета Заголовок. Зададим элементы оформления ячеек значений группировки - шрифт и цвет текста. У всех ячеек в строке Заполнение укажем Параметр, а в строке Параметр -имя конкретного поля, отображающегося в ячейке. Определим границы диапазона области значений группировки. Платформа сформирует список параметров для этой области и заполнит значениями по умолчанию (рис. 5.148).
Рис. 5.148. Создание макета группировки «Номенклатура»
400
Глава 5. Справочник разработчика
ВНИМАНИЕ!
Список параметров, заданных для макета, появится в окне «Параметры макета» только после определения границ диапазона области. При переопределении диапазона список параметров формируется заново, и выражения параметров заменяются значениями по умолчанию.
Выполним отчет. Значения группировки Номенклатура выводятся с заданным оформлением (рис. 5.149).
Рис. 5.149. Результат отчета
Макет заголовка группировки
Данный макет предназначен для оформления заголовков группировок (рис. 5.150).
	I Начальный остаток	I |рикод	"Техад ..J	г'онеч'ныВ ''I остато!
		-	ЯВИ	ЭЖ
Основной	,		13,000	i	6,000)	7.000)
Комплектующее			13,000	6,000	7,000
Жесткий диск		3,000	2,000	1,000
Материнская плата		5,000	2,000	3,000
Память		5,000	2,000	3,000
Розничный		2,000	*,000	1,0001
Комплектующее		2,000	1,000		1~000|
Монитор LCD	!	2,000	1 000	1Д00|
			- J.0	6000
Рис. 5.150.
Макет заголовка группировки «Склад»
401
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Заголовком группировки называется область отчета, содержащая имена выводимых в отчете полей. При создании данного макета необходимо указать либо имя группировки, либо поля группировки, для которой создается макет. Также необходимо указать тип макета. Типы макетов такие же, как и для макета группировки. Существует следующее правило вывода макетов заголовка группировки: макет заголовка группировки действует на указанную группировку и на все ее вложенные группировки до момента обнаружения другого макета заголовка группировки. При обнаружении другого макета заголовка группировки начинает использоваться обнаруженный макет заголовка группировки. Тем самым существует возможность создания различных макетов заголовка для различных группировок. Для примера рассмотрим отчет с группировкой Склад и вложенной в нее группировкой Номенклатура.
Рис. 5.151. Создание макета заголовка группировки «Склад»
402
Глава 5. Справочник разработчика
Создадим макет заголовка группировки Склад. В открывшемся диалоге выберем поле группировки Склад и тип макета Заголовок. Этот макет также действует на вложенную в нее группировку Номенклатура. Зададим элементы оформления ячеек заголовка группировки. У всех ячеек в строке Текст укажем произвольный текст шапки, а в строке Заполнение - Текст. Определим границы диапазона области заголовка группировки (рис. 5.151).
Выполним отчет. Заголовок (шапка) группировки Склад и Номенклатура выводятся с заданным оформлением (рис. 5.152).
Рис. 5.152. Результат отчета
Создадим отдельный заголовок группировки Номенклатура и выполним отчет. Теперь для каждой группировки выводится свой заголовок (рис. 5.153).
Рис. 5.153. Результат отчета
403
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Создадим макет группировки Склад для вывода итогов по группировке (рис. 5.154).
	Начальный	Приход I	(Расход	। Конечный
	остаток			остаток
		15 000	1 /да	
{Основной		13,000	6,000	7,о66‘
| Комплектующие			13,000	6,000	7,000
Жесткий диск		3,000	2,000	1,000
|	Материнская плата		5,000	2,000	3,000
Память		5,000	2,000	3,000
1РОЗНИЧгЫЙ		аоо0|		/1.000	1,000
I Комплектующие			2,000	1,000	1,000
Монитор LCD		2,000	1,000	1,000
[Итого		15,11'.^	. . 7.000	I
Рис. 5.154. Макет общего итога заголовка
В открывшемся диалоге выберем имя группировки Склад и тип макета Общий итог заголовок. Зададим элементы оформления ячеек итоговой строки группировки - шрифт и цвет текста. Зададим ячейку Итого с заполнением Текст. У всех остальных ячеек в строке Заполнение укажем Параметр, а в строке Параметр - имя конкретного поля, отображающегося в ячейке. Определим границы диапазона области значений группировки. Платформа сформирует список параметров для этой области и заполнит значениями по умолчанию (рис. 5.155).
Рис. 5.155. Создание макета группировки «Склад» для вывода общих итогов 404
Глава 5. Справочник разработчика
Выполним отчет. Общие итоги (итоги по группировке Склад) выводятся с заданным оформлением (рис. 5.156).
Рис. 5.156. Результат отчета
Макет ресурсов
Данный макет предназначен для оформления ресурсов таблицы. Ресурсами таблицы называется область отчета, содержащая значения полей ресурсов группировок или детальных записей. Для каждого макета ресурсов необходимо указать, для какой группировки строки и колонки таблицы он создается. Таким образом, макет ресурсов создается как бы на пересечении соответствующей строки и колонки таблицы. Для примера рассмотрим отчет с таблицей, в которой колонками являются Склады, а строками - Номенклатура (рис. 5.157).
Рис. 5.157. Ресурсы отчета
405
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
При создании макета ресурсов необходимо указать либо имя группировки, либо поля группировки, для которой создается макет. Также необходимо указать тип макета. Типы макетов такие же, как и для макета группировки.
Откроем схему компоновки данных Схема_Предопределен-ныйМакет отчета ОстаткиНоменклатуры. Создадим макет ресурсов для вывода значений на пересечении строк и колонок таблицы. В открывшемся диалоге выберем для первой группировки поле Склад и тип макета Заголовок и для второй группировки - поле Номенклатура и тип макета Заголовок. Зададим элементы оформления ячеек ресурсов таблицы -шрифт и цвет текста. У всех ячеек в строке Заполнение укажем Параметр, а в строке Параметр - имя конкретного поля, отображающегося в ячейке. Ячейки будет только три, так как поле НачальныйОстаток не выводится в таблице. Определим границы диапазона области значений группировки. Платформа сформирует список параметров для этой области и заполнит значениями по умолчанию (рис. 5.158).
Рис. 5.158. Создание макета ресурсов таблицы
406
Глава 5. Справочник разработчика
Аналогично создадим макет ресурсов для вывода общих итогов по горизонтали таблицы. В открывшемся диалоге выберем для первой группировки поле Склад и тип макета Общий итог заголовок и для второй группировки - поле Номенклатура и тип макета Общий итог заголовок. Зададим элементы оформления ячеек ресурсов (рис. 5.159).
Рис. 5.159. Создание макета ресурсов таблицы
Выполним отчет. Ресурсы таблицы выводятся с заданным оформлением (рис. 5.160).
Рис. 5.160. Результат отчета
407
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Чтобы стандартные макеты оформления не влияли на макет нашего документа, в режиме настроек отчета на закладке Другие настройки можно установить макет оформления Без оформления.
Макеты оформления
Макеты оформления компоновки данных предназначены для оформления отчетов. При помощи макетов оформления можно указывать различным областям отчета определенные цвета фона, текста, шрифты и т. д.
Система компоновки данных позволяет задавать различные макеты оформления как для всего отчета в целом, так и для его отдельных группировок. Для этого в режиме настроек конструктора схемы компоновки данных, на закладке Другие настройки, нужно перейти в режим настроек нужной группировки или глобального отчета и установить для них значение параметра Макет оформления. В приведенном примере для группировки Контрагент параметр Макет оформления установлен в значение Море (рис. 5.161).
Рис. 5.161. Настройка макета оформления отдельной группировки 408
Глава 5. Справочник разработчика
Аналогично для группировки Номенклатура задан макет оформления Зеленый, для группировки Перибд задан макет оформления Арктика, а для всего отчета - Яркий. В результате каждая группировка оформлена в своем стиле, а оформление всего отчета отражено лишь в заголовке, отборе и параметрах, если они есть (рис. 5.162).
Продажи товаров и услуг		
Контрагент, Регион Номенклатура Период	Количество	Стоимость
)ОО "Автоматика" Коропов	LZZZZZZJ	11 500,ОТ
Диагностика компьютера		2	1 500,00
18 марта 2008 г.	1	1 000-004
_ 26 марта 2008 г.			1	500,00
Компьютер длядома	1	10 000,00'
26 марта 2008 г.	1	10 000,00
Ю0 "Стиль", Москва		10 000,00
Монитор LCD	1		10 000,00
19 марта 2008 г.	1	10 000,00
[Итого		21 500,00 ||
Рис. 5.162. Результат отчета
Существуют следующие стандартные макеты оформления:
•	Без оформления,
•	Основной - макет оформления по умолчанию,
•	Яркий,
•	Море,
•	Арктика,
•	Зеленый,
•	Античный.
Однако можно создать собственный макет оформления и затем использовать его в оформлении различных отчетов.
409
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Создание собственного макета оформления
Собственный макет оформления можно создать,' используя конструктор макетов. Для этого необходимо добавить новый макет в папку Общие макеты, находящуюся в папке Общие дерева объектов конфигурации. В открывшемся конструкторе макетов необходимо установить тип макета Макет оформления компоновки данных (рис. 5.163).
Рис. 5.163. Создание нового макета оформления
Редактор макетов оформления позволяет редактировать цвета фона, текста и границы, шрифты, отступы и т. д. областей макета оформления (рис. 5.164).
Выделив в верхнем левом окне нужную область макета, можно изменить элементы ее оформления в нижнем левом окне и сразу увидеть результат оформления этой области в правом окне редакторе макета. При этом названия областей, содержащих оформление, выделяются жирным шрифтом. При выделении в списке областей макета нужной позиции двойным щелчком мыши одновременно выделяется соответствующая ей область результата оформления, при условии, что для этой области 410
Глава 5. Справочник разработчика
задано специфическое оформление. И наоборот. Для каждой области макета существует возможность создать несколько уровней оформления. Это можно сделать, выделив нужную область и нажав кнопку Добавить над списком областей. В нижнем правом углу редактора есть возможность сохранения и загрузки макета в XML-формате. Кроме того, можно в любой момент Очистить макет или загрузить предопределенный Стандартный макет.
Рис. 5.164. Редактирование макета оформления
Поясним назначение областей макета оформления. Структуру отчета можно представить в следующем виде:
•	Заголовок - область отчета, содержащая заголовок отчета.
•	Информация - область отчета, содержащая текст установленных в отчете отборов, а также параметры данных отчета.
411
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Элемент отчета 1.
•	Элемент отчета 2.
•
•	Элемент отчета N содержит группировки, таблицы, диаграммы или вложенные отчеты.
Группировку отчета можно представить в виде областей:
•	Заголовок - область группировки, содержащая заголовок группировки верхнего уровня.
•	Информация - область группировки, содержащая текст установленных для группировки верхнего уровня отборов.
•	Заголовок таблицы - область группировки, содержащая имена выводимых полей.
•	Заголовок группировки, уровень 1.
•	Заголовок группировки, уровень 2.
•	Заголовок группировки, уровень N - области, содержащие значения выводимых полей группировки. Данные выводятся в начале группировки.
•	Детальные записи - область, содержащая значения выводимых полей детальных записей.
•	Подвал группировки, уровень N - области, содержащие значения выводимых полей группировки. Данные выводятся в конце группировки.
•
•	Подвал группировки, уровень 2.
•	Подвал группировки, уровень 1.
•	Общие итоги по вертикали - область, содержащая итоги по группировке.
412
Глава 5. Справочник разработчика
Когда в настройках параметрах вывода группировки задается тип макета - Вертикально, группировка выводится в виде списка. Группировку отчета, представленную в виде списка, можно представить в виде областей:
•	Заголовок - область группировки, содержащая заголовок группировки.
•	Информация - область группировки, содержащая текст установленных для группировки отборов.
•	Заголовок группировки списка, уровень 1.
•	Заголовок группировки списка, уровень 2.
•	Заголовок группировки списка, уровень N - области, содержащие значения выводимых полей группировки. Данные выводятся в начале группировки.
•	Детальные записи списка - область, содержащая значения выводимых полей детальных записей.
•	Подвал группировки списка, уровень N - области, содержащие значения выводимых полей группировки. Данные выводятся в конце группировки.
•
•	Подвал группировки списка, уровень 2.
•	Подвал группировки списка, уровень 1.
•	Общие итоги по вертикали списка - область, содержащая итоги по группировке.
Таблицу отчета можно представить в виде областей:
•	Заголовок - область таблицы, содержащая заголовок таблицы.
413
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
•	Информация - область таблицы, содержащая текст установленных для таблицы отборов.
•	Заголовок таблицы - область таблицы, содержащая имена выводимых в строках таблицы полей.
•	Заголовок группировки, уровень 1.
•	Заголовок группировки, уровень 2.
•	Заголовок группировки, уровень N - области таблицы, содержащие выводимые в строках таблицы поля. Данные выводятся в начале группировки.
•	Подвал группировки, уровень N - области таблицы, содержащие выводимые в строках таблицы поля. Данные выводятся в конце группировки.
•
•	Подвал группировки списка, уровень 2.
•	Подвал группировки списка, уровень 1.
•	Общие итоги по вертикали - область, содержащая итоги по колонкам таблицы.
•	Заголовки и подвалы группировки колонки - области таблицы, содержащие выводимые в колонках таблицы поля.
•	Ресурсы заголовка группировки, ресурсы подвала группировки, ресурсы детальных записей - области таблицы, содержащие выводимые в ячейках таблицы поля ресурсов. Для иерархических группировок используются соответственно Ресурсы заголовка и Ресурсы подвала иерархической группировки.
414
Глава 5. Справочник разработчика
Отметим, что в качестве заголовков и подвалов группировки могут быть использованы заголовки и подвалы иерархической группировки. Перед заголовками группировок могут находиться области Заголовка и Информации вложенной группировки. При отсутствии области подвала группировки выводится область ее заголовка. При отсутствии заголовка или подвала иерархической группировки выводятся соответствующие области неиерархической группировки.
Более подробно процесс создания собственного макета оформления описан в 4-й главе (пример 9 на стр. 224). Рассмотрим теперь работу с макетами оформления с помощью встроенного языка.
Использование макетов оформления из встроенного языка
Для редактирования макетов оформления предназначен объект встроенного языка КонструкторМакетаОформленияКомпо-новкиДанных. Данный объект можно создать при помощи конструктора, который имеет необязательный параметр - макет оформления. Если макет оформления не указан, то создается новый макет, иначе открывается для редактирования указанный макет оформления. Конструктор макетов оформления имеет следующие методы:
•	ПолучитьМакет() - данный метод предназначен для получения редактируемого макета оформления и возвращает значение типа МакетОформленияКомпоновкиДанных.
•	Редактировать(<Форма>) - данный метод открывает окно конструктора макета оформления. Параметр <Форма> является необязательным и может содержать значение типа Форма - форму-владельца окна конструктора макетов оформления. При завершении редактирования и нажатии
415
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных кнопки ОК конструктор макета оформления вызывает у формы-владельца обработчик события ОбработкаВыбора(). В обработчике данного события можно получить редактируемый макет оформления.
•	УстановитьМакет(<Макет оформления^ - данный метод предназначен для установки макета оформления для редактирования и имеет один параметр - <Макет оформления> типа МакетОформленияКомпоновкиДанных.
Поясним использование конструктора макета оформления на примере отчета Отчет по системным блокам. Добавим в отчет возможность создания собственного макета оформления. Для этого необходимо модифицировать ранее созданную форму отчета, добавить в командную панель данной формы кнопку создания макета оформления, а также переопределить действие по кнопке Сформировать.
Откроем форму отчета и добавим в командную панель кнопку Создать макет оформления (рис. 5.165).
Рис. 5.165. Добавление кнопки создания макета оформления в отчетную форму
416
Глава 5. Справочник разработчика
Откроем окно ее свойств и создадим обработчик события
нажатия этой кнопки (рис. 5.166).
Рис. 5.166. Создание обработчика события нажатия кнопки «Создать макет оформления»
В модуле формы внесем в процедуру обработчика следующий текст, в котором создается конструктор макета оформления. Переменную СвойМакетОформления внесем в список переменных формы (листинг 5.35).
Листинг 5.35. Обработчик события нажатия
кнопки «Создать макет оформления»
Процедура ДействияФормыСоздатьМакетОформления(Кнопка)
Если СвойМакетОформления = Неопределено Тогда КонструкторМакетаОформления = Новый
КонструкторМакетаОформленияКомпоновкиДанныхО;
Иначе
КонструкторМакетаОформления « Новый
КонструкторМакетаОформленияКомпоновкиДанных (СвойМакетОформления);
КонецЕсли;
КонструкторМакетаОформления.Редактировать(ЭтаФорма);
КонецПроцедуры
417
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Откроем окно свойств формы и создадим обработчик события ОбработкаВыбора(), которое вызывается после .завершения редактирования и сохранения изменений в конструкторе макета оформления (рис. 5.167).
Рис. 5.167. Создание обработчика события формы ОбработкаВыбора()
В модуле формы внесем в процедуру обработчика следующий текст, в котором в переменной СвойМакетОформления запоминается созданный в конструкторе макет оформления (листинг 5.36).
Листинг 5.36. Обработчик события формы ОбработкаВыбора()
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Если ТипЗнч(ЗначениеВыбора) =
ТипС'МакетОформленияКомпоновкиДанных") Тогда СвойМакетОформления = ЗначениеВыбора;
КонецЕсли
КонецПроцедуры
В заключение переопределим действия по нажатию кнопки Сформировать. Откроем окно свойств кнопки и создадим обработчик события нажатия этой кнопки (рис. 5.168).
418
Глава 5. Справочник разработчика
Рис. 5.168. Создание обработчика события нажатия кнопки «Сформировать»
В модуле формы внесем в процедуру обработчика следующий текст, в котором вызывается созданная ранее функция формирования отчета (листинг 5.37).
Листинг 5.37. Обработчик события нажатия кнопки «Сформировать»
1роцедура ДействияФормыСформировать(Кнопка) СформироватьОтчет();
юнецПроцедуры
Внесем изменение в процедуру Сформирован^), чтобы передавать в компоновщик макета дополнительный параметр -созданный нами макет оформления (листинг 5.38).
Листинг 5.38. Процедура Сформировать)
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных , Настройки, ДанныеРасшифровки, СвойМакетОформления);
...
Запустим отчет на исполнение в режиме 1С:Предприятие.
Нажмем кнопку Создать макет оформления. Загрузим 419
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
в качестве основы стандартный макет Арктика, нажав кнопку Стандартный макет. Затем отредактируем области, заголовка и информации отчета. Нажмем ОК (рис. 5.169).
Рис. 5.169. Редактирование макета оформления
Отключим в настройках отчета использование стандартного макета оформления, если он задан (рис. 5.170).
Параметры данных Выбранные поля Отбор , Сортировка Условное оформление Пользовательские поля | Другие настройки |
Параметр	[Значение
Макет оформления		[Арктика
Расположение итогов	Авто	И
Расположение полей группировок	Вместе
Расположение группировок	Начало
Расположение реквизитов	Вместе с владельцем
Расположение ресурсов	Горизонтально
Расположение общих итогов по горизонтали	Авто
Расположение общих итогов по вертикали	Авто
Типлагппллкл папай			Англ	±
й1
Рис. 5.170. Отключение макета оформления в настройках
420
Глава 5. Справочник разработчика
ВНИМАНИЕ!
В случае создания собственного макета оформления в режиме «1 С:Предприятие» использование стандартного макета оформления в настройках нужно отключить. Иначе результат отчета не изменится, так как стандартный макет оформления имеет приоритет.
Переформируем отчет, нажав кнопку Сформировать. Области заголовка и информации отчета будут оформлены в соответствии с заданными нами шрифтом и цветом текста (рис. 5.171).
ддшиу— 		 ' —			 		 <)тчет по системным блокам Л Параметры данных: Начало периода » 01.01.2008 L	Конец периода = 31.08.2008	j					
Склад		Количество приход	Количество расход	Конечный остаток	Стоимость приход
№ п/п	Системный блок				
Основной		2	2		17 500,00
1	Компьютер для дома		, 1	1		9 000.0С
2	Компьютер для офиса	1	1		8 500.0С
Итого		2	2		17 500,00
Рис. 5.172. Результат отчета
Настройки отчета
Использование конструктора настроек
Конструктор настроек облегчает процесс создания простых стандартных настроек, определяющих, как будет выводиться информация в отчет. Конструктор не предназначен для того, чтобы создать любые настройки отчета. Он позволяет сделать только несколько наиболее типичных сценариев. Это инструмент, предназначенный в первую очередь для пользователя. А также им может пользоваться и разработчик, если нужно быстро настроить отчет «без хитростей», или чтобы просто посмотреть данные, выдаваемые отчетом. Работа с конструктором настроек на конкретных примерах подробно рассмотрена в 3-й главе (стр. 55).
421
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Конструктор настроек вызывается на закладке Настройки схемы компоновки данных нажатием кнопки L3, расположенной на командной панели справа в окне. Также он может быть вызван пользователем в режиме 1С:Предприятие из командной панели отчета для создания собственных настроек.
Работа с конструктором представляет простой «пошаговый» процесс. Сначала определяется Тип отчета (рис. 5.173).
Рис. 5.173. Конструктор настроек. Шаг 1
•	Список - соответствует элементу структуры отчета Группировка, где информация выводится по строкам.
•	Таблица - данные выводятся в виде таблицы, сгруппированные по строкам и колонкам.
•	Диаграмма - данные выводятся в виде диаграммы.
На следующем шаге определяются поля, выводящиеся в отчет.
422
Глава 5. Справочник разработчика
Второй шаг одинаков для всех типов отчета. Но для диаграммы в списке полей может быть указан только один ресурс.
На следующем шаге осуществляется выбор в зависимости от типа отчета.
Если выбран тип отчета Список, определяются поля для группировки записей в списке (рис. 5.174).
Рис. 5.174.
Конструктор настроек. Шаг 3
Если выбран тип отчета Таблица, определяются поля для груп-
пировки строк и колонок таблицы (рис. 5.175).
Рис. 5.175.
Конструктор настроек. Шаг 3
423
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Если выбран тип отчета Диаграмма, определяются поля для группировки серий и точек диаграммы (рис. 5.176).
Рис. 5.176. Конструктор настроек. Шаг 3
Четвертый шаг одинаков для всех типов отчета. Здесь определяются поля для сортировки записей в отчете.
Если выбран тип отчета Диаграмма, на пятом шаге определяется тип диаграммы.
Сохранение и загрузка настроек отчета
В системе компоновки данных есть возможность сохранить настройки отчета в XML-файл. Для этого нужно нажать кнопку 0, расположенную в командной панели конструктора схемы компоновки данных на закладке Настройки, и ввести имя файла для сохранения настроек (рис. 5.177).
424
Глава 5. Справочник разработчика
Рис. 5.177. Сохранение настроек в XML-файл
Рис. 5.178. Восстановление настроек из XML-файла
425
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Далее можно удалить все сделанные настройки кнопкой Я Стандартная настройка, расположенной здесь же, и на запрос конфигуратора о подтверждении потери текущих настроек ответить утвердительно.
Затем можно восстановить сохраненные ранее настройки из XML-файла. Для этого нужно нажать кнопку ЕЗ, расположенную здесь же, и ввести имя файла для восстановления настроек (рис. 5.178).
Настройки можно также сохранять/восстанавливать и средствами встроенного языка.
Упорядочивание
Так как в отчет может выводиться множество группировок и таблиц, упорядочивание в системе компоновки данных желательно выполнять средствами самой системы компоновки данных, а не средствами языка запросов. В запросе также можно упорядочить записи в отчете, но, во-первых, система компоновки предоставляет для этого больше возможностей, которые будут рассмотрены ниже; а во-вторых, упорядочивание в запросе делает отчет менее гибким с точки зрения его дальнейшей настройки пользователем.
Упорядочивание группировок
По умолчанию каждая группировка будет упорядочена по полям группировки. Например, в отчете есть группировка по полю Номенклатура и не указан порядок. В таком случае упорядочивание группировки будет осуществляться по полю Номенклатура (рис. 5.179).
Рассмотрим другой пример. В отчете есть группировка по полю Номенклатура и в глобальном упорядочивании, то есть
426
Глава 5. Справочник разработчика
настройках отчета в целом, указано поле Номенклатура.Код (рис. 5.180).
Продажи товаров и услуг				
				
ООО "Автоматика11					1 500 00	
Диагностика компьютера, 000000007					2	1 500,00
18 марта 2008 г.				1_	1 000,00
26 марта 2008 г.			1		500,00
ООО •’Атлант"				9 000,00
>Йосстано в ление данных, 000000016			1	5 000,00
	22 апреля 2008 г.		1	5 000,00
	Ремонт компьютера, 000000014		1	3 000,00
	22 апреля 2008 г.		1	3 000,00
	Сопутствующее услуги, 000000015		2	1 000,00
V 22 апреля 2008 г.			2	1 000,00
ООО "Стандарт"				4 500,00
Диагностика компьютера, 000000007			1	500,00
22 апреля 2008 г.			1	500,00
Ремонт компьютера, 000000014			1	3 000,00
22 апреля 2008 г.			1	3 000,00
Сопутствующее услуги, 000000015			2	1 000,00
22 апреля 2008 г.					2	1 000,00
				
Рис. 5.179. Результат отчета
Рис. 5.180. Настройка сортировки отчета в целом
427
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В таком случае упорядочивание группировки будет осуществляться по полю Номенклатура.Код, после чего - по полю Номенклатура (рис. 5.181).
Продажи товаров и услуг			
Контрагент				Количество	Стоимость
Номенклатура, Код					
Пергод			
ООО "Автоматика"				1 500,00
Диагностика компьютера, 000000007				2	1 500,00.
16 марта 2008 г.		1	1 000,00
26 марта 2008 г.		1	500,00
ООО'Атлант»			9000,00
/'емонт компьютера. 000000014		1	3 000,00
22 апреля 2008 г.		1	3 000,00
Сопутствующее услуги, 000000015		2	1 000,00
22 апреля 2008 г.		2	1 000,00
, Восстановление данных, 000000016		1	5 000,00
V. 22 апреля 2008 г		1	5 000,00
ООО "Стандарт"			4 500,00
Диагностика компьютера, 000000007		1	500,00
22 апреля 2008 г.		1	500,00
Ремонт компьютера, 000000014		1	3 000,00
22 апреля 2008 г.		1	3 000,00
Сопутствующее услуги, 000000015		2	1 000,00
22 апреля 2008 г.		2	1 000,00
Итого			
Рис. 5.181. Результат отчета
Упорядочивание полей
Для упорядочивания ссылочных полей система компоновки получает поля, по которым следует упорядочивать таблицу, на которую осуществляется ссылка, и использует вместо упорядочивания по самому полю упорядочивание по полученным полям.
Например, нужно упорядочить отчет по полю Номенклатура, которое является ссылкой на справочник Номенклатура, тот, в свою очередь, является иерархическим справочником с основным представлением в виде наименования. В таком’ случае система компоновки будет получать поля ЭтоГруппа, Наименование, Ссылка для значения ссылки и упорядочивать по этим полям. При этом поле Ссылка уже будет сравниваться в соответствии с правилами сравнения ссылок.
428
Глава 5. Справочник разработчика
Система компоновки данных предоставляет возможность указывать выражение упорядочивания для полей набора данных. Для этого в конструкторе схемы компоновки данных на закладке Наборы данных следует ввести соответствующее выражение в колонку Выражение упорядочивания для поля набора данных (рис. 5.182).
	ИбЛ₽		 Заголовок					WE		Ч лёния	 Вы; зженияугх» од змия
-	Код	Код Код	□ □ □ □ 0 V 0 0					
—	Наименование	Наименование Наименование	□ 0	□ 0	□ 0	□ 0		
-	Ссылка	Ссылка Ссылка	□ □ □ □ □ □ □ □					
								
Рис. 5.182. Выражение упорядочивания для поля «Наименование»
Если в схеме компоновки для поля указаны выражения упорядочивания, то для упорядочивания по этому полю будут использоваться результаты указанных выражений.
Для примера рассмотрим отчет Список услуг. На закладке Сортировка укажем, что данные в отчете будут упорядочиваться по полю Наименование. Но вместо стандартного представления для этого поля на закладке Наборы данных зададим собственное выражение, по которому и будет проводиться упорядочивание записей в отчете. Нажав кнопку выбора для поля Наименование, в колонке Выражение упорядочивания, вызовем диалог его свойств, который содержит:
•	Выражение - текст выражения на языке выражений системы компоновки данных.
•	Тип упорядочивания - по убыванию или по возрастанию.
•	Необходимость упорядочивания - флаг для определения упорядочивания ссылочных полей. Если данный флаг установлен в значение Истина, то для упорядочивания
429
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ссылочных полей, полученных в результате вычисления выражения, будут использоваться поля, по которым следует упорядочивать таблицу, на которую осуществляется ссылка. В противном случае ссылки будут упорядочиваться в соответствии с правилами сравнения ссылочных значений компоновки данных, описанных в документации.
Нажмем кнопку Добавить и введем в колонку Выражение следующий текст (листинг 5.39):
Листинг 5.39. Выражение для упорядочивания поля «Наименование»
Укажем Тип упорядочивания - По возрастанию. Нажмем еще раз кнопку Добавить и выберем в колонке Выражение поле Код. Укажем Тип упорядочивания - По убыванию. Таким образом, мы установили, что первой в списке услуг должна располагаться услуга с наименованием Ремонт компьютера, а остальные записи в отчете должны располагаться по мере убывания кода услуги. В результате окно диалога примет вид (рис. 5.183).
Рис. 5.183. Задание выражения упорядочивания
В результате выполнения отчета записи будут упорядочены в соответствии с описанными выше условиями вид (рис. 5.184).
430
Глава 5. Справочник разработчика
Список услуг
Рис. 5.184. Результат отчета
Отбор
По тем же причинам, что и упорядочивание (см. стр. 426), отбор в системе компоновки данных желательно выполнять средствами самой системы компоновки данных, а не средствами языка запросов.
В настройках компоновки данных возможно указание главного отбора и отбора группировок. Главный отбор устанавливается для всего отчета в целом. Отбор группировок устанавливается у конкретной группировки.
Главный отбор отчета
Главный отбор используется для фильтрации записей, выводимых в отчет. В приведенном примере в настройках отчета Продажи номенклатуры установлен отбор по виду номенклатуры (рис. 5.185).
Рис. 5.185. Отбор отчета в целом
В результате в отчет выводятся только продажи услуг (рис. 5.186).
431
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Продажи товаров и услуг
Отбор: Услуги
Контрагент_____________
Номенклатура___________
Период
Х)О ^'Автоматика"-
Диагностика компьютера 18 марта 2008 г.
26 марта 2008 г.
ООО “Атлант'___________
Восстановление данных 22 апреля 2008 г.
Ремонт компьютера 22 апреля 2008 г.
Сопутствующее услуги 22 апреля 2008 г.
ООО “Стандарт"_________
Диагностика компьютера 22 апреля 2008 г.
Ремонт компьютера 22 апреля 2008 г.
Сопутствующее услуги 22 апреля 2008 г.
Итого
] Количество | Стоимость
1 500,00
2[	1 500,00
Т|	1 000,00
_1 _________500,00
9000,00
1	5 000,00
1	5 000,00
1	3 000,00
1	3 000,00
2	1 000,00
2	1 000,00
4 500,00
1__________500,00
_1_________500,00
1	3 000,00
1	3 000,00
2	1 000,00
2|	1 обода
15 000,00
Рис. 5.186. Результат отчета
Особенности использования отбора при работе с несколькими наборами данных
Заметим, что если в главном отборе накладывается условие на поле некоторого дочернего набора данных, то в сгенерированном макете компоновки данных дочерний набор данных будет связан с родительским набором данных с типом связи Внутренняя. Родительские наборы данных набора данных, к которому применяется условие, также будут связаны со своими родительскими наборами данных с типом связи Внутренняя. Данный тип связи означает, что запись родительского набора данных будет выводиться в результат отчета только в случае, если в дочернем1 наборе данных будут найдены связанные записи.
432
Глава 5. Справочник разработчика
Отбор группировок
Отбор группировок используется для фильтрации записей, выводимых в группировке. При этом отбор распространяется на саму группировку, на вложенные группировки и не влияет на другие группировки, имеющиеся в отчете.
В приведенном примере в отчет выводится таблица с группировкой по полю Номенклатура в ее строках и группировка Детальные записи. Отбор установлен в режиме настроек группировки Номенклатура и будет применяться только к ней (рис. 5.187).
Рис. 5.187. Отбор группировки «Номенклатура»
В результате в таблице отчета отсутствуют записи с конечным остатком, меньшим или равным единице, которые мы видим в группировке Детальные записи (рис. 5.188).
433
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.188. Результат отчета
Тип применения отбора группировок
В отборах, применяемых к группировкам, возможно указание типа применения условия для выводимых записей.
Возможны три варианта типа применения:
•	Без иерархии - условие применяется только к неиерархическим записям. При этом иерархические записи не фильтруются. В отчет выдаются только те иерархические записи, в которых присутствуют неиерархические записи, удовлетворяющие условию. Итог по ресурсам в иерархических записях и общий итог по группировки учитывает условие.
•	Иерархия - условие применяется как к неиерархическим, так и к иерархическим записям. Итог по ресурсам в иерархических записях и общий итог по группировке отбор не учитывает.
•	Только иерархия - условие применяется только к иерархическим записям. Итог по ресурсам в иерархических записях и общий итог по группировке отбор не учитывает.
Более подробно этот вопрос рассмотрен в разделе о выводе уровней иерархии в группировке (стр. 446).
434
Глава 5. Справочник разработчика
Особенности отбора по полям-ресурсам
При использовании отбора на поля-ресурсы следует учитывать, что в случае если отбор на поле-ресурс был добавлен в главный отбор отчета, то этот отбор будет помещен в текст запроса, то есть фильтроваться будут именно детальные записи, которые получаются из запроса, а не итоги ресурса для группировок.
Таким образом, если в отчете требуется получить только записи группировки, в которых значение ресурса удовлетворяет некоторому условию, то следует добавлять отбор в группировку, а не в главный отбор.
Рассмотрим эту особенность на примере отчета Продажи номенклатуры. Установим отбор для отчета в целом, чтобы значения ресурса Стоимость были больше 3000 (рис. 5.189).
Рис. 5.189. Отбор отчета в целом
Продажи товаров и услуг
Отбор: Услуги И
Стоимость Больше "3 000"
Контрагент
[Номенклатура
Период
ЬОО "Атлант*
I Восстановление данных
22 апреля 2008 г.
В результате фильтруются детальные записи, и в отчет выводятся только продажи услуг со стоимостью больше 3000 (рис. 5.190).
Рис. 5.190. Результат отчета
435
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Создадим то же условие отбора для группировки Контрагент (рис. 5.191).
Рис. 5.191. Отбор группировки «Контрагент»
В результате в отчет попадут продажи услуг, стоимость которых меньше 3000, но суммарная стоимость по контрагенту для которых удовлетворяет заданному условию (рис. 5.192).
Продажи товаров и услуг
Отбор Услуги
Контрагент
Номенмитура
Пе;'ИС.:
ХЮ "Атлант*____________
Восстановление данных 22 апреля 2008 г.
Ремонт компьютера 22 апреля 2008 г.
Сопутствующее услуги 22 апреля 2008 г. ___
ХЮ*СТ№Дарт*____________
Диагностика компьютера 22 апреля 2008 г.
Ремонт компьютера
22 апреля 2008 г.
Сопутствующее услуги 22 апреля 2008 г.
Итого
к. личест? о тонкость
ЭОООДО
Д
1
2 2
5 000,00
3 000,00
1 000,00
J 000,
3 000,00
3 000,00
1 000,00 \1 000,00' ззпи
Рис. 5.192. Результат отчета
1
436
Глава 5. Справочник разработчика
Расположение реквизитов
Реквизитами поля в системе компоновки данных называются все его подчиненные поля, доступные через точку. Например, для поля Номенклатура реквизитом является поле Номенклату-ра.Код. Дополнительные характеристики объектов, например, Регион, Надежный партнер также являются реквизитами поля Контрагент, с точки зрения системы компоновки данных.
Управлять расположением реквизитов можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значение параметра Расположение реквизитов (рис. 5.193).
Рис. 5.193. Настройка расположения реквизитов
Существуют следующие варианты расположения реквизитов:
•	Вместе - реквизиты располагаются вместе, в одной колонке, и разделяются запятой. В приведенном примере создано две колонки, отображающих реквизиты контрагента и номенклатуры соответственно (рис. 5.194).
437
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
ОООХтиль"
 жтрагёнт
Номенклатура
600 “Автоматика'
Королев
I Диагностика компьютер Г Компьютер для дома ^~(7б0000007, Москва
| Монитор LCD
од, Гид номенклатуры Количество тоимогть
'^оооЬМ7Г!^у"га—"ST {000000010, Комплекты J
Д Д1500,00
(S 1000000012, Материалы I
1 500,00 ___10 000,00 10000.00
10 000 00



Рис. 5.194. Вывод полей реквизитов в варианте «Вместе»
Отдельно - для каждого реквизита создается отдельная колонка. В приведенном примере для каждого реквизита контрагента и номенклатуры создано по отдельной колонке, причем при выводе группировок Отдельно колонки реквизитов контрагента располагаются после колонки Контрагент, а колонки реквизитов номенклатуры отображаются после колонки Номенклатура (рис. 5.195).
Рис. 5.195. Вывод полей реквизитов - «Отдельно»
•	Вместе с владельцем - реквизиты располагаются в колонке, отображающей владельца. Данное расположение реквизитов используется по умолчанию. В приведенном примере реквизиты контрагента расположены в колонке Контрагент, а реквизиты номенклатуры - в колонке Номенклатура (рис. 5.196).
Рис. 5.196. Вывод полей реквизитов - «Вместе с владельцем»
438
Глава 5. Справочник разработчика
•	В специальной позиции - реквизиты располагаются в специальной колонке, расположенной правее всех остальных колонок. В приведенном примере реквизиты контрагента и номенклатуры расположены в одной колонке и разделены
запятой (рис. 5.197).
ООО "Автоматик				11 500,00 1 500,00 10 000,00
		 	 Диагностика компьютера Компьютер для дома	[|Каа. Вия номенклатуры 7^00000001, Королев	\ 000000007, Услуга 000000010, Комплекты		2 1	
ООО "Стиль**	- -- 					000000007, Москва	>>•; — ...	10 000,00
	Монитор LCD	s р00000012. Материалы у	1	10 000,00
। i ’того				
Рис. 5.197. Вывод полей реквизитов - «В специальной позиции»
Настройка группировок
Расположение полей группировок
Управлять расположением группировок можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значение параметра Расположение полей группировок (рис. 5.198).
Рис. 5.198. Настройка расположения полей группировок
439
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Существуют следующие варианты расположения полей группировок:
Вместе - поля группировки располагаются друг под другом. Данное расположение группировок используется по умолчанию (рис. 5.199).
Компьютер для дома ЕОО “Стиль*; Москва \Монитор LCD
Итога
Стоимость
|	тГ 500,00
2l	1 500,00
1	Ю 000,00
10000.00
1	10	000,00
F... ZTSC0.6Q
Рис. 5.199. Вывод полей группировок - «Вместе»
Отдельно - каждая группировка располагается в отдельной области отчета слева направо. Выводимые поля группировки также выводятся во вложенных группировках. В приведенном примере поля группировки по контрагенту расположены в крайней левой колонке, а поля группировки по номенклатуре - справа от колонки контрагента, при этом для группировки по номенклатуре выводятся поля группировки по контрагенту (рис. 5.200).
Контрагент, Регион
НИМ
10 000,00,
11 500,00
1 500,00
10 000,00
10000,00
Диагностика компьютера компьютер для дома
ООО "Автоматика", Королев
ООО "Автоматика", Королев
>ОО "Стиль", Москва_________f ___________
Чу-ОО "Стиль" Moe,'	У tg^ropLCD
Итого
Рис. 5.200. Вывод полей группировок - «Отдельно»
• Отдельно и только в итогах-каждая группировка располагается в отдельной области отчета слева направо. Выводимые поля выводятся только в данной группировке. В приведен^ ном примере поля группировки по контрагенту расположены в крайней левой колонке, а поля группировки по номенклатуре - справа от колонки контрагента (рис. 5.201).
44С
Глава 5. Справочник разработчика
	[Количество	Стоимость	
|<^О "Автоматика", Королев 7)		11 500)00	
	[^^Диагностика компьютера*^		1 500,00	
Г~	1	ft/ig ftqi^ ZS	1	10 000,00	
Е"ОО "Стиль", Москва		7710000.00	
	иг	10 000,00	
[Итого				^1 500,00
Рис. 5.201. Вывод полей группировок -«Отдельно и только в итогах»
Заголовки группировок
Для каждой группировки можно указать собственный заголовок, который будет выводиться перед выводом ее значений. Для этого нужно перейти в режим настроек отдельной группировки и на закладке Другие настройки ввести нужный текст в строку Заголовок. В приведенном примере для группировок Контрагент и Номенклатура указаны собственные заголовки (рис. 5.202, 5.203).
Рис. 5.202. Настройка заголовка группировки «Контрагент»
В результате перед каждой группировкой выводится ее заголовок. Если задан общий заголовок отчета, то он выводится вверху над заголовком родительской группировки (рис. 5.204).
441
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.203. Настройка заголовка группировки «Номенклатура»
{Тродажи контрагентам^)
Количество
номенклатуры
_________Диагностика компьютера
Компьютер для дома
11 500,00
ООО "Стиль”. Москва
продажи номенклатуры ^^^^^^^^^МониторЬСС^^^^^^^Д
1 500,00
10 000.00
10000,00
1j	10 000,00
I 21яадд]
Рис. 5.204.
Вывод заголовков группировок
2
Ограничение количества записей и процента выводимых записей в группировке
В режиме настройки отдельной группировки на закладке Другие настройки можно задать ограничение количества выводимых записей для группировки и вывод определенного процента от количества записей в группировке. Это нужно, например, для вывода определенного количества самых дешевых товаров и т. п. При этом если заданы оба этих параметра, то в отчет выводится наименьшее количество записей, рассчитанное по каждому из ограничений (рис. 5.205).
442
Глава 5. Справочник разработчика
Рис. 5.205. Настройка ограничения количества выводимых записей в группировке
Вывод системных полей и % в группировке
В режиме настройки отдельной группировки, а также на уровне глобального отчета можно добавить в отчет поля, сгенерированные платформой.
Для вывода системных полей, таких как № п/п, уровень и т. п., на закладке Выбранные поля в списке доступных полей нужно раскрыть группу Системные поля и перетащить в список полей нужные поля.
Чтобы добавить в отчет % общий или % в группе от любого числового поля нужно раскрыть его в списке доступных полей и перетащить в список полей нужные поля (рис. 5.206).
443
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.206. Добавление в отчет системных полей и % в группировке
В результате мы получим (рис. 5.207).
Основной
l]~ Компьютер для дома
21 Компьютер для офиса
Итого
Количество	| Количество	{Конечный	I Стоимость	I Стоимость	| Прибыль Прибыль.%
приход	расход	I остаток	приход	расход	общий
2... „	2	”	2	i 17 500,00’20 000,00 Г" 2 500
1	1	ЭООО.ОО' 10000.00	1 000	40.00
___________JL	_1	8 500,00	10 000.00‘	1 500	60,00
2(	2|	I 1/500ДО|	20 000,00 |	2500|
Рис. 5.207. Результат отчета
Заметим, что в первой колонке выводятся номера по порядку «насквозь», для вывода номера по порядку в каждой группировке нужно выбрать из списка системных полей поле № в группе. В последней колонке выводится процент, который составляет прибыль в данной строке от всего отчета. Для вывода процента прибыли от текущей группировки нужно использовать поле % в группе.
Расположение полей в макетах группировок
В режиме настройки отдельной группировки на закладке Другие настройки можно задать Тип макета полей группировки. Данное свойство имеет смысл только для группировок отчета и не используется в группировках таблицы или диаграммы (рис. 5.208).
444
Глава 5. Справочник разработчика
Рис. 5.208. Настройка типа макета отдельной группировки
ООО "Автоматика" Л
1 000,00
контрагент Количество Стоимость
Номенклатура	Количество	
Диагностика компьютера	1	1 ооороХ,
ООО "Система
^Контрагент Количество
утоимость
атура	.сть
Компьютер для офиса ]	11	10 000,00
10 000,00
Количество
Стоимость
Номен<л.иура		Стоимость
Монитор LCD	1	10 000,001
Количество Стоимость
10 000,00
ООО "Стиль
21 000,00
Тип макета -вертикально
Тип макета -горизонтально
Рис. 5.209. Результат отчета с разными макетами группировок
445
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Существуют следующие типы макетов:
•	Горизонтально - поля располагаются слева направо, поля ресурсов располагаются правее всех остальных полей. Это стандартное расположение полей в группировке (рис. 5.209).
•	Вертикально - поля располагаются сверху вниз в две колонки. В левой колонке располагаются имена выводимых полей, а в правой - значения. Поля ресурсов располагаются ниже всех остальных полей (рис. 5.209).
•	Авто - расположение будет определяться автоматически.
В приведенном примере для группировки Контрагент задан Тип макета - Вертикально, а для группировки Номенклатура -Горизонтально (рис. 5.209).
Возможность отбора уровней иерархии в группировке
Система компоновки данных позволяет выводить в отчет записи заданного уровня иерархии в группировке. Для этого в режиме настройки отдельной группировки нужно задать отбор на уровень иерархии и указать в свойстве Применение, к каким записям будет применяться отбор. Возможны три варианта типа применения:
•	Без иерархии - условие применяется только к неиерархическим записям. При этом иерархические записи не фильтруются. В отчет выдаются только те иерархические записи, в которых присутствуют неиерархические записи, удовлетворяющие условию.
•	Иерархия - условие применяется как к неиерархическим, так и к иерархическим записям.
446
Глава 5. Справочник разработчика
• Только иерархия - условие применяется только к иерархи-
ческим записям.
Для примера рассмотрим отчет, в котором выводится список номенклатуры вместе с уровнями иерархии (Уровень и Уровень в группе), которые в данном отчете идентичны (рис. 5.210).
Номенклатура	Уровень Уровень в группе	Витрина в офисе Количество остаток	Основной склад Количество остаток
Клавиагутл!		1	1			Л
		2	2			
Копировальные аппараты		1	1			
Копировальный аппарат Omega		2	2			
мониторы		1	1			.12,»»
Монитор 15’ LG Studioworks 575N		2	2			
Монитор 17' Philips 107S20		2	2			6,00
Монитор 19' Hitachi СМ715ЕТ		2	2			
Монитор LCD 22' M8537ZM/A		2	г!			6,00
Мыши		1	1			
Мышь OK-720 Mouse A4Tech PS/2		2	2			
Ноутбуки		1	Л				2,*»
Ноутбук Rover Computers Explorer		2	2			100
Ноутбук Rover Computers Navigator KT7		2	2			100
Принтеры		I1	1			М»
Лазерный принтер 5250197-203 Minolta-QMS		2	2			
Лазерный принтер Canon LBP-810		2	2			4,00
Лазерный принтер HP LaserJet 2200		2	2			
Программное обеспечение		Xi			гип	2»fW
1 С: Аспект 7.7		2	2		500	
1 С: Бухгалтерия 7.7 Базовая версия		2	2		4,00	
1 С: Бухгалтерия 7.7 Стандартная версия		2	2		100		5,00
1 С: Бухгалтерия ПРОФ версия 7.7		2	2			1,00	2,00
1С:ТорговляиСклад 7.7 Проф		2	2		1,00	2,00
**>dowe		2	2		... «м»	IV»
Wndows ХР Home Edition Russian CD		3	3		7,00	9,00
Wndows XP Home Edition Russian UPG CD		. 3	3			
VMndows XP Professional Russian CD		\ з		7	30О1	2,00
Системные блоки и комплектующее		1				*	W
Сист. блок Hewlett-Packard Brio ВА410		2	2			
Сист. блок Hewlett-Packard Vectra VL420		2	2			8,00
Телефоны		1	1			
Телефон Vega 700		2		2			
Итого	22.00	46,00
Рис. 5.210. Результат отчета с разными уровнями иерархии
Мы видим, что группа номенклатуры Программное обеспечение имеет первый уровень иерархии, а записи в ней - второй уровень. Эта группа содержит вложенную группу Windows второго уровня, записи в которой имеют третий уровень. В режиме настроек группировки Номенклатура(Иерархия) создадим отбор на системное поле Уровень. Зададим Вид сравнения - Равно, Правое значение -1, Применение - Только иерархия (рис. 5.211).
447
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.211. Создание отбора в группировке по уровню иерархии
В результате в отчет выводятся записи только первого уровня, причем это условие будет применяться только к записям иерархии. Поэтому в группе Программное обеспечение уже нет группы Windows (рис. 5.212).
Номенклатура	Уровень	.Уровень в группе	Витина в офисе Количество остаток	Основной склад Количество остаток
		1	_ J		
Клавиатуры	1	1		
Клавиатура Apple Pro Keyboards	2	2		
Копировальные аппараты	'' "11	fl		
Копировальный аппарат Omega	2	2		
Мониторы	Г	1		12,00
Монитор 15’ LG Studioworks 575N	2	2		
Монитор 17‘Philips 107S20	2	2		6,00
Монитор 19' Hitachi CM71SET	2	2		
Монитор LCD 22* M8537ZM/A	21	21		6,00
Мыши	1	1		
Мышь OK-720 Mouse A4Tech PS/2	2	2		
Ноутбуки	1	1		2,00
Ноутбук Rover Computers Explorer	2	2		1,00
Ноутбук Rover Computers Navigator KT7	2	2l		1,00
Принтеры	1	1		400
Лазерный принтер 5250197-203 Minolta-QMS	2	2		
Лазеоный принтер Canon LBP-810	2	2		4,00
Лазерный пойнтер HP LaserJet 2200	2	2		
Программное обеспечение		<i	1	>		20,00
1 С: Аспект 7.7	2	2	5,00	
1 С:Бухгалтерия 7.7 Базовая версия	2	2	4,00	
1 С: Бух галтери я 7.7 Стандартна я в ерси я	2	2	1,00	• 6,об
1 С: Бухгалтерия ПРОФ версия 7.7	2	2	1,00	2,00
1С:ТорговляиСклад 7.7 Проф	2	2	1,00	2,00
Системные блоки и комплектующие	1	1		8,00
Сист. блок Hewlett-Packard Brio ВА410	2	2		
Сист. блок Hewlett-Packard Vectra VL420	2	2		8,00
Телефоны	1	1		
Телефон Vega 700		2	2		
| Итого			22,00 ।	46,00 |
Рис. 5.212. Результат отчета 448
Глава 5. Справочник разработчика
Изменим условие отбора, чтобы уровень был меньше трех и это условие применялось только к иерархическим записям. В результате мы увидим исходную таблицу, как будто никакого отбора не было (рис. 5.210), т. к. в ней изначально нет иерархических записей больше второго уровня (рис. 5.213).
ПевОё значение [Вид сравнения р 1равое значение"
ЕЬ Отбор
••••« дрОвецЬ "[Меньше
Рис. 5.213. Создание отбора в группировке по уровню иерархии
Теперь изменим условие отбора, чтобы уровень был меньше трех, и это условие применялось к иерархии вообще (рис. 5.214).
	Лёвое значение	1 Вид сравнения V [равое'значение Применение""
	EJ-Отбор			
	’••••— Уровень	[Меньше	1	3
		
Рис. 5.214. Создание отбора в группировке по уровню иерархии
Номенклатура	Уровень	Уровень в группе	Витрина в офисе Количество 1 остаток	Основной склад Количество остаток
				
клавиатуры	1		1		
Клавиатура Apple Pro Keyboards	2			2		
Копировальные аппараты	*т		1		
Копировальный аппарат Omega	г	2	2		
Мониторы	1	1		12,00
Монитор 15' LG Studioworks 575N	2	2		
Монитор 1Т Philips 107S20	2	2		6,00
Монитор 19’ Hitachi СМ715ЕТ	2	2		
Монитор LCD 22 M8537ZM/A	2	2\		6,00
Мыши	1	I		
Мышь OK-720 Mouse A4Tech PS/2	2	2		
Норбуки	5	’ 1		2,00
Ноутбук Rover Computers Explorer		21	2		1,00
Ноутбук Rover Computers Navigator KT7	2	2		1,00
Принтеры	1	7		
Лазерный принтер 5250197-203 Minolta-QMS	2	2		
Лазерный принтер Canon LBP-810	21	2		4,00
Лазерный принтер HP LaserJet 2200	2	2		
Программное обеспечение	1	1	22,00	20,00
1 С: Аспект 7.7	2	2	5,00	
1 С: Бухгалтерия 7.7 Базовая версия	2	2	4,00	
1 С: Бух галтери я 7.7 Стандартна я в ерси я	2	2	1ДСГ	5,00
1 С: Бухгалтерия ПРОФ версия 7.7	2	2	1,00	2,00
ЮТорговляиСклад 7.7 Проф	2	2	1.00	2,00
Windows			Cl		>	-10,00	11,00
Системные блоки и комплектующие	1	1		в,0®
Сист. блок Hewlett-Packard Brio ВА410	2	2		
Сист. блок Hewlett-Packard Vectra VL420	____	2	2		8,00
Телефоны	1	4		
Телефон Vega 700		2		2		
Итого	_____________22,00!	46,00
Рис. 5.215. Результат отчета
449
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В результате в отчете мы не увидим записей, относящихся к группе Windows из Программного обеспечения, т. к. их уровень равен трем (рис. 5.215).
Теперь зададим условие, чтобы уровень был равен единице, и это условие применялось к иерархии вообще (рис. 5.216).
Рис. 5.216. Создание отбора в группировке по уровню иерархии
В результате мы увидим в отчете только иерархические записи
первого уровня (рис. 5.217).
Номенклатура	Уровень	Уровень в группе	Витрина в офисе Количество остаток	Основной склад Количество остаток
- 9 л _ .ГЧ л Та			1J		
Клавиатуры	1	1		
'Копировальные аппараты	1	Г		
[Мониторы	-1	1		12,00
[Мыши		1		
Ноутбуки	1	1		2,001
[Принтеры	♦	’ II		МО
! Программное обеспечение	-1	1	22,00	20,00
1 Системные блоки и комплектующие	1	1		8,00
[Телефоны				 1		 1		
| Hluiu			22,0л	16,00 1
Рис. 5.217. Результат отчета
Группировки-периоды
Часто в отчетах требуется вывести данные за период с промежуточными итогами по дням, месяцам, полугодиям и т. п. Для этого нужно сгруппировать данные по этим периодам. При разработке отчета в схеме компоновки данных нужно добавить в набор доступных полей поля-периоды и создать группировки по этим полям в настройках отчета. Затем вывести в отчет поля ресурсов отчета, чтобы для каждой группировки были подсчитаны промежуточные итоги.
Для примера рассмотрим Отчет по продажам. Данные в нем сгруппированы по периодам Месяц и День.
450
Глава 5. Справочник разработчика
Чтобы добавить поля-периоды в набор данных, нужно задать периодичность виртуальной таблицы, из которой извлекаются данные. В данном случае это таблица Продажи.Обороты. Откроем конструктор запроса и вызовем диалог параметров виртуальной таблицы. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы (рис. 5.218).
Рис. 5.218. Выбор периодичности виртуальной таблицы
В открывшемся диалоге можно выбрать различные значения параметра Периодичность. В зависимости от выбранной
EHfa ПродажиОбороты
ПериодСекунда ..— ПериодМинута ••••— ПериодЧас
; ПерисдДень
ПериодНеделя Период Декада ПериодМесяц
—— ПериодКвартал
..— ПериодПолугодие
ПериодГод
Eb L. Номенклатура
Е-•• I— Контрагент
—| КоличествоО борот
-"I СтоимостьО борот
периодичности виртуальной таблицы становятся доступными различные поля-периоды. Выберем периодичность Авто. Это наиболее универсальный вариант. Раскрыв список полей таблицы, мы можем перенести в список полей запроса следующие поля (рис. 5.219).
Рис. 5.219. Доступные поля-периоды виртуальной таблицы с периодичностью «Авто»
451
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Выберем поля-периоды ПериодДень и ПериодМесяц. При включенном свойстве Автозаполнение платформа заполнит в роли полей свойство Период. На основании этой информации будут рассчитываться итоги по этим полям.
Затем в структуру отчета добавляются группировки по полям-периодам. В группировку Контрагент добавляется группировка по полю ПериодМесяц и в нее вкладывается группировка ПериодДень. Группировка ПериодДень также добавляется в точки диаграммы, но ее для наглядности лучше отключить. В отчет выводится ресурс Стоимость для вывода итога по группировкам (рис. 5.220).
Рис. 5.220. Добавление группировок периодов в структуру отчета
В результате данные в отчете сгруппированы по дням и месяцам, и по каждому периоду выводится промежуточный итог (рис. 5.221),
452
Глава 5. Справочник разработчика
Рис. 5.221. Результат отчета
Заметим, что в отчетах можно выводить группировки-периоды, не получая при этом данных из родительских группировок. Например, группировку Регистратор, можно использовать без ее родительской группировки Секунда, так как система компоновки данных сама подставит при компоновке нужные родительские поля-периоды, а «внешне» в отчете это никак не отразится.
Расположение ресурсов
Система компоновки данных позволяет настраивать отображение полей ресурсов в отчете. Управлять расположением ресурсов можно при помощи настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значение параметра Расположение ресурсов (рис. 5.222).
453
Разработка сложных отчетов в 1С.Предприятии 8. Система компоновки данных
Рис. 5.222. Настройка расположения полей ресурсов
В приведенном примере в отчет выводятся поля ресурсов Количество и Стоимость. Существуют следующие варианты расположения ресурсов:
•	Горизонтал ьно - поля ресурсов располагаются горизонтально слева направо. Каждый ресурс отображается в отдельной колонке. Данное расположение ресурсов используется по умолчанию (рис. 5.223).
Рис. 5.223. Вывод полей ресурсов - «Горизонтально»
•	Вертикально - поля ресурсов располагаются вертикально друг под другом. Все ресурсы отображаются в одной колонке. Также создается специальная колонка, отображающая имена полей ресурсов (рис. 5.224).
454
Глава 5. Справочник разработчика
Контрагент, Реги он Н0М‘ лКЛЭТ f. ?		
ООО “Автоматика", Королев	Количество	
	Стоимость	Г 11 500,00
Диагностика компьютера	Количество	2
	Стоимость	1 500,00
Компьютер для дома	Количество	1
	Стоимость	10 000,00
ООО‘'Стиль”, Москва	Количество	
	Стоимость	10 000,00
Монитор LCD	Количество	1
	Стоимость	10 000,00
Итого	| Количество (Стоимость		Vii 5UU1V
Рис. 5.224. Вывод полей ресурсов - «Вертикально»
Расположение группы выбранных полей
Система компоновки данных предоставляет возможность изменять расположение групп выбранных полей. Управлять расположением группы выбранных полей можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Выбранные поля. Если на данной закладке в табличном поле, отображающем выбранные поля, сделать активной какую-либо группу, то справа от нее появится колонка Расположение, позволяющая управлять расположением выбранных полей в группе. В приведенном примере создана группа полей Реквизиты и в нее добавлены поля Номенклатура.Код и Номен-клатура.ВидНоменклатуры (рис. 5.225).
Существуют следующие варианты расположения выбранных полей в группе:
• Авто - расположение полей определяется автоматически. Для группировок и строк таблицы поля располагаются горизонтально, а для колонок таблицы - вертикально (рис. 5.226).
455
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.225. Настройка расположения группы выбранных полей
ММММ			Приход
Номенклатура	| Реквизиты 			
	। Номенклатура.Код	Номенклатура.Вид номенклатуры		
Основной			
Товары для сборки		Юб000002^^^^^^"		13,000
ОЗУ	000000023		Материалы	5,000
Память	000000004	Материалы	5,000
Основные детали	000000024	Материалы	8,000
Жесткий диск	000000005	Материалы	3,000
Материнская плата	000000003	Материалы	5,000
Розничный			
Товары для сборки		000000025			2,000
Мониторы	000000022		Материалы	2,000
Монитор LCD	[bqgooooi2	Материалы	у	2,000
			15,000
Рис. 5.226. Вывод группы выбранных полей - «Авто», «Горизонтально», «В отдельной колонке»
•	Горизонтально - поля располагаются горизонтально слева направо. Для каждого поля отводится отдельная колонка (рис. 5.226).
•	Вертикально - поля располагаются вертикально сверху вниз. Для каждого поля отводится отдельная строка (рис. 5.227).
456
Глава 5. Справочник разработчика
Номенклатура •	Реквизиты	
	Номенклатура.Код	
	Номенклатура.Вид номенклатуры		
-ОСНОВНОЙ	-		fS.OW
Товары для сборки	йб0000025	X	13JD00
		
ОЗУ	000000023	5,000
	Материалы	
Память	000000004	5,000
	Материалы	
Основные детали	000000024	8,000
	Материалы	
Жесткий диск	000000005	3,000
	Материалы	
Материнская плата	000000003	5,000
	Материалы	
Розничный		^в2,000
Товары для сборки	000000025	2,000
		
Мониторы	000000022	2,000
	Материалы	
Монитор LCD	.00000012	2,000
	Материалы	у	
		15,000
Рис. 5.227. Вывод группы выбранных полей - «Вертикально»
•	В отдельной колонке - поля располагаются горизонтально слева направо. Для каждого поля отводится отдельная колонка, при этом все колонки группы располагаются правее всех остальных колонок (рис. 5.226).
•	Вместе - поля располагаются вместе в одной колонке и разделяются запятой (рис. 5.228).
	Реквизиты	Приход
	Номенклатура.Код, Номенклатура.Вид номенклатуры	
Основной	„	_ _		13  о
Товары для сборки	I		13,000
ОЗУ	J00000023, Материалы	5,000
Память	300000004, Материалы	5,000
Основные детали	300000024, Материалы	8,000
Жесткий диск	300000005, Материалы	3,000
	Материнская плата	ЗОООООООЗ^^риаль^^^^^^^	5,ПОЛ
Розни-н-м			\		ВИВ
Товары для сборки	00000025,		 2,000
Мониторы	00000022, Материалы		2,000
Монитор LCD	lOqpOOOOl 2, Материалы	J	2,000
ИТОГО		15, ООН
Рис. 5.228. Вывод группы выбранных полей - «Вместе»
457
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Заголовки выбранных полей
Система компоновки данных предоставляет возможность изменять заголовки выбранных полей. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Выбранные поля, выделить в списке выбранных полей нужный заголовок и вызвать его контекстное меню правой кнопкой мыши. Затем выбрать пункт Переименовать и ввести новое название заголовка. Нажав на кнопку открытия со значком лупы, можно задать альтернативный вариант заголовка в случае использования в конфигурации нескольких языков (рис. 5.229).
поля
Рис. 5.229. Настройка заголовков выбранных полей
Таким образом, для одной и той же схемы разные настройки могут задавать разные заголовки полей.
Расположение общих итогов
Система компоновки данных позволяет настраивать отображение общих итогов в отчете. Управлять расположением общих итогов можно при помощи настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значения параметров Расположение общих итогов по горизонтали и Расположение общих итогов по вертикали (рис. 5.230).
458
Глава 5. Справочник разработчика
Рис. 5.230. Настройка расположения общих итогов
Параметр Расположение общих итогов по горизонтали имеет смысл только для таблиц, а параметр Расположение общих итогов по вертикали - для группировок и таблиц.
Существуют следующие варианты расположения общих итогов:
• Нет - не отображать итоги. Для группировок не отображаются только итоги по вертикали, а для таблиц - итоги по вертикали и по горизонтали. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Нет (рис. 5.231).
	I Номенклатура	IН сальный I остаток	1рйхОД ивнв	Пас од	b змеиный остаток	
Розничным	'Монитор LCD		2,000'	1,000	1,000
Основной	Материнская плата		5,000	2,000	3,000
Основной	Память		5,000	2,000	3,000
Основной	Жесткий диск		3,000	2,000	1,000
Рис. 5.231. Вывод общих итогов по вертикали - «Нет»
459
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Нет (рис. 5.232).
•	И Основной						Розничный		
	|Приход ^Расход	Конечный остаток	Приход	Расход	Конечный остаток
Жесткий диск	3	2				
Материнская плата	5	2	3			
Монитор LCD			2	1	1
Память	5	2	3			
Рис. 5.232. Вывод общих итогов по вертикали и горизонтали - «Нет»
Начало - отображать итоги в начале. Для группировок и строк таблицы общие итоги отображаются перед строками группировки, а для колонок таблицы - перед колонками группировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Начало (рис. 5.233).
Склад | Номенклатура {Начальный ______________________________[остаток
Розничный Монитор LCD
Основной	Материнскаяплата
Основной	.Память__________
Основной [Жесткий диск 
Приход [ Расход : Конечный |остаток
is.qpo~	/.Оро'	ajBBb
5,000	2,000 3,000
5,000	2,000 __________3,000
3,0001	2,0001	1,000
Рис. 5.233. Вывод общих итогов по вертикали - «Начало»
В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Начало (рис. 5.234).
Жесткий диск Материнская плата
Монитор LCD
Память
Hti гп	| Основной	 j Розничный
Приход Расход Конечный Приход Расдод [Конечный 1 Приход (Расход (Конечный .остаток 	iftwo-r*!/	I «M-wnw
......?!........:
3.000
Розничный
5.000
2,000
2,000
2,000
1,000
2,000
1,000
3,000
1,000
’flu
|остаток
W--------
2
2



3
5
5
2
з
3
Т

1
1
Рис. 5.234. Вывод общих итогов по вертикали и горизонтали - «Начало»
• Конец - отображать итоги в конце. Для группировок и строк таблицы общие итоги отображаются после строк группировки, а для колонок таблицы - после колонок груп
460
Глава 5. Справочник разработчика
пировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Конец (рис. 5.235).
Склад		i Номенклатура	Начальный ‘остаток	;Приход	Расход Конечный |.	joe тато к	
Розничный Основной		Монитор LCD	2,000		1,000		1.003
		Материнская плата		5,000	2,000	3,000
Основной		Память		5,000	2,000	3,000
					2.000 7 да	1,000 8,6q5
Рис. 5.235. Вывод общих итогов по вертикали - «Конец»
В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Конец (рис. 5.236).
Номен/  атура
Жесткий диск Материнская плата Монитор LCD
Память
Основной-______________ Розничный
Приход Ра. од кнечный Приход Ра- од хтаток
3[	2__________1__
___$_______2__________3_________________
’____________________________________2_______
__________5	2	3
13,01X1	6.000	7,000	2,000~~ 1 ДОР
Рис. 5.236. Вывод общих итогов по вертикали и горизонтали - «Конец»
• Начало и конец - отображать итоги в начале и конце. Для группировок и строк таблицы общие итоги отображаются перед и после строк группировки, а для колонок таблицы - перед и после колонок группировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Начало и конец (рис. 5.237).
Склад	Номенклатура	Начальный остаток	Приход |	I Расход	Конечный остаток
			15'да		
Розничны^^	монито^И^^		“2Д00	1,000	^1Д00
Основной	Материнская плата		5,000	2,000	3,000
Основной	Память		5,000	2,000	3,000
Основной	Жесткий диск		3,000	2,000	1,000
Сотого			15090	/да	8,t®i
Рис. 5.237. Вывод общих итогов по вертикали - «Начало и конец»
461
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Начало и конец (рис. 5.238).
Рис. 5.238. Вывод общих итогов
по вертикали и горизонтали - «Начало и конец»
• Авто - расположение общих итогов определяется автоматически. Для группировок верхнего уровня общие итоги отображаются в конце, для остальных группировок общие итоги не отображаются.
Заметим, что параметры Расположение общих итогов по горизонтали и Расположение общих итогов по вертикали можно использовать и для вложенных группировок. Для этого нужно задать эти же параметры в режиме настройки отдельной группировки. Например, в приведенном примере для группировки Контрагент общие итоги отображаются в конце, а для группировки Номенклатура - в начале и в конце (рис. 5.239).
- онтраг нт Регисн ^тура	Количество	1 той У ОСТЬ
ООО "Автоматика" Koi .-лев		.11 500,00
СТитогр		11500.61
| Диагностика компьютера		2	1 500,00
| Компьютер для дома		1	10 000,00
Сотого		11 5оО,03
ООО "Стиль", Москва		10 000,00
р^Йтого		1Й"оби,СХ2
| Монито^£Ьи—	1	10 000 00
Итпгп		1 oooo.ig
фГОГр			21 500 .©
Рис. 5.239. Вывод общих итогов по вертикали и горизонтали для отдельных группировок
Также заметим, что отбор, применяемый в группировке, влияет на отображение общего итога по данной группировке. Например, в указанном ниже отчете для группировки Номен-
462
Глава 5. Справочник разработчика
клатура установлен отбор. В приведенном примере в общем итоге по группировке Номенклатура указаны количество и стоимость с учетом отбора, тогда как для вышестоящей группировки Контрагент указывается количество и стоимость без учета отбора (рис. 5.240).
контрагент, Реги- н
нВпЬра
ООО “Автоматика", Королев
Количество ’ тоимость
11 500.
Отбор: Стоимость Больше "3 000”
Итэп
Компьютер для дома
Итого_____________
ООО "Стиль", Москва_____________
I Отбор: Стоимость Больше “3 0001
Итого	1
Монитор LCD Итого
кого
10 000,00
10 000,00
1П0ГО.0О
10 000 00

Рис. 5.240. Вывод общих итогов с учетом отбора по отдельной группировке
Отображение заголовков, параметров данных и отборов
Система компоновки данных позволяет настраивать отображение заголовков, параметров данных и отборов. Управлять отображением заголовков, параметров данных и отборов можно при помощи настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значения параметров Заголовок, Выводить заголовок, Выводить параметры данных и Выводить отбор (рис. 5.241).
Заголовком в системе компоновки данных является текст, выводимый в начале отчета или группировки. Заголовок может задаваться для отчета в целом, таблицы, диаграммы, а также для отдельных группировок.
463
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 5.241. Настройка отображения заголовков, параметров данных, отборов
Для управления отображением заголовков используются перечисленные ниже параметры.
Выводить заголовок - управление отображением заголовка. Существуют следующие варианты отображения заголовка:
•	Авто - отображение заголовка определяется автоматически. Если в заголовке указан текст, то текст заголовка отображается, иначе нет.
•	Не выводить - заголовок не отображается.
•	Выводить - заголовок отображается всегда.
В строке Заголовок задается текст заголовка. Чтобы не выводить заголовок, можно просто снять флаг его использования в этой строке. В приведенном примере параметр Выводить заголовок установлен в значение Выводить, при этом выводится общий заголовок отчета (рис. 5.242).
464
Глава 5. Справочник разработчика
Рис. 5.242. Вывод общего заголовка отчета
Параметры данных отображаются только в начале отчета. Для управления отображением значений параметров данных используется параметр Выводить параметры данных.
Авто - отображение параметров данных определяется автоматически. Если параметры данных указаны, то отображается текст вида "Параметры данных: <параметр1 > = <значение1 >", иначе параметры данных не отображаются:
•	Не выводить - параметры данных не отображаются.
•	Выводить - параметры данных отображаются всегда. Если параметры данных не указаны, то отображается только текст вида "Параметры данных:".
Рис. 5.243.
Вывод параметров отчета
465
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В приведенном примере параметр Выводить параметры данных установлен в значение Не выводить (рис. 5.243).
Отбор может отображаться как для отчета, таблицы или диаграммы, так и для отдельных группировок. Для управления отображением отбора используется параметр Выводить отбор.
•	Авто - отображение отбора определяется автоматически. Если отбор установлен, то отображается текст вида "Отбор: Стекст отбора>", иначе отбор не отображается.
•	Не выводить - отбор не отображается.
•	Выводить - отбор отображается всегда. Если отбор не установлен, то отображается только текст вида "Отбор:".
В приведенном примере параметр Выводить отбор установлен в значение Выводить, при этом отбор задан только для группировки таблицы Номенклатура. Параметр Выводить заголовок установлен в значение Авто, при этом для таблицы и группировки заданы различные заголовки (рис. 5.244).
Рис. 5.244. Вывод отбора для группировки таблицы
466
Глава 5. Справочник разработчика
Настройки диаграмм
Система компоновки данных предоставляет возможности для настройки различных свойств отображаемых в отчете диаграмм. Для этого в конструкторе схемы компоновки данных нужно перейти в режим настройки диаграммы и на закладке Другие настройки установить ее параметры.
Логически Диаграмма является совокупностью Точек, Серий и значений серий в точке. В качестве значений выступает один из ресурсов отчета, в качестве точек - объекты, для которых мы получаем значения характеристик, в качестве серий - характеристики, значения которых нас интересуют.
Прежде всего, исходя из эффективности графического представления результатов отчета, выбирается Тип диаграммы: график, гистограмма, измерительная, круговая и т. д. Например, для демонстрации изменения каких-либо значений характеристик во времени лучше всего выбрать тип диаграммы График, где точками будут моменты времени, а сериями - характеристики, например продажи товаров. Для демонстрации доли объема продаж каждого контрагента подходит Круговая диаграмма и т. д. Далее можно настроить ряд свойств диаграммы, таких как расположение легенды, состав подписей, вывод таблицы значений и др.
Так, например, для отчета Продажи контрагентам в настройках диаграммы задан тип диаграммы - Круговая объемная, параметр Состав подписей установлен в значение Серия + процент, а параметр Размещение легенды - в значение Верх (рис. 5.245, 5.246).
467
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Рис. 5.245. Настройка вывода состава подписей и типа диаграммы
Выбранные поля Условное оформление ] Другие настройки |
							
1				Jn и-же			
	п			Пропускать базовое значение		истина			
1	0			Состав подписей	Серия + процент			ЙР
	а			Режим раздвижения	Нет			
	и			Отображать таблицу данных	истина			
	а		••••Максимальное значение				
	а			Минимальное значение				
	а		Окантовка	ложь			
	а		•Градиент	ложь			
	а		Шрифт	Шрифт диалогов и меню			
	а		—Цвет Фона	 0,0.0			
	а			Стиль линии	Нет линии			
(	ЕГ		-••Размещение легенды	Верх			
	Li		—11олосы измерительной диаграммы	Нет			
	□	Выводить заголовок		Лево			
	□	Заголовок		Право			
							
				I  	1		
Рис. 5.246. Настройка расположения легенды диаграммы
468
Глава 5. Справочник разработчика
В результате диаграмма будет выведена в следующем виде (рис. 5.247):
Условное оформление
Для более наглядного представления данных в отчете система компоновки данных позволяет задавать условное оформление областей отчета. При помощи условного оформления можно изменить цвет текста или фона, шрифт, горизонтальное или вертикальное положение и т. п. как отчета в целом, так и его отдельных областей. Условное оформление применяется к отчету при определенных условиях, например, когда остаток товара равен нулю, соответствующие строки номенклатуры выводятся красным цветом.
Для управления условным оформлением используются настройки компоновки данных. В конструкторе схемы компоновки данных нужно перейти в режим настройки отчета или его отдельной группировки и открыть закладку Условное оформление.
469
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Элементы условного оформления могут быть следующих типов:
•	Главное - применяется ко всему отчету. Такое условное оформление распространяется как на специальные области отчета (например, текст отбора или заголовка отчета), так и на все вложенные элементы отчета (таблицы, диаграммы и группировки).
•	Условное оформление таблицы или диаграммы - применяется к таблице или диаграмме соответственно. Такое условное оформление распространяется как на области таблицы, так и на все группировки строк и колонок таблицы.
•	Условное оформление группировки - применяется к отдельно взятой группировке, то есть условное оформление родительской группировки не распространяется на дочернюю.
В соответствии с типом оформления нужно перейти в режим настроек группировки, таблицы, диаграммы или отчета в целом.
Для применения условного оформления необходимо определить следующие его элементы:
•	Область - область отчета, к которой применяется условное оформление. В качестве области указываются имена полей, для которых будет применяться условное оформление. Если область не указана, то условное оформление применяется ко всему отчету, таблице или группировке.
•	Отбор - условие, в соответствии с которым применяется условное оформление. Если условие не указано, то условное оформление применяется к указанным областям без условий.
470
Глава 5. Справочник разработчика
•	Оформление - описание применяемого оформления. Описанием оформления является перечень свойств оформления (таких как цвет, шрифт, стиль границы ит. д.), которые применяются к указанной области.
•	Представление - необязательный элемент для представления условного оформления пользователю. Если Представление задано, то оно используется для представления настроек условного оформления в отчетной форме, что, безусловно, более понятно и доступно для пользователя.
Порядок обработки элементов условного оформления следующий: сначала обрабатывается условное оформление группировок, затем обрабатывается условное оформление таблиц или диаграмм и в конце обрабатывается условное оформление всего отчета.
Для примера рассмотрим отчет Продажи номенклатуры. В отчете, при помощи условного оформления, красным цветом выделяются суммы продаж менее 3000, желтым фоном выделяются строки, содержащие системные блоки (вид номенклатуры - Комплекты).
Для этого в настройках отчета на закладке Условное оформление созданы два элемента, имеющие пользовательские представления, - Мелкий заказ и Системные блоки (рис. 5.248).
@11
@11
Параметры данных Выбранные толя s Отбор Сортировка | Условное оформление | Пользовательские поля , Другие настройки
Г~ (Область д	Л	——
Стоимость	Стоимость Меньше "3 000"	_____ _________Цвет текста Мелкий заказ
Номенклатура, Количество,... |Номенклэтура.Вид номенклатуры Равно "Комплекты" 'Цвет фона
в
*
Рис. 5.248. Элементы условного оформления отчета
В результате отчет выводится с заданным условным оформлением, и пользовательские представления условного оформления
471
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
выводятся в отчетной форме, где пользователь может интерактивно менять элементы настроек (рис. 5.249).
Рис. 5.249. Результат отчета
472
Глава 5. Справочник разработчика
Работа с системой компоновки средствами встроенного языка
Заметим, что все разнообразные интерактивные возможности платформы по работе с системой компоновки данных можно описать средствами встроенного языка. Каждый этап компоновки данных может быть реализован программным образом. Это весьма трудоемкое занятие, и делать это целиком вряд ли понадобится, но иногда бывает необходимо заполнить наборы данных, сформировать и вывести отчет, изменить его настройки и т. п. с помощью встроенного языка. В этом разделе мы познакомимся с основами работы с системой компоновки средствами встроенного языка.
Программная установка схемы компоновки данных
Система компоновки данных позволяет создать для отчета несколько схем компоновки данных. Средствами встроенного языка нужную схему компоновки можно получить по имени и программно выполнить отчет на ее основе (листинг 5.40).
Листинг 5.40. Программное получение схемы компоновки
СхемаКомпоновкиДанных= Отчеты. СписокНоменклатуры
.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Средствами встроенного языка можно создать и описать саму схему компоновки данных. Более подробно этот процесс описан в 4-й главе (пример 11 на стр. 267). В приведенном примере создается схема компоновки данных, в нее добавляется локальный источник данных информационной базы. Затем создается НаборДанныхЗапрос с именем НаборДанных1 (листинг 5.41).
473
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Листинг 5.41. Процедура программной установки схемы компоновки
СКД = Новый СхемаКомлоновкиДанных;
ИД - СКД.ИсточникиДанных.Добави1ь();
ИД.Имя = "ИсточникДанных";
ИД.ТипИсточникаДанных «"Local";
НаборДанных - СКД.НаборыДанных.Добавить(Тип
("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанныхГ;
НаборДанных.Запрос •"ВЫБРАТЬ
ЦеныСрезПоследних. Период," + "ЦеныСрезПоследних
.Номенклатура
, ЦеныСрезПоследних.Цена" *
"ИЗ РегистрСведений.Цены.СрезПоследних
КАК ЦеныСрезПоследних";
НаборДанных.ИсточникДанных » "ИсточникДанных";
СхемаКомлоновкиДанных « СКД;
В набор данных добавляются поля: Номенклатура, Период и Цена и задается их формат без вывода дробной части. Затем в набор данных добавляется поле ресурсов Цена и задается выражение для его расчета (листинг 5.42).
Листинг 5.42. Процедура программной установки схемы компоновки
Поле1« НаборДанных.Поля.Добавить
(Тип("ПолеНабораДанныхСхемыКомлоновкиДанных"));
Поле1.Поле - "Номенклатура";
Поле1.ПутьКДанным « "Номенклатура";
Поле1.3аголовок -"Номенклатура";
Поле2 « НаборДанных.Поля.Добавить
(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле2.Поле = "Период";
Поле2.ПутьКДанным = "Период";
Поле2.3аголовок «"Период";
ПолеЗ « НаборДанных.Поля.Добавить
(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеЗ. Поле • "Цена";
474
Глава 5. Справочник разработчика
ПолеЗ.ПутьКДанным  "Цена";
ПолеЗ.Заголовок = "Цена";
ФорматПоля = ПолеЗ.Оформление.НайтиЗначениеПараметра
(Новый ПараметрКомпоновкиДанных("Формат"));
ФорматПоля.Использование - Истина;
ФорматПоля.Значение = "ЧЦ - 6; ЧДЦ = О";
ПолеРесурса = СКД.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным = "Цена";
ПолеРесурса.Выражение = "Сумма(Цена)";
В набор данных также можно добавить вычисляемые поля, параметры данных и т. д. Дополнительную информацию об этих объектах системы компоновки данных можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Схема компоновки данных...
Программная работа с параметрами схемы компоновки данных
Часто бывает нужно задать значения параметров схемы компоновки данных по умолчанию. Чтобы установить значение параметра, нужно получить ссылку на него по индексу в коллекции элементов. Если параметров много, как, например, параметров вывода, ссылка на параметр возвращается методом НайтиЗначениеПараметра().
В приведенном примере задаются значения параметров начала и окончания отчетного периода как начало года и конец месяца, значение параметра вывода ВыводитьОтбор установлено в положение Нет, а также задается признак использования этих параметров в отчете. Этот код следует расположить в процедуре открытия отчетной формы перед формированием отчета (листинг 5.43).
475
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Листинг 5.43. Программная работа
с параметрами схемы компоновки данных
ПараметрДанныхНачалоПериода - КомпоновщикНастроек . Настрой ки. Параметр ы Данных .Элементы [0J;
ПараметрДанныхНачалоПериода .Значение - НачалоГода(РабочаяДата); ПараметрДанныхНачалоПериода. Использование = Истина;
ПараметрДанныхКонецПериода » КомпоновщикНастроек
.Настройки.ПараметрыДанных.Элементы[1];
ПараметрДанныхКонецПериода-Значение = КонецМесяца(РабочаяДата): ПараметрДанныхКонецПериода.Использование - Истина;
ПараметрыВывода - КомпоновщикНастроек.Настройки.ПараметрыВывода;
ПараметрВыводОтбора = ПараметрыВывода
.НайтиЗначениеПараметра(Новый
ПараметрКомпоновкиДанных("ВыводитьОтбор”));
ПараметрВыводОтбора.Использование = Истина;
ПараметрВыводОтбора.Значение - ТипВыводаТекстаКомпоновкиДанных .Не Выводить;
Настройки - КомпоновщикНастроек.Настройки;
ВНИМАНИЕ!
Последняя строчка кода необходима, чтобы компоновка проводилась с измененными настройками!
Заметим, что названия некоторых параметров вывода не совпадают с названиями в окне настроек схемы компоновки данных. Список имен параметров для программного использования можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Настройки компоновки данных - ЗначенияПараметровВыводаКомпоновкиДанных.
476
Глава 5. Справочник разработчика
Редактирование стандартных настроек
Стандартные настройки - это настройки, которые делает разработчик в схеме компоновки данных. Средствами встроенного языка можно получить и изменить стандартные настройки схемы компоновки данных. Более подробно этот процесс описан в 4-й главе (пример 11 на стр. 267). В приведенном примере создается группировка по полю Номенклатура и полю Период и создается Автополе для этой группировки. Затем в общий список выбранных полей добавляется поле Цена (листинг 5.44).
Листинг 5.44. Процедура программной установки настроек
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ГруппировкаНоменклатура-Настройки.Структура.Добавить(Тип("Группировка КомпоновкиДанных"));
ГруппировкаНоменклатура. Использование = Истина;
ПолеНоменклатура = ГруппировкаНоменклатура.ПоляГруппировки .Элементы .Добавгить(Тип(”ПолеГруппировкиКомпоновкиДанных"));
ПолеНоменклатура.Ислользование - Истина;
ПолеНоменклатура.Поле- Новый ПолеКомпоновкиДанных("Номенклатура*);
ПолеПериод - ГруппировкаНоменклатура-ПоляГруппировки
.Элементы Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеПериод.Использование = Истина;
ПолеПериод.Поле - Новый ПолеКомпоновкиДанных("Период");
ВыбранныеПоляДляНоменклатуры - ГруппировкаНоменклатура
. ВыборЗлементы .Добавить( Тип("АвтоВыбранноеПоле КомпоновкиДанных"));
ВыбранныеПоляДляНоменклатуры.Использование = Истина;
ВыбранныеПоля - Настройки.Выбор.Элементы
.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование « Истина;
ВыбранныеПоля.Заголовок - "Цена";
ВыбранныеПоля.Поле = Новый ПолеКомпоновкиДанных("Цена");
477
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Редактирование настроек схемы компоновки
Стандартные настройки схемы компоновки могут изменяться пользователем в режиме 1С:Предприятие. Средствами встроенного языка можно получить и изменить эти настройки. В приведенном примере создается отбор по номенклатуре из группы Комплектующие и отключается вывод информации об отборе (листинг 5.45).
Листинг 5.45. Процедура программной установки настроек
Настройки - ОбъектОтчета.КомпоновщикНастроек.Настройки
ЭлементОтбора = Настройки.Отбор.Элементы
.Добавить(Тип(”ЭлементОтбораКомпоновкиДанных"));
ЗлементОтбора.ЛевоеЗначение = Новый
ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии; ЭлементОтбора.ПравоеЗначение = Справочники.Номенклатура
.НайтиПоНаимено8анию("Комплектующие");
ПараметрВывода = Настройки. ПараметрыВывода .НайтиЗначениеПараметра(Новый Параметр КомпоновкиДанных("ВыводитьОтбор"));
ПараметрВывода.Использование = Истина?
ПараметрВывода.Значение-ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
Вывод отчета средствами встроенного языка
После того как установлена схема компоновки данных и ее настройки, можно программно сформировать и вывести отчет (листинг 5.46).
Листинг 5.46. Программное формирование отчета
Процедура СформироватьОтчет() Экспорт
// В этот объект помещается информация о расшифровке данных. ДанныеРасшифровки - Новый ДанныеРасшифровкиКомпоновкиДанных;
478
Глава 5. Справочник разработчика
Ц Формирование макета компоновки данных //с помощью компоновщика макета.
КомпоновщикМакета «= Новый КомпоновщикМакетаКомпоновкиДанных;
// В макет компоновки передаются
// СхемаКомпоновкиДанных, ее Настройки
// и ДанныеРасшифровки для заполнения информации о расшифровке.
МакетКомпоновки = КомпоновщикМакета .Выполнить(СхемаКомпоновкиДанных , Настройки, ДанныеРасшифровки);
// Выполнение компоновки данных с помощью процессора компоновки. ПроцессорКомпоновкиДанных« Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,
, ДанныеРасшифровки);
// Очистка поля табличного документа - Результат.
ЭлементыФормы.Результат.0чистить();
ДокументРезультат = ЭлементыФормы.Результат;
// Вывод результатов компоновки в табличный документ.
ПроцессорВывода = Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Система компоновки данных позволяет выводить результат компоновки данных в результирующий документ. Для этого у процессора вывода реализован метод Вывести(), в качестве параметра которому передается процессор компоновки данных. В приведенном выше примере результат выводится в элемент формы - поле табличного документа. В следующем примере результат компоновки выводится не в отчетную форму, а в новый табличный документ (листинг 5.47).
Листинг 5.47. Вывод отчета в табличный документ
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода • Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент:
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
479
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Вывод отчета в дерево значений, таблицу значений для дальнейшей программной обработки
Результат компоновки можно использовать для дальнейшей программной обработки и выводить таблицу значений или дерево значений. Для этого предназначен объект Процес-сорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗна-чений. Метод УстановитьОбъект() является аналогом метода УстановитьДокумент(). Если метод УстановитьОбъект() не был вызван, результат будет выведен в таблицу значений.
Элементы результата компоновки могут быть получены при помощи процессора компоновки данных либо сформированы любыми другими средствами.
В приведенном примере результат компоновки данных выводится в дерево значений - переменную ДеревоРезуль-тата (листинг 5.48).
Листинг 5.48. Вывод отчета в дерево значений
КомпоновщикМакета => Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных * КомпоновщикМакета
.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанных
|	ДляКоллекцииЗйян$й»(Й^
ПроцессорКомпоновкиДанных» Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициал изировать(МакетКомпоновкиДанных): ПроцессорВывода  Новый ПроцессорВыводаРезульгатаКомпоновки
ДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
480
Глава 5. Справочник разработчика
При выводе результата компоновки в таблицу или дерево значений существуют следующие ограничения:
•	В настройках должны присутствовать только группировки и детальные записи. Использование таблиц, диаграмм и вложенных отчетов не допускается.
•	Все папки, указанные в выбранных полях, игнорируются.
•	Не используется условное оформление, а также оформление для поля, указанное в схеме компоновки данных.
Из параметров вывода используются только следующие:
•	Расположение общих итогов по вертикали.
•	Тип заголовка полей.
•	Количество записей.
•	Процент записей.
•	Предопределенные макеты не используются.
Исполнение отчета
Каждый элемент системы компоновки данных имеет собственное декларативное описание, возможность программного доступа и возможность сериализации в/из XML. Такой подход позволяет гибко управлять различными этапами выполнения отчета.
XML-сериализация - это процесс преобразования данных 1С:Предприятия 8 в последовательность данных формата XML, и наоборот, преобразование последовательности данных формата XML в данные 1С:Предприятия 8, если существует подходящий тип данных.
481
Разработка сложных отчетов в 1 (^Предприятии 8. Система компоновки данных
Исполнение частей отчета
С помощью механизма сериализации различные этапы компоновки данных могут быть выполнены на разных компьютерах.
В приведенном примере схема компоновки данных сериализуется в строку XML (листинг 5.49).
Листинг 5.49. Сериализация схемы компоновки данных в строку XML
ЗаписьХМС = Новый ЗаписьХМС;
ЗаписьХМС.УстановитьСтроку();
СериализаторХОТО.ЗаписатьХМЦЗаписьХМС,СхемаКомпоновкиДанных);
СтрокаХМС * ЗаписьХМЬЗакрыть();
Макет компоновки, сгенерированный на основе схемы компоновки данных также может быть сериализован в строку XML (листинг 5.50).
Листинг 5.50. Сериализация макета компоновки данных в строку XML
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;' МакетКомпоновки-КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных ,СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ЗаписьХМС - Новый ЗаписьХМС;
ЗаписьХМС.УстановитьСтроку();
СериализаторХОТО.ЗаписатьХМЦЗаписьХМС, МакетКомпоновки);
СтрокаХМС =• ЗаписьХМС.Закрыть();
Затем объекты компоновки данных могут быть сериализованы из строки XML, которая передается в качестве параметра в функцию чтения XML (листинг 5.51).
Листинг 5.51. Сериализация объектов компоновки данных из строки XML
ЧтениеХМЕ = Новый ЧтениеХМЕ;
Чтен иеХМ Е.Уста н ов итьСтроку(Стро каХМ L);
СериализаторХ0Т0,ПрочитатьХМЕ(ЧтениеХМЕ);
482
Глава 5. Справочник разработчика
Элементы результата компоновки данных также могут быть сериализованы в строку XML (листинг 5.52).
Листинг 5.52. Сериализация элементов результата компоновки данных в строку XML
ЗаписьХМЕ = Новый ЗаписьХМЕ;
ЗаписьХМ Е.УстановитьСтроку();
ЗаписьХМЕ.ЗаписатьНачалоЭлемента("аггау");
ПроцессорКомпоновки - Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
Пока Истина Цикл
ЗлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЗлементРезультата - Неопределено Тогда
Прервать;
Иначе
СериализаторХОТО.ЗаписатьХМЦЗаписьХМЦ ЗлементРезультата);
КонецЕсли;
КонецЦикла;
ЗаписьХМЕ.ЗаписатьКонецЭлемента();
СгрокаХМЕ  ЗалисьХМЕ.Закрыть()*
Затем элементы результата компоновки данных могут быть сериализованы из строки XML в массив (листинг 5.53).
Листинг 5.53. Сериализация элементов результата
компоновки данных из строки XML
ЧтениеХМЕ - Новый ЧтениеХМЕ;	_____
ЧтениеХМЕ.УстановитьСтроку(СтрокаХМЕ);
Массив - Новый Массив;
//Считаем элемент начала массива.
ЧтениеХМ L. П рочитать();
// Считаем начало первого элемента.
ЧтениеХМЕ.Прочитать();
// Пока не прочитан конечный элемент.
Пока ЧтениеХМЕЛипУзла «>ТипУзлаХМЕ.КонецЭлемента Цикл
Значение - СериализаторХОТО.ПрочитатьХМЕ(ЧтениеХМЕ);
Массив.Добавить(Значение);
КонецЦикла;
Возврат Массив;
483
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Для примера рассмотрим различные варианты компоновки отчета:
•	на сервере 1 С: Пред приятие;
•	на внешней информационной базе;
•	через Web-сервис.
Для решения этой задачи создадим новый объект конфигурации Обработка с именем СериализацияСКД. Создадим основную форму обработки. Откроем эту форму и добавим в нее элемент управления - Поле табличного документа и дадим ему имя Результат.
Затем создадим реквизиты обработки для хранения информации о параметрах внешнего соединения и соединения через Web-сервис:
•	ИмяПользователяВнешнегоСоединения (тип - Строка, длина - 256).
•	ПарольПользователяВнешнегоСоединения (тип - Строка, длина - 256).
•	ФайлВнешнегоСоединения (тип - Строка, длина - 256).
•	ИмяБазыНаСервереВнешнегоСоединения (тип - Строка, длина - 256).
•	СерверВнешнегоСоединения (тип - Строка, длина - 256).
•	иРЬОписанияУА/еЬСервиса (тип - Строка, длина - неограниченная).
Добавим в форму соответствующие поля ввода, для которых эти реквизиты являются источниками данных. Добавим поясняющие надписи для полей ввода.
Затем создадим еще один реквизит обработки ВариантБа-зыВнешнегоСоединения (тип - Число, длина - 1). В нем будет
484
Глава 5. Справочник разработчика
храниться выбранный режим компоновки данных. Добавим в форму переключатели для выбора варианта соединения:
•	Получать данные из текущей информационной базы (первый в группе, данные ВариантБазыВнешнегоСоедине-ния, выбираемое значение - 0).
•	Получать данные из внешней файловой информационной базы (выбираемое значение - 1).
•	Получать данные из внешней серверной информационной базы (выбираемое значение - 2).
•	Получать данные из внешней базы через Web-сервис (выбираемое значение - 3).
В результате форма обработки примет вид (рис. 5.250).
Рис. 5.250. Диалог формы
485
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В модуле формы по умолчанию создан обработчик события нажатия на кнопку Выполнить. Заполним эту процедуру (листинг 5.54).
Листинг 5.54. Процедура обработчика события нажатия кнопки «Выполнить»
Процедура ВыполнитьНажатие(Кнопка)
//Очистим результат.
ЭлементыФормы.Результат.0чистить();
// Получим схему.
СхемаКомпоновкиДанных * Отчеты.ОтчетПоСистемнымБлокам
.ПолучитьМакет(йОсновнаяСхемаКомпоновкиДанныхя);
// Сгенерируем макет компоновки данных при помощи компоновщика макета. КомпоновщикМакета * Новый КомпоновщикМакетаКомпоновкиДаиных:
ДанныеРасшифровки » Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки « КомпоновщикМакета
.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных .НастройкиПоУмолчанию, ДанныеРасшифровки);
В процедуре ВыполнитьНажатие() мы очищаем область результата, получаем основную схему компоновки отчета ОтчетПоСистемнымБлокам, генерируем макет компоновки данных при помощи компоновщика макета.
Далее в зависимости от выбранного режима компоновки, хранящегося в реквизите ВариантБазыВнешнегоСоединения, выполняем компоновку данных на сервере, во внешнем соединении или через Web-сервис и получаем результат в виде массива элементов результата (листинг 5.55).
Листинг 5.55. Компоновка данных на сервере, во внешнем соединении, через Web-сервис
Если ВариантБазыВнешнегоСоединения = 0 Тогда
// Выполним отчет на сервере и получим результат
// в виде массива элементов результата.
МассивЭлементовРезультата «ФункцииДляОтчетов.ВыполнитьКомпоновку
НаСервере(МакетКомпоновки, ДанныеРасшифровки),
486
Глава 5. Справочник разработчика
ИначеЕспи ВариантБазыВнешнегоСоединения о 3 Тогда
// Во внешнем соединении создадим параметры соединения.
ПараметрыСоединения - Новый Структура;
Если ВариантБазыВнешнегоСоединения «1 Тогда
ПараметрыСоединения.Вставить("Н1е*,ФаилВнешнегоСоединения);
Иначе
ПараметрыСоединения.Вставить("5плг“(СерверВнешнегоСоединения);
ПараметрыСоединения.Вставить("РеГ
, ИмяБазыНаСервереВнешнегоСоединения);
КонецЕсли;
ПараметрыСоединения.Вставить("изг"
, ИмяПользователяВнешнегоСоединения);
ПараметрыСоединения. Вставить("РикГ
,ПарольПользователяВнешнегоСоединения);
// Создадим соединение.
Соединение = ФункцииДляОтчетов
.СоздатьСоединение(ПараметрыСоединения);
// Выполним отчет во внешнем соединении и получим результат // в виде массива элементов результата.
МассивЭлементовРезультата = ФункцииДляОтчетов
.ВыполнитьКомпоновку
ВоВнеш немСоединении(Соеди нен не, МакетКомпоновки, ДанныеРасшифровки);
Иначе
// Через Web-сервис.
^Определения » Новый М50пределения(0Р10писанияМеЬСервиса ,ИмяПользователяВнешнегоСоединения ,ПарольПользователяВнешнегоСоединения);
WSnpoKCH - Новый WSnpoKCH(WSOnpefleneHMfl, "http://v8.1c.ru/8.1/ demo-base", "КомпоновкаДанных", "КомпоновкаДанныхЗоар");
ДОБПрокси.Пользователь = ИмяПользователяВнешнегоСоединения; ДОБПрокси.Пароль = ПарольПользователяВнешнегоСоединения;
МассивЭлементовРезультата = ФункцииДляОтчетов
.ВыполнитьКомпоновкуЧерезМеЬСервис^БПрокси. МакетКомпоновки, ДанныеРасшифровки);
КонецЕсли;
487
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Далее создаем и инициализируем процессор вывода результата и в цикле выводим элементы результата из полученного массива в элемент формы Результат (листинг 5.56).
Листинг 5.56. Вывод элементов результата в табличный элемент ......
Ц Создадим и инициализируем процессор вывода результата.
ПроцессорВывода • Новый ПроцессорВыводаРезультатаКомпоновки ДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
//Обозначим начало вывода.
ПроцессорВывода.НачатьВыводО;
// Основной цикл вывода отчета.
Для Каждого ЗлементРезультата Из МассивЭлементовРезультата Цикл
И Выведем элемент при помощи процессора вывода.
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
// Обозначим завершение вывода.
ПроцессорВывода.ЗакончитьВыводО;
КонецПроцедуры
В случае компоновки во внешнем соединении, исходя из значений реквизитов обработки, заполняются параметры соединения и устанавливается соединение. Для этого используется функция СоздатьСоединение() общего модуля ФункцииДляОт-четов.
В случае компоновки через Web-сервис создается объект WSПрокси с его описанием, и затем используется операция Web-сервиса ВыполнитьКомпоновку().
Для выполнения разных режимов компоновки используются функции общего модуля ФункцииДляОтчетов Вы-полнитьКомпоновкуНаСервере(), ВыполнитьКомпоновкуВоВне-шнемСоединении(), BbinonHMTbKoMnoHOBKy4epe3WebCepBnc() (листинг 5.57).
488
Глава 5. Справочник разработчика
Листинг 5.57. Процедуры общего модуля «ФункцииДляОтчетов»
// Функция выполняет компоновку во внешнем соединении.
// Возвращается результат компоновки.
Функция ВыполнитьКомпоновкуВоВнешнемСоединении(Соединение
, МакетКомпоновки, ДанныеРасшифровки) Экспорт Если ДанныеРасшифровки » Неопределено Тогда
// Данные расшифровки заполнять не нужно.
// Макет компоновки будем передавать в виде строки.
Результат = Соединение.ФункцииДляОтчетовСервер
.ВыполнитьКомпоновкуСтрока(ФункцииДляОтчетов
ЗначениеВСтрокуХМЦМакетКомпоновки), Неопределено);
< Иначе:
//Данные расшифровки заполнять нужно.
// Макет компоновки и данные расшифровки
// будем передавать.® виде строки.
Результат - Соединение.ФункцииДляОтчетовСервер
.ВыполнитьКомпоновкуСтрока(ФункцииДляОтчетов
.ЗначениеВСтрокуХМЦМакетКомпоновки)
, ФункцииДляОтчетов
ЗначениеВСтрокуХМЦДанныеРасшифровки));
// Прочитаем данные расшифровки из строки
ДанныеРасшифровки = ФункцииДляОтчетов
ЗначениеИзСтрокиХМ1(Результат.ДанныеРасшифровки);
КонецЕсли;
// Прочитаем результат из строки.
Возврат ФункцииДляОтчетов.МассивИзСтрокиХМЕ(Результат.Результат);
КонецФункции
// Функция выполняет компоновку через Web-сервис.
// Возвращается результат компоновки.
Функция BbtnonHHTbKoMnoHQBKy4epe3WebCepBHc(WSnpoKCM, МакетКомпоновки
, ДанныеРасшифровки) Экспорт
Сериализатор - Новый СериализаторХ0Т0(М5Прокси.ФабрикаХ0Т0);
МакетКомпоновкиХОТО = СериализаторЗаписатьХОТО(МакетКомпоновки);
ДанныеРасшифровкиХОТО- Сериализатор. ЗаписатьХОТО(ДанныеРасшифровки);
РезультатХОТО = М5Прокси.ВыполнитьКомпоновку(МакетКомпоновкиХ0Т0 .ДанныеРасшифровкиХОТО);	, .
Результат - Новый Массив(РезультатХ0ТО.Элемент.Количество());
489
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Индекс = 0;
Для Каждого Элемент Из РезультатХОТО.Элемент Цикл
Результат[Индекс] - Сериализатор.ПрочитатьХОТО(Элемент);
Индекс - Индекс +1;
КонецЦикла;
ДанныеРасшифровки = Сериал изатор
.ПрочитатьХОТО(ДанныеРасшифровкиХОТО);
Возврат Результат;
КонецФункции
// Функция выполняет компоновку на сервере 1С:Предприятия.
// Возвращается результат компоновки.
Функция ВыполнитьКомпоновкуНаСервере(МакетКомпоновки
, ДанныеРасшифровки) Экспорт
Если ДанныеРасшифровки = Неопределено Тогда
// Данные расшифровки заполнять не нужно.
// Макет компоновки будем передавать в виде хранилища значения.
Результат - ФункцииДляОтчетовСервер ,ВыполнитьКомлоновкуХранилище(Новый Хранил ищеЗначениЯ (МакетКомпоновки), Неопределено);
Иначе
// Данные расшифровки заполнять нужно.
// Макет компоновки и данные расшифровки
// будем передавать в хранилище значений.
Результат = ФункцииДляОтчетовСервер .ВыполнитьКомпоновкуХранилище(Новый ХранилищеЗначения(МакетКомпоновки) , Новый ХранилищеЗначения(ДанныеРасшифровки));
// Прочитаем данные расшифровки из хранилища значения, ДанныеРасшифровки = Результат.ДанныеРасшифровки.Получить();
КонецЕсли;
// Прочитаем результат из хранилища.
Возврат Результат.Результат.Получить();
КонецФункции
Для выполнения компоновки на сервере и во внешнем соединении используются функции общего модуля ФункцииДляОтчетовСервер ВыполнитьКомпоновкуХранилище(), ВыполнитьКомпоновкуСтрока(), ВыполнитьКомпоновкуВМас-сив()(листинг 5.58).
490
Глава 5. Справочник разработчика
Листинг 5.58. Процедуры общего модуля «ФункцииДляОтчетовСервер»
// Функция выполняет компоновку и помещает элементы результата в массив.
// Возвращается массив элементов результата.
Функция ВыполнитьКомпоновкуВМассив(МакетКомпоновки
, ДанныеРасшифровки) Экспорт
// Создадим массив, в который будем помещать Элементы результата МассивЭлементовРезультата = Новый Массив;
// Создадим и инициализируем процессор компоновки.
ПроцессорКомпоновки - Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновКи,
, ДанныеРасшифровки, Истина);
// Основной цикл вывода отчета.
Пока Истина Цикл
// Получим следующий элемент результата компоновки. ЗлементРезультата = ПроцессорКомпоновки.Слёдующий();
Если ЗлементРезультата - Неопределено Тогда
// Следующий элемент не получен - заканчиваем цикл вывода. Прервать;
Иначе
//Элемент получен - выведем его при помощи процессора вывода.
МассивЭлементовРезультата.Добавить(ЭлементРезультата);
КонецЕсли;
КонецЦикла;
Возврат МассивЭлементовРезультата;
КонецФункции
// Функция выполняет компоновку.
// Результат возвращается в виде строки, содержащей внутреннее представление
// массива элементов результата компоновки данных.
Функция ВыполнитьКомпоновкуСтрока(МакетКомпоновкиСтрока
, ДанныеРасшифровкиСтрока) Экспорт
Перем ДанныеРасшифровки;
// Загрузим макет компоновки из переданной строки.
МакетКомпоновки - ФункцииДляОтчетов
.ЗначениеИзСтрокиХМЦМакетКомпоновкиСтрока):
Если ДанныеРасшифровкиСтрока <> Неопределено Тогда
491
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
// Если передали расшифровку, получим ее из строки.
ДанныеРасшифровки = ФункцииДляОтчетов
.ЗначениеИзСтрокиХМЦДанныеРасшифровкиСтрока); КонецЕсли;
// Создадим структуру результата.
Результат = Новый Структура("Результат, ДанныеРасшифровки");
Если ДанныеРасшифровки - Неопределено Тогда
//Данные расшифровки не передали.
Результат.Результат = ФункцииДляОтчетов
.МассивВСтрокуХМЦВыполнитьКомпоновкуВ
Массив(МакетКомпоновки, Неопределено));
Иначе
//Данные расшифровки передали.
Результат.Результат = ФункцииДляОтчетов
.МассивВСтрокуХМЦВыполнитьКомпоновкуВ
Массив(МакетКомпоновки, ДанныеРасшифровки));
// Преобразуем данные расшифровки в строку.
Результат.ДанныеРасшифровки - ФункцииДляОтчетов
.ЗначениеВСтрокуХМЦДанныеРасшифровки);
КонецЕсли;
Возврат Результат;
КонецФункции
f Функция выполняет компоновку.
Результат возвращается в виде хранилища значений,
// содержащего массив элементов результата компоновки данных.
Функция ВыполнитьКомпоновкуХранилище(МакетКомпоновкиХранилище
, ДанныеРасшифровкиХранилище) ЭкспортПерем ДанныеРасшифровки;
//Загрузим макет компоновки из переданного хранилища.
МакетКомпоновки = МакетКомпоновкиХранилище.Получить();
Если ДанныеРасшифровкиХранилище « Неопределено Тогда
И Если передали расшифровку, получим их из хранилища.
ДанныеРасшифровки = ДанныеРасшифровкиХранилище.Получить(); • КонецЕсли;
,	*	. I
// Создадим структуру результата.
Результат - Новый Структура("Результаг, ДанныеРасшифровки");
Если ДанныеРасшифровки - Неопределено Тогда
492
Глава 5. Справочник разработчика
//Данные расшифровки не передали, Результат.Результат - Новый
Хранили щеЗначения(ВыполнитьКомпоновкуВ Массив(МакетКомпоновки, Неопределено));
Иначе
//Данные расшифровки передали.
Результат.Результат - Новый
Хранил ищеЗначения(ВыполнитьКомпоновкуВ Массив(МакетКомпоновки, ДанныеРасшифровки));
//Сохраним данные расшифровки в хранилище.
Результат.ДанныеРасшифровки - Новый
ХранилищеЗначения(ДанныеРасшифровки);
КонецЕсли;
Возврат Результат;
КонецФункции
Для сериализации различных элементов компоновки используются функции общего модуля ФункцииДляОтчетов Значе-ниеВСтрокуХМЦ), ЗначениеИзСтрокиХМЦ), МассивВСтро-куХМЦ), МассивИзСтрокиХМЦ) (листинг 5.59).
Листинг 5.59. Процедуры общего модуля «ФункцииДляОтчетов»
// Записать значение в строку XML
Функция ЗначениеВСтрокуХМЦЗначение) Экспорт
// Создадим объект для записи ХМ С.
ЗаписьХМС = Новый ЗаписьХМС;
// Укажем необходимость вывода в строку.
ЗаписьХМС.УстановитьСтроку();
// Выведем значение.
СериализаторХОТО Зап исатьХМ ЦЗаписьХМ L, Значение);
Ц Закончим вывод.
Возврат ЗаписьХМС.Закрыть();
КонецФункции
// Загрузить значение из строки XML.
Функция ЗначениеИзСтрокиХМС(Строка) Экспорт
// Создадим объект для чтения значения.
ЧтениеХМС = Новый ЧтениеХМЕ;
493
Разработка сложных отчетов в 1С:Г1редприятии 8. Система компоновки данных
// Установим строку, из. которой будем читать значение. ЧтениеХМиУстановитьСтроку(Строка);
// Прочитаем значение.
Возврат СериализаторХОТО. ПрочитатьХМЦЧтениеХМС);
КонецФункции
// Записать массив в строку XML, Функция Массив ВСтрокуХМЦ Массив) Экспорт
Ц Создадим объект для записи XML ЗапиСьХМС* Новый ЗаписьХМС;
// Укажем необходимость вывода в строку.
ЗаписьХМ1.УстановитьСтроку();
// Запишем начальный элемент массива.
ЗаписьХМ1.3аписатьНачалоЭлемента("аггау");
// Переберём элементы массива.
Для Каждого Элемент Из Массив Цикл
// Выведем элемент массива.
Сериал изаторХВТО.Зап исатьХМЦЗаписьХМ Ц Эле мент);
КонецЦикла:
// Запишем конечный элемент массива. ЗаписьХМ1.3апйсатьКонецЭлемента():
// Закончим вывод.
Возврат ЗаписьХМ1.3акрыть();
КонецФункции
// Загрузить массив из строки XML
Функция МассивИзСтрокиХМЦСтрока) Экспорт
// Создадим объект для чтения значения.
ЧтениеХМ!. - Новый ЧтениеХМС;
// Установим строку, из которой будем читать значение. ЧтениеХМиУстановитьСтроку(Сгрокв);
И Создадим массив, в который будем считывать.
Массив - Новый Массив!
// Считаем элемент начала массива.
ЧтениеХМС. П рочитать();
494
Глава 5. Справочник разработчика
// Считаем начало первого элемента.
ЧтениеХМ1.Прочитать();
// Пока не прочитан конечный элемент.
Пока ЧтениеХМЕЛипУала оТипУзлаХМЕ.КонецЭлемента Цикл
// прочитаем значение.
Значение = СериализаторХОТО.ПрочитатьХМЦЧтениеХМЬ);
// Поместим считанное значение в массив.
Массив.Добавить(Значение):
КонецЦикла;
Ц Чтение закончено - вернем считанный массив.
Возврат Массив;
КонецФункции
Для выполнения компоновки через Web-сервис в папке Общие создан Web-сервис КомпоновкаДанных, который имеет операцию ВыполнитьКомпоновку() (листинг 5.60).
Листинг 5.60. Функция Web-сервиса «ВыполнитьКомпоновку»
Функция ВыполнитьКомпоновку(МакетКомпоновкиХОТО , ДанныеРасшифровкиХОТО)
МакетКомпоновки » Сериал изаторХОТО.ПрочитатьХОТО(МакетКомпоновкиХОТО); ДанныеРасшифровки * СериализаторХОТО
.ПрочитатьХОТО (ДанныеРасшифровкиХОТО);
МассивРезулыат - ФункцииДляОтчетовСервер
.ВыполнитьКомпоновкуВМассив(МакетКомпоновки, ДанныеРасшифровки);
Результат« ФабрикаХ0Т0.Создать("ЬЦр:/Д8.1с.ги/8.1^ето-Ьа5е" , "РезультатКомпрновки");
Для Каждого Элемент Из МассивРезультат Цикл
Результат .Элеменг.Добавить(СериализаторХ0Т0.3аписатьХ0ТО(Элемент)); КонецЦикла;
Если ДанныеРасшифровки о Неопределено Тогда ДанныеРасшифровкиХОТО - СериализаторХОТО •ЗаписатьХОТО(ДанныеРасшифровки);
КонецЕсли;
Возврат Результат;
КонецФункции
495
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Таким образом, запустив обработку, мы можем выбирать различные варианты соединения. Нажав кнопку Выполнить, мы сгенерируем макет компоновки данных отчета, затем в зависимости от выбранного варианта соединения выполним компоновку данных на сервере текущей информационной базы, во внешнем соединении или через Web-сервис, вернем результат компоновки на клиентскую сторону и выведем отчет. В реальной задаче в зависимости от потребностей отчета, конфигурации системы и т. д. следует программно использовать тот или иной вариант.
496
Глава 6
Культура создания отчетов с использованием системы компоновки данных
Важнейшей особенностью системы компоновки данных является то, что она предоставляет разнообразные возможности для дальнейшей настройки отчета, разработанного на ее основе. Основываясь на стандартных настройках, сделанных разработчиком, в режиме 1С:Предприятие пользователь может перенастраивать отчет по своему усмотрению. Однако здесь разработчику важно понимать, что далеко не у всех пользователей есть время и желание разбираться с настройками отчета. Хотя бы потому, что у них есть масса других деловых обязанностей, и, выполняя отчет раз в месяц, они хотят быстро и легко, не задумываясь, получить требующиеся данные, а не «держать в голове» возможности настройки отчета. Поэтому разработчикам следует придерживаться принципа - «Делать все так, как удобно пользователю!».
Отчет, разработанный с помощью системы компоновки данных, должен быть предельно прост, лаконичен и удобен в
497
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
использовании. Для этого он должен удовлетворять нескольким требованиям:
•	Отчет должен содержать начальные настройки, чтобы при его выполнении становилось ясно, какую информацию он показывает. Начальные настройки должны быть простыми, чтобы формирование отчета выполнялось быстро.
•	При вызове из меню отчет должен сразу же формироваться в соответствии с начальными настройками. Иначе некоторые пользователи будут в недоумении смотреть на пустое окно отчета и думать, что же им делать? Чтобы этого не случилось, нужно разработать для отчета собственную отчетную форму и при ее открытии программно выполнить отчет. Можно также задать значения настроек по умолчанию, например, установить период отчета - Этот месяц. Тогда даже у пользователя, не знакомого с отчетом, сразу будет представление о нем. Примеры выполнения отчета без нажатия кнопки Сформировать и установки значений настроек были рассмотрены в 4-й главе - Отчет по системным блокам (пример 4 на стр. 153) и Сборка системных блоков (пример 7 на стр. 188).
•	Все необходимые настройки для формирования отчета должны находиться в том же окне, куда выводится результат. Пользователь должен иметь возможность ввести настройки непосредственно в отчетной форме перед формированием отчета. Для этого нужно разработать для отчета собственную отчетную форму и расположить на ней элементы управления для ввода настроек, связанные с настройками системы компоновки данного отчета. Здесь следует исходить из принципа, что в отчетной форме нужно размещать только доступные и удобные в использовании элементы настроек, которые действительно необходимы пользователю в первую очередь. Как правило, это начало и
498
Глава 6. Культура создания отчетов с использованием системы компоновки данных конец отчетного периода. Добавление остальных настроек, сортировки, отбора и т. п. нужно согласовывать с пользователем. Иначе отчетная форма может показаться ему сложной и непонятной, и у него возникнут справедливые вопросы и претензии к разработчику. Примеры размещения настроек в отчетной форме были рассмотрены в 4-й главе - Отчет по системным блокам (пример 2 на стр. 131), Продажи номенклатуры (пример 5 на стр. 156) и Сборка системных блоков (пример 7 на стр. 188).
•	Необходимо понимать, что окно настроек, вызывающееся из отчетной формы в режиме 1С:Предприятие, предназначено лишь для самого разработчика и очень опытного пользователя. Основная масса пользователей, скорее всего, работать с ним не будет, так как в нем находится много непонятной для неподготовленного пользователя информации, и это его может напугать. В то время как пользователю нужно просто задать дату отчета, он видит большое количество других настроек. Это дает обратный эффект, и в результате пользователь не может сделать даже самого простого действия. Поэтому лучше разрабатывать свою упрощенную форму настроек и вызывать ее по нажатию кнопки Настройки. А «продвинутым» пользователям, желающим осуществить более сложную настройку отчета, можно предоставить окно стандартных (полных) настроек, вызывающееся по кнопке Настройки для экспертов.
•	Нужно предусмотреть простой механизм сохранения настроек, сделанных пользователем.
Итак, при разработке отчетов могут быть использованы следующие варианты пользовательского интерфейса в зависимости от сложности отчета и уровня подготовки пользователя:
•	Самый простой случай, когда ничего настраивать не надо. Это случается достаточно редко. Например, при вызове
499
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
отчетов в виде простых списков. Чтобы не заставлять пользователя нажимать кнопку Сформировать, нужно программно формировать отчет при открытии отчетной формы.
•	Наиболее распространенный вариант, когда все жизненно важные настройки, такие как отчетный период, находятся прямо на форме отчета.
•	Для отчетов, требующих большого количества настроек и рассчитанных на относительно подготовленного пользователя, на форму выносятся только самые часто используемые настройки. А для редактирования всех остальных создается упрощенная форма настроек, которая назначается основной для отчета и вызывается по кнопке Настройки.
•	Вариант для «продвинутых» пользователей, когда на форме располагается кнопка с «говорящим» названием, например Настройки для экспертов. По этой кнопке вызывается стандартная форма настроек, позволяющая делать полную настройку отчета.
Рис. 6.1. Создание основной формы настроек
500
Глава 6. Культура создания отчетов с использованием системы компоновки данных
Продемонстрируем пример разработки собственной упрощенной формы настроек на основе отчета Сборка системных блоков. Откроем этот отчет в конфигураторе и на закладке Формы создадим для него новую основную форму настроек, нажав на значок лупы справа от указанного поля (рис. 6.1).
В открывшемся конструкторе форм создадим форму типа Форма настроек отчета с именем ФормаНастройки (рис. 6.2).
Рис. 6.2. Создание основной формы настроек
В нижней половине диалога формы настроек находится элемент управления ПанельНастройкиЭлемента. Выделим его и перейдем на закладку Выбранные поля. Вызовем контекстное меню правой кнопкой мыши и удалим эту страницу (рис. 6.3).
Аналогично удалим закладку Поля группировки. Мы сделали это, так как не хотим, чтобы пользователь мог менять состав выбранных полей или полей группировок отчета. Далее удалим закладки Параметры данных и Сортировка, так как поля для ввода этих настроек уже есть в отчетной форме.
501
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 6.3. Удаление ненужных закладок формы настроек отчета
В верхней половине диалога формы настроек находится элемент управления Структура. Выделим его и откроем диалог его свойств. Снимем флаг у свойства Доступность. Тем самым мы сделаем недоступной для изменения иерархическую структуру отчета (рис. 6.4).
Свойства Табличное поле	¥ X
Основные:
Имя | Структура
*
КомпоновщикНастроек.Настбойки |.>.| ........................
Данные
ТипЗначения НастройкиКомпоновкиДанных
Изменяет Данные	□
ПропускетьПриВводе Q ПервыйВГруппе	□
Видимость	[*j
АэтоКонгекстноеМеню Е КонтекстноеМеню | Отсутствует
Рис. 6.4. Установка недоступности для изменений структуры отчета
502
Глава 6. Культура создания отчетов с использованием системы компоновки данных
Запустим отчет на исполнение в режиме 1С:Предприятие. Мы видим, что отчет формируется сразу же при открытии и период отчета задан по умолчанию. При нажатии кнопки Настройки вызывается разработанная нами форма настроек с ограниченным числом закладок (Отбор, Условное оформление, Пользовательские поля, Другие настройки) и недоступной для изменения структурой элементов отчета (рис. 6.5).
Рис. 6.5. Форма настроек отчета в режиме «1С:Предприятие»
Вернемся в конфигуратор. Обратите внимание, что разработанная нами форма по умолчанию становится основной формой настроек, которая будет вызываться при нажатии на кнопку Настройки в форме отчета. Если форм несколько, можно установить в качестве основной другую форму, нажав кнопку выбора. Если, наоборот, удалить выбранную строку, то при нажатии на кнопку Настройки будет вызываться автоматически сгенерированная платформой форма настроек (рис. 6.6).
503
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 6.6. Установка основной формы настроек
Теперь продемонстрируем пример доработки отчета Продажи номенклатуры в соответствии с изложенными выше требованиями. Сначала создадим именованный отбор, чтобы при выполнении отчета сразу было понятно, по какому принципу фильтруются записи отчета. Именованное условное оформление, которое мы будем использовать, было создано нами ранее. Откроем схему компоновки данных нашего отчета, перейдем в режим Настройки и на закладке Отбор включим использование отбора, установим Правое значение - Перечисление.ВидыНо-менклатуры.Услуга и зададим Представление отбора - Услуги. Если колонка Представления не видна, нужно раздвинуть окно настроек и нажать кнопку Подробно. Таким образом, теперь при размещении в форме этого элемента настроек пользователю будет выводиться представление отбора, а не его условия, в которых он может запутаться (рис. 6.7).
504
Глава 6. Культура создания отчетов с использованием системы компоновки данных
1етры данных , Выбранные поля | Отбор [ Сортироека Условное оформление  Пользовательские поля Лруие настройки
Рис. 6.7. Создание именованного отбора
Ранее (4-я глава, пример 5 на стр. 156) мы уже разрабатывали для этого отчета форму для ввода пользователем таких настроек, как параметры данных, отбор и условное оформление. Они были добавлены в форму в виде элементов управления типа Табличное поле, связанных с настройками системы компоновки данных. Однако такие элементы управления, особенно при наличии командной панели, предполагают добавление или удаление новых параметров, отбора, сортировки и т. п. Неподготовленному пользователю сложно во всем этом разобраться, да и по большому счету не нужно. Максимум, что он должен сделать, - ввести период отчета, включить или выключить использование отбора, оформления или сортировки. Поэтому мы разработаем для нашего отчета другую отчетную форму, в которой элементы настроек вводятся непосредственно в Поля ввода, используется именованное представление отбора и условного оформления, при открытии формы задается период отчета и автоматически формируется отчет.
Откроем отчет ПродажиНоменклатуры и на закладке Формы нажмем кнопку Добавить. В открывшемся конструкторе форм создадим форму типа Форма отчета с именем ФормаОтчета1 и установим флаг Назначить форму основной (рис. 6.8).
505
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Рис. 6.8.
Создание основной формы отчета
Откроем форму отчета, растянем ее, сдвинем вниз поле Результат и добавим надписи для пояснения расположения элементов настроек - Период отчета, Отбор и Оформление. Затем выполним пункт основного меню Форма - Вставить элемент управления. Последовательно добавим в форму два элемента управления - ПолеВвода с именами ДатаНача-ла (подпись - «С:», тип значения - Дата) и ДатаОкончания (подпись - «По:», тип значения - Дата), рис. 6.9.
Рис. 6.9. Добавление в форму полей ввода 506
Глава 6. Культура создания отчетов с использованием системы компоновки данных
В них будут отражаться даты начала и окончания отчетного периода. Расположим эти элементы управления в форме рядом с надписью Период отчета. Затем вызовем диалог свойств каждого поля ввода, найдем событие ПриИзменении() и нажмем кнопку открытия со значком лупы справа от него. В модуле формы будет автоматически создан шаблон обработчика события ПриИзменении(), которое будет вызываться при изменении этого элемента управления. Позже мы заполним эти процедуры (рис. 6.10).
Рис. 6.10. Создание обработчиков события ПриИзменении() полей ввода
Аналогично добавим в форму еще два поля ввода с именами ПредставлениеОтбора без подписи и ПредставлениеОфор-мления без подписи. Здесь будут выводиться представления отбора и оформления. Поместим их рядом с соответствующими надписями. Затем добавим в форму еще два элемента управления - Флажок с именами ИспользованиеОтбора и ИспользованиеОформления (рис. 6.11).
РИС. 6.11.
Добавление в форму флажков
507
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
В них будут выводиться признаки использования настроек отбора и оформления. Расположим эти элементы управления в форме рядом с поясняющими надписями. Затем вызовем диалог свойств каждого флажка, найдем событие ПриИзмене-нии() и нажмем кнопку открытия со значком лупы справа от него (рис. 6.10). В модуле формы будет автоматически создан шаблон обработчика события ПриИзменении(), которое будет вызываться при изменении этого элемента управления. Позже мы заполним эти процедуры. В результате диалог формы примет вид (рис. 6.12):
Рис. 6.12. Диалог формы отчета
Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткры-тии() и нажмем значок лупы справа от него (рис. 6.13).
508
Глава 6. Культура создания отчетов с использованием системы компоновки данных
Рис. 6.13. Создание обработчика события ПриОткрытии() формы
В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы. Внесем в него следующий текст (листинг 6.1).
Листинг 6.1. Процедуры модуля формы ПриОткрытии()
Процедура ПриОткрытии()
СхемаКомпоновкиДанных « Отчеты.ПродажиНоменклатуры
.ПолучитьМакет("ОсновнаяСхема КомпоновкиДанных");
Настройки « СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
УстановитьНастройки();
Сформировать Отчет();
КонецПроцедуры
Процедуры, вызывающиеся из нее, УстановитьНастрой-ки() и СформироватьОтчет() расположим в начале модуля (листинг 6.2).
Листинг 6.2. Процедуры модуля формы отчета
перем Настройки
перем ПараметрДанныхНачалоПериода, ПараметрДанныхКонецПериода
, ИменованныйОтбор, УсловноеОформление;
Процедура СформироватьОтчет() Экспорт
Настройки = КомпоновщикНастроек.Настройки;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
509
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
КомпоновщикМакета » Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета .Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных - Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ЭлементыФормы.Резупьтат.0чистить();
ДокументРезультат « ЭлементыФормы. Результат;
ПроцессорВывода = Новый ПроцессорВыводаРезультата
КомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Процедура УстановитьНастройки()
ДатаНачала = НачалоГода(РабочаяДата);
ДатаОкончания = КонецМесяца(РабочаяДата);
ПараметрДанныхНачалоПериода=КомпоновщикНастроек.Настройки .ПараметрыДанных.Элементы[О];
ПараметрДанныхНачалоПериода.Значение « ДатаНачала;
ПараметрДанныхНачалоПериода.Использование = Истина;
ПараметрДанныхКонецПериода - КомпоновщикНастроек.Настройки .ПараметрыДанных.Элементы[1];
ПараметрДанныхКонецПериода.Значение = ДатаОкончания;
ПараметрДанныхКонецПериода.Использование * Истина;
ИменованныйОтбор = КомпоновщикНастроек.Настройки.0тбор.Элементы[0];
ИспользованиеОтбора - ИменованныйОтбор.Использование;
ПредставлениеОтбора - ИменованныйОтбор.Представление;
УсловноеОформление - КоМпоновщикНастроек.Настройки .Условное0формление.3лементы[0];
ИспользованиеОформления - УсловноеОформление.Использование;
Представлен иеОформления - УсловноеОформление.Представление;
ПараметрыВывода = КомпоновщикНастроек.НастройкиЛараметрыВывода;
ПараметрВыводОтбора «• ПараметрыВывода ,НайтиЗначениеПараметра( Новый Параметр КомпоновкиДанных(”ВыводитьОтбор"));
ПараметрВыводОтбора.Использование = Истина;
ПараметрВыводОтбора.Значение - ТипВыводаТекстаКомпоновки Данн ых.НеВыводить;
ПараметрВыводПараметров » ПараметрыВывода .НайтиЗначениеПараметра(Новый ПараметрКомпоновки
510
Глава 6. Культура создания отчетов с использованием системы компоновки данных
Данных("ВыводитьПараметрыДанных"));
ПараметрВыводПараметров.Использование - Истина; ПараметрВыводПараметровЗначение -
ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
Настройки - КомпоновщикНастроек.Настройки;
КонецПроцедуры
Код процедур ПриОткрытии() и СформироватьОтчет() уже знаком нам по предыдущим примерам. В процедуре Устано-витьНастройки() задаются значения начала и окончания отчетного периода, которые отражаются в полях ввода Дата-Начала и ДатаОкончания и передаются в соответствующие параметрынастроексистемыкомпоновкиданныхнашего отчета. А также, исходя из настроек, заполняются элементы управления формы - ПредставлениеОтбора, ИспользованиеОтбора, ПредставлениеОформления, ИспользованиеОформления. Поскольку теперь параметры и отбор отчета явно присутствуют в форме, нет смысла выводить их еще раз. Поэтому мы задали значение НеВыводить для параметров вывода ВыводитьОтбор и ВыводитьПараметрыДанных. Теперь нам нужно заполнить процедуры ПриИзменении() элементов управления, созданные нами ранее (листинг 6.3).
Листинг 6.3. Процедуры модуля формы отчета
Процедура ДатаНачалаПриИзменении(Элемент)
ПараметрДанныхНачалоПериодаЗначение - ДатаНачала;
КонецПроцедуры
Процедура ДатаОкончанияПриИзменении(Элемент)
ПараметрДанныхКонецПериодаЗначение = ДатаОкончания;
КонецПроцедуры
Процедура ИспользованиеОтбораПриИзменении(Элемент)
ИменованныйОтбор.Использование = ИспользованиеОтбора;
КонецПроцедуры
Процедура ИспользованиеОформленияПриИзменении(Элемент)
УсловноеОформление.ИсЛользование = ИспользованиеОформления;
КонецПроцедуры
511
Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных
Как видно из листинга, мы установили, что при изменении дат отчетного периода или признака использования отбора или оформления соответствующие настройки отчета также будут меняться.
В заключение переименуем кнопку Настройки, по которой вызывается стандартная форма настроек, в Настройки для экспертов, предназначенную для опытных пользователей. Выделим в командной панели отчета эту кнопку, вызовем диалог ее свойств и изменим Текст (рис. 6.14).
Рис. 6.14. Установка заголовка кнопки «Настройка»
Запустим отчет на исполнение в режиме 1 (^Предприятие. Мы видим, что все необходимые настройки представлены в доступном виде и расположены непосредственно в отчетной форме. Далее пользователь может изменить период отчета, снять флаг использования у отбора или оформления и переформировать отчет кнопкой Сформировать. Если квалификация позволяет, то пользователь может поэкспериментировать с более сложными настройками отчета, нажав кнопку Настройки для экспертов (рис. 6.15).
512
Глава 6. Культура создания отчетов с использованием системы компоновки данных
Рис. 6.15. Результат отчета
Итак, на наших глазах «отчет становится все лучше, лучше и лучше...» Вот примерно таким и должен быть пользовательский интерфейс отчета для основной массы заказчиков. Все должно быть максимально просто и интуитивно понятно. Таким образом, соблюдение вышеизложенных правил «хорошего тона» при разработке отчетов с помощью системы компоновки данных поможет разработчику зарекомендовать себя как «думающего» и внимательного специалиста. А репутация -залог успеха.
513
Для заметок
КНИГИ И УЧЕБНЫЕ ПОСОБИЯ ПО 1 С:ПРЕДПРИЯТИЮ
Электронный вариант книги можно приобрести на сайте http://online. 1 c.ru
Цена 25 руб.
Электронный вариант книги можно приобрести на сайте http://online. 1 c.ru Цена 150 руб.
М.Г. Радченко
1 С: Предприятие 8.1.
Практическое пособие разработчика. Примеры и типовые приемы (+CD)
Книга позволяет быстро освоить приемы разработки и модификации прикладных решений на платформе «1С:Предприятие 8.1». Отличительной особенностью является изложение материала не «от теории», а «от практики» - разработки настоящего прикладного решения «с нуля». По мере создания конфигурации по принципу «от простого к сложному» читатель знакомится с различными объектами и механизмами системы, ему демонстрируются приемы разработки, даются комментарии по особенностям использования различных объектов. К книге прилагается CD с демонстрационными конфигурациями и вспомогательными файлами, которые используются в примерах.
Издательство «1С-Паблишинг», ISBN 978-5-9677-0614-1 Издательский дом «Питер», ISBN 978-5-91180-813-6 Цена 240 руб.* • Стр. 512 • Код товара4601546041777
240
А.П.Габец, Д.И.Гончаров
1 С: Предприятие 8.1.
Простые примеры разработки (+CD)
Справочное пособие, иллюстрирующее простые примеры разработки алгоритмов на платформе «1 С:Предприятие 8.1». Издание будет полезно начинающим разработчикам, администраторам, у которых на предприятии внедряется система «1С:Предприятие», и продвинутым пользователям, которые хотят самостоятельно дорабатывать прикладные решения. Приведено большое количество практических примеров, сгруппированных по тематике использования.
Книга содержит CD с кодом примеров, описанных в книге. Код примеров представлен в виде HTML-файла, что позволяет просто копировать фрагменты кода в нужное место программного модуля.
Издательство «1С-Паблишинг», ISBN 978-5-9677-0800-8 Издательский дом «Питер», ISBN 978-5-91180-210-3 Цена 240 руб.* • Стр. 383 • Код товара4601546047045
* Внимание! Указаны рекомендованные розничные цены
ПАБЛИШИНГ