1
Ошибки / Re: Центровка объектов
« : 24 Августа 2026, 11:26:26 »
Исправление добавлено в обновление 2.7.6.0.
Официальный форум Simple-Scada.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Вот к какому коду в OnShow в итоге пришлось прийтиНе рекомендуем использовать привязку к строковым значениям (к Вашем случае к заголовку окна). Вместо этого назначьте объектам в шаблонном окне (которым нужно менять видимость) на свойство "Тег" подстановку "%Видимость%". Затем указывайте в эту подстановку значение 1 (чтобы показать объект) или 0 (чтобы скрыть). Тогда скрипт OnInit шаблонного окна будет максимально простым и на этапе разработки будет сразу понятно что эта подстановка отвечает за видимость. Вот скрипт OnInit шаблонного окна:
var
I: Integer;
aFlow: TM_Object;
begin
// меняем видимость объектов Flow0, Flow1, Flow2
// в зависимости от значения в их Теге
for I := 0 to 2 do
begin
aFlow := GetTemplateObject('Flow' + IntToStr(I));
aFlow.Visible := aFlow.Tag = 1;
end;
end.
var
I: Integer;
aFlow: TM_Object;
aOwnerWindow: TM_Window;
begin
aFlow := GetTemplateObject('Flow0');
if TM_Window(aFlow.GetOwner).Title <> 'Настройки ВКТ' then
for I := 0 to 2 do
GetTemplateObject('Flow' + IntToStr(I)).Visible := True;
end.
но в разделе Свойства объектов про TM_TemplateWindow ничего нет.Его нет, т.к. шаблоны не существуют во время работы проекта, в этом суть шаблонов. Шаблон - это не реальный экземпляр окна, а просто схема на основе которой может быть создано множество реальных окон. То же касается шаблонов сообщений. Поэтому в скриптах нет никакого смысла пытаться работать с TM_TemplateWindow.
На странице справки по TM_ComboBox.ItemIndex написано, что свойство работает только на чтение.Оставили возможность записи только для совместимости со старыми версиями (в будущем возможно заблокируем запись). Каждая строка раскрывающегося списка связана со своим значением. Для изменения значения используйте свойство Value, например: "ComboBox1.Value := 1;"
Баг отображения значений на Тренде в Веб-клиенте (пропадают нули при 10, 100 и т.д.)Спасибо за информацию, проверим. А какой "Формат" задан в настройках этих архивируемых переменных? Стандартный "0.##"?
var
i1: integer;
localVar: TM_Variable;
begin
for i1 := Report_arData.LowBound to Report_arData.HighBound do
begin
localVar := GetVariableByName('LocReport_arData' + IntToStr(i1));
if localVar <> nil then
localVar.Value := Report_arData.ValuesStr[i1];
end;
end.
Компиляция не дает ошибок.Верно, компиляция не может выявлять ошибки обращения к несуществующему объекту, они выявляются только во время работы.
после нового обновления скады попробуем еще раз на чистую все повторить и посмотретьВ этом нет смысла, т.к. проблема никак не связана со скадой.
почему значение не записывается принудительно?Потому что скада работает только с изменениями. Если переменная никогда не меняется, то ничего не произойдёт.
Мне для понимания для будущих проектов.Для будущих проектов, как и писали, рекомендуем использовать тип архивации "по-изменению" для всех переменных. А "комбинированный" только если задана зона нечувствительности и значение тренда часами находится в пределах этой зоны.
По моей логике и по описанию в руководстве "комбинированный" подразумевает запись через заданный интервал времени даже несмотря на то, что параметр не меняет своего значения длительное время.В Simple-Scada нет такого типа архивации, который записывал бы данные с какой-то фиксированной периодичностью, т.к. в этом нет никакой пользы, только вред (больше размер БД, хуже производительность). Для редко меняющихся трендов скада может записывать данные в БД раз в 24 часа и это никак не мешает их правильному отображению. Описание типов архивации доступно по ссылке.