0
Answered

Смена тарифов по газу

Олексій 3 years ago in General questions updated 11 months ago 11

Добрый день

сейчас поставщик газа меняет свои тарифы ежемесячно.
Сейчас за март тариф 6,86 за куб.м, в апреле может быть другой
для корректного перерасчета хочу написать правило, и раз в месяц буду менять цифры отмеченные жирным.
Корректно ли оно?

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,4,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,5,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,6,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,7,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,8,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,9,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,10,1) ? d.Ch1*0.0686 :

d.TIME < new Date(2021,11,1) ? d.Ch1*0.0686 :

GOOD, I'M SATISFIED
Satisfaction mark by Олексій 3 years ago

хотя сразу возникает вопрос а как тогда корректно определить,  что бы считались затраты всего
ведь там тоже стоит функция и одна - d.Ch1*0.0686

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

Under review

Добрый день.

По идее все корректно, надо проверить пару моментов.

- месяц начинается с 0. Т.е. new Date(2021,2,1) - это март.

- в конце не хватает финальной строки, если не выполнится ни одно из выше перечисленных.

В 2022 будете добавлять строки между предпоследней и последней.

- цену за куб надо перевести в цену за импульс. Например, цена импульса 1имп = 0.01м3, то цена за импульс 6.86*0.01 = 0.0686, все верно))

Финальный код будет таким

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,5,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,6,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,7,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,9,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,10,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,11,1) ? d.Ch1*0.0686 :  
d.TIME < new Date(2022,0,1) ? d.Ch1*0.0686 :  
d.TIME < new Date(2022,1,1) ? d.Ch1*0.0686 :  
d.Ch1*0.0686;

Пока решение для индексации тарифов только такое.

правильно ли я понимаю.
тот код

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,5,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,6,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,7,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,9,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,10,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,11,1) ? d.Ch1*0.0686 :  
d.TIME < new Date(2022,0,1) ? d.Ch1*0.0686 :  
d.TIME < new Date(2022,1,1) ? d.Ch1*0.0686 :  
d.Ch1*0.0686;

нужно и прописать в виртуальном правиле - затраты всего (в поле где считает по газу) ?

Answered

Да, все верно.
А в поле где считает электроэнергию тоже надо будет прописать, когда тариф изменится.

Добрый день

в апреле произошло изменение цены на газ.
Я сделал исправление в коде,  но правда лишь 20/04

код такой стал:
d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,5,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,6,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,7,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,9,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,10,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,11,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2022,0,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2022,1,1) ? d.Ch1*0.0686 :
d.Ch1*0.0686;


но изменений в стоимости на доске не произошло.
Когда программа обращается к коду и когда произойдет перерасчет? Или что для этого нужно?


Добрый день.

Расчеты в настройках виджета вычисляются на лету. каждые 5 секунд. Поэтому не важно когда вы их сделали. все сразу должно отображаться.

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

Т.к. получилось. что только за март тариф считается по новой цене, а далее опять по старой.

d.TIME < new Date(2021,3,1) - это все, что до 1 апреля. (месяц начинается с нуля и 3 - апрель)

Правильнее буде примерно так:

d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :
d.Ch1*0.0679;

Т.е. все, что до 1 апреля умножается на тариф 0.0686

Все, что после 1 апреля умножается на новый тариф 0.0679

Если тариф изменится, то просто добавите одну строку условия.

Например, для сентября:

d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0679 :
d.Ch1*0.0777;

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

Т.к. получилось. что только за март тариф считается по новой цене, а далее опять по старой.

нет, как раз указав d.TIME < new Date(2021,3,1) ? d.Ch1*0.0679
я даю понять что в апреле тариф для расчета 6,79 за куб.м.
почему это не воспринимается?

или так правильно было бы:

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,5,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,6,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,7,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,9,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,10,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,11,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2022,0,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2022,1,1) ? d.Ch1*0.0679 :
d.Ch1*0.0679;

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

Лучше вносить условие только когда наступит необходимость.

Условие d.TIME < new Date(2021,3,1) ? d.Ch1*0.0679

говорит. что расход с ДАТОЙ менее 1 апреля умножать на данный тариф. Т.е. сам апрель в это условие не попадает. 

Надо тогда так:

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0679 :
. . .

да все верно.
ошибка нашлась и все корректно заработало

d.TIME < new Date(2021,2,1) ? d.Ch1*0.0686 :
d.TIME < new Date(2021,3,1) ? d.Ch1*0.0686 :    по идее это ведь апрель!!! 
d.TIME < new Date(2021,4,1) ? d.Ch1*0.0679 :    
d.TIME < new Date(2021,5,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,6,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,7,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,8,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,9,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,10,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2021,11,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2022,0,1) ? d.Ch1*0.0679 :
d.TIME < new Date(2022,1,1) ? d.Ch1*0.0679 :
d.Ch1*0.0686;

дело в том что поставил новый тариф в строке (Date(2021,4,1) ? d.Ch1*0.0679) хотя по идее это май ведь?!!


странно как то.
но сейчас все четко считает
за март тариф 6,86  получился, за апрель начал считать 6,79

Условие d.TIME < new Date(2021,3,1) ? d.Ch1*0.0679

говорит. что расход с ДАТОЙ менее 1 апреля умножать на данный тариф. Т.е. сам апрель в это условие не попадает.

спасибо за помощь.

Вопрос решен