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

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

Не работает даже простейшее выражение, как показано на скриншоте:

“Расход настроечный” - это пользовательский атрибут объекта учета. Были опробованы различные варианты, включая изменение типа выражения.

Есть ли возможность использовать пользовательские атрибуты в расчетных формулах точек?

Конечная цель - рассчитать значение по формуле:

(Атрибут “Теплоснабжение.М1” + Атрибут “ГВС.М1”) / Атрибут * 100

Пользовательский атрибут является строкой. Вам нужно преобразовать его в число функцией ToDouble.
Используйте пример из статьи Использование параметров отчета.

Это я сделал в первую очередь и значения все равно не заполняются.

Создал пользовательский атрибут и указал использовать его в объекте учёта:


Задал значение атрибута в свойствах объекта учёта:

Создал расчётную формулу, выбрал атрибут, преобразовав его из строки в число методом ToDouble:

Получил следующие значения в таблице данных:

После создания расчётной формулы вы производили опрос точки учёта или нажимали на кнопку Пересчитать данные в таблице с данными?

Давайте разбираться.
Атрибут равен 9,4, Формулу показал.
Для проверки использую значение часового архива за 23/04/25. Значения 10,4 в прочих часах результат прочих эксперементов. Значение на 13:00 я изменил вручную на “0”.


Для пресчета использую кнопку “пересчитать данные”.
Ожидаю, что во все часы за 23/04 значения h станет 9,4.

На скрине результат после пересчета.

Версия 3.60.4. Ставить новую не хотелось бы, нужно согласовывать долго.

В таких случаях, когда возникают подобные расхождения между версиями, устанавливать текущую версию обязательно (см. пункт 2. Правил оказания услуг технической поддержки пользователей ЛЭРС УЧЕТ). Пожалуйста, обновитесь до текущей версии и проверьте в ней.

Проверяли точно вашу формулу, но всё работает как ожидалось - подставляется значение из атрибута.

Насколько я прочитал ваш скриншот, вы показали его до того как нажали кнопку “Пересчитать”. Иначе введённое значение 0 за 13:00 тоже было бы заменено на расчётное. Может, у вас просто возникает какая-то ошибка обращения к БД? Что-то есть в системном журнале?

Нет. После.

Не заменилась как раз потому, то не подставился атрибут

Когда не заработало заполнение пользовательским атрибутом, я проверил работу с константами - данные заполнились. После этого для дальнейшего контроля ввел “0” за 13:00 и еще раз проверил с атрибутами. Ноль не переписался на значение атрибута

Никаких ошибок в логах нет. Формулы без атрибутов с участием констант и измеряемых параметров работают

В любом случае, мы не может воспроизвести ситуацию на 3.61. Все атрибуты корректно подставляются при расчёте. Пожалуйста, попробуйте на актуальной версии.

Я обновился и проблема осталась.

И нашел причину, и это явняа ошибка в ЛЭРС Учет.

Ошибка появлялась из-за того, что атрибут был сделан для объекта, а ЛЭРС предлагает использовать атрибут и как атрибут для точек и как для объекта.

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

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

не знаю что значит этот термин в этом случае, но вот сообщение из системного журнала об этом: “Ошибка расчёта формул для точки учёта 4-й микрорайон, 31 - Теплоснабжение. Ошибка вычисления параметра за 05.05.2025 13:47 по выражению ‘(ToDouble([124.Parent_Attribute.Set-pointflow]) - [&Heat1.5]) / ToDouble([124.Parent_Attribute.Set-pointflow]) * 100’. Имя поля &Heat1.5 задано неверно. Имя поля &Heat1.5 задано неверно. The input string ‘&Heat1’ was not in a correct format. Имя поля &Heat1.5 задано неверно. Имя поля &Heat1.5 задано неверно. The input string ‘&Heat1’ was not in a correct format.”

У термина “выдержка” действительно существует несколько определений, но в контексте работы с текстовой информацией, к которой относится и журналы, мне удалось найти только единственное определение из толкового словаря Ушакова (см. пункт 1. здесь).

Из приложенного вами текста ошибки видно, что ошибка возникает вовсе не с атрибутом “Set-pointflow”, о котором вы писали ранее. Ошибка возникает в выражении, в котором задействовано и упомянутый атрибут “Set-pointflow”, и некий атрибут “Heat1.5”, с которым как раз и возникает ошибка. Обратите внимание, что среди приложенных вами ранее скриншотов выражений нет выражения с упомянутым в ошибке текстом, а значит приложенная вами информация в том комментарии была неполной.

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

не подтвердилось.

Пожалуйста, удалите из кода “Heat1.5” символ точки “.” и измените все выражения, в которых данный код был задействован, изменив старый код с точкой на новый без точки.

Я не знаю, что вам ответить.
Я показал, что ЛЭРС предлагает использовать пользовательский атрибут объекта и как атрибут всех точек этого объекта. Это явно ошибка. Хотя вам виднее :slight_smile:

Первоначально в выражении использовался атрибут объекта как атрибут точки.

Я это исправил, и проблема исчезла.

Heat1.5 - это явна подмена названия точки учета ЛЭРСом, на какое-то внутреннее имя. Как это выглядит при вводе видно на скриншоте. Логика внутрипрограммного нейминга мне непонятна и не важна сейчас. Наличие и отсутствие точки в синтаксисе определял не я, это подстановка в редакторе выражений.

Резюме, я разобрался с причиной неработающего расчета.

Если вы считаете, что всё в порядке - закройте тему. Если согласны со мной и видите ошибку - тоже понятен порядок действий.

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

Heat1.5 это не внутреннее имя. Такое имя судя по всему задано одному из атрибутов. Проверьте пожалуйста в справочнике атрибутов атрибут с таким именем.

В формуле есть только 1 пользовательский атрибут - Set-pointflow.
Вот все атрибуты в этой системе:

Оказалось, я не убрал вчера расчет h, но добавил в формулу массу по циркуляции ГВС, и формула работала, вызывая ошибку. Текст сообщения об ошибке в системном журнале выглядит так:
Ошибка расчёта формул для точки учёта 4-й микрорайон, 31 - Теплоснабжение. Ошибка вычисления параметра за 06.05.2025 11:34 по выражению ‘(ToDouble([124.Parent_Attribute.Set-pointflow]) + [&HotWater1.6] - [&Heat1.5]) / ToDouble([124.Parent_Attribute.Set-pointflow]) * 100’. Имя поля &HotWater1.6 задано неверно. Имя поля &HotWater1.6 задано неверно. The input string ‘&HotWater1’ was not in a correct format. Имя поля &HotWater1.6 задано неверно. Имя поля &HotWater1.6 задано неверно. The input […]

Скриншот формулы не приведу, удалил её раньше вашего сообщения, но в тексте сообщения об ошибке она видна.

Очень похоже, что вы заблуждаетесь.
Heat1.5 - это М1 в точке Теплоснабжения с 1-ым порядковым номером в объекте.
HotWater1.6 - М2 в точке ГВС с 1-ым порядковым номером в объекте.

Похоже на то. Можете привести исходную формулу?

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

Не вижу тот проблемы, о которой вы написали. Да, атрибут создан для объекта. Если я правильно понял, объект учёта называется 4-й микрорайон, 31 и у него есть точка учёта Теплоснабжение.

Соответственно, один и тот же атрибут можно вызвать разными способами.

Или напрямую из объекта. Это на вашем первом скриншоте параметр 4-й микрорайон, 31: Расход настроечный

Или же из ссылочной точки учёта через её объект. В этом случае параметр называется ССЫЛКА НА ТОЧКУ - Объект учёта: Расход настроечный. На остальных ваших скриншотах как раз тот же самый атрибут родительского объекта для ссылочных точек учёта. Так удобнее работать со ссылками. Например, берёте &Эта точка и обращаетесь к атрибуту Расход настроечный её родительского объекта.

Ошибка у вас где-то в другом месте, скорее всего, в синтаксисе формулы. Об этом говорит сообщение в системном журнале. Но на актуальной версии именно эта формула работает и возвращает нужное значение.

Думаю, вам лучше дать нам доступ к системе, чтобы мы могли проверить какие формулы у вас введены и как их можно переписать в случае чего.