Разработка прикладных решений для платформы 1С:Предприятие 8.1

Система компоновки данных

Разбить на страницы
Показывать лекцию целиком

Цель лекции: освоить основные приемы интерактивной и программной работы с системой компоновки данных

6.1. Постановка задачи

Ранее в данном курсе мы уже занимались созданием отчетов. Это были простейшие отчеты, использующие табличный макет и предусматривающие программное формирование отчета.

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

Подобные отчеты все еще можно встретить в тиражных конфигурациях, но им на смену приходят отчеты, в основе которых лежит система компоновки данных (СКД). С точки зрения пользователя, точнее, достаточно опытного пользователя, который, возможно, знаком с основами конфигурирования 1С:Предприятие 8, такой отчет предоставляет несравненно более широкие возможности. Например, пользователь может самостоятельно, без необходимости пользоваться Конфигуратором, настроить множество параметров вывода отчета, представить исходные данные, лежащие в основе отчета, в том виде, в котором ему нужно - от простого необработанного списка, до таблиц с группировками или графических диаграмм различных видов.

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

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

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

В этой лекции мы рассмотрим возможности СКД на нескольких примерах:

  • Простой отчет, не требующий программирования, но, тем не менее, использующий основные возможности схемы компоновки данных.
  • Отчет, построенный с использованием программного обращения к механизмам СКД.
  • 6.2. Автоматическое построение отчета с помощью СКД

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

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

    (рис 6.1) Создание нового отчета на основе системы компоновки данных

    На вкладке отчета .

    (рис 6.2) Новый макет и окно конструктора СКД

    Окно конструктора СКД содержит несколько вкладок. Работа по созданию отчета начинается с добавления данных, из которых этот отчет будет состоять. Делается это на открытой по умолчанию вкладке Наборы данных.

    В левой части окна, в меню кнопки .

    (рис 6.3) Добавление нового набора данных

    В левой части окна появится новый набор данных, окно изменится - в частности, в его нижней правой части появится окно для ввода запроса (рис 6.4). Текст запроса можно составить вручную и ввести в это поле, а можно воспользоваться уже знакомым вам по предыдущим занятиям Конструктором запроса, нажав соответствующую кнопку около поля.

    (рис 6.4) Новый набор данных в окне конструктора СКД

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

  • Номенклатура
  • ЦентрОтветственности
  • СуммаНачальныйОстаток
  • СуммаПриход
  • СуммаРасход
  • СуммаКонечныйОстаток
  • Добавим эти поля в раздел .

    (рис 6.5) Конструирование запроса

    После того, как поля добавлены, мы завершаем работу с конструктором запроса нажатием на кнопку ОК. В окне конструктора схемы компоновки данных появился список полей - благодаря флагу Автозаполнение, который находится в нижней части окна и по умолчанию установлен. Эти поля называют доступными полями - с ними можно работать при создании отчета.

    В поле Запрос появился текст запроса, который, при необходимости, можно редактировать.

    Перейдем на вкладку .

    (рис 6.6) Выбор ресурсов

    Теперь приступим к оформлению отчета. Перейдем на вкладку .

    (рис 6.7) Настройка внешнего вида отчета

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

    (рис 6.8) Первое окно Конструктора настроек

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

    Мы выберем тип отчета ). Выберем из списка в левой части отчета все поля, которые должны присутствовать в отчете, при необходимости, с помощью кнопок со стрелками, направленными вверх и вниз (они находятся в правой части окна), поменяем порядок полей таким образом, чтобы поля-ресурсы располагались в таком порядке:

  • СуммаНачальныйОстаток
  • СуммаПриход
  • СуммаРасход
  • СуммаКонечныйОстаток
  • (рис 6.9) Второе окно Конструктора настроек

    В очередной раз нажмем .

    (рис 6.10) Третье окно Конструктора настроек

    Нажмем кнопку .

    (рис 6.11) Четвертое окно Конструктора настроек

    На этом настройка таблицы закончена, нажмем ). А именно, вместо двух кнопок с надписью Отчет, текст на которых выполнен серым цветом, здесь можно видеть кнопки Отчет и Таблица, между которыми можно переключаться, нажимая их. Эти кнопки позволяют переходить от настройки отчета в целом к настройке выделенного элемента, в данном случае - таблицы. При выделении других элементов отчета кнопка, расположенная правее, меняется, позволяя настраивать другие выделенные элементы.

    (рис 6.12) Таблица в окне настроек отчета

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

    (рис 6.13) Готовый отчет

    Теперь попробуем обратиться к окну настроек отчета, которое можно вызвать, нажав на кнопку Настройки на панели инструментов окна отчета. Окно настроек выглядит точно так же, как при работе с Конструктором схемы компоновки данных в Конфигураторе. И здесь мы можем настраивать существующие элементы отчета и добавлять новые.

    Выделим таблицу, переключимся в режим редактирования таблицы кнопкой ), перейдем на вкладку Другие настройки, установим галочку напротив параметра Макет оформления, нажмем кнопку с тремя точками в поле Значение, и в появившемся окне Выбор макета оформления выберем новый макет - Яркий. После подтверждения выбора кнопкой ОК и закрытия окна Настройки отчета, мы увидим внесенные изменения, снова нажав на кнопку Сформировать в окне отчета. В данном случае мы поменяли оформление таблицы.

    (рис 6.14) Настройка параметров отчета в режиме 1С:Предприятие

    Добавим в отчет новый элемент - необработанный список данных. Для этого вызовем контекстное меню корневого элемента ), выберем в меню команду Новая группировка, и нажмем кнопку ОК в появившемся окне Группировка, ничего в нем не изменяя.

    (рис 6.15) Добавление в отчет новой группировки

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

    (рис 6.16) Новая группировка в отчете

    Теперь добавим в отчет новый элемент - диаграмму, отражающую суммовой приход материалов по складам. Для этого воспользуемся командой Новая диаграмма контекстного меню элемента Отчет. После выполнения этой команды в структуру будет добавлен новый элемент Диаграмма, который имеет подчиненные элементы Точки и Серии. Точки диаграммы - это объекты, для которых получают значения характеристик. Серии - это интересующие нас характеристики. Значения серий в точках (это будет один из ресурсов, которые мы задавали ранее) используются для построения диаграммы.

    Щелкнем правой кнопкой по элементу .

    (рис 6.17) Настройка точек диаграммы

    Проделаем ту же процедуру для Серий диаграммы, выбрав в параметре Поле окна Группировка - Номенклатура.

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

    (рис 6.18) Выбор ресурса для задания значений серий диаграммы в точках

    Построим измененный отчет (рис 6.19). Обратите внимание на то, что в настройках отчета (рис 6.18) мы отключили вывод группировки <Детальные записи>, это означает, что в отчет теперь будут выведены лишь таблица и диаграмма.

    (рис 6.19) Диаграмма, сформированная в отчете

    Диаграмма в отчете присутствует, однако, очевидно, что пользователю, незнакомому с процессом настройки состава данных диаграммы, непросто будет понять, какие именно данные она визуализирует. К тому же, если нас не устраивает вид диаграммы (по умолчанию это - Гистограмма объемная ), мы можем самостоятельно выбрать тот вид, который нам больше подходит. Для того, чтобы внести изменения в диаграмму, откроем окно настроек отчета, выделим элемент Диаграмма, перейдем на вкладку Другие настройки. Здесь, по аналогии с элементами отчета, галочка, установленная напротив параметра, говорит системе о том, что нужно применить его значение, заданное пользователем. Если галочка не установлена - применяется значение по умолчанию.

    Зададим следующие параметры, рис 6.20:

    Тип диаграммы: Гистограмма (доступны и другие типы, уместность и удобство их применения зависит от данных, которые нужно визуализировать)
    Окантовка: истина (позволяет обвести линией столбцы гистограммы)
    Стиль линии: Точечная (обводит всю гистограмму пунктирной линией, так она лучше воспринимается пользователем)
    Заголовок: "Суммовой приход материалов" (это заголовок диаграммы, который будет выведен перед ней, если он задан, он выводится автоматически)
    (рис 6.20) Изменение настройки диаграммы

    На рис 6.21 вы можете видеть измененную диаграмму.

    (рис 6.21) Измененная диаграмма

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

    (рис 6.22) Настройка периода, за который строится отчет

    Теперь, для того, чтобы придать отчету завершенный вид, зададим отчету и таблице заголовки. Вот, что у нас получилось, рис 6.23.

    (рис 6.23) Готовый отчет

    6.3. Программное построение отчета с помощью СКД

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

  • Создание и настройка схемы компоновки данных. На данном этапе мы будем использовать уже знакомый вам Конструктор схемы компоновки данных. Здесь мы зададим набор источников данных, набор полей, произведем настройку состава и внешнего вида отчета.
  • Получение данных, необходимых для построения отчета. Здесь мы получим необходимые данные и оформим их соответствующим образом для последующего построения отчета.
  • Подготовка к исполнению схемы компоновки данных. На этом этапе мы будем пользоваться объектом типа КомпоновщикМакетаКомпоновкиДанных. Он, на основе настроек компоновки данных и схемы компоновки данных, готовит схему к исполнению, на выходе данного этапа получается макет компоновки данных, готовый к заполнению данными.
  • Исполнение схемы компоновки данных. Здесь мы воспользуемся объектом типа ПроцессорКомпоновкиДанных. Он оперирует данными, необходимыми для построения отчета, и созданным ранее макетом компоновки данных.
  • Вывод результата компоновки данных. На этом этапе создается табличный документ, который, после заполнения его данными, будет представлять собой готовый отчет. Так же здесь используется объект типа ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент. Он использует данные процессора компоновки данных для вывода их в ранее созданный табличный документ.
  • Настройка табличного документа. На данном этапе мы настраиваем параметры, характерные для табличного документа и показываем его пользователю.
  • Все этапы программной работы со схемой компоновки данных допускают вмешательство разработчика, что позволяет строить программным способом отчеты любой сложности.

    Решим следующую задачу. Построим печатную форму документа НачислениеЗарплаты, которая будет содержать следующие реквизиты документа:

  • Номер документа;
  • Дата документа;
  • ПериодРегистрации;
  • Так же отчет будет содержать табличную часть, данные которой нужно взять из табличной части НачисленияИУдержания открытого документа. А именно, это следующие данные:

  • НомерСтроки;
  • Сотрудник;
  • ВидРасчета;
  • График;
  • ИсходныеДанные;
  • ДатаНачала;
  • ДатаОкончания;
  • Все эти данные присутствуют в документе.

    Начнем с создания макета документа типа .

    (рис 6.24) Создание нового макета для разработки печатной формы документа

    В уже знакомом вам по предыдущему примеру окну конструктора СКД добавим новый источник данных - Объект. При использовании источников данных-объектов данные для построения отчета можно получать данные из различных объектов, например:

  • Результаты запросов;
  • Табличные части;
  • Таблицы значений;
  • Области ячеек табличного документа;
  • Прикладные объекты;
  • Наборы записей регистров;
  • Мы, в нашем примере, поступим следующим образом. Данные для заполнения сведений о документе ( Номер, Дата, ПериодРегистрации ) получим с помощью запроса, данные табличной части документа используем без предварительной подготовки.

    Итак, после добавления нового источника данных-объекта, переименуем его в .

    (рис 6.25) Добавление набора данных для размещения в отчете реквизитов документа

    Таким же образом добавим набор данных-объект .

    (рис 6.26) Добавление набора данных для размещения в отчете табличной части документа

    Перейдем на вкладку конструктора .

    (рис 6.27) Настройка структуры отчета для размещения реквизитов документа

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

    (рис 6.28) Настройка структуры отчета для размещения табличной части

    Теперь перейдем к настройкам отчета, выберем вкладку Другие настройки и в параметре Заголовок введем текст "Исходные данные по начислениям".

    Наш документ . Именно здесь будет располагаться код формирования печатной формы на основе СКД.

    (рис 6.29) Создание формы документа и кнопки для вызова кода, создающего печатную форму

    Ниже приведен код модуля ОсновныеДействияФормыПечать() с комментариями.

    Процедура ОсновныеДействияФормыПечать(Кнопка)
    	Сообщить("Для правильного формирования отчета документ после изменения должен быть записан!");
    	//Вывод данных из документа с помощью СКД
    	//Этим запросом мы получим реквизиты документа из базы
    	Запрос = Новый Запрос;
    	Запрос.Текст="ВЫБРАТЬ
    	             |	НачислениеЗарплаты.Номер,
    	             |	НачислениеЗарплаты.Дата,
    	             |	НачислениеЗарплаты.ПериодРегистрации
    	             |ИЗ
    	             |	Документ.НачислениеЗарплаты КАК НачислениеЗарплаты
    	             |ГДЕ
    	             |	НачислениеЗарплаты.Ссылка = Ссылка";
    	//Установим параметр запроса - ссылку на открытый документ
    	Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
    	//Выгрузим результат выполнения запроса в таблицу значений 
    	НачислениеЗарплатыСКД=Запрос.Выполнить().Выгрузить();
    	//В этой структуре значений будем хранить данные для передачи в СКД
    	ВнешниеДанные = Новый Структура;
    	//Поместим в структуру данные табличной части НачисленияИУдержания
    	ВнешниеДанные.Вставить("НачисленияИУдержания", ДокументОбъект.НачисленияИУдержания);
    	//Поместим в структуру таблицу значений с реквизитами документа
    	ВнешниеДанные.Вставить("НачислениеЗарплаты", НачислениеЗарплатыСКД);
    	//Получим макет СКД, заданный ранее
    	СКД=ПолучитьМакет("МакетСКД");
    	//Получим настройки по умолчанию для нашей СКД
    	НастройкиСКД=СКД.НастройкиПоУмолчанию;
    	//Создадим новый компоновщик макета компоновки данных
    	КомпоновщикМакетаКД=Новый КомпоновщикМакетаКомпоновкиДанных;
    	//Создадим новый макет компоновки данных с помощью компоновщика макета
    	//с использованием полученной ранее СКД (тип СхемаКомпоновкиДанных) и настроек
    	//(тип НастройкиКомпоновкиДанных)
    	МакетКД=КомпоновщикМакетаКД.Выполнить(СКД, НастройкиСКД);
    	//Создадим новый процессор компоновки данных
    	ПроцессорКД=Новый ПроцессорКомпоновкиДанных;
    	//Инициализируем процессор компоновки данных ранее созданным
    	//макетом компоновки данных и данными, необходимыми для 
    	//построения отчета
    	ПроцессорКД.Инициализировать(МакетКД, ВнешниеДанные);
    	//Создадим новый табличный документ
    	ГотовыйОтчет=Новый ТабличныйДокумент;
    	//Создадим новый процессор вывода результата компоновки данных
    	ПроцессорВыводаКД=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    	//Установим документ ГотовыйОтчет в качестве документа, в который
    	//нужно выводить готовый отчет
    	ПроцессорВыводаКД.УстановитьДокумент(ГотовыйОтчет);
    	//Выведем в табличный документ данные, полученные из процессора компоновки данных
    	ПроцессорВыводаКД.Вывести(ПроцессорКД);
    	//Выключим отображение сетки в готовом отчете
    	ГотовыйОтчет.ОтображатьСетку=Ложь;
    	//Выключим отображение имен строк и столбцов в готовом отчете
    	ГотовыйОтчет.ОтображатьЗаголовки=Ложь;
    	//Покажем отчет пользователю
    	ГотовыйОтчет.Показать();
    КонецПроцедуры

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

    В этом коде мы последовательно переходим по этапам формирования отчета с помощью СКД, используя ее объекты. Входные данные помещаются в структуру ВнешниеДанные, после чего задействуются механизмы СКД.

    6.4. Выводы

    В этой лекции мы рассмотрели два подхода к формированию отчетов с использованием системы компоновки данных. Первый подход позволяет конструировать отчет в визуальном режиме, и, что самое главное, предоставляет пользователю возможность настройки отчета под свои требования в режиме 1С:Предприятие. Второй подход, наряду с этапом визуального конструирования в Конфигураторе, использует программное обращение к механизмам СКД для создания печатной формы документа. Это позволяет разработчику полностью контролировать этапы формирования отчета, при необходимости внося коррективы в этот процесс. Наша следующая лекция будет посвящена построению распределенных информационных систем.

    6.5. Видеоурок

    Для данной лекции подготовлен видеоурок.

    Страницы:

    Цель лекции: освоить основные приемы интерактивной и программной работы с системой компоновки данных

    6.1. Постановка задачи

    Ранее в данном курсе мы уже занимались созданием отчетов. Это были простейшие отчеты, использующие табличный макет и предусматривающие программное формирование отчета.

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

    Подобные отчеты все еще можно встретить в тиражных конфигурациях, но им на смену приходят отчеты, в основе которых лежит система компоновки данных (СКД). С точки зрения пользователя, точнее, достаточно опытного пользователя, который, возможно, знаком с основами конфигурирования 1С:Предприятие 8, такой отчет предоставляет несравненно более широкие возможности. Например, пользователь может самостоятельно, без необходимости пользоваться Конфигуратором, настроить множество параметров вывода отчета, представить исходные данные, лежащие в основе отчета, в том виде, в котором ему нужно - от простого необработанного списка, до таблиц с группировками или графических диаграмм различных видов.

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

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

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

    В этой лекции мы рассмотрим возможности СКД на нескольких примерах:

  • Простой отчет, не требующий программирования, но, тем не менее, использующий основные возможности схемы компоновки данных.
  • Отчет, построенный с использованием программного обращения к механизмам СКД.
  • 6.2. Автоматическое построение отчета с помощью СКД

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

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

    (рис 6.1) Создание нового отчета на основе системы компоновки данных

    На вкладке отчета .

    (рис 6.2) Новый макет и окно конструктора СКД

    Окно конструктора СКД содержит несколько вкладок. Работа по созданию отчета начинается с добавления данных, из которых этот отчет будет состоять. Делается это на открытой по умолчанию вкладке Наборы данных.

    В левой части окна, в меню кнопки .

    (рис 6.3) Добавление нового набора данных

    В левой части окна появится новый набор данных, окно изменится - в частности, в его нижней правой части появится окно для ввода запроса (рис 6.4). Текст запроса можно составить вручную и ввести в это поле, а можно воспользоваться уже знакомым вам по предыдущим занятиям Конструктором запроса, нажав соответствующую кнопку около поля.

    (рис 6.4) Новый набор данных в окне конструктора СКД

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

  • Номенклатура
  • ЦентрОтветственности
  • СуммаНачальныйОстаток
  • СуммаПриход
  • СуммаРасход
  • СуммаКонечныйОстаток
  • Добавим эти поля в раздел .

    (рис 6.5) Конструирование запроса

    После того, как поля добавлены, мы завершаем работу с конструктором запроса нажатием на кнопку ОК. В окне конструктора схемы компоновки данных появился список полей - благодаря флагу Автозаполнение, который находится в нижней части окна и по умолчанию установлен. Эти поля называют доступными полями - с ними можно работать при создании отчета.

    В поле Запрос появился текст запроса, который, при необходимости, можно редактировать.

    Перейдем на вкладку .

    (рис 6.6) Выбор ресурсов

    Теперь приступим к оформлению отчета. Перейдем на вкладку .

    (рис 6.7) Настройка внешнего вида отчета

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

    (рис 6.8) Первое окно Конструктора настроек

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

    Мы выберем тип отчета ). Выберем из списка в левой части отчета все поля, которые должны присутствовать в отчете, при необходимости, с помощью кнопок со стрелками, направленными вверх и вниз (они находятся в правой части окна), поменяем порядок полей таким образом, чтобы поля-ресурсы располагались в таком порядке:

  • СуммаНачальныйОстаток
  • СуммаПриход
  • СуммаРасход
  • СуммаКонечныйОстаток
  • (рис 6.9) Второе окно Конструктора настроек

    В очередной раз нажмем .

    (рис 6.10) Третье окно Конструктора настроек

    Нажмем кнопку .

    (рис 6.11) Четвертое окно Конструктора настроек

    На этом настройка таблицы закончена, нажмем ). А именно, вместо двух кнопок с надписью Отчет, текст на которых выполнен серым цветом, здесь можно видеть кнопки Отчет и Таблица, между которыми можно переключаться, нажимая их. Эти кнопки позволяют переходить от настройки отчета в целом к настройке выделенного элемента, в данном случае - таблицы. При выделении других элементов отчета кнопка, расположенная правее, меняется, позволяя настраивать другие выделенные элементы.

    (рис 6.12) Таблица в окне настроек отчета

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

    (рис 6.13) Готовый отчет

    Теперь попробуем обратиться к окну настроек отчета, которое можно вызвать, нажав на кнопку Настройки на панели инструментов окна отчета. Окно настроек выглядит точно так же, как при работе с Конструктором схемы компоновки данных в Конфигураторе. И здесь мы можем настраивать существующие элементы отчета и добавлять новые.

    Выделим таблицу, переключимся в режим редактирования таблицы кнопкой ), перейдем на вкладку Другие настройки, установим галочку напротив параметра Макет оформления, нажмем кнопку с тремя точками в поле Значение, и в появившемся окне Выбор макета оформления выберем новый макет - Яркий. После подтверждения выбора кнопкой ОК и закрытия окна Настройки отчета, мы увидим внесенные изменения, снова нажав на кнопку Сформировать в окне отчета. В данном случае мы поменяли оформление таблицы.

    (рис 6.14) Настройка параметров отчета в режиме 1С:Предприятие

    Добавим в отчет новый элемент - необработанный список данных. Для этого вызовем контекстное меню корневого элемента ), выберем в меню команду Новая группировка, и нажмем кнопку ОК в появившемся окне Группировка, ничего в нем не изменяя.

    (рис 6.15) Добавление в отчет новой группировки

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

    (рис 6.16) Новая группировка в отчете

    Теперь добавим в отчет новый элемент - диаграмму, отражающую суммовой приход материалов по складам. Для этого воспользуемся командой Новая диаграмма контекстного меню элемента Отчет. После выполнения этой команды в структуру будет добавлен новый элемент Диаграмма, который имеет подчиненные элементы Точки и Серии. Точки диаграммы - это объекты, для которых получают значения характеристик. Серии - это интересующие нас характеристики. Значения серий в точках (это будет один из ресурсов, которые мы задавали ранее) используются для построения диаграммы.

    Щелкнем правой кнопкой по элементу .

    (рис 6.17) Настройка точек диаграммы

    Проделаем ту же процедуру для Серий диаграммы, выбрав в параметре Поле окна Группировка - Номенклатура.

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

    (рис 6.18) Выбор ресурса для задания значений серий диаграммы в точках

    Построим измененный отчет (рис 6.19). Обратите внимание на то, что в настройках отчета (рис 6.18) мы отключили вывод группировки <Детальные записи>, это означает, что в отчет теперь будут выведены лишь таблица и диаграмма.

    (рис 6.19) Диаграмма, сформированная в отчете

    Диаграмма в отчете присутствует, однако, очевидно, что пользователю, незнакомому с процессом настройки состава данных диаграммы, непросто будет понять, какие именно данные она визуализирует. К тому же, если нас не устраивает вид диаграммы (по умолчанию это - Гистограмма объемная ), мы можем самостоятельно выбрать тот вид, который нам больше подходит. Для того, чтобы внести изменения в диаграмму, откроем окно настроек отчета, выделим элемент Диаграмма, перейдем на вкладку Другие настройки. Здесь, по аналогии с элементами отчета, галочка, установленная напротив параметра, говорит системе о том, что нужно применить его значение, заданное пользователем. Если галочка не установлена - применяется значение по умолчанию.

    Зададим следующие параметры, рис 6.20:

    Тип диаграммы: Гистограмма (доступны и другие типы, уместность и удобство их применения зависит от данных, которые нужно визуализировать)
    Окантовка: истина (позволяет обвести линией столбцы гистограммы)
    Стиль линии: Точечная (обводит всю гистограмму пунктирной линией, так она лучше воспринимается пользователем)
    Заголовок: "Суммовой приход материалов" (это заголовок диаграммы, который будет выведен перед ней, если он задан, он выводится автоматически)
    (рис 6.20) Изменение настройки диаграммы

    На рис 6.21 вы можете видеть измененную диаграмму.

    (рис 6.21) Измененная диаграмма

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

    (рис 6.22) Настройка периода, за который строится отчет

    Теперь, для того, чтобы придать отчету завершенный вид, зададим отчету и таблице заголовки. Вот, что у нас получилось, рис 6.23.

    (рис 6.23) Готовый отчет

    6.3. Программное построение отчета с помощью СКД

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

  • Создание и настройка схемы компоновки данных. На данном этапе мы будем использовать уже знакомый вам Конструктор схемы компоновки данных. Здесь мы зададим набор источников данных, набор полей, произведем настройку состава и внешнего вида отчета.
  • Получение данных, необходимых для построения отчета. Здесь мы получим необходимые данные и оформим их соответствующим образом для последующего построения отчета.
  • Подготовка к исполнению схемы компоновки данных. На этом этапе мы будем пользоваться объектом типа КомпоновщикМакетаКомпоновкиДанных. Он, на основе настроек компоновки данных и схемы компоновки данных, готовит схему к исполнению, на выходе данного этапа получается макет компоновки данных, готовый к заполнению данными.
  • Исполнение схемы компоновки данных. Здесь мы воспользуемся объектом типа ПроцессорКомпоновкиДанных. Он оперирует данными, необходимыми для построения отчета, и созданным ранее макетом компоновки данных.
  • Вывод результата компоновки данных. На этом этапе создается табличный документ, который, после заполнения его данными, будет представлять собой готовый отчет. Так же здесь используется объект типа ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент. Он использует данные процессора компоновки данных для вывода их в ранее созданный табличный документ.
  • Настройка табличного документа. На данном этапе мы настраиваем параметры, характерные для табличного документа и показываем его пользователю.
  • Все этапы программной работы со схемой компоновки данных допускают вмешательство разработчика, что позволяет строить программным способом отчеты любой сложности.

    Решим следующую задачу. Построим печатную форму документа НачислениеЗарплаты, которая будет содержать следующие реквизиты документа:

  • Номер документа;
  • Дата документа;
  • ПериодРегистрации;
  • Так же отчет будет содержать табличную часть, данные которой нужно взять из табличной части НачисленияИУдержания открытого документа. А именно, это следующие данные:

  • НомерСтроки;
  • Сотрудник;
  • ВидРасчета;
  • График;
  • ИсходныеДанные;
  • ДатаНачала;
  • ДатаОкончания;
  • Все эти данные присутствуют в документе.

    Начнем с создания макета документа типа .

    (рис 6.24) Создание нового макета для разработки печатной формы документа

    В уже знакомом вам по предыдущему примеру окну конструктора СКД добавим новый источник данных - Объект. При использовании источников данных-объектов данные для построения отчета можно получать данные из различных объектов, например:

  • Результаты запросов;
  • Табличные части;
  • Таблицы значений;
  • Области ячеек табличного документа;
  • Прикладные объекты;
  • Наборы записей регистров;
  • Мы, в нашем примере, поступим следующим образом. Данные для заполнения сведений о документе ( Номер, Дата, ПериодРегистрации ) получим с помощью запроса, данные табличной части документа используем без предварительной подготовки.

    Итак, после добавления нового источника данных-объекта, переименуем его в .

    (рис 6.25) Добавление набора данных для размещения в отчете реквизитов документа

    Таким же образом добавим набор данных-объект .

    (рис 6.26) Добавление набора данных для размещения в отчете табличной части документа

    Перейдем на вкладку конструктора .

    (рис 6.27) Настройка структуры отчета для размещения реквизитов документа

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

    (рис 6.28) Настройка структуры отчета для размещения табличной части

    Теперь перейдем к настройкам отчета, выберем вкладку Другие настройки и в параметре Заголовок введем текст "Исходные данные по начислениям".

    Наш документ . Именно здесь будет располагаться код формирования печатной формы на основе СКД.

    (рис 6.29) Создание формы документа и кнопки для вызова кода, создающего печатную форму

    Ниже приведен код модуля ОсновныеДействияФормыПечать() с комментариями.

    Процедура ОсновныеДействияФормыПечать(Кнопка)
    	Сообщить("Для правильного формирования отчета документ после изменения должен быть записан!");
    	//Вывод данных из документа с помощью СКД
    	//Этим запросом мы получим реквизиты документа из базы
    	Запрос = Новый Запрос;
    	Запрос.Текст="ВЫБРАТЬ
    	             |	НачислениеЗарплаты.Номер,
    	             |	НачислениеЗарплаты.Дата,
    	             |	НачислениеЗарплаты.ПериодРегистрации
    	             |ИЗ
    	             |	Документ.НачислениеЗарплаты КАК НачислениеЗарплаты
    	             |ГДЕ
    	             |	НачислениеЗарплаты.Ссылка = Ссылка";
    	//Установим параметр запроса - ссылку на открытый документ
    	Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
    	//Выгрузим результат выполнения запроса в таблицу значений 
    	НачислениеЗарплатыСКД=Запрос.Выполнить().Выгрузить();
    	//В этой структуре значений будем хранить данные для передачи в СКД
    	ВнешниеДанные = Новый Структура;
    	//Поместим в структуру данные табличной части НачисленияИУдержания
    	ВнешниеДанные.Вставить("НачисленияИУдержания", ДокументОбъект.НачисленияИУдержания);
    	//Поместим в структуру таблицу значений с реквизитами документа
    	ВнешниеДанные.Вставить("НачислениеЗарплаты", НачислениеЗарплатыСКД);
    	//Получим макет СКД, заданный ранее
    	СКД=ПолучитьМакет("МакетСКД");
    	//Получим настройки по умолчанию для нашей СКД
    	НастройкиСКД=СКД.НастройкиПоУмолчанию;
    	//Создадим новый компоновщик макета компоновки данных
    	КомпоновщикМакетаКД=Новый КомпоновщикМакетаКомпоновкиДанных;
    	//Создадим новый макет компоновки данных с помощью компоновщика макета
    	//с использованием полученной ранее СКД (тип СхемаКомпоновкиДанных) и настроек
    	//(тип НастройкиКомпоновкиДанных)
    	МакетКД=КомпоновщикМакетаКД.Выполнить(СКД, НастройкиСКД);
    	//Создадим новый процессор компоновки данных
    	ПроцессорКД=Новый ПроцессорКомпоновкиДанных;
    	//Инициализируем процессор компоновки данных ранее созданным
    	//макетом компоновки данных и данными, необходимыми для 
    	//построения отчета
    	ПроцессорКД.Инициализировать(МакетКД, ВнешниеДанные);
    	//Создадим новый табличный документ
    	ГотовыйОтчет=Новый ТабличныйДокумент;
    	//Создадим новый процессор вывода результата компоновки данных
    	ПроцессорВыводаКД=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    	//Установим документ ГотовыйОтчет в качестве документа, в который
    	//нужно выводить готовый отчет
    	ПроцессорВыводаКД.УстановитьДокумент(ГотовыйОтчет);
    	//Выведем в табличный документ данные, полученные из процессора компоновки данных
    	ПроцессорВыводаКД.Вывести(ПроцессорКД);
    	//Выключим отображение сетки в готовом отчете
    	ГотовыйОтчет.ОтображатьСетку=Ложь;
    	//Выключим отображение имен строк и столбцов в готовом отчете
    	ГотовыйОтчет.ОтображатьЗаголовки=Ложь;
    	//Покажем отчет пользователю
    	ГотовыйОтчет.Показать();
    КонецПроцедуры

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

    В этом коде мы последовательно переходим по этапам формирования отчета с помощью СКД, используя ее объекты. Входные данные помещаются в структуру ВнешниеДанные, после чего задействуются механизмы СКД.

    6.4. Выводы

    В этой лекции мы рассмотрели два подхода к формированию отчетов с использованием системы компоновки данных. Первый подход позволяет конструировать отчет в визуальном режиме, и, что самое главное, предоставляет пользователю возможность настройки отчета под свои требования в режиме 1С:Предприятие. Второй подход, наряду с этапом визуального конструирования в Конфигураторе, использует программное обращение к механизмам СКД для создания печатной формы документа. Это позволяет разработчику полностью контролировать этапы формирования отчета, при необходимости внося коррективы в этот процесс. Наша следующая лекция будет посвящена построению распределенных информационных систем.

    6.5. Видеоурок

    Для данной лекции подготовлен видеоурок.

    Вернуться к учебному плану