Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 14:42

Вопрос по формированию отчёта по средствам регламентного задания.

Автор mila1231, 30 мая 2016, 07:45

0 Пользователей и 1 гость просматривают эту тему.

mila1231

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

Запрос = Новый запрос;
Запрос.текст = "ВЫБРАТЬ
               | РеестрДвиженияПрибораСрезПоследних.Номер_прибора_регистр,
              .....................................................
               |ИЗ
               | РегистрСведений.РеестрДвиженияПрибора.СрезПоследних КАК РеестрДвиженияПрибораСрезПоследних
               |ГДЕ
               | РеестрДвиженияПрибораСрезПоследних.Дата_приёмки МЕЖДУ &Дата_от И &Дата_до
               | И РеестрДвиженияПрибораСрезПоследних.Контрагент_регистр = &контрагент
               |
               |УПОРЯДОЧИТЬ ПО
               | Статус_регистр"   ;
   
   
Запрос.УстановитьПараметр("Контрагент", Контрагент);     
Запрос.УстановитьПараметр("Дата_от", НачалоДня(Дата_от));     
Запрос.УстановитьПараметр("Дата_до", КонецДня(Дата_до));


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

Пока выборкаДанные.Следующий() цикл
ОбластьДанные.Параметры.Номер_прибора=  ВыборкаДанные.Номер_прибора_регистр;
................................

        ЭлементыФормы.ТабДок.вывести(ОбластьДанные);
КонецЦикла;

....................................
ЭлементыФормы.ТабДок.Вывести(ОбластьПодвал);
  ................... дальше отчёт сохраняется.


не поняно как заполнить столбцы макета и как установить начальные значения дат?

или может есть какая функция сформировать?? В общем кому не трудно подскажите.

LexaK

да вроде, ни чего сложного.
даты определяете от текущей,
каждый раз когда ваш отчет будет выполняться регламентным заданием текущая дата будет содержать, как это ни странно текущий день,
отнимая или прибавляя к которому нужное количество дней можно получить необходимый период
например вы хотите получать отчет за прошедшие 7 дней не включая текущий, тогда
Дата_от = ТекущаяДата() - 8 дней;
Дата_до = ТекущаяДата() - 1 дней;

после того как сформируете отчет, просто сохраните табличный документ в файл
команда Записать()
Цитировать
ТабличныйДокумент (SpreadsheetDocument)
Записать (Write)
Синтаксис:

Записать(<ИмяФайла>, <ТипФайлаТаблицы>)
Параметры:

<ИмяФайла> (обязательный)

Тип: Строка.
Имя файла, в котором сохраняется табличный документ.
<ТипФайлаТаблицы> (необязательный)

Тип: ТипФайлаТабличногоДокумента.
Формат, в котором будет сохранен табличный документ.
Значение по умолчанию: MXL.
Описание:

Записывает табличный документ в файл.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

пример
ТабДок.Записать("C:\My Documents\Таблица2.mxl");
если прибавите к имени файла текущую дату, отчеты будут накапливаться за каждый день, в противном случае перезаписываться,
но это уже зависит от постановки задачи.

если помогло нажмите: Спасибо!

mila1231

Т.е если я правильно поняла, то процедура в общем модуле должна выглядеть так??

Процедура СоздатьОтчет() экспорт

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

   

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



Пока выборкаДанные.Следующий() цикл

ОбластьДанные.Параметры.Номер_прибора=  ВыборкаДанные.Номер_прибора_регистр;

         ...................................

        //ТабДок.вывести(ОбластьДанные);

КонецЦикла;

//ТабДок.Вывести(ОбластьПодвал);
ТабДок.Записать("C:\Таблица2.xls", ТипФайлаТабличногоДокумента.xls);
КонецПроцедуры



просто не работает(((

LexaK

немного не так, это неправильно, немного внимательнее читайте присылаемые вам ответы :befhbt:
Цитировать
    Дата_до= ТекущаяДата();
    Дата_от = ТекущаяДата()-1;

а зачем вы это закоментарили?
//ТабДок.вывести(ОбластьДанные);

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

самое простое поручите эту задачу программисту, ему это на 5 минут! :)
если помогло нажмите: Спасибо!

mila1231

если бы можно было бы поручить, был бы другой вопрос))
про день понятно 1день =24*60*60...
вопрос в том, что непонятно, как запустить, чтоб выполнялось в фоновом процессе, при том, что клиент обычное приложение.
Добавлено: 30 мая 2016, 12:35


Может, кто подскажет... вопрос в том правильно ли я всё делаю, если у меня бд встроенная, т.е файловая, а в общем модуле я ставлю галку сервер(и по умолчанию клиент(обычное приложение)), если сервер не ставишь, то в регламентированном задании не видно процедуры.. просто задание не выполняется, а причину я понять не могу.
Добавлено: 31 мая 2016, 06:42


возможно кому пригодится, в модуль обычного приложения просто надо было добавить ВыполнитьОбработкуЗаданий() и
ПодключитьОбработчикОжидания("СтартРеглЗадания",3) и в итоге всё работает.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск