Отображение V или M в отчете

Доброго времени суток. С недавних пор возникла следующая проблема…
Расскажу на примере. Есть отчет (приложение №1), в ИТОГО отображается дэльта Vгвс и, следовательно, все вычисления в дальнейшем происходят исходя из потребления горячей воды.
Как преобразовать отчетную форму так, чтобы:

  1. В ИТОГО писалось большее значения расхода теплоносителя. В данном отчете это дэльта M и, следовательно, дальнейшие расчеты шли исходя из этой величины?
  2. дэльта M складывалось только из положительных значений, а отрицательные в расчёт не брались?
    ТС1 t1, t2, M1, M2, M, Qот, ВНР; ТС2 V1, ВНР (Qоб=Qот+Qгвс).lersreport (100 KB)
    Приложение 2.xls (54 KB)
    Приложение 1.png

Что понимается под ‘большее значение расхода’?
Правильно ли я понял, что надо выбирать большее из двух значений:

  • ИТОГО значение ?M для теплоснабжениия,
  • ИТОГО значение V1 для ГВС

Создайте вычисляемое поле с выражением:

Iif(IsNull([M - (?M) водоразбор (тонны)]) Or [M - (?M) водоразбор (тонны)] < 0, 0, [M - (?M) водоразбор (тонны)])

и используйте его вместо ?M.

Да, всё правильно, необходимо выбирать из ИТОГО дэльта М для теплоснабжения и ИТОГО V1 для ГВС, и какая величина больше - ту подставлять в ИТОГО

Для выбора большего значения из ?M и ?V создайте в узле ‘Рассчитанные значения’ вычисляемое поле с выражением:

Iif(IsNull([Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали])  
Or [Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали] < [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)], 
[Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)],
 [Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали])

Значения полей в выражении берутся из подузла ‘Суммарные потребления по системам снабжения за отчетный период’.
Используйте созданное вычисляемое поле в подвале отчета вместо ?M и ?V.

спасибо, пошёл разбираться =)

Наткнулся на подводный камень. Как видно на скрине ^M учитываются только “+” значения. Теперь в правой колонке необходимо сделать досчёт до полного времени наработки, а т.к. подузлы данных разные (при учете положительных значений ^М используется архивы потребления и интеграторов, а для досчёта используется рассчитанные значения), то получается, что я не могу связать два разных подузла.
В архивы потребления и интеграторов мне необходимы “+” значения ^М, а в рассчитанные значения потребления за время действия НС + Суммарные потребления по системам снабжения за отчетный период, опять же только с “+” значениями.
Должно получиться значение в кружке.
Оно получается по формуле:
(^М * 744)/743, где
744 - время наработки за отчетный период;
743 - фактическое время наработки.
Прошу у Вас помощи в решении данного вопроса!
deltaM.png

Пример использования в вычисляемых полях данных из разных узлов можно посмотреть здесь.
Для пересчета можно использовать поля из узла ‘Суммарные потребления за отчетный период’:
ExistingInterval - период имеющихся данных в часах,
RequestedInterval - отчетный период в часах,
WorkTime - фактическое время наработки за отчетный период в часах.

При использовании полей не получается получить только “+” значения по ^М.
Формула: (Iif(IsNull([Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)]) Or [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)] < 0, 0, [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)]) * [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.WorkTime - (Tраб) время наработки (часы)]) / [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.RequestedInterval - отчетный период, часы]

P.S. прочитал мануал про использование данных из разных узлов, но к сожалению не владею скриптами =(
Otchet.lersreport (101 KB)

В узле ‘Архив потреблений и интеграторов’ есть подузел ‘Рассчитанные значения’, данные из которого можно использовать для каждой метки времени.
Во вложении ваша отчетная форма, в которой в ‘Архив потреблений и интеграторов’ добавлено вычисляемое поле plusdeltaRecalc c пересчетом значения вычисляемого поля plusdeltaMgvs по аналогии с Mns.
Результаты пересчета выведены в подвал отчета.
Otchet New.lersreport (105 KB)

Спасибо. Попробовал подставить вычисляемое поле в ячейку ^М, но почему-то там получается 0,00 т.
otchet.png

Покажите отчетную форму.

Прикладываю…
Otchet New.lersreport (103 KB)

Во вложении скорректированная отчетная форма.
Otchet New.lersreport (105 KB)

Спасибо огромное.
Такая же проблема с Qgvs. Создал поле plusdeltaQgvsrecalc, по аналогии подставил формулу, но опять получил 0,00 Гкал.

P.S. правильно-ли я понимаю, что все дальнейшие манипуляции с отчетными формами возможны только через знание скриптов, и так как раньше (манипулируя полями) уже я ничего изменить сам не смогу?
Otchet New (2).lersreport (102 KB)
Qgvs.png

В приведенной отчетной форме скрипты не используются.
Создаются и используются только вычисляемые поля.
После установки связи ячейки Qгвс с вычисляемым полем plusdeltaQgvsrecalc, надо задать признак суммирования
(см. шаг 10 здесь).

Спасибо, всё получилось.

Доброго времени суток.
Подставил в отчетную форму, формулу:
Iif(IsNull([Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали])
Or [Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали] < [Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)],
[Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)],
[Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали])

Но в отчете не отображается вообще ничего.
V ili M.lersreport (101 KB)
V ili M.png

Добавьте проверки IsNull() для всех полей входящих в выражение вычисляемого поля,
т.к. если хотя бы одно значение поля входящего в выражение будет null, то и все выражение будет null.

Получилась формула:
Iif(IsNull([Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали])
Or IsNull([Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали]) < IsNull([Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)]),
IsNull([Суммарные потребления по системам снабжения за отченый период .Теплоснабжение 1.M - (?M) водоразбор (тонны)]),
IsNull([Суммарные потребления по системам снабжения за отченый период .ГВС 1.V1 - объемный расход в подающей магистрали]))

Но значение всё равно не отображается.
V ili M.lersreport (101 KB)

Нет не так.
Надо использовать комбинацию Iif(IsNull(<поле>), 0, <поле>)
Функция Iif(<условие>, <значение при условии = true>, <значение при условии = false>) проверяет условие и возвращает одно из двух значений.
Чтобы не делать очень сложного выражения, создайте несколько вычисляемых полей с проверками на Null
и уже их используйте в результирующем выражении.