Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Меркулова_Пособие_РазработкаУправляемыхПриложен...doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
18 Мб
Скачать
☆

5.2. Табличный документ

Теперь приступим к созданию формы отчета. Перейдем на вкладку Формы окна редактирования объекта, добавим новую форму отчета, оставим все настройки в состоянии по умолчанию и нажмем Готово. Добавим, на вкладке Реквизиты редактора форм новый реквизит, назовем его ТабличныйДокумент, выберем для него тип ТабличныйДокумент. Перетащим созданный реквизит в поле Элементы. В состав команд формы добавим новую команду, зададим ей имя СформироватьОтчет и так же переместим в поле Элементы. В итоге у нас получится форма, выглядящая так, как показано на рис. 5.6.

Рис. 5.6.  Настройка формы отчета

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

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

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

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

в точку вызова, присвоив его нашему реквизиту ТабличныйДокумент.

Реализуем метод в виде функции. Готовый код формирования отчета (рис. 5.7.) будет выглядеть следующим образом:

Рис. 5.7..  Готовый отчет

&НаКлиенте

Процедура СформироватьОтчет(Команда)

ТабличныйДокумент=СформироватьОтчетНаСервере();

КонецПроцедуры

&НаСервереБезКонтекста

Функция СформироватьОтчетНаСервере()

ТабличныйДокумент=Новый ТабличныйДокумент();

Макет=Отчеты.СписокКонтрагентов.ПолучитьМакет("Макет");

Шапка=Макет.ПолучитьОбласть("Шапка");

Элемент=Макет.ПолучитьОбласть("Элемент");

Группа=Макет.ПолучитьОбласть("Группа");

Шапка.Параметры.ДатаФормированияОтчета=ТекущаяДата();

ТабличныйДокумент.Вывести(Шапка);

Выборка=Справочники.Контрагенты.ВыбратьИерархически();

Пока Выборка.Следующий() Цикл

Если Выборка.ЭтоГруппа Тогда

Область=Группа;

Иначе

Область=Элемент;

КонецЕсли;

Область.Параметры.Заполнить(Выборка);

ТабличныйДокумент.Вывести(Область);

КонецЦикла;

Возврат (ТабличныйДокумент);

КонецФункции

В клиентской процедуре СформироватьОтчет() мы вызываем серверную функцию СформироватьОтчетНаСервере(), присваивая возвращаемое ей значение реквизиту ТабличныйДокумент.

В серверной функции мы создаем новую переменную с типом ТабличныйДокумент и именем ТабличныйДокумент. Именно в него мы будем выводить данные и именно его будем возвращать в точку вызова. Несмотря на то, что имя реквизита формы и имя данной переменной совпадают, между ними нет никакой связи. Это – отдельные объекты.

Далее, мы получаем макет из нашего отчета, пользуясь методом ПолучитьМакет() и задавая имя макета. Отчет может иметь несколько макетов, их выбор осуществляется по имени.

В переменную Шапка мы записываем область макета Шапка, соответственно поступаем с переменными Элемент и Группа.

Командой Шапка.Параметры.ДатаФормированияОтчета=ТекущаяДата(); мы заполняем ранее заданный в макете параметр ДатаФормированияОтчета, записав в него текущую дату. Дата, возвращаемая функцией ТекущаяДата, содержит, помимо года, месяца и дня, так же часы, минуты и секунды. При необходимости дату перед выводом можно отформатировать при помощи функции Формат().

После того, как параметр, находящийся в шапке, заполнен, мы можем вывести шапку в табличный документ командой ТабличныйДокумент.Вывести(Шапка);

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

В цикле обхода выборки мы сначала проверяем, является ли текущий элемент справочника группой. Если является, присваиваем переменной Область ранее полученную область отчета Группа. Если не является – присваиваем ей область Элемент.

Благодаря совпадению имен параметров и имен реквизитов справочника, для помещения данных из выборки в область макета, достаточно воспользоваться конструкцией Область.Параметры.Заполнить(Выборка);. После заполнения параметров мы выводим сформированную область в табличный документ.

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

Для формирования простейших отчетов, пользователь может воспользоваться стандартной функциональностью, присутствующей в 1С:Предприятие 8. Для этого, открыв, например, список справочника, он может выполнить команду Все действия > Вывести список. Появится окно Вывести список, рис. 5.8., где в поле Выводить в можно выбрать либо Табличный документ (его обычно и используют), либо – Текстовый документ.

Рис. 5.8.  Окно Настройка списка

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