Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Формирование отчета  (Прочитано 3533 раз)

ART63

  • Постоялец
  • ***
  • Сообщений: 151
    • Просмотр профиля
Формирование отчета
« : 30 Мая 2022, 18:04:01 »
Добрый день!

Руководство для формирования отчета рекомендует создать переменные "vrTimeBegin" и "vrTimeEnd".
Но ведь это общие переменные и возможна ситуация, когда несколько пользователей одновременно попытаются сформировать отчет.
И хотя такая вероятность мала, но она существует.
В этом случае период отчета правильным будет только у одного пользователя, который последним изменит эти переменные.
Как можно избежать такой ситуации?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Формирование отчета
« Ответ #1 : 31 Мая 2022, 17:11:33 »
Здравствуйте.

Обычно разные операторы строят разные отчеты. Либо строят один отчет, но в разное время. Поэтому достаточно создать отдельные переменные начала/конца для отдельных отчетов. Например:
для отчета 1 переменные "vrTimeBegin1" и "vrTimeEnd1";
для отчета 2 переменные "vrTimeBegin2" и "vrTimeEnd2";
, т.е. не нужно использовать одинаковые переменные начала/конца для всех отчетов.

Если же у Вас разные операторы могут в один и тот же момент времени строить один и тот же отчёт (на практике такое обычно возникает редко), то интерфейс придётся разделить и каждому дать разные календари и кнопку построения. Например:
"оператор 1" видит компоненты "Calendar1" и "Calendar2" и меняет с их помощью переменные "vrOper1_Begin" и "vrOper1_End". И видит кнопку "Button1" для построения отчета;
"оператор 2" видит компоненты "Calendar3" и "Calendar4" и меняет с их помощью переменные "vrOper2_Begin" и "vrOper2_End". И видит кнопку "Button2" для построения отчета;
при этом отчет привязан к отдельным переменным "vrTimeBegin" и "vrTimeEnd".

Тогда скрипт построения отчета для первого оператора Button1_OnClick будет таким:
Код: (delphi)
var
  aReport: TM_Report;
begin
  // берём время начала и конца заданные оператором 1
  vrTimeBegin.Value := vrOper1_Begin.Value;
  vrTimeEnd.Value := vrOper1_End.Value;

  // строим и открываем отчет для просмотра
  aReport := ReportBuild('Общий_отчет');
  aReport.View(GetClientName);
end.

Скрипт построения отчета для второго оператора Button2_OnClick будет таким:
Код: (delphi)
var
  aReport: TM_Report;
begin
  // берём время начала и конца заданные оператором 2
  vrTimeBegin.Value := vrOper2_Begin.Value;
  vrTimeEnd.Value := vrOper2_End.Value;

  // строим и открываем отчет для просмотра
  aReport := ReportBuild('Общий_отчет');
  aReport.View(GetClientName);
end.

Если, вдобавок ко всему, у Вас все компоненты для построения отчета (календари и кнопки построения) расположены на одной мнемосхеме, которую одновременно могут просматривать несколько операторов, то нужно будет скрыть от "оператора 1" календари и кнопку "оператора 2" и наоборот. Это легко сделать через свойство "Права доступа" (см. вложение).

ART63

  • Постоялец
  • ***
  • Сообщений: 151
    • Просмотр профиля
Re: Формирование отчета
« Ответ #2 : 01 Июня 2022, 14:50:57 »
Спасибо!
Принцип понятен.
Еще один вопрос в части отчетов по ограничениям прав доступа. Есть отчет по потреблению э/э.
--------------------------------------------------------------------------------------
      Дата       !      ТУ1          !        ТУ2       !        ТУ3         !         ТУ4       !    и т.д.
--------------------------------------------------------------------------------------
У разных пользователей ограничены права на просмотр данных по каким-то точкам учета на уровне программы.
Можно ли как-то реализовать запрет на отображение данных в соответствующих столбцах отчета?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Формирование отчета
« Ответ #3 : 03 Июня 2022, 13:35:51 »
Здравствуйте.

Цитировать
Можно ли как-то реализовать запрет на отображение данных в соответствующих столбцах отчета?
Такой возможности нет. Вы можете попробовать создать "Динамический отчет" и через скрипт при формировании отчета подставлять нужные переменные для каждого пользователя отдельно. Такой вариант подойдет для отчетов с однотипными данными и постоянным количеством колонок.