Опубликован: 06.12.2011 | Уровень: для всех | Доступ: свободно
Лекция 6:

Программная работа со справочниками, обработки, простые отчеты

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

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

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

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

Готовый отчет

Рис. 5.19. Готовый отчет
&НаКлиенте
Процедура СформироватьОтчет(Команда)
  ТабличныйДокумент=СформироватьОтчетНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьОтчетНаСервере()
  ТабличныйДокумент=Новый ТабличныйДокумент();
  Макет=Отчеты.СписокКонтрагентов.ПолучитьМакет("Макет");
  Шапка=Макет.ПолучитьОбласть("Шапка");
  Элемент=Макет.ПолучитьОбласть("Элемент");
  Группа=Макет.ПолучитьОбласть("Группа");
  Шапка.Параметры.ДатаФормированияОтчета=ТекущаяДата();
  ТабличныйДокумент.Вывести(Шапка);
  Выборка=Справочники.Контрагенты.ВыбратьИерархически();
  Пока Выборка.Следующий() Цикл
    Если Выборка.ЭтоГруппа Тогда
      Область=Группа;
    Иначе
      Область=Элемент;
    КонецЕсли;
    Область.Параметры.Заполнить(Выборка);
    ТабличныйДокумент.Вывести(Область);
  КонецЦикла;
  Возврат (ТабличныйДокумент);
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод данных в табличный документ

увеличить изображение
Рис. 5.21. Вывод данных в табличный документ
Лариса Дятчина
Лариса Дятчина
Почему не работает код
максим матасов
максим матасов
Нам нужно создать новый документ типа ПоступлениеМатериалов. Какой программной конструкцией можно воспользоваться
Александр Палий
Александр Палий
Россия, Москва
Константин Гераськов
Константин Гераськов
Россия, Новосибирск