Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

ART63

ЦитироватьUSE лучше не использовать, вместо этого укажите имя БД в запросе перед именем таблицы, как описал выше Victor_P..

Правильно я понимаю, что это будет работать только при условии, что обе БД на одном сервере расположены?

Victor_P.

Цитата: ART63 от 16 марта 2022, 13:52:39Правильно я понимаю, что это будет работать только при условии, что обе БД на одном сервере расположены?
По идее можно прилинковать и другой сервер к используемому.

mihanikus45rus

#1352
Добрый день. Из за чего может возникать такая ошибка - "Telegram. EC: 400. SendTelegram error: HTTP/1.1 400 Bad Request, ChatID: 892141957". Добавил нового пользователя в список получателей(восьмого по счёту), и только ему не доходят сообщения.

Дополнительно - при добавлениии пользователя(нажимает старт в боте), в настройках скады ему присваивается 10 значный ID. Тестовое сообщение приходит. После сохраняю настройки, захожу заново - ID 9 значный. Сообщения не приходят. В самом телеграмме ID как первый раз присвоено было. Версия скады - 2.5.15.0

Simple-Scada

Здравствуйте.
Нашли ошибку при сохранении настроек, было лишнее ограничение по величине значений ChatID. Сделаем исправление в ближайшее время.

mihanikus45rus


ACHE

#1355
Здравствуйте.
Скажите пожалуйста, можно ли отправлять созданный автоматически отчет на почту в формате XLS, а не в PDF?
Пока работает такой скрипт (каждый день формируется отчет, сохраняется в ексель на сервер, отправляется на почту пдф):
Код: pascal
var
  aReport: TM_Report;
  aMail: TM_Mail;
begin
    if HourOf(Now) <> 15 then Exit;
    
DateEndAuto.Value := RecodeTime(Now, 14, 5, 0, 0);

  aReport := ReportBuild('Gagarina_sutki');
  aReport.UseOnePageHeaderAndFooter := 1;
  aReport.ExportPageBreaks := 1;
  aReport.Save(SS_SERVER_NAME, 'Отчет Гагарина за ' + DateTimeToFileName(Now, ''), 'C:\Отчеты Асино\Гагарина\', rfExcel2007);
  aMail := SendMail('Simple-Scada', 'Ежедневный отчет по энергоресурсам Гагарина', 'Отчет создан автоматически.');
  aMail.AttachReport(aReport, 'Отчет Гагарина за ' + DateTimeToFileName(Now, '')); 

end.

Simple_Scada

Здравствуйте.
 
Используя AttachReport можно отправить отчет только в формате PDF. Если требуется обязательно отправлять в письме отчет в Excel, то нужно в скрипте сохранить его в Excel, дождаться построения и сохранения отчета и только после этого отправлять его. Для этого, в Вашем случае можно формировать и сохранять отчет как указано в скрипте в 15:00, а производить отправку, к примеру через 5 минут, в 15:05, когда отчет точно будет сформирован и сохранен. Прикрепить к письму файл отчета можно при помощи команды AttachFile - пример скрипта можно посмотреть по ссылке.
​

ACHE

Цитата: Simple_Scada от 28 марта 2022, 11:22:39Прикрепить к письму файл отчета можно при помощи команды AttachFile[/url].

В имени файла используется "+ DateTimeToFileName(Now, '')", так же в конце имени отчёта в скобках проставляется уникальный номер. Как с этим быть?

Simple_Scada

Можно создать внутреннюю переменную с типом данных String и записывать в нее имя файла при формировании отчета. Например:
Код: pascal
var
  aReport: TM_Report;
  aMail: TM_Mail;
begin
  if HourOf(Now) <> 15 then Exit;

  vrFileName.Value := 'Отчет Гагарина за ' + DateTimeToFileName(Now, '');

  DateEndAuto.Value := RecodeTime(Now, 14, 5, 0, 0);
  aReport := ReportBuild('Gagarina_sutki');
  aReport.UseOnePageHeaderAndFooter := 1;
  aReport.ExportPageBreaks := 1;
  aReport.Save(SS_SERVER_NAME, vrFileName.AsStr, 'C:\Отчеты Асино\Гагарина\', rfExcel2007);
end.
, где vrFileName - это внутренняя переменная String. Затем эту переменную можно использовать при отправке e-mail.

ACHE

#1359
Цитата: Simple_Scada от 28 марта 2022, 15:20:23где vrFileName - это внутренняя переменная String. Затем эту переменную можно использовать при отправке e-mail.

Тыкните носом до конца уже пожалуйста)) всяко пытался приложить файл, никак не получается.
Делал так:
Код: pascal
aReport.Save(SS_SERVER_NAME, FileNameReport.AsStr, 'C:\Отчеты Асино\Гагарина\', rfExcel2007); //работает, читаю переменную FileNameReport, имя пишется правильно, файл сохраняется
aMail := SendMail('Simple-Scada', 'Отчет по энергоресурсам Гагарина', 'Отчет во вложении', Email.Value);
aMail.AttachFile('C:\Отчеты Асино\Гагарина\'+FileNameReport.Value); //письмо приходит пустое

Для теста разделял скрипты, один формирует, второй отправляет по нажатию кнопки. Кириллические символы в пути к файлу и в имени могут влиять?

Simple_Scada

#1360
К имени прикрепляемого файла нужно добавить расширение ".xlsx". Также следует учитывать, что нужно использовать явное приведение значения переменной к нужному типу. Например, в Вашем случае использовать приведение в строку (свойство AsStr):
Код: pascal
aMail.AttachFile(' C:\Отчеты Асино\Гагарина\ ' + FileNameReport.AsStr + '.xlsx');

Чтобы все работало корректно, нужно производить отправку e-mail только после сохранения файла отчета. Если вызвать сохранение отчета в Excel и отправку файла отчета на e-mail в одном скрипте, то скрипт выполнится мгновенно, на момент отправки файла отчет не успеет сохраниться и отправлять будет нечего. Поэтому можно формировать и сохранять отчет как указано у Вас в скрипте в 15:00, а производить отправку, к примеру через 5 минут, в 15:05, когда отчет точно будет сформирован и сохранен. Создайте отдельный секундный скрипт для отправки отчета, например:
Код: pascal
var
  aMail: TM_Mail;
begin
  if (HourOf(Now) = 15) and (MinuteOf(Now) = 5) then   // если сейчас 15:05
    if FileNameReport.AsStr <> '' then  
    begin
      FileNameReport.Value := '';
      aMail := SendMail('Simple-Scada', 'Ежедневный отчет по энергоресурсам Гагарина', 'Отчет создан автоматически.');
      aMail.AttachFile(' C:\Отчеты Асино\Гагарина\ ' + FileNameReport.AsStr + '.xlsx');
    end;
end.
Чтобы отправка выполнилась однократно, можно использовать переменную FileNameReport и после отправки сбрасывать ее.

fp

Добрый день!
Подскажите, пожалуйста, возможно ли при открытии (переход через скрипт) страницы с трендом или страницы трендов установить начальную точку для отображения трендов на этой странице и интервал?

Simple_Scada

Здравствуйте. Такой возможности нет.

Raa

#1363
Цитата: Simple_Scada от 06 апреля 2022, 10:36:32Здравствуйте. Такой возможности нет.
Очень зря.

Avtovazov

#1364
Добрый день
Помогите пожалуйста со скриптом. Задача следующая мне нужно сделать так, чтоб выполнилась математическая функция например вычитание одной переменной из другой, но условием которое разрешит делать это вычитание должно быть, чтоб одна переменная имела статус TRUE, а другая переменная должна изменить свое состояние и вернуться в изначальное (т.е. стать true потом false, симитировать импульс кнопки без фиксации) и только после этого выполнится вычитание?
Ниже скрипт который мне нужен, только немогу понять как сделать так, чтоб только после того как К2 станет true  затем false происходило вычисление

Код: pascal
begin
if (k1.AsBool = true) and (k2.AsBool = true) then
vrC.Value := vrA.AsSingle -  vrB.AsSingle
end.