[16025] [16052] Использование пользовательских атрибутов в расчетных формулах точек

Идея предоставить доступ к системе для проверки синтаксиса не подходит. Я не буду этого делать, это противоречит правилам безопасности на конкретном предприятии. Да и мне это не кажется разумным.

Я ведь вручную ввожу очень мало символов (+, - и скобки), чтобы у меня был простор где ошибиться

У вас интерфейс ввода расчетных формур не самый дружелюбный и проработанный. Сейчас ситуация еще интереснее.

Все скриншоты выше сделаны из обычной точки, где рассчитывается только один параметр и нет описанных в точке устройств. В этой точке данные почему-то появлялись только при ручном пересчете; автоматически же, по мере появления данных в точках-донорах, они не рассчитывались. Я решил создать расчетную точку учета

Т.к. дл диагостика вилимо не работает без dM (Не работает диагностика небаланса масс, если считать %М с помощью расчетной формулы - #6 от пользователя slavniy) создал сначала именно dM.

И вот результат. Работает только вот такая формула:

А вот такая


вызывает вот эту ошибку

Версия 3.61.3

Видимо есть разница между простой точкой учета и расчетной.

Вы сейчас ввели новый термин? :slight_smile: для записи такого формата [&Эта точка]

Возможно, проблемы и нет, но такое использовано не описано в документации. Пока именно такая запись у меня вызывает ошибку. Это я описал выше.

Я не увидел удобства. Интерфейс ввода расчетных формул очень неудобный, вариантов полей хватает на многостраничный документ, ваш подход добавляет вариантов полей, не добавляя реально новой информации. И все это в очень маленьком окошке, которое приходится растягивать вручную каждый раз при обращении к формуле. Вся эта свобода выбора ценна, если вводить 1-2 параметра, а при реальной работе с многими параметрами это “удобство” дополнительно замедляет работу, незначительно на фоне очень большого списка. Но мне не понятно почему это удобство

Я правильно понимаю, что текущая реализации ссылки на атрибут объекта это следствие того, что в текущей реализации нельзя получить ссылку на объект?

Резюме. Правильно ли я понял вашу задумку? Если атрибут объекта, то ссылка на него может быть через любую точку, а если атрибут для точки, то ссылка возможна только через конкретную точку. Это так?

Возможно на вашем Сервере есть определенное сочетание условий, приводящих к возникновению описываемой вами ошибки, о которых нам неизвестно и которых нет на нашем тестовом Сервере.

Действительно при использовании ссылки на точку в расчетной формуле расчетной точки во время попытки перерасчета данных возникает описанная ошибка. Поставили в план исправление данной ошибки.

Здесь подразумевалось обращение к точке по ссылке.

Именно поэтому ми и запросили у вас доступ к вашей системе, чтобы попытаться воспроизвести ситуацию на ней у себя.

Это обсуждение явно выходит за рамки данной темы. Вы можете создать отдельное предложение, в котором подробно описать свое виденье “удобства” работы с интерфейсом расчетных формул.

Я несколько раз прочитал данный фрагмент, но так и не смог понять о чем в нем говорится. Что вы подразумеваете под ссылками на атрибут/объект? Поле атрибута? Как вы вообще пришли к выводу о возможности подобного “следствия”?

Если под ссылкой на атрибут подразумевается возможность обращения к нему в редакторе формул, то в целом все верно. Отмечу только, что через точку вы можете обращаться только к атрибуту объекта, в котором эта точка находится.

Исправление будет доступно в следующем обновлении 3.61.4.

Отлично, буду ждать

Пара вопросов, вытекающих из темы. Можете пояснить, нормально ли такое поведение обычной точки учета, где есть только рассчитываемые параметры и не привязано устройство? Есть ли разница и какая в работе обычной точки учета (только рассчитываемые параметры, без привязанного устройства) и расчетной точки?

Конечно же есть разница между обычной и расчетной точками. В противном отдельно понятия “расчетная точка” не существовало бы. Приведу выдержку из документации Расчётные формулы, в которой приведены все возможные варианты, при которых в расчетных точках расчет запускается автоматически:

Для расчётных точек формулы — единственный способ получить данные. Расчётные точки невозможно опросить и привязать к устройству, все параметры могут быть только рассчитаны.

Значения параметрам потребления, рассчитанные по формулам, присваиваются в следующих случаях:

  • после опроса точек учета, используемых в формулах параметров
  • после импорта данных по точкам учета используемых в формулах параметров
  • после выполнения ручного пересчета расчетной точки учета
  • после опроса или импорта данных по точке учёта, для которой заданы формулы. Расчёт в этом случае будет произведён только если во всех точках учёта, присутствующих в формуле, есть потребление.

Заполнение текущих параметров для расчётных формул выполняется по следующему алгоритму:

  1. При изменении текущих данных по какой-либо точке учёта-источника, входящей в выражения для расчетных точек, проверяются все формулы, в которую входит эта точка-источник.
  2. Запрашиваются текущие данные за период плюс минус пять минут относительно времени из п.1, по всем точкам-источникам используемым в формулах расчетных точек.
  3. По всем точкам-источникам отбираются текущие данные, которые укладываются в этот диапазон.
  4. Из отобранных выбираются данные ближайшие по времени к данным из п.1 и по ним рассчитываются параметры расчетной точки.

Для обычных точек учета эти случаи не работают.

В дополнение. Проверил использование разных вариантов ссылки на точку при адресации к атрибуту объекта.

Все неудачно. Вот подробности:
формула


результат

формула


результат

формула


результат

Пожалуйста, дождитесь выхода вышеописанной версии и проверьте все описанные случаи в ней.

Добрый день!

Обновление 3.61.4 (сборка 36112) от 14.05.2025 доступно для установки.

обновил. Ошибки при пересчете остались.
Обновил формулу - результат не изменился
Формула:

ToDouble([&ГВС#1 - Объект учёта: Расход наладочный]) - [&Теплоснабжение#1.M2] + [&ГВС#1.M2]

Результат

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

Уточните, пожалуйста, вы подключаетесь к локальному Серверу на том же компьютере, что из Рабочее место оператора, в котором выполняли вышеописанные действия, или к удаленному компьютеру? Если к удаленному Серверу, убедитесь, что он также обновлен до текущей версии.

Все скриншоты сделаны прямо на сервере, который обновлен то текущей версии

Остальные настройки не менялись? Расчет все так же выполняется только для часовых данных?

На всякий случай приведу скриншот используемой нам при тестировании формулы, составленной по вашей формуле:


Различий не нашел.

Это общий вопрос, на который я не могу ответить. Из специальных изменений было только обновление и повторный ввод расчетной формулы.

да.

При ручном перерасчете возникает следующая ошибка:

При расчете данных, когда поступают данные, в системном журнале появляется такое сообщение:
Ошибка расчёта формул для точки учёта 4-й микрорайон, 31 - Теплоснабжение. Ошибка вычисления параметра за 18.05.2025 00:00 по выражению ‘([124.Parent_Attribute.Set-pointflow] + [967.6] - [124.5]) / [124.Parent_Attribute.Set-pointflow] * 100’. BinaryOperator Minus not supported for type System.String BinaryOperator Minus not supported for type System.String

Какие наши дальнейшие действия? Выложить базу данных?

Да, пожалуй это единственный вариант, потому что используемая нами формула идентична представленной вами, но ситуация не воспроизводится.

отправил ссылку на базу на support@lers.ru

Как выяснилось, проблема возникает из-за наличия в коде атрибута объекта, задействованного в формуле, символа “-”. Аналогичная ситуация возникает и при наличии в коде пробела.
Спасибо за обращение! Мы поставили в план работ исправление данной ошибки. Как только она будет исправлена, обязательно сообщим в каком обновлении будет доступно исправление.

В качестве обхода вы можете временно удалить из кода атрибута все “-”, после чего заново создать формулу расчетной точки.

Из текста ошибки видно, что она возникает в точке “4-й микрорайон, 31 - Теплоснабжение”. Значение атрибута является текстовым и в формуле вы никак не преобразовываете его к численному типу. В результате у вас происходит операция сложения, которая в том числе применима и для строкового типа, а вот вычитание уже вызывает ошибку, в которой явно описано, что данная операция не поддерживает строку. Вам нужно просто в данной формуле задать преобразование атрибута к каком либо типу, как вы это делаете в рассматриваемой чуть выше формуле, где преобразовываете к типу Double (функция ToDouble).

Исправление будет доступно в следующем обновлении 3.61.5.

Добрый день!

Обновление 3.61.4 (сборка 36112) от 22.05.2025 доступно для установки.