Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Vitalii_Popovych от 23 Октября 2019, 09:49:56

Название: Формирование суточного отчета
Отправлено: Vitalii_Popovych от 23 Октября 2019, 09:49:56
А подскажите пожалуйста как быть? Раз в сутки автоматически формирую отчет за прошедшие сутки (как в примере с 08:00 по 08:00). Но. Каждый новый отчет (который сохраняется в указанной папке) перезаписывает предыдущий, а нужно чтобы записывался новый отчет. Понимаю, что имя отчета одно и то же будет. Может где-то в настройках есть нужный пункт?
Код: (delphi)
var
  aReport: TM_Report;
begin                                 
  { если сейчас не 8 часов, то прерываем выполнение скрипта }
  if HourOf(Now) <> 8 then Exit;
 
  { берём текущее время и дату и сбрасываем минуты, секунды и
    миллисекунды в 0, т.к. нам важны только часы. Записываем
    полученное значение в переменную vrTimeEnd }
  vrTimeEnd.Value := RecodeTime(Now, HourOf(Now), 0, 0, 0);
 
  { от значения vrTimeEnd отнимаем 24 часа и записываем
    полученное значение в vrTimeBegin }
  vrTimeBegin.Value := IncHour(vrTimeEnd.AsDateTime, -24);
 
  { Формируем отчёт с именем "Отчет_1" и открываем его для просмотра
    на всех клиентах с именем "Client_1" }
  aReport := ReportBuild('Молодіжна_добовий');
   aReport.Save('my_client1', 'Молодіжна_добовий', '', rfPDF);  // сохраняем его в файл "Мой отчет.xlsx" на клиенте "Client_Name"
end.
Название: Re: Формирование суточного отчета
Отправлено: Vladimir от 23 Октября 2019, 15:44:36
Добавьте в имя отчета дату
Название: Re: Формирование суточного отчета
Отправлено: Vitalii_Popovych от 23 Октября 2019, 16:23:25
Добавьте в имя отчета дату
На словах я тоже к этому пришел, но как это правильно реализовать еще не придумал. просто вставить в название например {Данные_Начало} при редактировании самого отчета?
Название: Re: Формирование суточного отчета
Отправлено: Vladimir от 23 Октября 2019, 16:27:30
по синтаксисису точно не скажу, но что-то вроде имя отчета = 'имя отчета '+datetime(now). Посмотрите синтаксис команд, скады нет под рукой. Тоже формировал суточные и часовые отчеты.
Название: Re: Формирование суточного отчета
Отправлено: Simple_Scada от 23 Октября 2019, 16:34:41
Здравствуйте.

Лучше всего для этого использовать функцию DateTimeToFileName (https://simple-scada.com/help/script/datetimetofilename.html). Она переводит текущую дату и время в имя файла. Использовать можно так:
Код: (delphi)
var
  aReport: TM_Report;
begin
  { если сейчас не 8 часов, то прерываем выполнение скрипта }
  if HourOf(Now) <> 8 then Exit;

  { берём текущее время и дату и сбрасываем минуты, секунды и
    миллисекунды в 0, т.к. нам важны только часы. Записываем
    полученное значение в переменную vrTimeEnd }
  vrTimeEnd.Value := RecodeTime(Now, HourOf(Now), 0, 0, 0);

  { от значения vrTimeEnd отнимаем 24 часа и записываем
    полученное значение в vrTimeBegin }
  vrTimeBegin.Value := IncHour(vrTimeEnd.AsDateTime, -24);

  { Формируем отчёт с именем "Отчет_1" и открываем его для просмотра
    на всех клиентах с именем "Client_1" }
  aReport := ReportBuild('Молодіжна_добовий');
   aReport.Save('my_client1', 'Молодіжна_добовий' + DateTimeToFileName(Now, ''), '', rfPDF);  // сохраняем его в файл "Мой отчет.xlsx" на клиенте "Client_Name"
end.
Название: Re: Формирование суточного отчета
Отправлено: VladD от 22 Декабря 2019, 20:05:46
Добрый день..если мы сохраняем отчет как
aReport.Save('my_client1', 'Мой отчет' + DateTimeToFileName(Now, ''), '', rfPDF), то какой синтаксис для вложения его в почтовое сообщение
aMail.AttachReport(aReport, 'Мой отчет' + DateTimeToFileName(Now, ''));
или другой метод? Спасибо.
Название: Re: Формирование суточного отчета
Отправлено: Simple-Scada от 23 Декабря 2019, 10:34:48
Здравствуйте.
Для отправки отчета не важно сохраняете Вы его, или выполняете какие-то другие действия. Достаточно построить отчет через ReportBuild и прикрепить его к письму (можно даже не сохранять). Вот пример с комментариями:
Код: (delphi)
var
  aMail: TM_Mail;
  aReport: TM_Report;
begin
  // строим отчет с именем "Периодический"
  aReport := ReportBuild('Периодический');
  // сохраняем отчет в .pdf файл на клиентах с именем my_client1
  aReport.Save('my_client1', 'Мой отчет' + DateTimeToFileName(Now, ''), '', rfPDF);

  // отправляем e-mail
  aMail := SendMail('Simple-Scada', 'Mail с отчетом', 'Отчет во вложении');
  // прикрепляем к письму ранее построенный отчет aReport
  aMail.AttachReport(aReport, 'Мой отчет' + DateTimeToFileName(Now, ''));
end.
, чтобы отправка e-mail работала нужно предварительно включить и настроить отправку e-mail в утилите настроек (https://simple-scada.com/help/manual/index.html?settings-simple-scada-server.html#send_email).