УДК ББК 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. Для начинающих разработчиков в книге описывается устройство системы компоновки данных, приводятся простые примеры создания отчетов, снабженные большим количеством иллюстраций и комментариев. Значительная часть книги описывает выполнение практических примеров создания и настройки сложных отчетов. Эти примеры можно использовать для того, чтобы «попрактиковаться» и «набить руку» в создании и модификации отчетов, использующих систему компоновки данных. Для опытных разработчиков книга содержит подробное описание отдельных возможностей системы компоновки данных. Эту часть книги можно использовать в качестве справочного пособия или для более глубокого изучения возможностей механизма. Все примеры, рассматриваемые в книге, содержатся на прилагаемом компакт-диске. Для создания примеров использована платформа 1С:Предприятия версии 8.1.11.67. Книга выпущена под редакцией Максима Радченко. Компьютерная верстка и препресс: Ольга Шестакова. Корректор: Елена Семененко. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Полное или частичное копирование материалов книги без письменного разрешения фирмы «1С-Паблишинг» запрещается. ISBN 978-5-9677-0963-0 © ООО «1С-Паблишинг», 2008. Подписано в печать 19.09.2008. Формат 60x84 1/16. Усл.-печ. л. 32,25. Тираж 5000 экз. Заказ D-3590 Налоговая льгота - общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 - литература учебная. Фирма «1С» 123056, Москва, а/я 64, Селезневская ул., 21. Тел.: (495) 737-92-57, факс: (495) 681-44-07, e-mail: [email protected], URL: http://www.1c.ru Издательство ООО «1С-Паблишинг» 127473, Москва, ул. Достоевского, 1/21, строение 1. Тел.: (495) 681-02-21, факс: (495) 681-44-07, e-mail: [email protected] Отпечатано с оригиналов ООО «1С-Паблишинг». Казанский производственный комбинат программных средств 420044, Казань, ул. Ямашева, 36. Оглавление Предисловие 7 Кому предназначена эта книга 7 Особенности 7 Как читать 8 Структура 9 Что находится на компакт-диске Глава 1. Простой отчет «без программирования» 10 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. Вывод результата в сводную таблицу Глава 4. Примеры разработки отчетов 103 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. Справочник разработчика Общие возможности 4 293 293 Получение итогов по всем датам в выбранном периоде 293 Характеристики 305 Иерархия 318 Связи наборов данных 336 Расчет итогов 340 Расшифровка 344 Использование нескольких схем компоновки для одного отчета 352 Многоязычные отчеты 356 Оглавление Поля 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 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Вывод отчета средствами встроенного языка 478 Вывод отчета в дерево значений, таблицу значений для дальнейшей программной обработки 480 Исполнение отчета 481 Глава 6. Культура создания отчетов с использованием системы компоновки данных 6 497 Предисловие Кому предназначена эта книга Целью автоматизации хозяйственной деятельности любой фирмы в конечном итоге является формирование разнообразной отчетности, удовлетворяющей интересам бухгалтерского, финансового и административного учета. Для решения этой задачи в платформе 1С:Предприятия 8.1 используется специальный механизм построения аналитической отчетности - Система компоновки данных, который рассмотрен в этой книге. Книга предназначена в первую очередь разработчикам, уже имеющим опыт работы в среде 1С:Предприятие 8.1 и желающим освоить работу с системой компоновки данных. Однако тем, кто работает с более ранними версиями платформы - 1С:Предприятие 8.0 или 1С:Предприятие 7.7, эта книга также будет, безусловно, полезна и, возможно, явится для них одним из главных аргументов перехода на версию 8.1. Особенности При создании этой книги использовались различные источники информации: материалы информационно-технологической (ИТС) фирмы «1С»; поддержки материалы конференции партнеров-разработчиков с сайта http://partners.v8.1c.ru; материалы независимых интернет-конференций, посвященных разработке в системе 1С:Предприятие 8. Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Как читать В книге доступно, «шаг за шагом», описана работа с системой компоновки данных. Рассматривается ее общее назначение; на многочисленных примерах, основанных на реальных задачах и построенных по принципу «от простого к сложному», демонстрируются ее разнообразные свойства. Примеры содержатся в демонстрационной информационной базе, прилагающейся к книге. Кроме того, даны ответы на вопросы разработчиков, наиболее часто встречающиеся на партнерских конференциях и других интернет-форумах по данной теме. Книгу можно читать как целиком, так и только отдельные главы, в зависимости от потребностей читателя. Для достаточно опытных разработчиков, а также тех, кто не имеет времени и желания разбираться во всех деталях системы компоновки данных, будет полезна общая теоретическая информация о механизме из второй главы и информация обо всех возможностях и тонкостях системы компоновки из пятой главы (стр. 293). Разработчикам, не знакомым с системой компоновки данных и имеющим мало опыта разработки в 1С:Предприятии, рекомендуется начинать читать книгу с первой главы, а также поупражняться в создании отчетов, описанных в третьей (стр. 55) и четвертой главах (стр. 115). Читателям, желающим получить наиболее полное представление о системе компоновки данных и опыт работы с ней, советуем читать книгу последовательно и внимательно, подробно разбирая заинтересовавшие их примеры. 8 Предисловие Структура В первой главе подробно разбирается пример создания отчета с помощью системы компоновки данных. Он целиком основан на использовании визуальных средств разработки «без единой строчки кода». Здесь последовательно показываются и объясняются все действия разработчика по конструированию отчета. Поэтому книгу лучше изучать последовательно, так как некоторые повторяющиеся действия при разработке отчетов, детально описанные в этой главе, в дальнейшем лишь кратко перечисляются. Эта глава будет полезна как читателям, не знакомым с системой компоновки данных, так и тем, кто хочет вспомнить некоторые моменты процесса разработки отчетов. Во второй главе содержится теоретическая информация о системе компоновки данных, описываются общие принципы работы этого механизма, рассматривается последовательность и назначение каждого этапа компоновки. В третьей главе демонстрируются основные возможности системы компоновки данных. Изучение этой главы позволит разработчикам быстро и легко создавать свои собственные отчеты, не особенно вдаваясь в тонкости механизма. Четвертая глава содержит набор практических примеров по созданию и модификации отчетов. Она будет полезна разработчикам, желающим получить реальные навыки по разработке отчетов с помощью системы компоновки данных. Пятая глава посвящена детальному рассмотрению отдельных возможностей системы компоновки данных. Она предназначена в первую очередь разработчикам, уже знакомым с азами разработки отчетов и желающим получить более глубокую и конкретную информацию по тем или иным возможностям системы компоновки данных. 9 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В шестой главе рассказывается о культуре создания отчетов с использованием системы компоновки данных. Здесь приводятся рекомендации о том, как сделать отчет максимально удобным и интуитивно понятным для пользователя, как разработать простой, лаконичный и дружественный пользовательский интерфейс. Что находится на компакт-диске setup.exe - комплект поставки демонстрационной базы с примерами отчетов, описанных в книге. 10 Глава 1 Простой отчет «без программирования» В данной главе мы подробно рассмотрим пример создания несложного отчета с помощью системы компоновки данных. Пример целиком основан на использовании визуальных средств разработки «без единой строчки кода». Здесь последовательно показываются и подробно объясняются все действия разработчика по визуальному конструированию отчета. Заметим, что некоторые повторяющиеся действия при разработке отчетов, детально описанные в этой главе, в дальнейшем лишь кратко перечисляются. Поэтому эта глава будет полезна как разработчикам, не знакомым с системой компоновки данных, так и тем, кто хочет вспомнить некоторые моменты процесса разработки отчетов. Практическое знакомство с системой компоновки данных начнем с простого отчета, который будет отражать приход, расход и остатки номенклатуры на складах. 11 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Добавление отчета Для визуального конструирования отчетов с использованием системы компоновки данных предназначен объект конфигурации Отчет. Выделим в дереве объектов конфигурации ветвь Отчеты и добавим новый отчет (рис. 1.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). Рис. 1.9. Конструктор схемы компоновки данных 19 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Итак, мы добавили набор данных - запрос и создали текст запроса, выбирающего данные из информационной базы 1 С:Предприятия 8. Текст запроса отображается в поле Запрос. Здесь его можно вручную отредактировать или снова вызвать Конструктор запроса для внесения в него изменений. Так как свойство Автозаполнение включено, платформа автоматически заполнила список доступных полей текущего набора данных исходя из запроса. ПРИМЕЧАНИЕ Доступные поля - это те поля отчета, которыми оперирует схе- ма компоновки данных. Они могут быть использованы в настройках отчета (сортировке, отборе и др.), участвовать в группировках отчета, формировании вычисляемых полей и пр. Создание стандартных настроек отчета Пока мы не будем рассматривать другие возможности конструктора компоновки данных, а приступим к настройке отчета, то есть к формированию его структуры и внешнего вида. ПРИМЕЧАНИЕ Стандартные настройки создаются разработчиком для того, чтобы, открыв отчет, пользователь мог бы сразу получить нужные данные и чтобы избавить пользователя от необходимости создавать эти настройки самому. Однако, при желании, пользовать может изменить настройки, пользуясь конструктором настроек или окном настроек. Если его не устроил результат этих изменений, он может вернуться к стандартным настройкам, сделанным разработчиком (стр. 424). 20 Глава 1. Простой отчет «без программирования» Представим наш отчет в виде таблицы, где по строкам данные группируются по позициям номенклатуры, а по столбцам - по позициям складов. Групповые итоговые данные - Ресурсы, например остаток конкретного товара на конкретном складе, - расположены в ячейках таблицы. Поэтому для того, чтобы увидеть какие-либо значения в таблице, мы должны определить Ресурсы схемы компоновки данных. ВНИМАНИЕ! Для всех отчетов, где выводятся итоговые данные по каким-либо группировкам, нужно определить поля ресурсов отчета! Итоговые данные формируются на закладке Ресурсы. На закладке Ресурсы схемы компоновки данных в списке Доступные поля расположены все поля из текущего набора данных отчета. Нажмем кнопку >>, чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги (рис. 1.10). Рис. 1.10. Выбор ресурсов отчета ПРИМЕЧАНИЕ Поля в список ресурсов можно перенести из списка доступных полей перетаскиванием мышью или двойным щелчком на них. Либо можно использовать кнопки >, <, >>, <<. 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). Рис. 2.3. Вывод в отчете вычисляемого поля 39 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных • Ресурсы. Ресурсы являются групповыми итоговыми данными (стр. 385). Обычно данные в отчете группируются по каким-то позициям, например, по номенклатуре. Смысл группировки не только в определенном расположении данных, но и в выводе итоговых данных - ресурсов по этой группировке. На основании значений ресурсов формируются общие итоги отчета. В приведенном примере детальные записи группируются по складам и выводятся групповые и общие итоги отчета (рис. 2.4). Рис. 2.4. Вывод ресурсов в группировке В таблице ресурсы выводятся как бы на пересечении соответствующей строки и колонки таблицы, например, остатки конкретного товара на конкретном складе. В приведенном примере в отчет выводится таблица, в которой в колонках данные сгруппированы по складам, а в строках - по номенклатуре (рис. 2.5). В качестве значений диаграммы выводится первый ресурс отчета. 40 Глава 2. Устройство системы компоновки данных Рис. 2.5. Вывод ресурсов в таблице Таким образом, для вывода таблиц и диаграмм обязательно определение ресурсов для отчета. Отчет, выводящий данные в группировку, может и не содержать ресурсов. Например, в случае вывода простых списков, когда групповые итоги не нужны. • Параметры. Рис. 2.6. Вывод в отчете параметров отчетного периода Параметры являются критериями получения данных для отчета (стр. 390). Параметры могут быть явно определены в запросе, например, вид номенклатуры, а могут быть параметрами вирту- Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных альных таблиц базы данных, например, начало и конец отчетного периода. Как правило, параметры выводятся пользователю перед формированием отчета. Затем заданные пользователем значения параметров передаются в отчет, и отчет формируется заново, например, с новым отчетным периодом (рис. 2.6). • Макеты. По умолчанию внешний вид отчета формируется системой автоматически. Но разработчик может задать собственное расположение и оформление различных областей отчета. Для этого в схеме компоновки данных создаются предопределенные макеты (стр. 394). В отличие от стандартных макетов оформления, предопределенные макеты «привязаны» к одному отчету, его конкретным полям и структуре. Можно создавать макеты отдельных полей, группировок, итоговых полей и ресурсов отчета. В приведенном примере группировка по номенклатуре оформлена с помощью предопределенного макета (рис. 2.7). Рис. 2.7. Макет группировки «Номенклатура» • Вложенные схемы. Часто бывает, что нужно использовать данные одного отчета внутри другого. Разработав схему компоновки одного отчета, можно затем многократно использовать ее в других отчетах, 42 Глава 2. Устройство системы компоновки данных связав родительский и вложенный отчеты по общему полю. В приведенном примере выводится список контрагентов с вложенными данными по продажам номенклатуры для каждого из них (рис. 2.8). Рис. 2.8. Вывод вложенного отчета Типичный пример использования вложенного отчета рассматривается в третьей главе (пример 6 на стр. 97). • Настройки. В схеме компоновки данных разработчик задает стандартные настройки, которые определяют, как первоначально будет выглядеть отчет, определяет его иерархическую структуру и настройки отчета в целом и его отдельных элементов. Разработка сложных отчетов в 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). Рис. 2.12. Настройка списка полей отчета Отбор. В этом режиме разработчик или пользователь может определить условия фильтрации записей в отчете (рис. 2.13). Рис. 2.13. Настройка отбора Порядок. В этом режиме разработчик или пользователь может определить порядок записей в отчете (рис. 2.14). Рис. 2.14. Настройка сортировки 46 Глава 2. Устройство системы компоновки данных Параметры данных. В этом режиме разработчик или пользователь может задать значения параметров отчета (рис. 2.15). Рис. 2.15. Настройка параметров данных Пользовательские поля. В этом режиме пользователь может создать собственные дополнительные поля (рис. 2.16). Рис. 2.16. Создание пользовательских полей Условное оформление. В этом режиме разработчик или пользователь может задать условия оформления записей в отчете (рис. 2.17). Рис. 2.17. Настройка условного оформления Другие настройки. В этом режиме разработчик или пользователь может задать значения параметров вывода таких, как макет оформления, заголовок, расположение итогов и др. (рис. 2.18). 47 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 2.18. Настройка параметров вывода Настройки отчета Отчет, полученный с помощью системы компоновки данных, представляет собой сложную иерархическую структуру, куда входят и простые детальные записи, и группировки, и таблицы, и диаграммы. Например, отчет Остатки номенклатуры имеет такой вид (рис. 2.19). Рис. 2.19. Отчет «Остатки номенклатуры», первоначально настроенный разработчиком 48 Глава 2. Устройство системы компоновки данных Структура отчета, созданная разработчиком, имеет вид (рис. 2.20): Рис. 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С:Предприятие, нажав кнопку Настройки на командной панели отчета, пользователь может изменить настройки отчета, его структуру, отбор, упорядочивание записей, оформление и т. п. Настройки отчета могут относиться как ко всему отчету в целом, так и к его отдельным элементам группировкам, таблицам, диаграммам (стр. 28). Например, пользователь может для элемента отчета Номенклатура установить сортировку по полю Конечный остаток. У каждого элемента настроек есть признак использования в отчете - флаг слева от его названия. Допустим, пользователь не хочет видеть в отчете диаграмму. Для этого достаточно просто снять флаг использования у данного элемента структуры отчета. Аналогично можно отключить в настройках любое поле, отбор, параметр и т. п. В результате сделанных изменений настройки отчета примут следующий вид (рис. 2.25): Рис. 2.25. Окно для редактирования пользовательских настроек 52 Глава 2. Устройство системы компоновки данных Выполнение отчета с новыми настройками даст следующий результат (рис. 2.26): Рис. 2.26. Изменение отчета с помощью пользовательских настроек Очевидно, что таблицы очень схожи между собой. Но поскольку первая представляет собой результат вывода группировки Склад и вложенной в нее группировки Номенклатура, то данные в ней группируются только по строкам и общие итоги выводятся только по вертикали. В соответствии с новыми настройками внутри группировки Номенклатура записи первой таблицы отсортированы по возрастанию поля Конечный остаток и диаграмма в отчет не выводится. Оценив результаты своих изменений, пользователь может сохранить новые настройки в файл, загрузить другие настройки из файла или восстановить стандартную настройку отчета, сделанную разработчиком, используя командную панель окна настроек (рис. 2.7). Однако следует иметь в виду, что окно настроек отчета, вызываемое кнопкой Настройки, предназначено лишь для хорошо подготовленного, опытного пользователя. Для большинства же пользователей следует разрабатывать более простые формы настроек (стр. 499) или сделать доступной только кнопку Конструктор настроек (стр. 421), расположенную в командной панели отчета. Глава 3 Примеры основных возможностей системы компоновки данных В данной главе рассмотрены самые основные, принципиальные возможности использования системы компоновки, на основе которых разработчик может решить стоящие перед ним несложные типовые задачи. За более конкретной информацией следует обращаться к четвертой и пятой главам. Исходные данные для примеров Разрабатываемые нами отчеты будут базироваться на данных о хозяйственной деятельности небольшой фирмы, которая оказывает услуги по сборке, ремонту и продаже компьютеров и комплектующих к ним. 55 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Приобретение комплектующих отражается в документах ПриходнаяНакладная. Предоставление компьютерных услуг, продажа комплектующих и собранных системных блоков отражаются в документах РасходнаяНакладная. Оба эти документа формируют движения в регистре накопления Остатки Номенклатуры, который имеет вид Остатки и содержит два Измерения - Номенклатура и Склад и Ресурсы - Количество и Цена. Сборка готовых системных блоков отражается в документе СборкаКомпьютера, который формирует движения типа Приход в регистре накопления СобранныеСБ. Этот регистр имеет вид Остатки и содержит два Измерения - СБ и Склад, Ресурсы Количество и Стоимость и Реквизит - Мастер. Одновременно при проведении этого документа формируются движения типа Расход в регистре ОстаткиНоменклатуры. Здесь отражаются комплектующие, которые были израсходованы при сборке. Документы РасходнаяНакладная также формируют движения в регистре накопления Продажи. Этот регистр имеет вид Обороты и содержит два Измерения - Номенклатура и Контрагент и Ресурсы - Количество и Стоимость. Документы ПриходнаяНакладная также формируют движения в регистре сведений Цены. Этот регистр является Периодическим и имеет Измерение - Номенклатура и Ресурс - Цена. В базе данных также содержится регистр сведений ЗначенияСвойствОбъектов для хранения значений характеристик объектов. Этот регистр является Непериодическим и имеет два Измерения - Контрагент и Свойство и Ресурс - Значение. 56 Глава 3. Примеры основных возможностей системы компоновки данных Пример 1. Набор данных - запрос При разработке отчетов с помощью системы компоновки данных информация извлекается из различных «источников» данных различными способами. Данный пример иллюстрирует использование набора данных - запрос. Такой набор данных используется в том случае, когда нужно получить данные из информационной базы 1С:Предприятия 8. В процессе разработки отчета мы добавим набор данных - запрос, напишем текст запроса и выведем данные в табличный документ с помощью конструктора настроек. Создадим отчет, отражающий информацию о последних ценах поступления товаров. Добавим новый объект конфигурации Отчет и назовем его ЦеныКомплектуюицих. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Текст запроса можно написать вручную, но мы для простоты воспользуемся Конструктором запроса, в котором можно визуально сконструировать запрос. Работа с конструктором запроса подробно описывалась в первой главе (стр. 17). В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Цены.СрезПоследних. В список полей перенесем поля из этой таблицы (рис. 3.1): Период, Номенклатура, Цена. Рис. 3.1. Выбор данных для запроса Нажмем ОК и вернемся в конструктор схемы компоновки данных (рис. 3.2). 57 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 3.2. Конструктор схемы компоновки данных Итак, мы создали набор данных - запрос, и платформа автоматически создала текст запроса, с помощью которого источник будет получать данные из информационной базы 1С:Предприятия 8. Текст запроса платформа поместит в поле Запрос (листинг 3.1). Листинг 3.1. Текст запроса Так как свойство Автозаполнение (стр. 363) включено, платформа заполнила список доступных полей текущего набора данных исходя из запроса. Доступные поля - это поля отчета, которые могут быть использованы в настройках отчета структуре, сортировке, отборе и др. 58 Глава 3. Примеры основных возможностей системы компоновки данных Теперь, когда создано описание, как получать данные для отчета, осталось создать стандартные настройки для вывода информации в отчет. Самое простое - воспользоваться для этого Конструктором настроек, который вызывается на закладке Настройки схемы компоновки данных (рис. 3.3). Рис. 3.3. Настройки схемы компоновки данных Вызовем конструктор настроек и определим Тип отчета. Мы выберем тип Список, что соответствует элементу структуры отчета Группировка, где информация выводится по строкам (рис. 3.4). Рис. 3.4. Конструктор настроек. Шаг 1 59 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Нажмем кнопку Далее. На следующем шаге определим поля, выводящиеся в отчет. Мышью перетащим из списка доступных полей следующие поля (рис. 3.5): Номенклатура, Период, Цена. Нажмем кнопку Далее. На следующем шаге определяются поля для группировки записей в списке. Но мы не будем ничего задавать, так как хотим представить записи в отчете в виде простого линейного списка без итогов. Такая группировка называется Детальные записи. Нажмем кнопку Далее. На следующем шаге определим поля для сортировки записей в отчете. Мышью перетащим из списка доступных полей поле Период (рис. 3.6). 60 Глава 3. Примеры основных возможностей системы компоновки данных Нажмем ОК. В результате наших действий в окне настроек появилась группировка Детальные записи, определен список выбранных полей и задано поле сортировки (рис. 3.7). Рис. 3.7. Настройки схемы компоновки данных Аналогичный результат можно получить, самостоятельно создавая нужные элементы настроек. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 3.8). Рис. 3.8. Результат отчета Итак, на этом примере мы рассмотрели наиболее простой способ получения данных из информационной базы 1С:Предприятия с использованием набора данных - запрос. Затем мы вывели эти данные в табличный документ в виде простого детального списка. 61 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Пример 2. Два связанных набора данных Отчет, разработанный с помощью системы компоновки данных, может использовать данные из нескольких (в нашем случае двух) наборов данных. Эти наборы данных описываются каждый по отдельности, а затем в схеме компоновки данных указывается, каким образом они связаны между собой. Для демонстрации этой возможности системы компоновки данных немного усложним наш первый пример. Допустим, в отчете Цены комплектующих мы хотим видеть информацию о поставщиках, датах и номерах документов, которые произвели движения в регистре сведений Цены. Для этого создадим набор данных, получающий информацию из документов Приходная накладная, и свяжем его с исходным набором, получающим данные из регистра сведений Цены. Затем мы выведем полученные данные в табличный документ с помощью конструктора настроек. Создадим новый объект конфигурации Отчет и назовем его ЦеныКомплектующихОтПоставщиков. Откроем конструктор схемы компоновки данных и добавим новый набор данных запрос. Он будет назван по умолчанию НаборДанных! Для большей наглядности назовем его Цены. Чтобы ввести новое имя набора данных, можно дважды щелкнуть по его названию. Откроем конструктор запроса. В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Цены.СрезПоследних. В список полей перенесем поля из этой таблицы (рис. 3.9): Номенклатура, Цена, Регистратор. 62 Глава 3. Примеры основных возможностей системы компоновки данных Рис. 3.9. Выбор полей для запроса Поле Регистратор нам понадобится в качестве ссылки на документ ПриходнаяНакладная, который произвел движения в регистре сведений Цены, чтобы установить связь со вторым набором данных. Нажмем О К и вернемся в конструктор схемы компоновки данных. Таким образом, в этом наборе данных мы получим информацию о последних ценах поступления товаров. Но нам нужна еще другая, связанная с ней более детальная информация из документов Приходная накладная. Выделим корневой элемент дерева наборов данных и добавим еще один набор данных - запрос. Назовем его Поставщики. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа ПриходнаяНакладная. В список полей перенесем поля из этой таблицы (рис. 3.10): Ссылка, Номер, Дата, Контрагент. Рис. 3.10. Выбор полей для запроса Поле Ссылка нам понадобится в качестве ссылки на регистр сведений Цены, чтобы установить связь с первым набором данных. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Если в схеме компоновки данных присутствуют несколько наборов данных, то между ними требуется установить связь (стр. 336). На закладке Связи наборов данных добавим новую строку. Связей в общем случае может быть несколько, даже если набора данных только два. В поле Источник связи, то есть в качестве родительского набора данных, укажем Цены, в поле Приемник связи, то есть в качестве зависимого набора данных, укажем Поставщики. В поле Выражение источник выберем из полей родительского набора поле Регистратор, а в поле Выражение приемник - поле зависимого набора данных Ссылка (рис 3.11). Рис. 3.11. Создание связи наборов данных Все связи, созданные в схеме компоновки данных, считаются Левыми внешними соединениями, то есть в отчет будут включены записи из обоих наборов данных, удовлетворяющих условию связи Регистратор = Ссылка (рис. 3.12). Рис. 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): Рис. 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. Текст запроса п Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных На закладке Настройки вызовем конструктор настроек (рис. 3.3). Повторим первые три шага, которые мы выполняли, настраивая основную схему компоновки данных отчета (рис. 3.4, 3.13, 3.14). Четвертый шаг пропустим, так как мы уже задали сортировку записей в самом запросе. Нажмем ОК. Закроем СхемуКомпоновкиДанных! Теперь для отчета ЦеныКомплектующихОтПоставщиков существуют две различные схемы компоновки данных. Выделим отчет в дереве конфигурации и вызовем диалог редактирования его свойств двойным щелчком мыши, или нажав кнопку Изменить на командной панели окна конфигурации. Установим СхемуКомпоновкиДанных1 в качестве основной для отчета (рис. 3.23). Рис. 3.23. Выбор основной схемы компоновки данных для отчета Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Мы видим, что отчет, выполненный на основе СхемыКомпоновкиДанных1, в точности соответствует отчету, сформированному на основе ОсновнойСхемыКомпоновкиДанных (рис. 3.17). Итак, мы сформировали наш отчет двумя способами: с использованием двух связанных наборов данных и с использованием связи двух таблиц в запросе одного набора данных. 72 Глава 3. Примеры основных возможностей системы компоновки данных Первый вариант лучше использовать, когда получение данных одним запросом породит слишком сложный запрос, в том случае если необходимо выводить в отчет данные с расчетом итогов без учета дублирующихся записей, при выводе в результат данных из различных типов наборов данных (например, из запроса и таблицы значений). Второй вариант более предпочтителен с точки зрения эффективности исполнения отчета за счет того, что соединение будет выполняться на сервере базы данных. В этом случае для повышения гибкости отчета не следует задавать в запросе отбор и упорядочивание записей, чтобы пользователь имел возможность самостоятельно менять эти настройки. При выборе того или иного варианта необходимо помнить, что возможна ситуация, когда каждая запись может попадать в некоторые группировки по нескольку раз. В случае использования двух связанных наборов данных в системе компоновки она будет учтена при расчете итогов только один раз, что правильно. А в случае связи таблиц в запросе набора данных итоговые данные будут получаться для всех строк набора данных, что неверно (стр. 340). Пример 3. Набор данных - объект Набор данных - объект используется для вывода в отчет информации из некоторого объекта встроенного языка: таблицы значений, результата запроса, текущего документа и т. п. Этот «источник» данных описывается в схеме компоновки, затем он заполняется программным образом, например по нажатию какой-то кнопки, и в качестве внешнего набора данных передается в процессор компоновки. После выполнения компоновки отчет выводится программным способом на основании стандартных настроек, сделанных в схеме компоновки. Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Этот пример сложнее остальных примеров из этой главы, так как предусматривает работу с системой компоновки данных средствами встроенного языка. Мы не будем здесь детально останавливаться на этих вопросах. Более подробно они рассмотрены на конкретном примере четвертой главы (стр. 224) и в соответствующем разделе пятой главы (стр. 473). Для примера создадим отчет, выводящий список продаж для контрагента, указанного в документе Расходная накладная. Выделим ветку Макеты документа РасходнаяНакладная в дереве объектов конфигурации и вызовем ее контекстное меню или нажмем кнопку Добавить в командной панели окна конфигурации (рис. 3.24). Рис. 3.24. Создание макета документа В открывшемся конструкторе макета зададим имя макета ПродажиКонтрагента и выберем тип макета Схема компоновки данных. Именно в этом макете будет содержаться описание «источника» данных и настройки для вывода данных. В окне конструктора схемы компоновки данных добавим новый набор данных - объект (рис. 3.25). Глава 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). Рис. 3.30. Настройки схемы компоновки данных Рис. 3.31. Добавление в форму кнопки «Продажи» В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки Продажи, в который мы внесем следующий текст (листинг 3.3). 78 Глава 3. Примеры основных возможностей системы компоновки данных 79 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В процедуре определяется запрос для получения информации о продажах для контрагента в текущем документе. Затем создается внешний набор данных Продажи, в который добавляется таблица значений, содержащая данные для построения отчета. В нашем случае, для упрощения примера, эти данные получены запросом к информационной базе 1С:Предприятия 8. Затем программно выполняется компоновка данных с использованием внешнего набора данных, который добавляется при инициализации процессора компоновки данных, и выдача результата в табличный документ. Запустим 1С:Предприятие 8. Откроем документ Расходная накладная. Нажмем кнопку Продажи. На экране появится список продаж контрагенту, указанному в открытом документе (рис. 3.32). Рис. 3.32. Результат отчета Итак, мы создали отчет с использованием внешнего набора данных. Мы описали поля набора в схеме компоновки данных, определили ресурсы и стандартные настройки отчета. Затем мы программно заполнили этот набор данных, инициализировали им процессор компоновки данных, программно выполнили компоновку и вывели отчет по нажатию кнопки в документе. Пример 4. Набор данных - объединение Набор данных - объединение предназначен для разработки отчета, содержащего объединенную информацию из различных наборов данных. Такой набор содержит два или более подчиненных набора данных, но информация в них не связывается, а объединяется. 80 Глава 3. Примеры основных возможностей системы компоновки данных Во втором примере данной главы объяснялось, что при связывании наборов данных в схеме компоновки используется Левое соединение. То есть в отчете будут показаны все записи из левого набора данных, описанного в выражении связи, а из правого набора будут показаны только те записи, которые соответствуют условию связывания. Если же требуется вывести в отчет все записи из обоих наборов данных, используется набор данных - объединение. Для примера создадим отчет, объединяющий информацию о поступлении и продаже номенклатуры. Затем мы сгруппируем полученные данные по позициям номенклатуры и выведем их в табличный документ с помощью конструктора настроек. Создадим новый объект конфигурации Отчет и назовем его АнализПоступленияПродаж. Откроем конструктор схемы компоновки данных и добавим новый набор данных - объединение (рис. 3.33). Рис. 3.33. Добавление набора данных - объединение В схеме компоновки данных будет создан набор данных типа Объединение с именем НаборДанных! Выделим его в дереве наборов данных и, вызвав его контекстное меню или нажав кнопку Добавить, добавим в него новый набор данных - запрос (рис. 3.34). 81 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 3.34. Добавление набора данных - запрос Назовем его Поступление. Чтобы ввести новое имя набора данных, можно дважды щелкнуть по его названию. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа ПриходнаяНакладная. В список полей перенесем поля из табличной части этого документа ПереченьНоменклатуры (рис. 3.35): Номенклатура, Количество, Цена. Рис. 3.35. Выбор полей для запроса На закладке Объединения/Псевдонимы изменим имя у поля Количество на Поступило, Цена на ЦенаПоступления (рис. 3.36). Глава 3. Примеры основных возможностей системы компоновки данных Рис. 3.36. Изменение имен полей в конструкторе запроса Нажмем О К и вернемся в конструктор схемы компоновки данных. Затем выделим родительский набор данных НаборДанных1 в дереве наборов данных и добавим в него еще один набор данных - запрос. Назовем его Расход. Откроем конструктор запроса. В качестве источника данных для запроса выберем объектную таблицу документа РасходнаяНакладная. В список полей перенесем поля из табличной части этого документа ПереченьНоменклатуры (рис. 3.37): Номенклатура, Количество, Цена. Рис. 3.37. Выбор полей для запроса На закладке Объединения/Псевдонимы изменим имя у поля Количество на Продано, Цена на ЦенаПродажи. Нажмем ОК и вернемся в конструктор схемы компоновки данных. На закладке Ресурсы схемы компоновки данных в списке Доступные поля расположены все поля из объединенного набора данных отчета. Нажмем кнопку 2>J, чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги (рис. 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 Глава 3. Примеры основных возможностей системы компоновки данных Рис. 3.43. Результат отчета с использованием объединения и связывания наборов данных 87 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Пример 5. Характеристики. Вывод данных в диаграмму В платформе 1С:Предприятия есть специальный объект -План видов характеристик, с помощью которого можно создавать механизмы для того, чтобы пользователь имел возможность создавать и описывать произвольные характеристики для какихлибо объектов информационной базы. Например, для описания свойств номенклатуры пользователь может создать такие виды характеристик, как Цвет, Качество и т. п. и задать их значения. Система компоновки данных позволяет использовать эти характеристики при разработке отчетов (стр. 305). То есть пользователь может отобразить поля характеристик в отчете, установить по ним отбор, условное оформление и т. д. Для извлечения характеристик из базы данных в языке запросов разработано специальное расширение, применяющееся только в системе компоновки данных. В нашей конфигурации реализована возможность добавления дополнительных свойств к элементам справочника Контрагенты, таких как Надежный партнер? (да/нет) и Регион. Создадим отчет, отражающий информацию о продажах контрагентам, и отразим в отчете эти характеристики контрагентов. Затем мы выведем полученные данные в диаграмму с помощью конструктора настроек. Создадим новый объект конфигурации Отчет и назовем его ПродажиКонтрагентам. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Откроем конструктор запроса. В качестве источника данных для запроса выберем виртуальную таблицу регистра сведений Продажи.Обороты. В список полей перенесем поля из этой таблицы (рис. 3.44): Контрагент, 88 СтоимостьОборот. Глава 3. Примеры основных возможностей системы компоновки данных Рис. 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С:Предприятие. Это связано с тем, что сначала должен быть выполнен запрос, извлекающий характеристики из базы данных. Запустим еще раз конструктор настроек. Перейдем на второй этап и раскроем поле Контрагент в списке доступных полей. Здесь мы увидим две наши дополнительные характеристики- Регион и Надежный партнер. Перенесем в список полей поле Регион (рис. 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. Выбор файла вложенной схемы Нажмем ОК. Теперь нажмем кнопку выбора В в поле Настройки и зададим связь вложенной схемы с родительской так, чтобы Глава 3. Примеры основных возможностей системы компоновки данных для каждого контрагента из основного отчета отражалась соответствующая информация из вложенного отчета. Добавим новый элемент отбора и нажмем кнопку выбора ... в поле Левое значение. В открывшемся окне выбора поля укажем поле вложенного отчета Контрагент (рис. 3.59). Рис. 3.59. Задание условий отбора в настройках вложенной схемы В поле Правое значение нажмем кнопку очистки 0, затем кнопку выбора типа данных В и выберем тип данных Поле компоновки данных. Теперь нажмем в поле ввода кнопку выбора в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец и выберем поле родительского отчета Контрагент (рис. 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. Система компоновки данных Рис. 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). Рис. 4.5. Создание новой схемы компоновки данных Рис. 4.6. Загрузка схемы компоновки данных В появившемся диалоговом окне выберем файл, содержащий схему компоновки данных, и нажмем кнопку Открыть (рис. 4.7). Рис. 4.7. Открытие файла, содержащего схему компоновки данных 118 Глава 4. Примеры разработки отчетов Итак, мы получили новую СхемуКомпоновкиДанных1, аналогичную ранее созданной основной схеме. Теперь перейдем на закладку Настройки и изменим настройки отчета Остатки номенклатуры. Мы видим, что структура отчета уже содержит таблицу, созданную нами ранее (в первой главе) с помощью конструктора настроек. Добавим в структуру отчета новый элемент Группировку и покажем возможности настройки отдельных элементов отчета. Напомним, что иерархическая структура отчета содержит три основных элемента: • Группировка - для вывода информации в виде обычного линейного отчета; • Таблица - для вывода информации в виде таблицы; • Диаграмма - для вывода информации в виде диаграммы. Элемент Группировка позволяет выводить в отчете не только сгруппированную каким-то образом информацию, но и обычные детальные записи, выбранные платформой из «источников» данных согласно нашему запросу. Рис. 4.8. Добавление новой группировки в отчет 119 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Добавим в структуру отчета новую группировку. Для этого откроем контекстное меню элемента Отчет, выделив этот элемент и нажав правую клавишу мыши (рис. 4.8). В появившемся окне выбора поля группировки оставим поле ввода Поле пустым, так как мы не хотим группировать записи в отчете. Такая группировка называется Детальные записи (рис. 4.9). Теперь продемонстрируем возможности различных настроек отчета. Напомним, что настройки могут относиться как ко всему отчету в целом, так и к его отдельным элементам - группировкам, таблицам, диаграммам. Последнее может быть полезно, чтобы выделить разные элементы индивидуальными стилями оформления, установить для каждого свой отбор, сортировку и т. д. Рис. 4.9. Окно выбора группировки ВНИМАНИЕ! При установке настроек отчета в средней части окна, под деревом структуры отчета, должна быть выделена кнопка, соответствующая режиму настроек. Кнопка Отчет - для настройки отчета в целом, или кнопка с именем группировки, например ные Записи, если Деталь- настройки относятся только к ней. Сначала продемонстрируем настройки отчета в целом. Дадим заголовок отчету. Перейдем на закладку Другие настройки. В средней части окна настроек выделим кнопку Отчет и введем Остатки номенклатуры в строку Заголовок (рис. 4.10). Установим для Макета оформления значение - Море (стр. 408), рис. 4.11. 120 Глава 4. Примеры разработки отчетов Рис. 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). Рис. 4.16. Настройка сортировки элемента отчета «Детальные записи» На закладке Условное оформление выделим цветом записи группировки с конечным остатком, меньшим или равным единице. Для этого нажмем кнопку Добавить справа на командной панели окна (рис. 4.17). Рис. 4.17. Настройка условного оформления элемента отчета «Детальные записи» Сначала выберем Область, то есть укажем, какие поля требуется выделить (рис. 4.18). Рис. 4.18. Настройка условного оформления элемента отчета «Детальные записи» 125 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Затем укажем (рис. 4.19). Отбор - условия для выделения полей Рис. 4.19. Настройка условного оформления элемента отчета «Детальные записи» Затем выберем Оформление для выделения полей. В нашем случае - это цвет фона и цвет текста (рис. 4.20). Рис. 4.20. Настройка условного оформления элемента отчета «Детальные записи» 126 Глава 4. Примеры разработки отчетов В результате окно условного оформления должно принять следующий вид (рис. 4.21): Рис. 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): Рис. 4.25. Настройка отбора для группировки «Номенклатура» элемента отчета «Таблица» 129 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В заключение отключим вывод общего заголовка отчета, так как теперь у каждого элемента отчета есть свой заголовок. Для этого выделим корневой элемент структуры отчета Отчет и снимем признак использования у строки Заголовок (рис. 4.26). Рис. 4.26. Настройка вывода общего заголовка отчета Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 4.27). Рис. 4.27. Результат отчета Итак, мы видим результаты изменений настроек отчета по сравнению с настройкой отчета в целом (рис. 4.14). У каждого элемента структуры отчета теперь есть свой заголовок и макет оформления. Детальный список выводится без общих итогов, в порядке убывания конечного остатка номенклатуры. 130 Глава 4. Примеры разработки отчетов Записи с остатком меньшим или равным единицы выделены цветом. В таблице отражаются только записи с конечным остатком номенклатуры больше единицы, и общие итоги по горизонтали расположены в начале. На этом примере мы познакомились с индивидуальной настройкой каждого элемента структуры отчета. Мы научились устанавливать для них: сортировку; отбор; условное оформление; заголовок, макет оформления и другие. Таким образом, применяя различные варианты настройки отчета, можно получить множество отчетных форм, использующих один и тот же набор данных. Пример 2. Отчет по системным блокам Дальнейшие возможности системы компоновки данных будем изучать на примере отчета, который будет отражать информацию по собранным и проданным системным блокам за указанный период (рис. 4.28). Рис. 4.28. Требуемый вид отчета 131 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Создадим новый объект конфигурации Отчет и назовем его ОтчетПоСистемнымБлокам. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления СобранныеСБ.ОстаткиИОбороты. В список полей перенесем поля из этой таблицы (рис. 4.29): КоличествоНачальныйОстаток, КоличествоКонечныйОстаток, КоличествоПриход, КоличествоРасход, СтоимостьПриход, СтоимостьРасход, СБ, Склад. Рис. 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) - Арктика. Запустим отчет на исполнение в режиме 1С:Предприятие. Перед тем как нажать кнопку Сформировать, откроем окно Настройки и на закладке Параметры данных зададим период отчета с 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). Рис. 4.44. Добавление табличного поля в форму 141 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Укажем место расположения табличного поля параметров в форме. Затем двойным щелчком мыши или через контекстное меню вызовем диалог его свойств (рис. 4.45). Рис. 4.45. Диалог свойств табличного поля Выделим строку Данные и зададим источник данных табличного поля как ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных (рис. 4.46). Рис. 4.46. Выбор источника данных для табличного поля Рис. 4.47. Форма отчета со вставленными элементами управления 142 Глава 4. Примеры разработки отчетов Таким образом, мы связали элементы управления, расположенные в форме, с настройками системы компоновки данных нашего отчета - ПараметрыДанных. Форма отчета примет вид (рис. 4.47). Запустим отчет на исполнение в режиме 1С:Предприятие. Зададим период отчета с 10/03/2008 по 30/04/2008. Нажмем кнопку Сформировать. Отчет примет следующий вид (рис. 4.48): Рис. 4.48. Формирование отчета из режима «1С:Предприятие» Итак, мы разработали для отчета более удобный и дружественный пользовательский интерфейс, позволяющий вводить параметры отчета непосредственно в отчетной форме. Позднее мы рассмотрим примеры, задающие в форме другие настройки отчета - сортировку, отбор и т. д. Также мы научимся программно задавать значения настроек и передавать их в отчет. Но сначала познакомимся с работой системы компоновки данных с помощью встроенного языка. 143 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Пример 3. Отчет «Список номенклатуры». Программный запуск отчета В этом примере мы разработаем отчет, отражающий список номенклатуры с остатками на складах, и реализуем его программный запуск из справочника номенклатуры (рис. 4.49). Рис. 4.49. Требуемый вид отчета Создадим новый объект конфигурации Отчет и назовем его СписокНоменклатуры. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем объектную ссылочную таблицу Номенклатура и виртуальную таблицу регистра накопления ОстаткиНоменклатуры.Остатки. Чтобы исключить неоднозначность имен в запросе, переименуем таблицу Номенклатура в спрНоменклатура. Для этого выделим ее в списке Таблицы и вызовем ее контекстное меню (рис. 4.50). 144 Глава 4. Примеры разработки отчетов Рис. 4.50. Переименование таблицы в запросе В список полей перенесем поля из этих таблиц (рис. 4.51): Ссылка, Родитель, ВидНоменклатуры, Склад, КоличествоОстаток. Рис. 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. Текст запроса 147 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Для решения нашей задачи - вывода списка номенклатуры с остатками - мы выбрали вариант соединения двух таблиц в запросе, чтобы продемонстрировать эту возможность системы компоновки данных. Но эту же задачу можно решить с использованием двух связанных наборов данных - данных из справочника Номенклатуры и регистра накопления ОстаткиНоменклатуры.Остатки. Второй вариант предпочтительнее, и в дальнейшем мы будем использовать именно его. Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим в него группировку по полю Группа. Выделим группировку Группа и добавим подчиненную ей группировку, не указывая группировочное поле, - Детальные записи. Затем на закладке Выбранные поля перенесем из списка доступных полей следующие поля (рис. 4.55): Номенклатура, Вид, Склад, Остаток. Рис. 4.55. Определение полей и группировок отчета 148 Глава 4. Примеры разработки отчетов На закладке Другие настройки установим Макет оформления (стр. 408) - Яркий. Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Сформировать. Наш отчет примет следующий вид (рис. 4.56): Рис. 4.56. Результат отчета Теперь реализуем вызов нашего отчета из формы справочника Номенклатура. Раскроем справочник Номенклатура в дереве объектов конфигурации. Выделим ветвь Формы и нажмем кнопку Добавить (рис. 4.57). Рис. 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). Рис. 4.62. Открытие отчетной формы 153 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Двойным щелчком на заголовке формы или через контекстное меню вызовем диалог ее свойств, найдем событие ПриОткрытии() и нажмем значок лупы справа от него (рис. 4.63). Рис. 4.63. Установка обработчика события при открытии формы В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии(), которое будет вызываться при открытии формы. Внесем в него следующий текст (листинг 4.6): Листинг 4.6. Процедуры модуля формы ПриОткрытии() Процедуры, вызывающиеся из нее, УстановитьНастройки() и СформироватьОтчет(), расположим в начале модуля (листинг 4.7). 154 Глава 4. Примеры разработки отчетов Листинг 4.7. Процедуры модуля формы отчета Таким образом, в модуле формы мы создали процедуру ПриОткрытии(), которая вызывается при открытии формы отчета. В ней определяется схема компоновки данных и настройки по умолчанию нашего отчета. Затем вызывается процедура УстановитьНастройки(), в которой мы устанавливаем значения параметров начала и конца отчетного периода и задаем для них признак использования. Эти настройки передаются в отчет. 155 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Дальше вызывается процедура СформироватьОтчет(), где компонуется и выводится сам отчет. Этот код уже знаком нам по предыдущему примеру. Отличие в том, что отчет выводится в элемент формы Результат, а не в табличный документ. Запустим систему в режиме 1С:Предприятие и откроем наш отчет (рис. 4.64). Как мы видим, отчет формируется сразу же при его открытии, и параметрам - начало и конец периода - по умолчанию присвоены значения - начало года и конец месяца. Дальше пользователь может произвольно их менять и переформировывать отчет, пользуясь кнопкой Сформировать. Рис. 4.64. Открытие отчетной формы Пример 5. Отчет «Продажи номенклатуры» Рассмотрим пример отчета, который будет отражать информацию по продажам номенклатуры за указанный период (рис. 4.65). 156 Глава 4. Примеры разработки отчетов Рис. 4.65. Требуемый вид отчета Для этого нам потребуется извлечь данные из оборотного регистра Продажи. Создадим новый объект конфигурации Отчет и назовем его ПродажиНоменклатуры. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Продажи.Обороты. Вызовем диалог параметров виртуальной таблицы. Для этого в списке Таблицы нужно нажать кнопку Параметры виртуальной таблицы (рис. 4.66). Рис. 4.66. Вызов диалога параметров виртуальной таблицы В открывшемся окне параметров зададим значение параметра Периодичность - День (рис. 4.67). Рис. 4.67. Установка параметра «Периодичность» 157 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В список полей перенесем поля из таблицы Продажи.Обороты (рис. 4.68): Период, Номенклатура, Контрагент, КоличествоОборот, СтоимостьОборот. Рис. 4.68. Выбор полей для запроса На закладке Объединения/Псевдонимы изменим имя у поля КоличествоОборот на Остаток и СтоимостьОборот на Стоимость (рис. 4.69). Рис. 4.69. Установка псевдонимов полей запроса Нажмем ОК и вернемся в конструктор схемы компоновки данных. Обратите внимание, что в тексте запроса указана периодичность выбираемых данных - День (листинг 4.8). Листинг 4.8. Задание периодичности виртуальной таблицы 158 Глава 4. Примеры разработки отчетов Благодаря этому мы можем указать в полях запроса поле Период. Перейдем на закладку Ресурсы и определим доступные поля ресурсов отчета (стр. 385), рис. 4.70. Рис. 4.70. Определение ресурсов отчета На закладке Параметры (стр. 390) будем действовать так же, как и во втором примере (рис. 4.32-4.34). Для параметров НачапоПериода и КонецПериода в колонке Доступные типы нажмем кнопку выбора ... и в нижней части окна редактирования типа данных установим Состав даты в значение Дата. Для параметра КонецПериода зададим значение колонки Выражение (листинг 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. Текст запроса 170 Глава 4. Примеры разработки отчетов После ключевого слова ХАРАКТЕРИСТИКИ здесь следует секция. В ней для системы компоновки данных и описываются те характеристики, которые будут использованы в нашем отчете. Однако применить их мы сможем только после запуска отчета из режима 1С:Предприятие. Это связано с тем, что сначала должен быть выполнен запрос, извлекающий характеристики из базы данных. Откроем отчет в режиме 1С:Предприятие. Зададим период отчета с 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). Рис. 4.95. Диалог сохранения настроек Обратите внимание, что отбор, добавленный нами в окне настроек, появился в отчетной форме. Его можно было бы добавить и в самой форме, выделив поле отбора и нажав клавишу Ins, или воспользоваться командной панелью элемента управления отбора. Однако в целях экономии места мы не поместили ее в форме. Также можно было бы поместить в форме отчета и список выбранных полей, тогда в нем отобразилось бы поле Регион для группировки Контрагент. Но мы исходили из того принципа, что в отчетной форме должны располагаться только доступные и простые в использовании элементы настроек. Таким образом, на примере этого отчета мы научились: • Задавать периодичность в запросе. для виртуальной таблицы • Устанавливать поля группировок для расчета ресурсов отчета. • Определять формат для представления полей в отчете. • Отображать в форме настройки для отбора и условного оформления записей отчета. • Получать в запросе характеристики объектов и использовать их в настройках отчета. 175 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Пример 6. Отчет по продажам Создадим отчет, который будет отражать объем продаж по контрагентам с детализацией данных за указанный период (рис. 4.96). Рис. 4.96. Требуемый вид отчета Для этого нам потребуется извлечь данные из оборотного регистра Продажи. Создадим новый объект конфигурации Отчет и назовем его ОтчетПоПродажам. Откроем конструкторсхемыкомпоновкиданныхидобавимновыйнаборданных - запрос. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Продажи.Обороты. Вызовем диалог параметров виртуальной таблицы. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы. В открывшемся окне параметров зададим значение параметра Периодичность - Авто (рис. 4.97). 176 Глава 4. Примеры разработки отчетов Рис. 4.97. Установка параметра «Периодичность» В список полей перенесем поля из таблицы Продажи.Обороты (рис. 4.98): ПериодДень, ПериодМесяц, Контрагент, СтоимостьОборот. Рис. 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): Рис. 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). Рис. 4.106. Настройка периода отчета Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. Пользоваться стандартным периодом отчета удобно, когда пользователь регулярно выполняет отчет за определенный интервал времени, например текущий месяц. 182 Глава 4. Примеры разработки отчетов Тогда можно заранее установить в настройках нужный период, и пользователю не придется задавать его перед формированием отчета. В нашем случае нам нужны данные за прошлый месяц. ПРИМЕЧАНИЕ Использованный в книге стандартный период в момент выполнения примера может измениться и не содержать данных для отчета. В этом случае его нужно откорректировать. На закладке Другие настройки установим макет оформления (стр. 408) отчета Море. Выполним отчет (рис. 4.107). Рис. 4.107. Результат отчета Мы видим, что представление поля Контрагент и формат полей периодов соответствуют заданному. Однако в отчете выводятся только те дни, которые имеют ненулевые записи в регистре накопления Продажи. Для детализации данных в отчете система компоновки данных позволяет указывать для группировок дополнение периодов с заданной периодичностью в указанном интервале (стр. 293). Для большей наглядности динамики объема продаж контрагентам воспользуемся диаграммой типа График. А прежние настройки отключим. 183 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных На закладке Настройки выделим корневой элемент Отчет и добавим диаграмму (стр. 467). Затем выделим ветку Серии и добавим в нее группировку по полю Контрагент, а в ветку Точки - группировку ПериодДень (рис. 4.108). Рис. 4.108. Настройка структуры отчета Перейдем в режим настроек диаграммы. На закладке Выбранные поля развернем Автополе (стр. 369) и убедимся, что оно содержит поле Стоимость (рис. 4.109). Рис. 4.109. Выбор полей диаграммы На закладке Другие настройки дадим диаграмме заголовок Динамика объема продаж и установим ее тип - График (рис. 4.110). 184 Глава 4. Примеры разработки отчетов Рис. 4.110. Настройка типа и заголовка диаграммы Выполним отчет (рис. 4.111). Рис. 4.111. Результат отчета 185 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Как видно, дни, за которые отсутствовали движения, в отчет не выводятся. Поэтому сложно визуально оценить динамику изменения продаж в отчетном периоде. Чтобы изменить ситуацию, введем Дополнение для группировки диаграммы ПериодДень. Для этого достаточно выделить ее и двойным щелчком мыши вызвать диалог редактирования ее свойств. Укажем Тип дополнения - Неделя (рис. 4.112). Рис. 4.112. Установка типа дополнения группировки «ПериодДень» После этого следует указать, в каком периоде будет выполняться это дополнение. В поля, расположенные строчкой ниже, можно ввести даты начала и окончания этого периода. Но вряд ли стоит задавать эти даты в явном виде, так как пользователь может получить отчет за произвольный период. И нам нужно, чтобы дополнение выполнялось именно в этом, заданном пользователем периоде. Для этого войдем в режим редактирования поля Начальная дата периода, дважды кликнув на нем. Нажмем кнопку очистки 0, затем кнопку выбора типа данных а и выберем тип данных Поле компоновки данных (рис. 4.113). Рис. 4.113. Выбор типа данных 186 Глава 4. Примеры разработки отчетов Теперь нажмем в поле ввода кнопку выбора ... и в открывшемся окне выбора поля укажем параметр НачалоПериода (рис. 4.114). Рис. 4.114. Выбор поля Аналогичным образом укажем, что Конечная дата периода дополнения будет получена из параметра КонецПериода (рис. 4.115). Рис. 4.115. Настройка группировки «ПериодДень» Теперь выполним отчет и увидим диаграмму, отражающую динамику продаж по контрагентам с периодичностью в неделю (рис. 4.116). Таким образом, на примере этого отчета мы научились: • Указывать роль поля в схеме компоновки данных. • Определять выражение для представления полей в отчете. • Использовать стандартный период для параметров периода отчета. 187 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных • Указывать дополнения периодов для детализации данных в отчете и представлять эти данные в виде диаграммы типа График. Рис. 4.116. Результат отчета Пример 7. Сборка системных блоков На примере этого отчета мы продемонстрируем использование в схеме компоновки данных информации из двух (нескольких) наборов данных, а также передачу параметров в объектную (ссылочную) таблицу запроса. Отчет должен отражать информацию о сборке системных блоков за период с детализацией информации по номеру, дате и мастеру сборки (рис. 4.117). 188 Глава 4. Примеры разработки отчетов Рис. 4.117. Требуемый вид отчета Создадим новый объект конфигурации Отчет и назовем его СборкаСистемныхБлоков. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Он будет назван по умолчанию НаборДанных! В качестве источника данных для запроса выберем объектную таблицу регистра накопления СобранныеСБ. В список полей перенесем поля из этой таблицы (рис. 4.118): СБ, Количество, Стоимость, Мастер, Регистратор. Рис. 4.118. Выбор полей для запроса Поле Регистратор нам понадобится в качестве ссылки на документ СборкаКомпьютера, который произвел движения в регистре накопления СобранныеСБ, чтобы установить связь со вторым набором данных. Перейдем на закладку Условия, 189 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных раскроем таблицу СобранныеСБ и перетащим мышью поле ВидДвижения в список условий. Оставим предложенное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались данные из регистра с видом движения Приход (рис. 4.119). Рис. 4.119. Создание условия запроса На закладке Объединения/Псевдонимы изменим имя у поля СБ на СистемныйБлок. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Таким образом, в этом наборе данных мы получим информацию о собранных системных блоках, их количестве, стоимости, мастере, выполнившем сборку. Но нам нужна еще другая, связанная с ней более детальная информация из документов по сборке системных блоков. Есть несколько путей осуществления этой задачи, но мы будем получать эти данные из связанного набора данных. Добавим еще один набор данных - запрос. Он будет назван НаборДанных2. Чтобы добавление стало доступным, нужно выделить корневой элемент дерева наборов данных (рис. 4.120). Рис. 4.120. Добавление нескольких наборов данных 190 Глава 4. Примеры разработки отчетов В качестве источника данных для запроса выберем объектную таблицу документа СборкаКомпьютера. В список полей перенесем поля из этой таблицы (рис. 4.121): Дата, Номер, Ссылка. Рис. 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). Рис. 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. Процедуры модуля формы отчета 199 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных Рис. 4.133. Открытие отчетной формы 200 Глава 4. Примеры разработки отчетов Этот код уже знаком нам по четвертому примеру. Отличие в том, что параметры НачалоПериода и КонецПериода имеют в коллекции настроек параметров данных порядковые номера 1 и 2, так как первый элемент с индексом 0 - это параметр ВидДвижения, который скрыт от пользователя. А также, пользуясь средствами встроенного языка, параметрам отчетного периода мы присвоили значения начала и конца прошлого месяца и отключили использование в сортировке поля Номер. Его индекс в коллекции настроек сортировки равен 1. Запустим конфигурацию в режиме 1С:Предприятие и откроем наш отчет (рис. 4.133). Он будет сформирован автоматически со значениями настроек, заданными по умолчанию при открытии формы. Таким образом, на примере этого отчета мы научились: • Использовать в схеме компоновки несколько наборов данных и задавать связь между ними. • Передавать параметры в объектные таблицы на уровне запроса. • Отображать в форме настойки сортировки отчета. • Автоматически запускать отчет при открытии формы. • Задавать значения настроек по умолчанию при открытии формы и программно передавать их в отчет. Пример 8. Оказание услуг На примере этого отчета мы продемонстрируем другие, не рассмотренные ранее возможности системы компоновки данных, а также использование в схеме компоновки вложенного отчета. Разработаем простой отчет, представляющий список услуг фирмы и соответствующую информацию из отчета продаж номенклатуры для каждой услуги (рис. 4.134). 201 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 4.134. Требуемый вид отчета Создадим новый объект конфигурации Отчет и назовем его Оказан иеУсл у г. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. В качестве источника данных для запроса выберем объектную таблицу справочника Номенклатура. В список полей перенесем поля из этой таблицы (рис. 4.135): Ссылка, Код, Наименование. Рис. 4.135. Выбор полей для запроса Поле Ссылка нам понадобится в качестве ссылки на вложенную схему компоновки данных. Перейдем на закладку Условия, раскроем таблицу Номенклатура и перетащим мышью поле ВидНоменклатуры в список условий. Оставим предложен202 Глава 4. Примеры разработки отчетов ное условие по умолчанию. Это условие нам нужно, чтобы в отчете отражались только услуги из справочника номенклатуры (рис. 4.136). Рис. 4.136. Создание условия запроса Нажмем ОК и вернемся в конструктор схемы компоновки данных. На закладке Параметры мы видим параметры компоновки данных, созданные платформой. Параметру ВидНоменклатуры по умолчанию присвоено значение Перечисление.ВидыНоменклатуры.Услуга, и установлена его недоступность для пользователя (рис. 4.137). Рис. 4.137. Параметры компоновки данных, созданные платформой Определим структуру отчета. На закладке Настройки выделим корневой элемент Отчет и добавим группировку без указания группировочного поля ДетальныеЗаписи. 203 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Затем на закладке Выбранные поля перенесем из списка доступных полей поля Код и Наименование (рис. 4.138): Рис. 4.138. Определение полей и группировок отчета На закладке Сортировка укажем, что данные в отчете будут упорядочиваться по полю Наименование. Для этого перенесем это поле из списка доступных полей в список сортировки. Но вместо стандартного представления для этого поля на закладке Наборы данных мы зададим собственное выражение, по которому и будет проводиться упорядочивание записей в отчете (стр. 426). Нажав кнопку выбора • для поля Наименование, в колонке Выражение упорядочивания, вызовем диалог его свойств, который содержит: • Выражение - текст выражения на языке выражений системы компоновки данных; • Тип упорядочивания - по убыванию или по возрастанию; • Необходимость упорядочивания — флаг для определения упорядочивания ссылочных полей. 204 Глава 4. Примеры разработки отчетов Нажмем кнопку Добавить и введем в колонку Выражение следующий текст (листинг 4.21): Листинг 4.21. Выражение для упорядочивания поля «Наименование» Укажем Тип упорядочивания - По возрастанию. Нажмем еще раз кнопку Добавить и выберем в колонке Выражение поле Код. Укажем Тип упорядочивания - По убыванию. Таким образом, мы установили, что первой в списке услуг должна располагаться услуга с наименованием Ремонт компьютера, а остальные записи в отчете должны располагаться по мере убывания кода услуги. В результате окно диалога примет вид (рис. 4.139): Рис. 4.139. Задание выражения упорядочивания В результате выражение упорядочивания для поля Наименование примет вид (рис. 4.140). Рис. 4.140. Выражение упорядочивания для поля «Наименование» Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Система компоновки данных позволяет определять в отчете Пользовательские поля, используя либо собственные выражения, либо наборы вариантов с условиями их выбора. На закладке Пользовательские поля нажмем кнопку Добавить и добавим новое поле - Выбор. Зададим собственный заголовок поля и создадим условия отбора для различных вариантов его представления (рис 4.141). Рис. 4.141. Добавление пользовательского поля выбора Добавим еще одно пользовательское поле- Выражение. Зададим собственный заголовок поля и выражение на языке выражений компоновки данных для отображения детальных записей. Нажмем кнопку Добавить и введем в колонку Выражение детальных записей следующий текст (листинг 4.22): Листинг 4.22. Выражение детальных записей для пользовательского поля - выражения «Популярная услуга» 206 Глава 4. Примеры разработки отчетов В результате окно пользовательского поля выражения примет вид (рис 4.142): Рис. 4.142. Добавление пользовательского поля выражения ВНИМАНИЕ! В выражениях пользовательских полей не могут быть использованы функции общих модулей. Теперь добавим новые пользовательские поля в отчет. На закладке Выбранные поля раскроем список Пользовательские поля и перенесем из списка доступных полей поля Популярная услуга и В составе сборки (рис 4.143). Рис. 4.143. Добавление пользовательских полей в отчет 207 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных На закладке Другие настройки установим заголовок отчета Список услуг, а макет оформления (стр. 408) отчета - Яркий. Выполним отчет (рис. 4.144). Рис. 4.144. Результат отчета Мы видим, что записи в отчете расположены в заданном порядке и пользовательские поля отражаются в соответствии с условиями их представления. Теперь вернемся в конфигуратор, в режим настроек схемы компоновки данных отчета. Зададим группу условий отбора. На закладке Отбор добавим новую группу, укажем тип логической связки ИЛИ, а внутри нее - два элемента. Заметим, что в группе условий отбора могут участвовать несколько разных полей, в нашем случае Код и Наименование. Если мы просто последовательно добавим в отбор несколько элементов, не включенных в группу, то они будут соединены логическим союзом И (рис. 4.145). Рис. 4.145. Добавление группы условий отбора 208 Глава 4. Примеры разработки отчетов Выполним отчет (рис. 4.146). Рис. 4.146. Результат отчета Мы видим, что записи в отчете отфильтрованы с учетом отбора, но пока отключим его, чтобы продемонстрировать работу с вложенными отчетами (рис. 4.147). Рис. 4.147. Отключение группы условий отбора в настройках отчета В нашем отчете мы хотим видеть список услуг из справочника номенклатуры с вложенными данными из отчета ПродажиНоменклатуры для каждой услуги. В действительности всю эту информацию можно получить прямо из отчета по продажам номенклатуры. Но данная задача позволит нам продемонстрировать еще одно интересное свойство системы компоновки данных - работу с вложенными отчетами. 209 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Сначала откроем схему компоновки данных отчета ПродажиНоменклатуры и сохраним ее в файл, как было описано в первом примере. Вернемся в схему компоновки нашего отчета, перейдем на закладку Вложенные схемы и добавим новую схему. Назовем ее ПродажиНоменклатуры и в поле Схема нажмем кнопку выбора (рис. 4.148). Рис. 4.148. Добавление вложенной схемы в отчет В качестве вложенной схемы выберем файл XML с сохраненной ранее схемой - Схемапродажиноменклатуры (рис. 4.149). Рис. 4.149. Выбор файла вложенной схемы 210 Глава 4. Примеры разработки отчетов Нажмем ОК. Теперь нажмем кнопку выбора ... в поле Настройки и зададим связь вложенной схемы с родительской так, чтобы для каждой услуги из нашего отчета отражалась соответствующая информация из вложенного отчета. Добавим новый элемент отбора и нажмем кнопку выбора ... в поле Левое значение. В открывшемся окне выбора поля укажем поле вложенного отчета Номенклатура (рис. 4.150). Рис. 4.150. Задание условий отбора в настройках вложенной схемы В поле Правое значение нажмем кнопку очистки Х, затем кнопку выбора типа данных Т и выберем тип данных Поле компоновки данных (рис. 4.151). Рис. 4.151. Задание условий отбора в настройках вложенной схемы 211 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных Теперь нажмем в поле ввода кнопку выбора 0, в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец и выберем поле родительского отчета Ссылка (рис. 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. Примеры разработки отчетов Рис. 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. Параметры компоновки данных Затем на закладке Вложенные схемы откроем для редактирования вложенную схему компоновки данных, нажав кнопку выбора 0 (рис. 4.148). На закладке Параметры для параметра КонецПериода удалим Выражение для расчета, так как мы 219 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных определим его значение через параметр основного отчета (рис. 4.165). Рис. 4.165. Параметры компоновки данных вложенной схемы Перейдем на закладку Настройки, выделим вложенный отчет ПродажиНоменклатуры и установим значение параметра Начало периода. В поле Значение нажмем кнопку очистки Х, затем кнопку выбора типа данных Т и выберем тип данных Поле компоновки данных. Теперь нажмем в поле ввода кнопку выбора ... и в открывшемся окне выбора поля раскроем поле ОбъектНастройки.Владелец - ПараметрыДанных и выберем поле родительского отчета ДатаНачала (рис. 4.166). Рис. 4.166. Настройка параметров вложенного отчета 220 Глава 4. Примеры разработки отчетов Аналогично зададим значение для параметра КонецПериода. В результате окно настроек параметров вложенного отчета примет вид (рис 4.167). Рис. 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. Примеры разработки отчетов Рис. 4.171. Требуемый вид печатной формы документа Конечно, эту задачу можно решить гораздо проще, разработав макет табличного документа для печати и задав ему нужное оформление. Но для демонстрации заявленных возможностей системы компоновки данных нам эта задача вполне подходит. Сначала создадим схему компоновки данных, позволяющую сформировать печатную форму документа нужного вида. Затем программно заполним используемые в ней наборы данных. Далее с помощью встроенного языка осуществим компоновку данных. Последняя задача уже знакома нам по предыдущим примерам. Выделим ветку Макеты документа СборкаКомпьютера в дереве объектов конфигурации и вызовем ее контекстное меню или нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.172). Рис. 4.172. Создание макета документа 225 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В открывшемся конструкторе макета зададим имя макета ПечатьСборки и выберем тип макета Схема компоновки данных. Нажмем кнопку Готово (рис. 4.173). Рис. 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). Рис. 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. Система компоновки данных Рис. 4.182. Создание обработчика события В модуле формы будет автоматически создан шаблон обработчика события нажатия кнопки Печать, в который мы внесем следующий текст (листинг 4.24): Листинг 4.24. Процедура обработчика события нажатия кнопки «Печать» 232 Глава 4. Примеры разработки отчетов Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора реквизитов текущего документа. Поле документа Продукция в запросе представлено как СистемныйБлок. В качестве параметра запроса используется ссылка на документ. Затем создаются два внешних набора данных - СоставСБ и ДокументСБ. Набор СоставСБ заполняется данными табличной части документа. Набор ДокументСБ заполняется данными результата выполнения определенного ранее запроса. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. Запустим систему в режиме 1С:Предприятие. Откроем документ СборкаКомпьютера. Нажмем кнопку Печать. На экране появится разработанная нами печатная форма документа (рис. 4.183). 233 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 4.183. Печатная форма документа Теперь продемонстрируем оформление полученной печатной формы с помощью собственного макета оформления. Для этого возможно два решения: • создать предопределенный макет оформления непосредственно в схеме компоновки данных макета документа; • создать свой макет оформления, добавив его в Общие макеты объектов конфигурации, и использовать его при настройке отчетов. Рис. 4.184. Добавление макета оформления 234 Глава 4. Примеры разработки отчетов Второй вариант более универсален, так как может применяться в дальнейшем для различных отчетов, но может понадобиться и индивидуальный макет оформления для конкретного отчета. Рассмотрим вариант создания общего макета оформления (стр. 408). Раскроем ветвь Общие дерева объектов конфигурации. Выделим ветку Общие макеты и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.184). В открывшемся конструкторе макета создадим макет типа Макет оформления компоновки данных с именем Радуга (рис. 4.185). Рис. 4.185. Создание нового макета оформления Нажмем кнопку Готово. Откроется редактор макета оформления с загруженным новым макетом, в котором мы можем отредактировать цвета фона, текста и границы, шрифты областей макета оформления и т. п. (рис. 4.186). 235 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 4.186. Редактор макета оформления Выделив в верхнем левом окне нужную область макета, мы можем изменить элементы ее оформления в нижнем левом окне и сразу увидеть результат оформления этой области в правом окне редакторе макета. При этом названия областей, содержащих оформление, выделяются жирным шрифтом. При выделении в списке областей макета нужной позиции двойным щелчком мыши одновременно выделяется соответствующая ей область результата оформления, при условии что для этой области задано специфическое оформление. И наоборот. Для каждой области макета существует возможность создать несколько уровней оформления. Это можно сделать, выделив нужную область и нажав кнопку Добавить над списком областей. В нижнем правом углу редактора есть возможность сохранения и загрузки макета в XML-формате. Кроме того, можно в любой момент Очистить макет или загрузить предопределен236 Глава 4. Примеры разработки отчетов ный Стандартный макет. Это полезно в случае если вы не хотите разрабатывать свой макет оформления с нуля или чтобы получить недостающий опыт в оформлении макетов. Тогда вы берете за основу какой-либо стандартный вариант оформления, например Зеленый, и меняете необходимые области. Поясним все вышеизложенное на конкретном примере. Откроем макет ПечатьСборки документа СборкаКомпьютера на закладке Настройки и изучим еще раз структуру нашей печатной формы (рис. 4.179). Первой, составной из реквизитов документа группировке мы придали вид вертикального списка. Найдем в окне результата оформления пример группировки списка, выделим его двойным щелчком мыши. Мы видим, что в списке областей макета выделилась строка Заголовок группировки списка. Установим для нее в нижнем окне элементы оформления - цвет текста и шрифт (рис. 4.187). Рис. 4.187. Оформление группировки списка Вторая группировка, отражающая табличную часть документа, будет выводиться в виде обычной таблицы с итоговой строкой. Найдем в окне результата оформления пример шапки группи237 Разработка сложных отчетов в 1 С:Предприятии 8. Система компоновки данных ровки, выделим его двойным щелчком мыши. Мы видим, что в списке областей макета выделилась строкаЗаголовоктаблицы. Установим для нее в нижнем окне элементы оформления - цвет фона, текста, границы, стиль границы и шрифт (рис. 4.188). Рис. 4.188. Оформление шапки группировки Аналогично, выделив в примере группировки строку детальных записей, установим элементы оформления для соответствующей выделенной области макета Детальные записи. Выделив итоговую строку в примере группировки, установим оформление для области макета Общие итоги по вертикали. Мы пока, для простоты, не использовали возможность создания нескольких уровней оформления для областей макета. Но в случае вложенных друг в друга группировок это свойство желательно использовать для большей наглядности отчета. Проверим результат. На закладке Другие макет оформления - Радуга. Запустим 1С:Предприятие и откроем документ Нажмем кнопку Печать. Документ будет нами макетом оформления. 238 настройки установим систему в режиме СборкаКомпьютера. оформлен созданным Глава 4. Примеры разработки отчетов СОВЕТ Чтобы приобрести необходимый опыт, можно после оформления каждой области проверять получившийся результат. Если вы указали оформление не той области, которая отображается в отчете, она будет выводиться без оформления либо в виде оформления области по умолчанию, если оно задано. Чтобы создать универсальный макет оформления, применяемый к разным отчетам, нужно заполнить остальные области макета, не использованные в нашем примере. В первую очередь это области заголовка отчета и информации об отборе и параметрах, которые содержатся в областях макета Заголовок и Информация. Далее, применяя новый макет оформления для других отчетов, содержащих таблицы и вложенные группировки, путем нескольких итераций нужно заполнить те области макета, которые остались без оформления. Рис. 4.189. Установка имени группировки Теперь рассмотрим пример создания предопределенного макета оформления непосредственно в схеме компоновки данных (стр. 394). Откроем макет ПечатьСборки документа СборкаКомпью239 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных тера на закладке Макеты. Как видно, макет представлен в виде обычного табличного документа, областям которого можно задать нужное оформление. Но сначала мы должны установить имена группировок, чтобы использовать их в макетах оформления. На закладке Настройки выделим нужную группировку и вызовем ее контекстное меню. Выберем в нем пункт Установить имя (рис. 4.189). Первой, составной из реквизитов документа группировке зададим имя Шапка, а группировке Детальные записи - имя Табличная часть. Перейдем на закладку Макеты и создадим макет оформления для группировки с именем Шапка (рис. 4.190). Рис. 4.190. Добавление макета группировки Как видно, можно создать следующие типы макетов: • Макет поля используется для оформления определенных выводимых полей. • Макет группировки используется для оформления группировки. 240 Глава 4. Примеры разработки отчетов • Макет заголовка группировки используется для оформления имен выводимых в группировке полей. • Макет ресурсов используется для оформления ресурсов таблицы, т. е. данных, расположенных в ячейках таблицы. Выберем пункт Макет группировки. В открывшемся диалоге выберем либо имя группировки Шапка, либо список полей этой группировки и тип макета Заголовок, который используется для оформления значений группировки, выводящихся в начале группировки (рис. 4.191). Рис. 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. Примеры разработки отчетов Рис. 4.197. Печать документа «Сборка компьютера» Таким образом, на этом примере мы научились: • Использовать в схеме компоновки наборы данных объекты. • Заполнять объекты встроенного языка данными и осуществлять программную компоновку отчета, используя внешние наборы данных. • Разрабатывать предопределенный общий макет оформления. • Разрабатывать предопределенный индивидуальный макет оформления в схеме компоновки данных. Пример 10. Работа с иерархией. Работа с расшифровкой Работу с иерархией продемонстрируем на примере отчета Продажи номенклатуры. Более подробно о работе с иерархией рассказывается на стр. 318. 247 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Допустим, пользователю, нужно видеть информацию в отчете с промежуточными итогами: • по группам номенклатуры, созданным в иерархическом справочнике; • по другому признаку иерархии, построенному произвольным способом. Для решения первой задачи откроем отчет в режиме 1С:Предприятие. Вызовем окно настроек и два раза щелкнем на группировке Номенклатура. В открывшемся окне поля группировки укажем Тип группировки - Иерархия (рис. 4.198). Рис. 4.198. Настройка иерархической группировки Нажмем ОК и сформируем отчет. Информация в отчете представлена с промежуточными итогами по группам справочника Номенклатура - Комплектующие, Услуги, Собранные компьютеры (рис. 4.199). 248 Глава 4. Примеры разработки отчетов Рис. 4.199. Результат отчета с иерархической группировкой по номенклатуре Теперь рассмотрим пример построения собственной иерархии. Создадим отчет, который будет отражать поступление товаров по складам с иерархией номенклатуры, построенной по собственному принципу (рис. 4.200). Рис. 4.200. Требуемый вид отчета Для этого в справочнике Номенклатура создадим еще один реквизит МойРодитель, указав тип данных СправочникСсылка.Номенклатура (рис. 4.201). 249 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 4.201. Создание поля для построения иерархии В режиме 1С:Предприятие создадим в справочнике Номенклатура новую группу Моя иерархия для хранения списка элементов собственной иерархии. Внутри этой группы создадим элементы и заполним у них поле Мой родитель (табл. 4.1). Таблица 4.1. Заполнение поля «Мой родитель» у элементов группы «Моя иерархия» справочника «Номенклатура» Далее откроем группу Комплектующие и заполним у них поле Мой родитель (табл. 4.2). Таблица 4.2. Заполнение поля «Мой родитель» у элементов группы «Комплектующие» справочника «Номенклатура» 250 Глава 4. Примеры разработки отчетов Таким образом, мы подготовили данные для построения новой иерархии. Конечно, можно было организовать такую иерархию с помощью групп и получить отчет, используя стандартную иерархию справочника, но мы хотим показать пример, который можно использовать для любого, в том числе неиерархического объекта данных. Теперь перейдем к созданию самого отчета. Добавим новый объект конфигурации Отчет и назовем его Поступление Товаров. Откроем конструктор схемы компоновки данных и добавим новый набор данных - запрос. Назовем его Приход. В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления ОстаткиНоменклатуры. Обороты. В список полей перенесем поля (рис. 4.202): Склад, Номенклатура, КоличествоПриход. Рис. 4.202. Выбор полей для запроса На закладке Объединения/Псевдонимы изменим имя у поля КоличествоПриход на Приход. Из этого запроса мы будем получать нужные нам данные о поступлении товаров. Нажмем ОК и вернемся в конструктор схемы компоновки данных. Чтобы выполнить иерархическую группировку, процессору компоновки данных требуется информация об источнике данных для построения иерархии. Поэтому нам необходимо создать набор данных, содержащий информацию о текущем элементе справочника Номенклатура и его родителе, с последующим указанием связи набора к самому себе. Выделив 251 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных корневой элемент наборов данных, добавим набор данных запрос. Назовем его Иерархия. В качестве источника данных для запроса выберем объектную таблицу справочника Номенклатура. В список полей перенесем поля Ссылка, МойРодитель (рис. 4.203): Рис. 4.203. Выбор полей для запроса Перейдем на закладку Условия, раскроем таблицу Номенклатура и перетащим мышью поле Ссылка в список условий. В предложенном по умолчанию условии выберем вид сравнения - В (рис. 4.204). Рис. 4.204. Создание условия запроса На закладке Объединения/Псевдонимы изменим имя у поля Ссылка на Номенклатура. Это важно, так как мы будем использовать это поле для связи наборов данных, и оно должно в обоих наборах иметь одинаковый путь (рис. 4.205). 252 Глава 4. Примеры разработки отчетов Рис. 4.205. Изменение псевдонима поля в запросе Нажмем ОК и вернемся в конструктор схемы компоновки данных. Текст запроса набора Иерархия примет вид (листинг 4.29): Листинг 4.29. Текст запроса На закладке Связи наборов данных необходимо добавить связь: • между наборами данных Приход и Иерархия по полю Номенклатура; • для набора данных Иерархия нужно установить связь к самому себе от поля МойРодитель к полю Номенклатура. Это условие позволит последовательно получить всех родителей элемента. В настройках связи зададим параметр Ссылка, который был определен для запроса набора данных Иерархия. В этот параметр будет помещено значение связи источника (рис. 4.206). 253 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 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). Рис. 4.210. Настройка периода отчета Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. На закладке Другие настройки установим макет оформления (стр. 408) отчета Радуга и заголовок отчета Поступление товаров. Выполним отчет (рис. 4.211). Рис. 4.211. Результат отчета Мы видим, что данные в отчете выводятся с заданной нами новой иерархией, кроме того, отчет оформлен созданным нами в предыдущем примере макетом оформления. Продемонстрируем теперь на этом же примере работу с расшифровкой (стр. 344). Предположим, мы хотим иметь возможность 256 Глава 4. Примеры разработки отчетов открывать из отчета первичные документы по поступлению товаров. Для этого нам нужно детализировать записи в отчете по полю Регистратор, то есть документу, который произвел движения о поступлении товаров в регистре накопления ОстаткиНоменклатуры. Откроем схему компоновки данных на закладке Наборы данных и вызовем конструктор запроса набора данных Приход. Вызовем диалог параметров виртуальной таблицы ОстаткиНоменклатуры.Обороты. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы. В открывшемся окне параметров зададим значение параметра Периодичность - Регистратор (рис. 4.212). Рис. 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. Процедура обработчика события обработки расшифровки для поля «Результат» 260 Глава 4. Примеры разработки отчетов Здесь мы отменяем стандартную обработку расшифровки, создаем новый обработчик расшифровки - объект ОбработкаРасшифровкиКомпоновкиДанных, затем задаем список доступных действий расшифровки - ОткрытьЗначение, Упорядочить, Расшифровать, выполняем выбор действия расшифровки, загружаем настройки для выбранной расшифровки в компоновщик настроек и переформировываем отчет. Чтобы компоновка проводилась с новыми настройками, в начало процедуры СформироватьОтчет() запишем следующий фрагмент кода (листинг 4.33). 261 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Листинг 4.33. Фрагмент процедуры СформироватьОтчет() Настройки = КомпоновщикНастроек.Настройки; Выполним отчет. Двойным щелчком на поле отчета мы можем вызвать меню собственной расшифровки и выполнить перечисленные в нем действия расшифровки (рис. 4.216). Рис. 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. Примеры разработки отчетов В начало модуля внесем определение переменных (листинг 4.37): Листинг 4.37. Определение переменных Перем ДанныеРасшифровки, СхемаКомпоновкиДанных; Прокомментируем текст модуля. В модуле формы мы создали процедуру ПриОткрытии(), которая вызывается при открытии формы отчета. В ней определяются схема компоновки данных и настройки по умолчанию нашего отчета. Затем компонуется отчет и выводится в элемент формы Результат, а не в табличный документ, как было ранее. В модуле формы мы также создали процедуру РезультатВыбор(), которая вызывается при двойном щелчке мыши на поле отчета. Именно здесь нужно определять действия по расшифровке, так как стандартная расшифровка и событие ОбработкаРасшифровки() вызываются только для форм типа Форма отчета. В процедуре РезультатВыбор() мы создаем объект ОбработкаРасшифровкиКомпоновкиДанных, затем получаем ЭлементРасшифровкиДанных и ЭлементРасшифровкиДанныхПоля и выполняем действие расшифровки ОткрытьЗначение для выбранного поля. В режиме 1С:Предприятие откроем справочник номенклатуры и нажмем кнопку Печать. Двойным щелчком на поле отчета мы можем открыть элемент справочника (рис. 4.218). 265 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 4.218. Результат отчета Таким образом, на этом примере мы научились: • Выводить данные в отчете, отражающие структуру иерархического справочника. • Задавать собственную иерархию реквизиту и отображать ее в отчете. • Выводить данные с детализацией по первичному документурегистратору. • Заполнять данные расшифровки при программном формировании отчета. • Создавать собственные обработчики события расшифровки отчета. 266 по произвольному Глава 4. Примеры разработки отчетов Пример 11. Использование источников данных - объединений объектов. Программная настройка отчета. Программное описание схемы компоновки данных В этом примере мы продолжим работать с объектами встроенного языка и рассмотрим их объединение в наборе данных. Такое решение нам подходит, так как мы хотим разработать отчет, содержащий объединенную информацию о поступлении и расходе комплектующих на сборку системных блоков. Этот отчет будет вызываться из документа СборкаКомпьютера и представлять информацию о списке комплектующих, содержащихся в документе (рис. 4.219). Рис. 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. Процедура обработчика события нажатия кнопки «АнализЦен» 273 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных 274 Глава 4. Примеры разработки отчетов Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора поступлений комплектующих из документов ПриходнаяНакладная. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаПриход и Поступило. В качестве параметра запроса используется список номенклатуры табличной части текущего документа. Затем определяется запрос для выбора расхода комплектующих из документов СборкаКомпьютера. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаСборки и Собрано. В качестве параметров запроса используется список номенклатуры табличной части текущего документа и вид номенклатуры - Материалы, так как в отчете нужно отображать только комплектующие. Затем создаются два внешних набора данных - ЦеныПоступления и ЦеныСборки и заполняются результатами запросов. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. Запустим систему врежиме1С:Предприятие. Откроем документ СборкаКомпьютера. Нажмем кнопку АнализЦен. На экране появится наш отчет (рис. 4.228). Рис. 4.228. Результат отчета Теперь продемонстрируем возможность программной настройки нашего отчета. Для этого сначала удалим все настройки, которые мы сделали в схеме компоновки данных. 275 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных СОВЕТ Советуем перед удалением настроек сохранить схему компоновки данных в файл. На закладке Настройки нажмем кнопку Q Стандартная настройка, расположенную на командной панели справа в окне. На запрос конфигуратора о подтверждении потери текущих настроек ответим утвердительно. В результате все сделанные нами настройки будут очищены, а мы восстановим их программным образом. В модуле формы документа откроем процедуру обработчика события нажатия на кнопку АнализЦен и отредактируем фрагмент кода следующим образом (листинг 4.40). Листинг 4.40. Фрагмент процедуры обработчика события нажатия кнопки «АнализЦен» СхемаКомпоновкиДанных = ПолучитьМакет("АнализЦенКомплектующих"); УстановитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Как видим, мы добавили вызов процедуры УстановитьНастройки(), в которой будут программно установлены настройки отчета. Затем добавим эту процедуру в модуль формы и объявим переменные в начале модуля (листинг 4.41). Листинг 4.41. Процедура объявления переменных Перем СхемаКомпоновкиДанных, Настройки; Процедуру УстановитьНастройки() будем вносить и комментировать по частям для лучшего восприятия материала. Сначала получим настройки по умолчанию схемы компоновки данных, которые мы предварительно очистили. Создадим группировку по полю Номенклатура и назначим для нее автовыбор полей (листинг 4.42). 276 Глава 4. Примеры разработки отчетов Листинг 4.42. Процедура программной установки настроек В общем списке выбранных полей создадим группу Поступило и добавим в нее поля Поступило с заголовком Количество и ЦенаПриход с заголовком Цена. Затем создадим группу Собрано и добавим в нее поля Собрано с заголовком Количество и ЦенаСборки с заголовком Цена. Затем в общий список выбранных полей добавим поле Выручка (листинг 4.43). Листинг 4.43. Процедура программкой установки настроек 277 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Настроим параметры вывода Заголовок и ВертикальноеРасположениеОбщихИтогов. Обратите внимание, что названия некоторых параметров вывода не совпадают с названиями в окне настроек схемы компоновки данных. Список имен параметров для программного использования можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Настройки компоновки данных - ЗначенияПараметровВыводаКомпоновкиДанных (листинг 4.44). Листинг 4.44. Процедура программной установки настроек 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. Процедура программной установки схемы компоновки В первый набор-объект добавим поле Номенклатура, ЦенаСборки с заголовком Цена и Собрано с заголовком Количество. Во второй набор-объект добавим поле Номенклатура, ЦенаПриход с заголовком Цена и Поступило с заголовком Количество. Обратите внимание, что имя поля и путь к данным у полей внешних наборов данных совпадают (листинг 4.49). Листинг 4.49. Процедура программной установки схемы компоновки 281 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных ПолеЗ.Заголовок = "Количество"; Поле1 = На6ор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); Поле1.Поле = "Номенклатура"; Поле1.ПутьКДанным = "Номенклатура"; Поле1.3аголовок = "Номенклатура"; Поле2 = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); Поле2.Поле = "ЦенаПриход"; Поле2.ПутьКДанным = "ЦенаПриход"; Поле2.Заголовок = "Цена"; ПолеЗ = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеЗ.Поле = "Поступило"; ПолеЗ.ПутьКДанным = "Поступило"; ПолеЗ.Заголовок = "Количество"; Далее добавим вычисляемое поле Выручка и зададим его формат без вывода дробной части. Затем добавим поля ресурсов ЦенаПриход, ЦенаСборки, Поступило, Собрано и Выручка и зададим выражения для их расчета (листинг 4.50). Листинг 4.50. Процедура программной установки схемы компоновки 282 Глава 4. Примеры разработки отчетов В заключение нам осталось задать формат полей ЦенаПриход и ЦенаСборки также без вывода дробной части. Но поскольку на уровне наборов данных - объектов нет возможности задать оформление, эти поля сначала нужно добавить в набор данных - объединение. Автоматически, как в конструкторе компоновки данных, в родительский набор они не добавляются (листинг 4.51). Листинг 4.51. Процедура программной установки схемы компоновки Проверим результат. Мы получили абсолютно такой же отчет, как и при использовании схемы компоновки данных (рис. 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). Рис. 4.229. Просмотр схемы компоновки данных в программе Internet Explorer Листинг 4.52. Описание поля «Регистратор» в XML-файле схемы компоновки данных 286 Глава 4. Примеры разработки отчетов Между открывающим и закрывающим тегом <query> находится описание текста запроса набора данных. Заменим этот текст на следующий (листинг 4.53): Листинг 4.53. Описание текста запроса в XML-файле схемы компоновки данных Тег </dataSet> закрывает описание набора данных схемы компоновки. Между открывающими и закрывающими тегами <total Field > находится описание полей ресурсов схемы компоновки данных. Между открывающими и закрывающими тегами <parameter> находится описание параметров схемы компоновки данных. Тег <defaultSettings> открывает описание настроек по умолчанию схемы компоновки данных. Между открывающими и закрывающими тегами <dcsset: selection > находится описание списка выбранных полей настроек схемы компоновки данных. Между открывающими и закрывающими тегами <dcsset: filter> находится описание условий отбора настроек схемы компоновки данных. Удалим его. Между открывающими и закрывающими тегами <dcsset: conditionalAppearance> находится описание условного оформления настроек схемы компоновки данных. Удалим его. 287 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Между открывающими и закрывающими тегами <dcsset: outputParameters> находится описание настроек вывода схемы компоновки данных. Добавим в него следующий фрагмент (листинг 4.54): Листинг 4.54. Описание настроек вывода - макета оформления и расположения общих итогов по вертикали в XML-файле схемы компоновки данных Между открывающими и закрывающими тегами <dcsset: item> находится описание элементов структуры настроек схемы компоновки данных. Поменяем местами описание группировок Номенклатура и Контрагент. В описании группировки Период изменим имя поля на Регистратор (листинг 4.55). Листинг 4.55. Описание поля группировки «Регистратор» в XML-файле схемы компоновки данных <dcsset:field>PerncTpaTop</dcsset:field> Тег </defaultSettings> закрывает описание настроек по умолчанию схемы компоновки данных. Тег </DataCompositionSchema> закрывает описание схемы компоновки данных. Сохраним сделанные изменения. Таким образом, мы отредактировали схему компоновки данных отчета Продажи 288 Глава 4. Примеры разработки отчетов номенклатуры так, чтобы видеть в этом отчете данные с детализацией по полю Регистратор, убрали у отчета условное оформление и отбор, установили значения параметров вывода Макет оформления - Зеленый и Расположение общих итогов по вертикали - В начале и в конце. Мы также поменяли местами группировки Контрагент и Номенклатура, а группировку по полю Период заменили на группировку Регистратор. Теперь проверим результат. Создадим новый объект конфигурации Обработка с именем ЗагрузкаСхемыХМL. На закладке Формы создадим основную форму обработки с именем Форма (рис. 4.230). Рис. 4.230. Создание основной формы обработки Откроем эту форму и выполним пункт основного меню Форма - Вставить элемент управления. Выберем элемент управления - Поле табличного документа и дадим ему имя Результат. Расположим поле результата отчета в форме. Двойным щелчком на заголовке формы или через контекстное меню вызовем 289 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных диалог ее свойств, найдем событие ПриОткрытии() и нажмем значок лупы справа от него. В модуле формы будет автоматически создан шаблон обработчика события ПриОткрытии() которое будет вызываться при открытии формы. В модуль формы внесем следующий текст (листинг 4.56): Листинг 4.56. Процедуры модуля формы обработки 290 Глава 4. Примеры разработки отчетов В модуле формы мы создали процедуру ПриОткрытии(), которая запускает процедуру КнопкаВыполнитьНажатие(). В ней вызывается диалог выбора схемы компоновки данных, затем выбранная схема сериализуется из файла XML и выполняется программная компоновка данных, уже знакомая нам по предыдущим примерам. Последняя строка процедуры КнопкаВыполнитьНажатие() отражает возможность сворачивания групп в отчете до указанного уровня, в данном случае до верхнего уровня. Запустим обработку в режиме 1С:Предприятие. Выберем файл, содержащий схему компоновки данных, который мы редактировали, Схема_продажи_номенклатуры.xml. Сравним результат 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). Рис. 5.3. Структура отчета Результат отчета с группировкой по периоду без дополнения будет выглядеть следующим образом (рис. 5.4, 5.5). Рис. 5.4. Группировка по периоду без дополнения 296 Глава 5. Справочник разработчика Рис. 5.5. Диаграмма с группировкой по периоду без дополнения Как видно, дни, за которые отсутствовали движения, не выводятся в отчет, что не позволяет оценить динамику продаж. Чтобы включить данные о продажах за любые периоды, воспользуемся дополнением периодов. Для этого двойным щелчком мыши вызовем диалог редактирования свойств группировки ПериодДень и установим тип дополнения День (рис. 5.6). Рис. 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. Текст запроса с использованием характеристик В предложении ХАРАКТЕРИСТИКИ тип указывается в скобках после ключевого слова ТИП. Типы, входящие в составной тип, перечисляются через запятую. Список характеристик описывается при помощи ключевых слов СПИСОК, ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ. После ключевого слова СПИСОК идет имя таблицы, из которой получается список характеристик, либо в скобках - текст запроса, при помощи которого получается список характеристик. После ключевых слов ИДЕНТИФИКАТОР, ИМЯ, ТИПЗНАЧЕНИЯ указываются имена полей для получения идентификатора, имени и типа значений характеристики соответственно. Значения характеристик описываются при помощи ключевых слов ЗНАЧЕНИЯ, ОБЪЕКТ, ХАРАКТЕРИСТИКА, ЗНАЧЕНИЕ. 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). Рис. 5.25. Результат отчета с использованием характеристик контрагентов 313 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Использование категорий При помощи механизма характеристик системы компоновки данных можно описывать и категории-характеристики, не имеющие значений, а имеющие лишь признак наличия/отсутствия. Для примера добавим в план видов характеристик категорию Лучший покупатель и выведем ее в отчете Список контрагентов. Откроем схему компоновки данных отчета и в конструкторе запроса опишем характеристики (рис. 5.26). Рис. 5.26. Описание характеристик в тексте запроса В результате будет создан следующий запрос (листинг 5.3): Листинг 5.3. Получение категорий контрагентов 314 Глава 5. Справочник разработчика Как видно, в описании характеристик не указано поле ТипЗначения. В этом случае считается, что характеристика имеет логический тип. Кроме того, не указано поле, из которого будет получаться значение характеристики. В таком случае считается, что значение характеристики Истина, если характеристика для объекта присутствует в таблице значений характеристик, и Ложь в противном случае. Запустим систему в режиме 1С:Предприятие. В план видов характеристик Свойства объектов добавим категорию Лучший покупатель (рис. 5.27). Рис. 5.27. Создание новой характеристики в плане видов характеристик В справочнике контрагентов добавим эту характеристику для контрагентов ООО «Автоматика» и ООО «Стандарт» (рис. 5.28). Рис. 5.28. Добавление характеристики в свойства контрагентов 315 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В регистре сведений Значения свойств объектов появятся соответствующие записи (рис. 5.29). Рис. 5.29. Записи регистра сведений Откроем окно настроек отчета Список контрагентов. На закладке Выбранные поля в списке реквизитов поля Контрагент появилась категория Лучший покупатель. Перенесем ее в список полей отчета. Отключим использование вложенного отчета Продажи, чтобы в отчет выводился только список контрагентов и их категории (рис. 5.30). Рис. 5.30. Окно настроек отчета 316 Глава 5. Справочник разработчика На закладке Другие настройки зададим значение параметра Расположение реквизитов - Отдельно, чтобы категория контрагента выводилась в отдельной колонке (рис. 5.31). Рис. 5.31. Настройка вывода реквизитов Выполним отчет. Мы видим, что значение категории Лучший покупатель интерпретируется как Истина или Ложь в зависимости от ее наличия в свойствах контрагента (рис. 5.32). Рис. 5.32. Результат отчета Теперь используем в отборе характеристику Лучший покупатель. На закладке Отбор создадим новый элемент отбора по полю Лучший покупатель со значением Истина (рис. 5.33). Рис. 5.33. Настройка отбора с использованием категории контрагента 317 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В результате в отчет выводятся только два контрагента, в свойства которых мы добавили категорию Лучший покупатель (рис. 5.34). Рис. 5.34. Результат отчета Иерархия Система компоновки данных позволяет выводить в отчет иерархические данные. Иерархия может строиться: • Для групп иерархического справочника (рис. 5.35). Рис. 5.35. Вывод группировки «Контрагент» с иерархией справочника «Контрагенты» • 318 Для произвольного (рис. 5.36). иерархического набора данных Глава 5. Справочник разработчика Рис. 5.36. Вывод группировки «Номенклатура» с собственной иерархией Для детальных (рис. 5.37). записей иерархического справочника Рис. 5.37. Вывод группировки «Детальные записи» иерархического справочника «Номенклатура» 319 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Иерархические группировки Для примера рассмотрим отчет Продажи контрагентам, который выводит информацию об объемах продаж по контрагентам. Справочник Контрагенты имеет следующую иерархическую структуру (рис. 5.38): Рис. 5.38. Структура справочника «Контрагенты» Для начала посмотрим, как будет выглядеть отчет без иерархии. Откроем отчет в режиме 1С:Предприятие. В настройках отчета отключим вывод диаграммы и добавим группировку по полю Контрагент. Тип иерархии оставим без изменения (рис. 5.39). Рис. 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. Справочник разработчика Рис. 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). Рис. 5.51. Настройка иерархической группировки Выполним отчет. Результат отчета с иерархической группировкой примет следующий вид (рис. 5.52): Рис. 5.52. Результат отчета 327 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Набор данных д л я проверки иерархии В схеме компоновки данных можно также определить и набор данных, при помощи которого будет осуществляться проверка иерархии. Так, в предыдущем примере можно определить набор данных, при помощи которого пользовать сможет использовать иерархические виды сравнения с элементами построенной нами иерархии. Функционально это аналог отбора «В группе» для обычного иерархического справочника. В предыдущем примере мы вывели в отчет Поступление товаров иерархическую группировку Номенклатура. При этом иерархия строилась не по группам справочника Номенклатура (полю Родитель), а произвольным образом - по полю справочника Мой родитель. Запустим отчет в режиме 1С:Предприятие. Откроем окно настроек и на закладке Отбор установим отбор Номенклатура в группе Комплектующие (рис. 5.53). Рис. 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С:Предприятии 8. Система компоновки данных В конфигурации создан регистр сведений Места Работы с измерениями Филиал типа Справочник.Ссылка.Филиалы и Сотрудник типа Справочник.Ссылка.Сотрудники (рис. 5.61). Рис. 5.61. Регистр сведений «Места работы» Создадим набор данных Филиалы, получающий филиалов при помощи запроса (листинг 5.8). список Листинг 5.8. Текст запроса Для построения иерархии создадим набор данных Иерархия (листинг 5.9). Листинг 5.9. Текст запроса 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). Рис. 5.65. Описание связи наборов данных При описании связей между наборами данных существует ряд особенностей: • Набор данных, от которого идет связь, будет считаться родительским, а набор данных, к которому идет связь, будет считаться зависимым от него. • В схеме компоновки данных нет описания типа связи. Все связи считаются Левыми внешними соединениями, то есть у родительского набора данных будут отражаться в отчете все записи, независимо от того, найдены ли соответствующие им данные в зависимом наборе данных или нет. Исключение составляет случай, когда на поле зависимого отбора данных 337 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных наложен глобальный (на уровне всего отчета) отбор. Тогда все связи наборов данных, генерируемые системой компоновки, данных будут иметь тип Внутренняя. Продемонстрируем на примере, как изменится результат отчета, в зависимости от того, какой набор выбран родительским, а какой - зависимым. При описании связи наборов данных набор Поступление указан в качестве родительского набора. Поэтому в результате отражены все поступления номенклатуры и только та номенклатура из набора Расход, которая есть в наборе Поступление (рис. 5.66). Рис. 5.66. Результат отчета Теперь укажем набор данных Расход в качестве родительского набора (рис. 5.67). Рис. 5.67. Описание связи наборов данных В результате отражены все записи о расходе номенклатуры и только та номенклатура из набора Поступление, которая есть в наборе Расход (рис. 5.68). 338 Глава 5. Справочник разработчика Рис. 5.68. Результат отчета Создадим отбор на уровне всего отчета на поле зависимого набора Поступление (рис. 5.69). Рис. 5.69. Отбор отчета по полю зависимого набора данных В результате в отчет попадут только связанные по полю Номенклатура записи из обоих наборов данных, то есть тип связи будет Внутренним соединением (рис. 5.70). Рис. 5.70. Результат отчета С точки зрения эффективности исполнения отчета лучше получать в дочернем наборе сразу только те записи, которые удовлетворяют условию связи наборов данных. Для этого нужно указать в запросе дочернего набора параметр связи и исполь339 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных зовать его в схеме компоновки при описании связи (см. главу 4 пример 7). Иначе в дочернем наборе будет получено много лишних записей, которые затем будут откидываться как не удовлетворяющие условию связи. • Если родительский и зависимый наборы данных содержат поле с одинаковым именем, то данные поля будут извлекаться из родительского набора. Несвязанные наборы данных не могут содержать поля с одинаковыми именами. • Данные зависимого набора не могут быть получены без получения данных из родительского набора. • Если ни одно поле зависимого набора данных не участвует в настройках системы компоновки данных, то этот набор не будет включен в макет компоновки данных. • В случае если в группировке используются данные из нескольких наборов данных, при исполнении компоновки осуществляется обход по последнему зависимому набору данных. Расчет итогов Система компоновки позволяет выводить в отчет данные из нескольких наборов. При этом в некоторые группировки могут попадать записи некоторого набора данных по нескольку раз. Однако в случае использования связанных наборов данных, при расчете итога, каждая запись будет учтена только один раз. Если отчет получен с использованием связи двух таблиц в запросе, общий итог будет содержать суммы по всем строкам, что неверно. Для примера рассмотрим вывод отчета с использованием двух связанных наборов данных. 340 Глава 5. Справочник разработчика Создадим набор данных, получающий остатки номенклатуры при помощи запроса (листинг 5.12). Листинг 5.12. Текст запроса ВЫБРАТЬ Остатки НоменклатурыОстатки. Номенклатура, ОстаткиНоменклатурыОстатки.Склад, ОстаткиНоменклатурыОстатки.КоличествоОстаток ИЗ РегистрНакопления.ОстаткиНоменклатуры. Остатки КАК ОстаткиНоменклатурыОстатки Укажем ресурс отчета - КоличествоОстаток. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Склад, КоличествоОстаток (рис. 5.71). Рис. 5.71. Настройки отчета Выполним отчет (рис. 5.72). Рис. 5.72. Результат отчета Создадим набор данных, получающий продажи номенклатуры при помощи запроса (листинг 5.13). 341 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Листинг 5.13. Текст запроса ВЫБРАТЬ ПродажиОбороты. Контрагент, ПродажиОбороты. Номенклатура, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты Укажем ресурсы отчета - КоличествоОборот и СтоимостьОборот. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, КоличествоОборот, СтоимостьОборот (рис. 5.73). Рис. 5.73. Настройки отчета Выполним отчет (рис. 5.74). Рис. 5.74. Результат отчета Свяжем два указанных выше набора данных по полю Номенклатура (рис. 5.75). 342 Глава 5. Справочник разработчика Рис. 5.75. Связь наборов данных Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, Склад, КоличествоОстаток, КоличествоОборот, СтоимостьОборот (рис. 5.76). Рис. 5.76. Настройки отчета Выполним отчет (рис. 5.77). Рис. 5.77. Результат отчета Мы видим, что за счет соединения записи из обоих наборов данных выводятся в результат по нескольку раз. Однако общий итог по таблице рассчитан правильно за счет того, что в расчете итогов каждая запись участвует только один раз. 343 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Получим теперь такой же отчет с использованием связи двух таблиц в запросе (листинг 5.14). Листинг 5.14. Текст запроса Создадим такие же ресурсы и настройки отчета, как и в предыдущем случае (рис. 5.76). Выполним отчет (рис. 5.78). Рис. 5.78. Результат отчета Мы видим, что итоговые значения содержат суммы по всем строкам. В данном случае - это неверный результат. Расшифровка Система компоновки данных предоставляет возможность расшифровать информацию, содержащуюся в отчете. То есть, выполнив отчет и выделив одну из его ячеек, пользователь может получить другой отчет, связанный со значением, находящимся в этой ячейке. 344 Глава 5. Справочник разработчика Например, более подробный отчет, показывающий, из каких именно показателей получилась эта сумма в ячейке. Или открыть и посмотреть тот документ, который указан в этой ячейке. Или отобрать, отсортировать данные этого отчета по значению в этой ячейке и т. п. Например, получив отчет по продажам номенклатуры, можно двойным щелчком мыши на поле вызвать меню расшифровки (рис. 5.79). Рис. 5.79. Вызов меню расшифровки Далее выбрать пункт Расшифровать и поле, по которому нужно расшифровать данные (рис. 5.80). Рис. 5.80. Выбор поля расшифровки 345 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В результате будет получен отчет, содержащий более конкретную информацию по выделенной ячейке и расшифровывающий ее по выбранному полю, в данном случае Период (рис. 5.81). Рис. 5.81. Результат отчета Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных. Он позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета-расшифровки. При формировании табличного документа с помощью системы компоновки данных в расшифровку ячейки помещаются специальные объекты типа ИдентификаторРасшифровки. При этом самих значений полей и полей группировок в табличном документе нет. Получить значения полей можно из объекта ДанныеРасшифровки, который был заполнен при выводе отчета. Для того чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных. Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект. Для того чтобы данные расшифровки заполнились при формировании результата, необходимо передать объект ДанныеРасшифровки в метод Инициализировать) процессора компоновки данных. 346 Глава 5. Справочник разработчика Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки. Однако в отчетах, где используется собственная процедура программной компоновки данных Отчет по системным блокам (стр. 153) и Сборка системных блоков (стр. 176), нужно явно указывать объект Данные расшифровки для заполнения информации о расшифровке при формировании отчета (листинг 5.15). Листинг 5.15. Фрагмент процедуры СформироватьОтчет() Тогда при двойном щелчке мыши на поле отчета вызывается стандартное меню расшифровки, которое состоит из возможных действий над расшифровкой: Расшифровать, Открыть, Отфильтровать, Упорядочить, Сгруппировать, Оформить. Действие Расшифровать не доступно, если данный элемент расшифровки - Детальные записи, кроме случая, когда он содержит поля-ресурсы. Однако разработчик может реализовать и свой, нестандартный, вариант расшифровки. В этом случае он может изменить список доступных действий расшифровки, выполнить другие процедуры и т. п. Продемонстрируем собственный вариант расшифровки на примере отчета Сборка системных блоков. Для этого в форме отчета нужно создать обработчик события ОбработкаРасшифровки() для поля Результат (рис. 5.82). 347 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.82. Обработчик события «ОбработкаРасшифровки» для поля табличного документа «Результат» В модуле формы внесем процедуру обработчика события (листинг 5.16). следующий текст в ОбработкаРасшифровки Листинг 5.16. Процедура обработчика события обработки расшифровки для поля «Результат» 348 Глава 5. Справочник разработчика Здесь мы отменяем стандартную обработку расшифровки, создаем новый обработчик расшифровки - объект ОбработкаРасшифровкиКомпоновкиДанных, затем задаем список доступных действий расшифровки - ОткрытьЗначение, Упорядочить, Расшифровать, выполняем выбор действия расшифровки, загружаем настройки для выбранной расшифровки в компоновщик настроек и переформировываем отчет. Чтобы компоновка проводилась с новыми настройками, в начало процедуры СформироватьОтчет() запишем следующий фрагмент кода (листинг 5.17): Листинг 5.17. Фрагмент процедуры СформироватьОтчет() Настройки = КомпоновщикНастроек.Настройки; Выполним отчет. Двойным щелчком на поле отчета мы можем вызвать меню собственной расшифровки и выполнить перечисленные в нем действия расшифровки (рис. 5.83). 349 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.83. Результат отчета Однако в случае, когда мы выводили результат отчета не в форму, а в простой табличный документ, как, например, при выводе списка номенклатуры из справочника номенклатуры (пример 3, стр. 144), расшифровка работать не будет. Поэтому сначала нужно создать специальную форму и вывести результат отчета в поле табличного документа, расположенного в этой форме. Более подробно об этом рассказывалось в главе 4. Затем в этой форме нужно создать обработчик события Выбор для поля Результат (рис. 5.84). Рис. 5.84. Обработчик события Выбор() для поля табличного документа «Результат» 350 Глава 5. Справочник разработчика В модуле формы внесем следующий текст в процедуру обработчика события Выбор() (листинг 5.18). Листинг 5.18. Процедура обработчика события Выбор() для поля «Результат» В начало модуля внесем определение переменных (листинг 5.19). Листинг 5.19. Определение переменных Перем ДанныеРасшифровки, СхемаКомпоновкиДанных; В модуле формы мы создали процедуру РезультатВыбор(), которая вызывается при двойном щелчке мыши на поле отчета. Здесь мы создаем объект ОбработкаРасшифровкиКомпоновкиДанных, затем получаем ЭлементРасшифровкиДанных и ЭлементРасшифровкиДанныхПоля и выполняем действие расшифровки ОткрытьЗначение для выбранного поля. Таким образом, щелкнув два раза на поле результата при запуске отчета из справочника номенклатуры, мы можем открыть элемент справочника (рис. 5.84). 351 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.85. Результат отчета ВНИМАНИЕ! В случае использования произвольных форм для вывода результата отчета нужно определять действия по расшифровке в обработчике события Выбор() для расшифровка и событие ся только для форм типа поля Результат, так как стандартная ОбработкаРасшифровки() вызывают- Форма отчета. Использование нескольких схем компоновки для одного отчета Каждый отчет может иметь несколько схем компоновки данных. Иногда бывает нужно выполнить один и тот же отчет, поразному представив данные в нем, в зависимости от ситуации. Например, в одной схеме компоновки данные для отчета получаются при помощи запроса к информационной базе, а в другой 352 Глава 5. Справочник разработчика заполняются программно из таблицы значений. Затем нужная схема компоновки может быть программно или визуально установлена для отчета. Чтобы создать для отчета новую схему компоновки, нужно раскрыть его в дереве отчетов конфигурации, выделить ветвь Макеты, нажать кнопку Добавить в командной панели окна конфигурации (рис. 5.86). Рис. 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). Рис. 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). Рис. 5.99. Установка представления отбора на английском языке В случае если для отчета создан предопределенный макет, система компоновки данных позволяет задавать многоязычные заголовки макетов полей и группировок. Для примера откроем 360 Глава 5. Справочник разработчика схему компоновки ПечатьСборки документа СборкаСистемныхБлоков. На закладке Макеты выделим ячейку, имеющую тип заполнения Текст или Шаблон, вызовем окно редактирования ее свойств и, нажав кнопку открытия со значком лупы, введем заголовок на английском языке (рис. 5.100). Рис. 5.100. Установка заголовка макета ячейки на английском языке Теперь запустим 1С:Предприятие 8 командной строкой "C:\Program Files\1cv81\bin\1cv8.exe" /len для англоязычного интерфейса от имени пользователя, для которого установлен английский язык. Чтобы установить для пользователя английский язык, выполним в меню конфигуратора пункт Администрирование - Пользователи, выберем в списке пользователя и в открывшемся окне, на закладке Прочие, укажем для него свойство Язык. Выполним Отчет по продажам, выделив в списке отчетов его синоним на английском языке (Sales report), введенный нами ранее. Вызовем окно настроек отчета кнопкой Settings, включим использование группировки Customer и изменим начало отчетного периода на 01/03/2008 (рис. 5.101). 361 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.101. Результат отчета в англоязычной среде Сформируем отчет кнопкой Generate. В результате заголовки полей отчета, параметров и заголовок диаграммы будут выведены в англоязычном варианте (рис. 5.102). Рис. 5.102. Результат отчета в англоязычной среде 362 Глава 5. Справочник разработчика Вызовем печать документа Сборка компьютера, для которого ранее мы создали предопределенный макет и задали заголовки полей табличной части на английском языке (рис. 5.103). Рис. 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. Система компоновки данных Рис. 5.117. Выражение представления для поля «Контрагент» Если выражение представления установлено, то в результат отчета будет выводиться не основное представление поля, а результат этого выражения. Для примера рассмотрим отчет Отчет по продажам. Для поля Контрагент в колонку Выражение представления введем следующий текст (листинг 5.25): Листинг 5.25. Выражение для представления в отчете поля «Контрагент» "(" + Контрагент.Код + ")" + Контрагент.Наименование Рис. 5.118. Результат отчета 374 Глава 5. Справочник разработчика В результате выполнения отчета код контрагента будет отражаться в скобках слева от его наименования (рис. 5.118). В выражении для представления можно также использовать функции из общих модулей. Чтобы функцию можно было использовать в схеме компоновки данных, необходимо чтобы в ее описании присутствовало ключевое слово Экспорт. Например, в общем модуле ФункцииДляОтчетов есть функция ПредставлениеРегистратора( Регистратор) (листинг 5.26). Листинг 5.26. Функция общего модуля Тогда в выражении представления для поля можно воспользоваться следующим выражением (листинг 5.27): Листинг 5.27. Выражение для представления поля с использованием функции общего модуля В результате выполнения отчета поле регистратора будет отражено в следующем виде (рис. 5.119): Рис. 5.119. Результат отчета 375 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Вычисляемые поля При разработке отчетов не всегда хватает полей, определенных в наборе данных. Довольно часто бывает нужно отразить какието другие поля, которые рассчитываются на основе имеющихся по определенному алгоритму. Например, выручку как разницу между доходами и расходами и т. п. Для этого в системе компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы, значения которых будут вычисляться по некоторой формуле. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных. Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Оно описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение: в нем нельзя использовать вычисляемые поля. В остальном ограничений нет - можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, а также функции общих модулей конфигурации. Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление так же, как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс. Для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог. Для примера рассмотрим отчет Отчет по системным блокам. Откроем схему компоновки данных и на закладке Вычисляе376 Глава 5. Справочник разработчика мые поля добавим вычисляемое поле. Дадим ему имя (Путь к данным) - Прибыль, в колонку Выражение введем следующий текст (листинг 5.28): Листинг 5.28. Выражение для расчета вычисляемого поля «Прибыль» СтоимостьРасход - СтоимостьПриход Заголовок вычисляемого поля, который будет отображаться в шапке отчета, задается по умолчанию, но можно его изменить или задать в случае использования в конфигурации нескольких языков (рис. 5.120). Рис. 5.120. Создание вычисляемого поля Вычисляемое поле можно добавить в ресурсы отчета, чтобы вычислять по нему групповые и общие итоги (рис. 5.121). Рис. 5.121. Добавление вычисляемого поля в ресурсы отчета В результате выполнения отчета в поле Прибыль будет отражаться прибыль от продажи собранных системных блоков, то есть разница между его продажной стоимостью и стоимостью 377 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных комплектующих и услуг, израсходованных на сборку компьютера (рис. 5.122). Рис. 5.122. Результат отчета Однако не всегда простым суммированием можно получить правильные итоги по вычисляемому полю. В таких случаях требуется задать собственное выражение для расчета ресурса. Как, например, в схеме компоновки данных АнализЦенКомплектующих для поля Выручка (рис. 5.123). Рис. 5.123. Расчет итога для вычисляемого поля Суммарная выручка будет получена как произведение количества ушедших в сборку комплектующих на разницу средних цен сборки и поступления по каждому из них. В этом случае следует задать следующее выражение для расчета ресурса Выручка (листинг 5.29). Листинг 5.29. Выражение для расчета ресурса «Выручка» Сумма(Собрано) * (Среднее(ЦенаСборки) - Среднее(ЦенаПриход)) 378 Глава 5. Справочник разработчика В выражении вычисляемого поля можно также использовать функции из общих модулей. Чтобы функцию можно было использовать в схеме компоновки данных, необходимо чтобы в ее описании присутствовало ключевое слово Экспорт. Например, в общем модуле ФункцииДляОтчетов есть функция ВВерхнийРегистр(Наименование) (листинг 5.30). Листинг 5.30. Функция общего модуля Функция ВВерхнийРегистр(Строка) Экспорт Возврат ВРег(Строка); КонецФункции Тогда в выражении вычисляемого поля можно воспользоваться следующим выражением (листинг 5.31): Листинг 5.31. Выражение вычисляемого поля с использованием функции общего модуля ФункцииДляОтчетов. ВВерхнийРегистр(Наименование) В результате описание вычисляемого поля в схеме компоновки данных примет вид (рис. 5.124): Рис. 5.124. Выражение для расчета вычисляемого поля В результате выполнения отчета название услуг будет выведено в следующем виде (рис. 5.125). Рис. 5.125. Результат отчета 379 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Пользовательские поля Система компоновки данных позволяет определять в отчете Пользовательские поля, используя либо собственные выражения, либо наборы вариантов с условиями их выбора. Пользовательские поля являются аналогом вычисляемых полей, но в упрощенном варианте. Они могут задаваться как в режиме Конфигуратор, так и в режиме 1С:Предприятие, но в выражениях пользовательских полей нельзя использовать функции общих модулей. Поэтому пользовательские поля предназначены скорее для пользователя, чем для разработчика. Для примера рассмотрим отчет Оказание услуг. Откроем закладку Настройки схемы компоновки данных и на закладке Пользовательские поля нажмем кнопку Добавить. Добавим новое поле - Выбор. Зададим собственный заголовок поля и создадим условия отбора для различных вариантов его представления (рис. 5.126). Рис. 5.126. Добавление пользовательского поля выбора Добавим еще одно пользовательское поле- Выражение. Зададим собственный заголовок поля и выражение на языке выражений компоновки данных для отображения детальных записей. Нажмем кнопку Добавить и введем в колонку Выражение детальных записей следующий текст (листинг 5.32). 380 Глава 5. Справочник разработчика Листинг 5.32. Выражение детальных записей для пользовательского поля - выражения «Популярная услуга» В результате окно пользовательского поля-выражения примет вид (рис. 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). Рис. 5.132. Результат отчета 386 Глава 5. Справочник разработчика В результате мы видим, что ресурс Количество рассчитывается только по номенклатуре и не выводится для группировки Контрагент и в общих итогах. Дело в том, что контрагенту могут быть проданы разные виды номенклатуры, и не имеет смысла складывать количество услуг с количеством комплектующих. Отметим, что ресурс не считается доступным для иерархических записей группировки, по которой разрешили его рассчитывать. В предыдущем примере поле Количество не будет выводиться в иерархических записях группировки Номенклатура. Внешний вид отчета и порядок записей изменен, так как в отчет выведена группировка по номенклатуре с типом Иерархия, хотя отчет основан полностью на тех же данных, что и в предыдущем случае (рис. 5.133). Рис. 5.133. Результат отчета Однако в случае если в отборе отчета будет установлен отбор на поле Номенклатура с типом сравнения Равно, значение ресурса также будет выводиться во все группировки отчета (рис. 5.134). 387 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.134. Результат отчета Кроме полей группировок в свойстве Рассчитывать по... можно указывать специальную группировку ОбщийИтог. В таком случае выражение будет использоваться для вывода общего итога. Каждое поле может присутствовать в списке ресурсов несколько раз, для различных полей группировок. То есть можно указать разные формулы расчета Количество для группировок по полю Номенклатура и Контрагент. Это требуется в случаях, когда итог подсчитывается по-разному для разных группировок (рис. 5.135). Однако указание различных выражений одного поля-ресурса для одной и той же группировки недопустимо. В приведенном примере задано, что ресурс Количество будет рассчитываться только для специальной группировки Общий итог. Для ресурса Стоимость установлены различные выражения расчета: для группировки Контрагент как Максимум(Стоимость) и группировок Номенклатура и Общий итог как Сумма(Стоимость), рис. 5.135. 388 Глава 5. Справочник разработчика Рис. 5.135. Установка различных выражений для расчета ресурса В результате общее количество продаж выводится только в итоге отчета, а стоимость продаж для контрагентов рассчитывается как максимальная сумма продаж этому контрагенту. Стоимость продаж по номенклатуре и в общем итоге рассчитывается как суммарная стоимость всех продаж по данной номенклатуре или по всем записям отчета (рис. 5.136). Рис. 5.136. Результат отчета 389 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Параметры Пользователя, как правило, интересуют данные о хозяйственной деятельности за определенный период. Поэтому практически в любом отчете используются параметры, задающие начало и конец отчетного периода. В схеме компоновки данных параметры отчета задаются на закладке Параметры. При использовании свойства Автозаполнение параметры виртуальных таблиц и параметры, указанные в запросе, автоматически добавляются в список параметров отчета. Использование дат Для примера рассмотрим отчет Отчет по системным блокам. Мы видим, что платформа по умолчанию добавила два параметра НачалоПериода и КонецПериода и в колонке Доступные типы задала для них значение Дата (рис. 5.137). Рис. 5.137. Параметры компоновки данных Заметим, что если в отчет передается параметр, содержащий значение типа Дата, то дата всегда содержит и время с точностью до секунды. Однако пользователя, как правило, не интересуют данные в отчете с такой точностью. Чтобы пользователь имел возможность ввести даты начала и окончания отчетного периода без времени, в колонке Доступные типы нажмем кнопку выбора и в нижней части окна редактирования типа данных установим Состав даты в значение Дата для обоих параметров (рис. 5.138). 390 Глава 5. Справочник разработчика Рис. 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. Справочник разработчика Рис. 5.140. Выбор стандартного периода Заметим, что реальные значения дат стандартного периода определяются во время исполнения отчета. Поэтому период отчета будет автоматически меняться в зависимости от фактической даты запуска отчета. Пользоваться стандартным периодом отчета удобно, когда пользователь регулярно выполняет отчет за определенный интервал времени, например текущий месяц. Тогда можно заранее установить в стандартных настройках нужный период, и пользователю не придется задавать его перед формированием отчета. Для повышения удобства работы пользователя имеется возможность скрывать параметры отчета от пользователя, используя свойства (рис. 5.137, 5.139): ЕЗключатьВДоступныеПоля - если флаг установлен, то параметры будут включены в список доступных полей и видны в настройках пользователя. ОграничениеДоступности - если флаг установлен, то параметры не будут видны в настройках пользователя на закладке Параметры. Если параметр, указанный в запросе, доступен в настройках пользователя, то есть у него снят флаг ОграничениеДоступности, то пользователь может указать значение параметра 393 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных перед формированием запроса. В противном случае система компоновки данных сгенерирует другой внутренний запрос к информационной базе без учета данного параметра. Макеты Понятие «макеты» очень часто встречается в системе компоновки данных. Существует макет как элемент системы компоновки существуют предопределенные макеты, существуют макеты оформления... По умолчанию внешний вид отчета формируется системой автоматически. «Внешне» отчет состоит из набора стандартных областей, которые система сама располагает, в зависимости от вида отчета. Но разработчик может задать собственное расположение и оформление различных областей. Это и есть предопределенные макеты. Система самостоятельно оформляет стандартные области отчета. Но разработчик может задать собственные правила, по которым будут оформляться эти стандартные области. Для этого ему потребуется создать свой макет оформления. Таким образом, задать свой вариант оформления можно в обоих случаях. Но в предопределенных макетах можно также изменить расположение полей отчета, задать их размеры, изменить порядок следования, тип заполнения, используя шаблон ячейки, в которой расположено поле, задать события для ячейки и т. п. Но в отличие от макетов оформления, предопределенные макеты «привязаны» к одному отчету, его конкретным полям и структуре. 394 Глава 5. Справочник разработчика Предопределенные макеты Предопределенные макеты могут создаваться при помощи конструктора схемы компоновки данных. Для этого предназначена закладка Макеты. Макет представлен в виде обычного табличного документа, областям которого можно задать нужное оформление. Для примера рассмотрим отчет Остатки номенклатуры. Откроем схему компоновки данных ПредопределенныйМакет. Сначала мы должны установить имена группировок, чтобы мы могли самостоятельно указать, в какую именно область нашего макета будет выводиться эта группировка. На закладке Настройки выделим нужную группировку и вызовем ее контекстное меню. Выберем в нем пункт Установить имя и зададим имена группировок (рис. 5.141). Рис. 5.141. Установка имени группировки Перейдем на закладку Макеты и нажмем кнопку Добавить макет. 395 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Существуют следующие типы предопределенных макетов (рис. 5.142): Макет поля, Макет группировки. Макет заголовка группировки, Макет ресурсов. Рис. 5.142. Добавление макета Макет поля Данный макет предназначен для оформления определенных выводимых полей (рис. 5.143). Рис. 5.143. Макет поля «Склад» 396 Глава 5. Справочник разработчика При создании данного макета необходимо указать поле, для которого создается предопределенный макет. Создадим макет для поля Склад. Зададим ячейку Склад с заполнением Параметр. Зададим оформление ячейки - размер и начертание шрифта. Определим границы диапазона области. Для этого вызовем окно настройки диапазона границ, и, не закрывая это окно, выделим мышью в правом окне нужную область. Сохраним диапазон, нажав в его окне кнопку выбора. После этого в левом нижнем окне появится список параметров, определенных для макета. Более подробно этот процесс рассмотрен в 4-й главе (пример 9 на стр. 224), рис. 5.144. Рис. 5.144. Создание макета поля «Склад» Выполним отчет. Значения поля Склад выводятся с заданным оформлением (рис. 5.145). 397 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.145. Результат отчета Макет группировки Данный макет предназначен для оформления значений группировки (рис. 5.146). Рис. 5.146. Макет группировки «Номенклатура» При создании данного макета необходимо указать либо имя группировки, либо поля группировки, для которой создается макет. Также необходимо указать тип макета. Существуют следующие типы предопределенных макетов (рис. 5.147): Заголовок - данный макет предназначен для оформления заголовка группировки. Заголовок группировки выводится в начале группировки. В случае если группировка содержит вложенные группировки, то заголовок группировки выводится перед записями вложенной группировки. 398 Глава 5. Справочник разработчика Рис. 5.147. Типы макетов Подвал - данный макет предназначен для оформления подвала группировки. Подвал группировки выводится в конце группировки. В случае если группировка содержит вложенные группировки, то подвал группировки выводится после записей вложенной группировки. Если данный макет не задан, то используется макет заголовка. Заголовок иерархии - данный макет предназначен для оформления заголовка иерархической группировки. Данный заголовок выводится в начале иерархической группировки. Если данный макет не задан, то используется макет заголовка; Подвал иерархии - данный макет предназначен для оформления подвала иерархической группировки. Данный подвал выводится в конце иерархической группировки. Если данный макет не задан, то используется макет заголовка иерархии. Общий итог заголовок - данный макет предназначен для оформления области отчета, отображающей общий итог по группировке, и выводится в начале группировки. 399 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Общий итог подвал - данный макет предназначен для оформления области отчета, отображающей общий итог по группировке, и выводится в конце группировки. Если данный макет не задан, то используется макет общего итога заголовка. Создадим макет группировки с именем Номенклатура. В открывшемся диалоге выберем имя группировки Номенклатура и тип макета Заголовок. Зададим элементы оформления ячеек значений группировки - шрифт и цвет текста. У всех ячеек в строке Заполнение укажем Параметр, а в строке Параметр имя конкретного поля, отображающегося в ячейке. Определим границы диапазона области значений группировки. Платформа сформирует список параметров для этой области и заполнит значениями по умолчанию (рис. 5.148). Рис. 5.148. Создание макета группировки «Номенклатура» 400 Глава 5. Справочник разработчика ВНИМАНИЕ! Список параметров, заданных для макета, появится в окне «Параметры макета» только после определения границ диапазона области. При переопределении диапазона список параметров формируется заново, и выражения параметров заменяются значениями по умолчанию. Выполним отчет. Значения группировки Номенклатура выводятся с заданным оформлением (рис. 5.149). Рис. 5.149. Результат отчета Макет заголовка группировки Данный макет предназначен для оформления заголовков группировок (рис. 5.150). Рис. 5.150. Макет заголовка группировки «Склад» 401 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Заголовком группировки называется область отчета, содержащая имена выводимых в отчете полей. При создании данного макета необходимо указать либо имя группировки, либо поля группировки, для которой создается макет. Также необходимо указать тип макета. Типы макетов такие же, как и для макета группировки. Существует следующее правило вывода макетов заголовка группировки: макет заголовка группировки действует на указанную группировку и на все ее вложенные группировки до момента обнаружения другого макета заголовка группировки. При обнаружении другого макета заголовка группировки начинает использоваться обнаруженный макет заголовка группировки. Тем самым существует возможность создания различных макетов заголовка для различных группировок. Для примера рассмотрим отчет с группировкой Склад и вложенной в нее группировкой Номенклатура. Рис. 5.151. Создание макета заголовка группировки «Склад» 402 Глава 5. Справочник разработчика Создадим макет заголовка группировки Склад. В открывшемся диалоге выберем поле группировки Склад и тип макета Заголовок. Этот макет также действует на вложенную в нее группировку Номенклатура. Зададим элементы оформления ячеек заголовка группировки. У всех ячеек в строке Текст укажем произвольный текст шапки, а в строке Заполнение - Текст. Определим границы диапазона области заголовка группировки (рис. 5.151). Выполним отчет. Заголовок (шапка) группировки Склад и Номенклатура выводятся с заданным оформлением (рис. 5.152). Рис. 5.152. Результат отчета Создадим отдельный заголовок группировки Номенклатура и выполним отчет. Теперь для каждой группировки выводится свой заголовок (рис. 5.153). Рис. 5.153. Результат отчета 403 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Создадим макет группировки Склад для вывода итогов по группировке (рис. 5.154). Рис. 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). Рис. 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. Обработчик события нажатия кнопки «Сформировать» Внесем изменение в процедуру Сформировать(), чтобы передавать в компоновщик макета дополнительный параметр созданный нами макет оформления (листинг 5.38). Листинг 5.38. Процедура Сформировать() Запустим отчет на исполнение в режиме 1С:Предприятие. Нажмем кнопку Создать макет оформления. Загрузим 419 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных в качестве основы стандартный макет Арктика, нажав кнопку Стандартный макет. Затем отредактируем области заголовка и информации отчета. Нажмем ОК (рис. 5.169). Рис. 5.169. Редактирование макета оформления Отключим в настройках отчета использование стандартного макета оформления, если он задан (рис. 5.170). Рис. 5.170. Отключение макета оформления в настройках 420 Глава 5. Справочник разработчика ВНИМАНИЕ! В случае создания собственного макета оформления в режиме «1С:Предприятие» использование стандартного макета оформления в настройках нужно отключить. Иначе результат отчета не изменится, так как стандартный макет оформления имеет приоритет. Переформируем отчет, нажав кнопку Сформировать. Области заголовка и информации отчета будут оформлены в соответствии с заданными нами шрифтом и цветом текста (рис. 5.171). Рис. 5.172. Результат отчета Настройки отчета Использование конструктора настроек Конструктор настроек облегчает процесс создания простых стандартных настроек, определяющих, как будет выводиться информация в отчет. Конструктор не предназначен для того, чтобы создать любые настройки отчета. Он позволяет сделать только несколько наиболее типичных сценариев. Это инструмент, предназначенный в первую очередь для пользователя. А также им может пользоваться и разработчик, если нужно быстро настроить отчет «без хитростей», или чтобы просто посмотреть данные, выдаваемые отчетом. Работа с конструктором настроек на конкретных примерах подробно рассмотрена в 3-й главе (стр. 55). 421 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Конструктор настроек вызывается на закладке Настройки схемы компоновки данных нажатием кнопки расположенной на командной панели справа в окне. Также он может быть вызван пользователем в режиме 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). Рис. 5.179. Результат отчета Рис. 5.180. Настройка сортировки отчета в целом 427 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В таком случае упорядочивание группировки будет осуществляться по полю Номенклатура.Код, после чего - по полю Номенклатура (рис. 5.181). Рис. 5.181. Результат отчета Упорядочивание полей Для упорядочивания ссылочных полей система компоновки получает поля, по которым следует упорядочивать таблицу, на которую осуществляется ссылка, и использует вместо упорядочивания по самому полю упорядочивание по полученным полям. Например, нужно упорядочить отчет по полю Номенклатура, которое является ссылкой на справочник Номенклатура, тот, в свою очередь, является иерархическим справочником с основным представлением в виде наименования. В таком случае система компоновки будет получать поля ЭтоГруппа, Наименование, Ссылка для значения ссылки и упорядочивать по этим полям. При этом поле Ссылка уже будет сравниваться в соответствии с правилами сравнения ссылок. 428 Глава 5. Справочник разработчика Система компоновки данных предоставляет возможность указывать выражение упорядочивания для полей набора данных. Для этого в конструкторе схемы компоновки данных на закладке Наборы данных следует ввести соответствующее выражение в колонку Выражение упорядочивания для поля набора данных (рис. 5.182). Рис. 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. Система компоновки данных Рис. 5.186. Результат отчета Особенности использования отбора при работе с несколькими наборами данных Заметим, что если в главном отборе накладывается условие на поле некоторого дочернего набора данных, то в сгенерированном макете компоновки данных дочерний набор данных будет связан с родительским набором данных с типом связи Внутренняя. Родительские наборы данных набора данных, к которому применяется условие, также будут связаны со своими родительскими наборами данных с типом связи Внутренняя. Данный тип связи означает, что запись родительского набора данных будет выводиться в результат отчета только в случае, если в дочернем наборе данных будут найдены связанные записи. 432 Глава 5. Справочник разработчика Отбор группировок Отбор группировок используется для фильтрации записей, выводимых в группировке. При этом отбор распространяется на саму группировку, на вложенные группировки и не влияет на другие группировки, имеющиеся в отчете. В приведенном примере в отчет выводится таблица с группировкой по полю Номенклатура в ее строках и группировка Детальные записи. Отбор установлен в режиме настроек группировки Номенклатура и будет применяться только к ней (рис. 5.187). Рис. 5.187. Отбор группировки «Номенклатура» В результате в таблице отчета отсутствуют записи с конечным остатком, меньшим или равным единице, которые мы видим в группировке Детальные записи (рис. 5.188). 433 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.188. Результат отчета Тип применения отбора группировок В отборах, применяемых к группировкам, возможно указание типа применения условия для выводимых записей. Возможны три варианта типа применения: Без иерархии - условие применяется только к неиерархическим записям. При этом иерархические записи не фильтруются. В отчет выдаются только те иерархические записи, в которых присутствуют неиерархические записи, удовлетворяющие условию. Итог по ресурсам в иерархических записях и общий итог по группировки учитывает условие. Иерархия - условие применяется как к неиерархическим, так и к иерархическим записям. Итог по ресурсам в иерархических записях и общий итог по группировке отбор не учитывает. Только иерархия - условие применяется только к иерархическим записям. Итог по ресурсам в иерархических записях и общий итог по группировке отбор не учитывает. Более подробно этот вопрос рассмотрен в разделе о выводе уровней иерархии в группировке (стр. 446). 434 Глава 5. Справочник разработчика Особенности отбора по полям-ресурсам При использовании отбора на поля-ресурсы следует учитывать, что в случае если отбор на поле-ресурс был добавлен в главный отбор отчета, то этот отбор будет помещен в текст запроса, то есть фильтроваться будут именно детальные записи, которые получаются из запроса, а не итоги ресурса для группировок. Таким образом, если в отчете требуется получить только записи группировки, в которых значение ресурса удовлетворяет некоторому условию, то следует добавлять отбор в группировку, а не в главный отбор. Рассмотрим эту особенность на примере отчета Продажи номенклатуры. Установим отбор для отчета в целом, чтобы значения ресурса Стоимость были больше 3000 (рис. 5.189). Рис. 5.189. Отбор отчета в целом В результате фильтруются детальные записи, и в отчет выводятся только продажи услуг со стоимостью больше 3000 (рис. 5.190). Рис. 5.190. Результат отчета 435 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Создадим то же условие отбора для группировки Контрагент (рис. 5.191). Рис. 5.191. Отбор группировки «Контрагент» В результате в отчет попадут продажи услуг, стоимость которых меньше 3000, но суммарная стоимость по контрагенту для которых удовлетворяет заданному условию (рис. 5.192). Рис. 5.192. Результат отчета 436 Глава 5. Справочник разработчика Расположение реквизитов Реквизитами поля в системе компоновки данных называются все его подчиненные поля, доступные через точку. Например, для поля Номенклатура реквизитом является поле Номенклатура. Код. Дополнительные характеристики объектов, например, Регион, Надежный партнер также являются реквизитами поля Контрагент, с точки зрения системы компоновки данных. Управлять расположением реквизитов можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значение параметра Расположение реквизитов (рис. 5.193). Рис. 5.193. Настройка расположения реквизитов Существуют следующие варианты расположения реквизитов: Вместе - реквизиты располагаются вместе, в одной колонке, и разделяются запятой. В приведенном примере создано две колонки, отображающих реквизиты контрагента и номенклатуры соответственно (рис. 5.194). 437 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.194. Вывод полей реквизитов в варианте «Вместе» Отдельно - для каждого реквизита создается отдельная колонка. В приведенном примере для каждого реквизита контрагента и номенклатуры создано по отдельной колонке, причем при выводе группировок Отдельно колонки реквизитов контрагента располагаются после колонки Контрагент, а колонки реквизитов номенклатуры отображаются после колонки Номенклатура (рис. 5.195). Рис. 5.195. Вывод полей реквизитов - «Отдельно» Вместе с владельцем - реквизиты располагаются в колонке, отображающей владельца. Данное расположение реквизитов используется по умолчанию. В приведенном примере реквизиты контрагента расположены в колонке Контрагент, а реквизиты номенклатуры - в колонке Номенклатура (рис. 5.196). Рис. 5.196. Вывод полей реквизитов - «Вместе с владельцем» 438 Глава 5. Справочник разработчика В специальной позиции - реквизиты располагаются в специальной колонке, расположенной правее всех остальных колонок. В приведенном примере реквизиты контрагента и номенклатуры расположены в одной колонке и разделены запятой (рис. 5.197). Рис. 5.197. Вывод полей реквизитов - «В специальной позиции» Настройка группировок Расположение полей группировок Управлять расположением группировок можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значение параметра Расположение полей группировок (рис. 5.198). Рис. 5.198. Настройка расположения полей группировок 439 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Существуют следующие варианты расположения полей группировок: Вместе - поля группировки располагаются друг под другом. Данное расположение группировок используется по умолчанию (рис. 5.199). Рис. 5.199. Вывод полей группировок - «Вместе» Отдельно - каждая группировка располагается в отдельной области отчета слева направо. Выводимые поля группировки также выводятся во вложенных группировках. В приведенном примере поля группировки по контрагенту расположены в крайней левой колонке, а поля группировки по номенклатуре - справа от колонки контрагента, при этом для группировки по номенклатуре выводятся поля группировки по контрагенту (рис. 5.200). Рис. 5.200. Вывод полей группировок - «Отдельно» Отдельно и только в итогах- каждая группировка располагается в отдельной области отчета слева направо. Выводимые поля выводятся только в данной группировке. В приведенном примере поля группировки по контрагенту расположены в крайней левой колонке, а поля группировки по номенклатуре - справа от колонки контрагента (рис. 5.201). 440 Глава 5. Справочник разработчика Рис. 5.201. Вывод полей группировок «Отдельно и только в итогах» Заголовки группировок Для каждой группировки можно указать собственный заголовок, который будет выводиться перед выводом ее значений. Для этого нужно перейти в режим настроек отдельной группировки и на закладке Другие настройки ввести нужный текст в строку Заголовок. В приведенном примере для группировок Контрагент и Номенклатура указаны собственные заголовки (рис. 5.202, 5.203). Рис. 5.202. Настройка заголовка группировки «Контрагент» В результате перед каждой группировкой выводится ее заголовок. Если задан общий заголовок отчета, то он выводится вверху над заголовком родительской группировки (рис. 5.204). 441 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.203. Настройка заголовка группировки «Номенклатура» Рис. 5.204. Вывод заголовков группировок Ограничение количества записей и процента выводимых записей в группировке В режиме настройки отдельной группировки на закладке Другие настройки можно задать ограничение количества выводимых записей для группировки и вывод определенного процента от количества записей в группировке. Это нужно, например, для вывода определенного количества самых дешевых товаров и т. п. При этом если заданы оба этих параметра, то в отчет выводится наименьшее количество записей, рассчитанное по каждому из ограничений (рис. 5.205). 442 Глава 5. Справочник разработчика Рис. 5.205. Настройка ограничения количества выводимых записей в группировке Вывод системных полей и % в группировке В режиме настройки отдельной группировки, а также на уровне глобального отчета можно добавить в отчет поля, сгенерированные платформой. Для вывода системных полей, таких как № п/п, уровень и т. п., на закладке Выбранные поля в списке доступных полей нужно раскрыть группу Системные поля и перетащить в список полей нужные поля. Чтобы добавить в отчет % общий или % в группе от любого числового поля нужно раскрыть его в списке доступных полей и перетащить в список полей нужные поля (рис. 5.206). 443 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.206. Добавление в отчет системных полей и % в группировке В результате мы получим (рис. 5.207). Рис. 5.207. Результат отчета Заметим, что в первой колонке выводятся номера по порядку «насквозь», для вывода номера по порядку в каждой группировке нужно выбрать из списка системных полей поле № в группе. В последней колонке выводится процент, который составляет прибыль в данной строке от всего отчета. Для вывода процента прибыли от текущей группировки нужно использовать поле % в группе. Расположение полей в макетах группировок В режиме настройки отдельной группировки на закладке Другие настройки можно задать Тип макета полей группировки. Данное свойство имеет смысл только для группировок отчета и не используется в группировках таблицы или диаграммы (рис. 5.208). 444 Глава 5. Справочник разработчика Рис. 5.208. Настройка типа макета отдельной группировки Рис. 5.209. Результат отчета с разными макетами группировок 445 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Существуют следующие типы макетов: Горизонтально - поля располагаются слева направо, поля ресурсов располагаются правее всех остальных полей. Это стандартное расположение полей в группировке (рис. 5.209). Вертикально - поля располагаются сверху вниз в две колонки. В левой колонке располагаются имена выводимых полей, а в правой - значения. Поля ресурсов располагаются ниже всех остальных полей (рис. 5.209). Авто - расположение будет определяться автоматически. В приведенном примере для группировки Контрагент задан Тип макета - Вертикально, а для группировки Номенклатура Горизонтально (рис. 5.209). Возможность отбора уровней иерархии в группировке Система компоновки данных позволяет выводить в отчет записи заданного уровня иерархии в группировке. Для этого в режиме настройки отдельной группировки нужно задать отбор на уровень иерархии и указать в свойстве Применение, к каким записям будет применяться отбор. Возможны три варианта типа применения: Без иерархии - условие применяется только к неиерархическим записям. При этом иерархические записи не фильтруются. В отчет выдаются только те иерархические записи, в которых присутствуют неиерархические записи, удовлетворяющие условию. Иерархия - условие применяется как к неиерархическим, так и к иерархическим записям. 446 Глава 5. Справочник разработчика Только иерархия - условие применяется только к иерархическим записям. Для примера рассмотрим отчет, в котором выводится список номенклатуры вместе с уровнями иерархии (Уровень и Уровень в группе), которые в данном отчете идентичны (рис. 5.210). Рис. 5.210. Результат отчета с разными уровнями иерархии Мы видим, что группа номенклатуры Программное обеспечение имеет первый уровень иерархии, а записи в ней - второй уровень. Эта группа содержит вложенную группу Windows второго уровня, записи в которой имеют третий уровень. В режиме настроек группировки Номенклатура(Иерархия) создадим отбор на системное поле Уровень. Зададим Вид сравнения - Равно, Правое значение - 1 , Применение - Только иерархия (рис. 5.211). 447 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.211. Создание отбора в группировке по уровню иерархии В результате в отчет выводятся записи только первого уровня, причем это условие будет применяться только к записям иерархии. Поэтому в группе Программное обеспечение уже нет группы Windows (рис. 5.212). Рис. 5.212. Результат отчета 448 Глава 5. Справочник разработчика Изменим условие отбора, чтобы уровень был меньше трех и это условие применялось только к иерархическим записям. В результате мы увидим исходную таблицу, как будто никакого отбора не было (рис. 5.210), т. к. в ней изначально нет иерархических записей больше второго уровня (рис. 5.213). Рис. 5.213. Создание отбора в группировке по уровню иерархии Теперь изменим условие отбора, чтобы уровень был меньше трех, и это условие применялось к иерархии вообще (рис. 5.214). Рис. 5.214. Создание отбора в группировке по уровню иерархии Рис. 5.215. Результат отчета 449 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В результате в отчете мы не увидим записей, относящихся к группе Windows из Программного обеспечения, т. к. их уровень равен трем (рис. 5.215). Теперь зададим условие, чтобы уровень был равен единице, и это условие применялось к иерархии вообще (рис. 5.216). Рис. 5.216. Создание отбора в группировке по уровню иерархии В результате мы увидим в отчете только иерархические записи первого уровня (рис. 5.217). Рис. 5.217. Результат отчета Группировки-периоды Часто в отчетах требуется вывести данные за период с промежуточными итогами по дням, месяцам, полугодиям и т. п. Для этого нужно сгруппировать данные по этим периодам. При разработке отчета в схеме компоновки данных нужно добавить в набор доступных полей поля-периоды и создать группировки по этим полям в настройках отчета. Затем вывести в отчет поля ресурсов отчета, чтобы для каждой группировки были подсчитаны промежуточные итоги. Для примера рассмотрим Отчет по продажам. Данные в нем сгруппированы по периодам Месяц и День. 450 Глава 5. Справочник разработчика Чтобы добавить поля-периоды в набор данных, нужно задать периодичность виртуальной таблицы, из которой извлекаются данные. В данном случае это таблица Продажи.Обороты. Откроем конструктор запроса и вызовем диалог параметров виртуальной таблицы. Для этого в списке таблицы нужно нажать кнопку Параметры виртуальной таблицы (рис. 5.218). Рис. 5.218. Выбор периодичности виртуальной таблицы В открывшемся диалоге можно выбрать различные значения параметра Периодичность. В зависимости от выбранной периодичности виртуальной таблицы становятся доступными различные поляпериоды. Выберем периодичность Авто. Это наиболее универсальный вариант. Раскрыв список полей таблицы, мы можем перенести в список полей запроса следующие поля (рис. 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. Справочник разработчика Рис. 5.224. Вывод полей ресурсов - «Вертикально» Расположение группы выбранных полей Система компоновки данных предоставляет возможность изменять расположение групп выбранных полей. Управлять расположением группы выбранных полей можно, используя настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Выбранные поля. Если на данной закладке в табличном поле, отображающем выбранные поля, сделать активной какую-либо группу, то справа от нее появится колонка Расположение, позволяющая управлять расположением выбранных полей в группе. В приведенном примере создана группа полей Реквизиты и в нее добавлены поля Номенклатура.Код и Номенклатура.ВидНоменклатуры (рис. 5.225). Существуют следующие варианты расположения выбранных полей в группе: Авто - расположение полей определяется автоматически. Для группировок и строк таблицы поля располагаются горизонтально, а для колонок таблицы - вертикально (рис. 5.226). 455 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 5.225. Настройка расположения группы выбранных полей Рис. 5.226. Вывод группы выбранных полей - «Авто», «Горизонтально», «В отдельной колонке» Горизонтально - поля располагаются горизонтально слева направо. Для каждого поля отводится отдельная колонка (рис. 5.226). Вертикально - поля располагаются вертикально сверху вниз. Для каждого поля отводится отдельная строка (рис. 5.227). 456 Глава 5. Справочник разработчика Рис. 5.227. Вывод группы выбранных полей - «Вертикально» В отдельной колонке - поля располагаются горизонтально слева направо. Для каждого поля отводится отдельная колонка, при этом все колонки группы располагаются правее всех остальных колонок (рис. 5.226). Вместе - поля располагаются вместе в одной колонке и разделяются запятой (рис. 5.228). Рис. 5.228. Вывод группы выбранных полей - «Вместе» 457 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Заголовки выбранных полей Система компоновки данных предоставляет возможность изменять заголовки выбранных полей. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Выбранные поля, выделить в списке выбранных полей нужный заголовок и вызвать его контекстное меню правой кнопкой мыши. Затем выбрать пункт Переименовать и ввести новое название заголовка. Нажав на кнопку открытия со значком лупы, можно задать альтернативный вариант заголовка в случае использования в конфигурации нескольких языков (рис. 5.229). Рис. 5.229. Настройка заголовков выбранных полей Таким образом, для одной и той же схемы разные настройки могут задавать разные заголовки полей. Расположение общих итогов Система компоновки данных позволяет настраивать отображение общих итогов в отчете. Управлять расположением общих итогов можно при помощи настройки компоновки данных. Для этого в режиме настроек конструктора схемы компоновки данных нужно перейти на закладку Другие настройки и установить значения параметров Расположение общих итогов по горизонтали и Расположение общих итогов по вертикали (рис. 5.230). 458 Глава 5. Справочник разработчика Рис. 5.230. Настройка расположения общих итогов Параметр Расположение общих итогов по горизонтали имеет смысл только для таблиц, а параметр Расположение общих итогов по вертикали - для группировок и таблиц. Существуют итогов: следующие варианты расположения общих Нет - не отображать итоги. Для группировок не отображаются только итоги по вертикали, а для таблиц - итоги по вертикали и по горизонтали. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Нет (рис. 5.231). Рис. 5.231. Вывод общих итогов по вертикали - «Нет» 459 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Нет (рис. 5.232). Рис. 5.232. Вывод общих итогов по вертикали и горизонтали - «Нет» Начало - отображать итоги в начале. Для группировок и строк таблицы общие итоги отображаются перед строками группировки, а для колонок таблицы - перед колонками группировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Начало (рис. 5.233). Рис. 5.233. Вывод общих итогов по вертикали - «Начало» В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Начало (рис. 5.234). Рис. 5.234. Вывод общих итогов по вертикали и горизонтали - «Начало» Конец - отображать итоги в конце. Для группировок и строк таблицы общие итоги отображаются после строк группировки, а для колонок таблицы - после колонок груп460 Глава 5. Справочник разработчика пировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Конец (рис. 5.235). Рис. 5.235. Вывод общих итогов по вертикали - «Конец» В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Конец (рис. 5.236). Рис. 5.236. Вывод общих итогов по вертикали и горизонтали - «Конец» Начало и конец - отображать итоги в начале и конце. Для группировок и строк таблицы общие итоги отображаются перед и после строк группировки, а для колонок таблицы - перед и после колонок группировки. В приведенном примере параметр Расположение общих итогов по вертикали для группировки установлен в значение Начало и конец (рис. 5.237). Рис. 5.237. Вывод общих итогов по вертикали - «Начало и конец» 461 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В приведенном примере параметры Расположение общих итогов по вертикали и Расположение общих итогов по горизонтали для таблицы установлены в значение Начало и конец (рис. 5.238). Рис. 5.238. Вывод общих итогов по вертикали и горизонтали - «Начало и конец» Авто - расположение общих итогов определяется автоматически. Для группировок верхнего уровня общие итоги отображаются в конце, для остальных группировок общие итоги не отображаются. Заметим, что параметры Расположение общих итогов по горизонтали и Расположение общих итогов по вертикали можно использовать и для вложенных группировок. Для этого нужно задать эти же параметры в режиме настройки отдельной группировки. Например, в приведенном примере для группировки Контрагент общие итоги отображаются в конце, а для группировки Номенклатура - в начале и в конце (рис. 5.239). Рис. 5.239. Вывод общих итогов по вертикали и горизонтали для отдельных группировок Также заметим, что отбор, применяемый в группировке, влияет на отображение общего итога по данной группировке. Например, в указанном ниже отчете для группировки Номен462 Глава 5. Справочник разработчика клатура установлен отбор. В приведенном примере в общем итоге по группировке Номенклатура указаны количество и стоимость с учетом отбора, тогда как для вышестоящей группировки Контрагент указывается количество и стоимость без учета отбора (рис. 5.240). Рис. 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. Настройка вывода состава подписей и типа диаграммы Рис. 5.246. Настройка расположения легенды диаграммы 468 Глава 5. Справочник разработчика В результате диаграмма будет выведена в следующем виде (рис. 5.247): Рис. 5.247. Результат отчета Условное оформление Для более наглядного представления данных в отчете система компоновки данных позволяет задавать условное оформление областей отчета. При помощи условного оформления можно изменить цвет текста или фона, шрифт, горизонтальное или вертикальное положение и т. п. как отчета в целом, так и его отдельных областей. Условное оформление применяется к отчету при определенных условиях, например, когда остаток товара равен нулю, соответствующие строки номенклатуры выводятся красным цветом. Для управления условным оформлением используются настройки компоновки данных. В конструкторе схемы компоновки данных нужно перейти в режим настройки отчета или его отдельной группировки и открыть закладку Условное оформление. 469 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Элементы условного оформления могут быть следующих типов: Главное - применяется ко всему отчету. Такое условное оформление распространяется как на специальные области отчета (например, текст отбора или заголовка отчета), так и на все вложенные элементы отчета (таблицы, диаграммы и группировки). Условное оформление таблицы или диаграммы - применяется к таблице или диаграмме соответственно. Такое условное оформление распространяется как на области таблицы, так и на все группировки строк и колонок таблицы. Условное оформление группировки - применяется к отдельно взятой группировке, то есть условное оформление родительской группировки не распространяется на дочернюю. В соответствии с типом оформления нужно перейти в режим настроек группировки, таблицы, диаграммы или отчета в целом. Для применения условного оформления необходимо определить следующие его элементы: Область - область отчета, к которой применяется условное оформление. В качестве области указываются имена полей, для которых будет применяться условное оформление. Если область не указана, то условное оформление применяется ко всему отчету, таблице или группировке. Отбор - условие, в соответствии с которым применяется условное оформление. Если условие не указано, то условное оформление применяется к указанным областям без условий. 470 Глава 5. Справочник разработчика Оформление - описание применяемого оформления. Описанием оформления является перечень свойств оформления (таких как цвет, шрифт, стиль границы и т. д.), которые применяются к указанной области. Представление - необязательный элемент для представления условного оформления пользователю. Если Представление задано, то оно используется для представления настроек условного оформления в отчетной форме, что, безусловно, более понятно и доступно для пользователя. Порядок обработки элементов условного оформления следующий: сначала обрабатывается условное оформление группировок, затем обрабатывается условное оформление таблиц или диаграмм и в конце обрабатывается условное оформление всего отчета. Для примера рассмотрим отчет Продажи номенклатуры. В отчете, при помощи условного оформления, красным цветом выделяются суммы продаж менее 3000, желтым фоном выделяются строки, содержащие системные блоки (вид номенклатуры - Комплекты). Для этого в настройках отчета на закладке Условное оформление созданы два элемента, имеющие пользовательские представления, - Мелкий заказ и Системные блоки (рис. 5.248). Рис. 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. Процедура программной установки схемы компоновки В набор данных добавляются поля: Номенклатура, Период и Цена и задается их формат без вывода дробной части. Затем в набор данных добавляется поле ресурсов Цена и задается выражение для его расчета (листинг 5.42). Листинг 5.42. Процедура программной установки схемы компоновки 474 Глава 5. Справочник разработчика В набор данных также можно добавить вычисляемые поля, параметры данных и т. д. Дополнительную информацию об этих объектах системы компоновки данных можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Схема компоновки данных... Программная работа с параметрами схемы компоновки данных Часто бывает нужно задать значения параметров схемы компоновки данных по умолчанию. Чтобы установить значение параметра, нужно получить ссылку на него по индексу в коллекции элементов. Если параметров много, как, например, параметров вывода, ссылка на параметр возвращается методом НайтиЗначениеПараметра(). В приведенном примере задаются значения параметров начала и окончания отчетного периода как начало года и конец месяца, значение параметра вывода ВыводитьОтбор установлено в положение Нет, а также задается признак использования этих параметров в отчете. Этот код следует расположить в процедуре открытия отчетной формы перед формированием отчета (листинг 5.43). 475 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Листинг 5.43. Программная работа с параметрами схемы компоновки данных ВНИМАНИЕ! Последняя строчка кода необходима, чтобы компоновка проводилась с измененными настройками! Заметим, что названия некоторых параметров вывода не совпадают с названиями в окне настроек схемы компоновки данных. Список имен параметров для программного использования можно увидеть в разделе Синтакс-Помощника - Общие объекты - Система компоновки данных - Настройки компоновки данных - ЗначенияПараметровВыводаКомпоновкиДанных. 476 Глава 5. Справочник разработчика Редактирование стандартных настроек Стандартные настройки - это настройки, которые делает разработчик в схеме компоновки данных. Средствами встроенного языка можно получить и изменить стандартные настройки схемы компоновки данных. Более подробно этот процесс описан в 4-й главе (пример 11 на стр. 267). В приведенном примере создается группировка по полю Номенклатура и полю Период и создается Автополе для этой группировки. Затем в общий список выбранных полей добавляется поле Цена (листинг 5.44). Листинг 5.44. Процедура программной установки настроек 477 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Редактирование настроек схемы компоновки Стандартные настройки схемы компоновки могут изменяться пользователем в режиме 1С:Предприятие. Средствами встроенного языка можно получить и изменить эти настройки. В приведенном примере создается отбор по номенклатуре из группы Комплектующие и отключается вывод информации об отборе (листинг 5.45). Листинг 5.45. Процедура программной установки настроек Вывод отчета средствами встроенного языка После того как установлена схема компоновки данных и ее настройки, можно программно сформировать и вывести отчет (листинг 5.46). Листинг 5.46. Программное формирование отчета 478 Глава 5. Справочник разработчика Система компоновки данных позволяет выводить результат компоновки данных в результирующий документ. Для этого у процессора вывода реализован метод Вывести(), в качестве параметра которому передается процессор компоновки данных. В приведенном выше примере результат выводится в элемент формы - поле табличного документа. В следующем примере результат компоновки выводится не в отчетную форму, а в новый табличный документ (листинг 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 Макет компоновки, сгенерированный на основе схемы компс новки данных также может быть сериализован в строку ХМL (листинг 5.50). Листинг 5.50. Сериализация макета компоновки данных в строку XML Затем объекты компоновки данных могут быть сериализованы из строки XML, которая передается в качестве параметра в функцию чтения XML (листинг 5.51). Листинг 5.51. Сериализация объектов компоновки данных из строки XML 482 Глава 5. Справочник разработчика Элементы результата компоновки данных также могут быть сериализованы в строку XML (листинг 5.52). Листинг 5.52. Сериализация элементов результата компоновки данных в строку XML Затем элементы результата компоновки данных могут быть сериализованы из строки XML в массив (листинг 5.53). Листинг 5.53. Сериализация элементов результата компоновки данных из строки XML 483 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Для примера рассмотрим различные варианты компоновки отчета: на сервере 1С:Предприятие; на внешней информационной базе; через Web-сервис. Для решения этой задачи создадим новый объект конфигурации Обработка с именем СериализацияСКД. Создадим основную форму обработки. Откроем эту форму и добавим в нее элемент управления - Поле табличного документа и дадим ему имя Результат. Затем создадим реквизиты обработки для хранения информации о параметрах внешнего соединения и соединения через Web-сервис: ИмяПользователяВнешнегоСоединения длина - 256). (тип - Строка, ПарольПользователяВнешнегоСоединения (тип - Строка, длина - 256). ФайлВнешнегоСоединения (тип - Строка, длина - 256). ИмяБазыНаСервереВнешнегоСоединения (тип - Строка, длина - 256). СерверВнешнегоСоединения (тип - Строка, длина - 256). URLOnncaHHflWebCepBHca (тип - Строка, длина - неограниченная). Добавим в форму соответствующие поля ввода, для которых эти реквизиты являются источниками данных. Добавим поясняющие надписи для полей ввода. Затем создадим еще один реквизит обработки ВариантБазыВнешнегоСоединения (тип - Число, длина - 1). В нем будет 484 Глава 5. Справочник разработчика храниться выбранный режим компоновки данных. Добавим в форму переключатели для выбора варианта соединения: Получать данные из текущей информационной базы (первый в группе, данные ВариантБазыВнешнегоСоединения, выбираемое значение - 0). Получать данные из внешней файловой информационной базы (выбираемое значение - 1). Получать данные из внешней серверной информационной базы (выбираемое значение - 2). Получать данные из внешней базы через Web-сервис (выбираемое значение - 3). В результате форма обработки примет вид (рис. 5.250). Рис. 5.250. Диалог формы 485 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных В модуле формы по умолчанию создан обработчик события нажатия на кнопку Выполнить. Заполним эту процедуру (листинг 5.54). Листинг 5.54. Процедура обработчика события нажатия кнопки «Выполнить» В процедуре ВыполнитьНажатие() мы очищаем область результата, получаем основную схему компоновки отчета ОтчетПоСистемнымБлокам, генерируем макет компоновки данных при помощи компоновщика макета. Далее в зависимости от выбранного режима компоновки, хранящегося в реквизите ВариантБазыВнешнегоСоединения, выполняем компоновку данных на сервере, во внешнем соединении или через Web-сервис и получаем результат в виде массива элементов результата (листинг 5.55). Листинг 5.55. Компоновка данных на сервере, во внешнем соединении, через Web-сервис 486 Глава 5. Справочник разработчика 487 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Далее создаем и инициализируем процессор вывода результата и в цикле выводим элементы результата из полученного массива в элемент формы Результат (листинг 5.56). Листинг 5.56. Вывод элементов результата в табличный элемент В случае компоновки во внешнем соединении, исходя из значений реквизитов обработки, заполняются параметры соединения и устанавливается соединение. Для этого используется функция СоздатьСоединение() общего модуля ФункцииДляОтчетов. В случае компоновки через Web-сервис создается объект WSripoKCM с его описанием, и затем используется операция Web-сервиса ВыполнитьКомпоновку(). Для выполнения разных режимов компоновки используются функции общего модуля ФункцииДляОтчетов ВыполнитьКомпоновкуНаСервере(), ВыполнитьКомпоновкуВоВнешнемСоединении(), Выпол нитьКомпоновкуЧерез\/\/еЬСервис() (листинг 5.57). 488 Глава 5. Справочник разработчика Листинг 5.57. Процедуры общего модуля «ФункцииДляОтчетов» 489 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Для выполнения компоновки на сервере и во внешнем соединении используются функции общего модуля ФункцииДляОтчетовСервер ВыполнитьКомпоновкуХранилище(), ВыполнитьКомпоновкуСтрока(), ВыполнитьКомпоновкуВМассив()(листинг 5.58). 490 Глава 5. Справочник разработчика Листинг 5.58. Процедуры общего модуля «ФункцииДляОтчетовСервер» 491 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных 492 Глава 5. Справочник разработчика Для сериализации различных элементов компоновки используются функции общего модуля ФункцииДляОтчетов Значение ВСтрокуХМЦ), ЗначениеИзСтрокиХМЦ), МассивВСтрокуХМЦ), МассивИзСтрокиХМЦ) (листинг 5.59). Листинг 5.59. Процедуры общего модуля «ФункцииДляОтчетов» 493 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных 494 Глава 5. Справочник разработчика Для выполнения компоновки через Web-сервис в папке Общие создан Web-сервис КомпоновкаДанных, который имеет операцию ВыполнитьКомпоновку() (листинг 5.60). Листинг 5.60. Функция Web-сервиса «ВыполнитьКомпоновку» 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). Рис. 6.4. Установка недоступности для изменений структуры отчета 502 Глава 6. Культура создания отчетов с использованием системы компоновки данных Запустим отчет на исполнение в режиме 1С:Предприятие. Мы видим, что отчет формируется сразу же при открытии и период отчета задан по умолчанию. При нажатии кнопки Настройки вызывается разработанная нами форма настроек с ограниченным числом закладок (Отбор, Условное оформление, Пользовательские поля, Другие настройки) и недоступной для изменения структурой элементов отчета (рис. 6.5). Рис. 6.5. Форма настроек отчета в режиме «1С:Предприятие» Вернемся в конфигуратор. Обратите внимание, что разработанная нами форма по умолчанию становится основной формой настроек, которая будет вызываться при нажатии на кнопку Настройки в форме отчета. Если форм несколько, можно установить в качестве основной другую форму, нажав кнопку выбора. Если, наоборот, удалить выбранную строку, то при нажатии на кнопку Настройки будет вызываться автоматически сгенерированная платформой форма настроек (рис. 6.6). 503 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Рис. 6.6. Установка основной формы настроек Теперь продемонстрируем пример доработки отчета Продажи номенклатуры в соответствии с изложенными выше требованиями. Сначала создадим именованный отбор, чтобы при выполнении отчета сразу было понятно, по какому принципу фильтруются записи отчета. Именованное условное оформление, которое мы будем использовать, было создано нами ранее. Откроем схему компоновки данных нашего отчета, перейдем в режим Настройки и на закладке Отбор включим использование отбора, установим Правое значение - Перечисление.ВидыНоменклатуры.Услуга и зададим Представление отбора-Услуги. Если колонка Представления не видна, нужно раздвинуть окно настроек и нажать кнопку Подробно. Таким образом, теперь при размещении в форме этого элемента настроек пользователю будет выводиться представление отбора, а не его условия, в которых он может запутаться (рис. 6.7). 504 Глава 6. Культура создания отчетов с использованием системы компоновки данных Рис. 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. Система компоновки данных 510 Глава 6. Культура создания отчетов с использованием системы компоновки данных Код процедур ПриОткрытии() и СформироватьОтчет() уже знаком нам по предыдущим примерам. В процедуре УстановитьНастройки() задаются значения начала и окончания отчетного периода, которые отражаются в полях ввода ДатаНачала и ДатаОкончания и передаются в соответствующие параметры настроек системы компоновки данных нашего отчета. А также, исходя из настроек, заполняются элементы управления формы - ПредставлениеОтбора, ИспользованиеОтбора, ПредставлениеОформления, ИспользованиеОформления. Поскольку теперь параметры и отбор отчета явно присутствуют в форме, нет смысла выводить их еще раз. Поэтому мы задали значение НеВыводить для параметров вывода ВыводитьОтбор и ВыводитьПараметрыДанных. Теперь нам нужно заполнить процедуры ПриИзменении() элементов управления, созданные нами ранее (листинг 6.3). Листинг 6.3. Процедуры модуля формы отчета 511 Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных Как видно из листинга, мы установили, что при изменении дат отчетного периода или признака использования отбора или оформления соответствующие настройки отчета также будут меняться. В заключение переименуем кнопку Настройки, по которой вызывается стандартная форма настроек, в Настройки для экспертов, предназначенную для опытных пользователей. Выделим в командной панели отчета эту кнопку, вызовем диалог ее свойств и изменим Текст (рис. 6.14). Рис. 6.14. Установка заголовка кнопки «Настройка» Запустим отчет на исполнение в режиме 1С:Предприятие. Мы видим, что все необходимые настройки представлены в доступном виде и расположены непосредственно в отчетной форме. Далее пользователь может изменить период отчета, снять флаг использования у отбора или оформления и переформировать отчет кнопкой Сформировать. Если квалификация позволяет, то пользователь может поэкспериментировать с более сложными настройками отчета, нажав кнопку Настройки для экспертов (рис. 6.15). 512 Глава 6. Культура создания отчетов с использованием системы компоновки данных Рис. 6.15. Результат отчета Итак, на наших глазах «отчет становится все лучше, лучше и лучше...» Вот примерно таким и должен быть пользовательский интерфейс отчета для основной массы заказчиков. Все должно быть максимально просто и интуитивно понятно. Таким образом, соблюдение вышеизложенных правил «хорошего тона» при разработке отчетов с помощью системы компоновки данных поможет разработчику зарекомендовать себя как «думающего» и внимательного специалиста. А репутация залог успеха. 513 Для заметок