Коллеги, приветствую.



Нужно реализовать уведомление пользователю, что через 2 часа срок разрешения обращения закончится.

 

2 часа (120 минут) буду зашивать в системную настройку (чтобы можно было варьировать админу)

 

Хочу реализовать с помощью БП по таймеру, который раз в час будет отбирать обращения по определенным критериям. 

далее, из записи вычитаю поле "время разрешения" (тип поля - дата/время) и тут главная загвозка.... как мне высчитать, что обращение должно разрешиться через 2 часа (120 минут)?

 

если должно решиться больше 2 часов - пропустить запись

если меньше, то по идее, должно было уже отправиться уведомление.

ко всему прочему, кажется, что могут возникнут потери записей (из разряда, если на момент проверки, "время разрешения" должно быть через 2 часа и 5 минут, то в следующую проверку может быть уже меньше 2 часов) - это смущает.



из идей:

  1. пробовать преобразовать поле с помощью формул .TotalHours/.TotalMinutes в часы/минуты и сравнивать..
  2. попробовать с помощью формул .AddMinutes(), .AddHours() добавить настройке "текущее время и дата" значение системной настройки и сравнить...

в общем, буду рада советом, а сама пошла пока пробовать :) 

Нравится

3 комментария
Лучший ответ

Aleksei Efimenko, 

я прибегла к другому решению:

  • сделала системную настройку, которая хранит значение за сколько нужно уведомление (в минутах)
  • сделала 2 параметра: 

Параметр 1: [#Системная переменная.Текущее значение времени#]. AddMinutes([число из системной настройки])

Параметр 2: параметр 1. AddMinutes(59) - чтобы получился час

 

  • и развела условными потоками:

1. если время разрешение больше моих параметров или меньше - проскакиваю

2. если время разрешение попадает в промежуток параметров - высылаю уведомление

Создаю новое поле - Reminding time. И его сравниваю.

 

Ещё процессы, которые его заполняют. И поле с временем, когда уведомление было отправлено. Это позволит избежать ситуации, когда таймер не сработает, например. Надо всего лишь выбирать те, у которых время уведомления прошло, но уведомление не было отправлено

Александра Дубс, подскажите, решило ли вашу задачу предоставленное решение от Владимира?

Aleksei Efimenko, 

я прибегла к другому решению:

  • сделала системную настройку, которая хранит значение за сколько нужно уведомление (в минутах)
  • сделала 2 параметра: 

Параметр 1: [#Системная переменная.Текущее значение времени#]. AddMinutes([число из системной настройки])

Параметр 2: параметр 1. AddMinutes(59) - чтобы получился час

 

  • и развела условными потоками:

1. если время разрешение больше моих параметров или меньше - проскакиваю

2. если время разрешение попадает в промежуток параметров - высылаю уведомление

Показать все комментарии

Выставляю на суд общественности функцию сравнения дат. Прошу высказать свое мнение.В частности можно ли как-то красивее? И где можно получить помощь?

function us_0(Dataset) {

// текущая дата
var CurrentData = new Date().setHours(0, 0, 0, 0);

// дата из поля 'планируемая дата начала' плюс одна секунда
var EstimatedStartDate = new Date(Dataset.Values('EstimatedStartDate')).getVarDate()+1

if ((EstimatedStartDate CurrentData) & (Dataset.Values('StartDate')==null || Dataset.Values ('StartDate')==''))
{return true }
else {return false}
}

Нравится

0 комментариев
Показать все комментарии

Доброго времени суток!
Хочу поделиться функцией с расширенными возможностями по сравнению дат. В специфике моих текущих задач вопросы сравнения дат весьма и весьма актуальны. Я решил, что настало время написать простенькую и универсальную функцию по сравнению дат. Ее особенность в том, что можно задать формат сравнения, тоесть, что именно в датах сравнить.
Для этого обьявим несколько констант (формат сравнения даты):

var dcfYear = 1;
var dcfMonth = 2;
var dcfDate = 4;
var dcfWeekDay = 8;
var dcfHours = 16;
var dcfMinutes = 32;
var dcfSeconds = 64;
var dcfMilliseconds = 128;
var dcfFullDate = dcfYear + dcfMonth + dcfDate;
var dcfTime = dcfHours + dcfMinutes + dcfSeconds;
var dcfFullDateTime = dcfFullDate + dcfTime;

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

 var WeekDayHoursCompareFormat = dcfWeekDay  + dcfHours.

Сама функция выглядит следующим незамысловатым образом:

function AreDateTimeValuesEqualEx(DateTime1, DateTime2, DateComparingFormat) {
    var Date1 = new Date(DateTime1);
    var Date2 = new Date(DateTime2);
// Следующая строчка нужна для задания значения по умолчанию, если значение параметра неопределено
    DateComparingFormat = DateComparingFormat || dcfFullDateTime;
    var Result = true;
    if (DateComparingFormat & dcfYear) {
        Result = Result && (Date1.getFullYear() == Date2.getFullYear());
    }
    if (DateComparingFormat & dcfMonth) {
        Result = Result && (Date1.getMonth() == Date2.getMonth());
    }
    if (DateComparingFormat & dcfDate) {
        Result = Result && (Date1.getDate() == Date2.getDate());
    }
    if (DateComparingFormat & dcfWeekDay) {
        Result = Result && (Date1.getDay() == Date2.getDay());
    }
    if (DateComparingFormat & dcfHours) {
        Result = Result && (Date1.getHours() == Date2.getHours());
    }
    if (DateComparingFormat & dcfMinutes) {
        Result = Result && (Date1.getMinutes() == Date2.getMinutes());
    }
    if (DateComparingFormat & dcfSeconds) {
        Result = Result && (Date1.getSeconds() == Date2.getSeconds());
    }
    if (DateComparingFormat & dcfMilliseconds) {
        Result = Result && (Date1.getMilliseconds() == Date2.getMilliseconds());
    }
    return Result;
}

Возможно, кто-то знает как этот процесс можно оптимизировать. Жду комментариев!

Нравится

Поделиться

6 комментариев

Константин, а Вам не кажется, что Вашу функцию можно несколько оптимизировать. В том случае, если попали в if и Result = false, то из функции можно смело выходить.

Конечно! Должен же я был оставить простор для тех, кто прочитает :) Спасибо за интерес к теме!

Красиво отмазались :) Ну тогда еще добавлю что нужно порядок сравнений поменять - соответственно частоте сравнения. Сначала часы-минуты-секунды, потом годы-дни-месяцы, потом дни недели, потом милисекунды.

Вы же, вроде, в предыдущем посте писали про изменение порядка условий согласно частоте использования? :) В любом случае замечания конструктивные, благодарю!

Где писал? Не вижу.

Пока я не нажал обновить, в первом сообщении было 3 строчки, а сейчас - две. Ну не важно, проехали. Главное, что ничего не потерялось и смысл весь в переписке сохранен.

Показать все комментарии