Здравствуйте. Отчеты не сохраняются на новой версии SCADA, причем в журнале на сервере пишется, что отчет построен и отправлен клиентам, также заходя в report.exe и обновив данные и затем открыв предварительный просмотр - все отображается как должно быть в отчете, но отчет не сохраняется и не открывается. Прилагаю участок кода. Сам отчет имеет название в Report.exe - areport.
var
f: string;
areport: TM_Report;
begin
f := 'Отчет о работе комбайна '+ IntToStr(serial_number.Value) + ' c '+
DateToStr(time_begin_2.Value) + ' ' + TimeToStr(time_begin_2.Value) + ' по ' +
DateToStr(time_end_2.Value) + ' '+ TimeToStr(time_end_2.Value);
areport := ReportBuild('areport');
areport.View(GetClientName);
areport.Save(GetClientName, f, 'C:\Отчеты_КП21', rfPDF);
end;
Здравствуйте.
В коде Вы используете перевод времени в строку через "TimeToStr" для имени файла. По умолчанию эта функция будет возвращать время в формате "09:44:00", т.е. с разделителем ":", который запрещён в Windows для использования в именах файлов и папок. Поэтому нужно избавиться от этих символов. Это можно сделать установив свой формат времени через процедуру SetTimeFormat. Лучше всего вместо функций конвертации даты времени в строку и использовать специальную функцию DateTimeToFileName (https://simple-scada.com/help/script/datetimetofilename.html) которая всегда генерирует уникальной имя из DateTime переменной исключая любые недопустимые символы.
Также при сохранении отчёта Вы указали путь 'C:\Отчеты_КП21'. Но путь обязательно должен заканчиваться символом "\". В результате правильный вариант скрипта должен быть таким:
var
f: string;
areport: TM_Report;
begin
SetTimeFormat('hh_nn_ss'); // устанавливаем допустимый для имён файлов формат времени
f := 'Отчет о работе комбайна '+ IntToStr(serial_number.Value) + ' c '+
DateToStr(time_begin_2.Value) + ' ' + TimeToStr(time_begin_2.Value) + ' по ' +
DateToStr(time_end_2.Value) + ' '+ TimeToStr(time_end_2.Value);
areport := ReportBuild('areport');
areport.View(GetClientName);
areport.Save(GetClientName, f, 'C:\Отчеты_КП21\', rfPDF);
end;
Также папка "Отчеты_КП21" обязательно должна существовать на момент сохранения отчёта, иначе отчёт не будет сохранён.
Далее, если Вы подключаетесь к серверу с удалённого клиента (через внешний IP-адрес, например через интернет), то для передачи файлов от сервера к клиенту нужно пробросить порт 8757, как описано в руководстве здесь (https://simple-scada.com/help/manual/client.html).
Если после вышеописанных действий отчет не строится и не открывается для просмотра то напишите нам об этом, можно будет проверить другие пункты.
В этом и заключается ошибка. См. описание функции GetClientName (https://simple-scada.com/help/script/getclientname.html). Секундные скрипты вызываются сервером скады и какой-либо клиент не причастен к вызову такого скрипта. Соответственно функция GetClientName в нём не сработает и вернёт пустую строку. В старых версиях скады была ошибка при которой если имя клиента пустое, то отчет будет отправлен всем клиентам.
В результате нужно через Options.exe на каждом клиентском ПК задать имя клиента (https://simple-scada.com/help/manual/index.html?settings-simple-client.html#servset), например "my_client", а затем строкить отчёт для этого клиента, указывая его имя напрямую:
areport := ReportBuild('areport');
areport.View('my_client');
Второй вариант: если требуется открыть отчет для просмотра на всех клиентах сразу, то нужно использовать константу SS_ALL_CLIENTS, например:
areport := ReportBuild('areport');
areport.View(SS_ALL_CLIENTS); , аналогично для areport.Save.