то есть я правильно понял если переменная bahilova4_alarm_poverki_1 перевелась в 1, то ей и останется пока переменная data_poverki_1_1 не поменяется. в не зависимости от тога прошло 2 и более месяца с даты (data_poverki_1_1).?
Да, т.е. весь скрипт и его проверки будут выполнены только при изменении переменной даты data_poverki_1_1.
Этот код:
if (MonthsBetween(Now, myDate) < 2) then
aObject.VariableEx.Value := 1
else
aObject.VariableEx.Value := 0;
работает очень примитивно. Он записывает 1 в переменную аварии всегда, когда переменная даты приблизилась к текущей дате менее чем на 2 месяца (с любой стороны, с будущего, либо с прошедшего времени) и 0 во всех иных случаях.
но проблема в том если вносишь дату переменной data_poverki_1_1 сразу ниже текущей на 2 месяца (это аварийное событие) то она не переводит bahilova4_alarm_poverki_1 в еденицу (не считает ее аварией)
Верно, потому что в Вашем коде, приведённом выше, в переменную аварии запишется 0, если переменная даты ушла от текущей даты на 2 и более месяца. Чтобы было наоборот, можно изменить знак в условии:
if (MonthsBetween(Now, myDate) >= 2) then
aObject.VariableEx.Value := 1
else
aObject.VariableEx.Value := 0;