gifts2017

Рассылка отчетов на БСП. Расширение периодических параметров.

Опубликовал Владимир Пономарев (valafan) в раздел Программирование - Практика программирования

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

Случай из практики. Есть УТ 11 (используется БСП) и некий внешний отчет, который показывает информацию за определенный период. Необходимо рассылать его каждую пятницу с периодом формирования 1 неделя, т.е. с пятницы прошлой недели до четверга текущей недели.

Создаем рассылку. В качестве параметра КонецПериода выбираем Начало вчерашнего дня - получаем четверг текущей недели.

рис.1

А вот для того, чтобы "попасть" в прошлую пятницу, вариантов стандартного периода недостаточно.

рис.2

Чтобы восполнить этот недостаток я решил использовать следующий способ:

1. Создаю 2 дополнительных строковых параметра, в которые буду записывать выражение для вычисления периодов.

рис.3

2. В процедуре модуля объекта ПриКомпоновкеРезультата описываю вывод отчета программно, где задаю значения периодам их соответствующими выражениями на встроенном языке.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

    Попытка
        МакетКомпоновки.ЗначенияПараметров.НачалоПериода.Значение = Вычислить(МакетКомпоновки.ЗначенияПараметров.ВыражениеНачалоПериода.Значение);
        МакетКомпоновки.ЗначенияПараметров.КонецПериода.Значение = Вычислить(МакетКомпоновки.ЗначенияПараметров.ВыражениеКонецПериода.Значение);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

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

рис.4

Скачать файлы

Наименование Файл Версия Размер
Пример отчета для рассылки БСП 11
.erf 8,38Kb
19.09.13
11
.erf 8,38Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей 1 (AlX0id) 19.09.13 00:06
Мощно. Так прямо и захотелось вбить в параметр "0; Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Объ = Выборка.ПолучитьОбъект(); Объ.Удалить(); КонецЦикла" :)
2. Владимир Пономарев (valafan) 19.09.13 07:31
(1) AlX0id, само собой это для служебного пользования )) хотя можно и фильтры поставить
3. Алексей 1 (AlX0id) 19.09.13 08:59
(2) valafan,
Да не надо фильтров - достаточно использовать Вычислить в вашем случае )
4. Владимир Пономарев (valafan) 19.09.13 09:52
(3) AlX0id, спасибо, поправлю
5. Ринат Исхаков (randa) 26.09.13 19:52
У Вас из УТ11 или БСП работает регламентное задание по рассылке отчетов? Тобишь в автоматическом режиме отправляется?
6. Владимир Пономарев (valafan) 27.09.13 08:01
(5) randa, да, в клиент-серверной базе
7. Ринат Исхаков (randa) 27.09.13 08:58
(6) Спасибо, разобрался! На форуме нашел, оказывается для регламентного задания "РассылкиОтчетов" на общий реквизит "ОбластьДанных" стояла авторегистрация, это было причиной.