Определить прошло ли некоторое время с позиции документа
Всем добра!
Подтолкните, пожалуйста, в сторону реализации решения следующей проблемы. Для реагирования на документ сотруднику даются сутки. В момент работы обработки надо определить: прошло ли 24 часа с позиции указанного документа?
Есть некрасивый, как мне кажется, вариант решения через РазобратьПозициюДокумента() с последующим сравнением рабочей даты и даты документа, плюс к этому куча условий на проверку времени.
Есть в голове "красивый" набросок:
1) В переменную ПолучитьПозицию() документа
2) К переменной добавить 24 часа
3) Сформировать новую позицию переменной
4) Сравнить позицию переменной и текущую позицию текущих даты и времени
Есть предложения как это сделать? Или придется идти по "некрасивому" варианту?
Подтолкните, пожалуйста, в сторону реализации решения следующей проблемы. Для реагирования на документ сотруднику даются сутки. В момент работы обработки надо определить: прошло ли 24 часа с позиции указанного документа?
Есть некрасивый, как мне кажется, вариант решения через РазобратьПозициюДокумента() с последующим сравнением рабочей даты и даты документа, плюс к этому куча условий на проверку времени.
Есть в голове "красивый" набросок:
1) В переменную ПолучитьПозицию() документа
2) К переменной добавить 24 часа
3) Сформировать новую позицию переменной
4) Сравнить позицию переменной и текущую позицию текущих даты и времени
Есть предложения как это сделать? Или придется идти по "некрасивому" варианту?
По теме из базы знаний
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- Новый релиз 1С:ТОИР КОРП 3.0.4.1: развитие блока МТО, совершенствование анализа причин дефектов, новое в "Мобильной бригаде" и не только!
- Аналитик – птица гордая, пока не пнешь – не полетит. Как вырастить сотрудника, готового к самостоятельному решению задач, используя план индивидуального развития
- История одного админа в мире 1С. Как поиски причины тормозов 1С привели к созданию нового продукта
Найденные решения
Решил следующим способом:
Возвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
//----------------------------------------------
Функция СформироватьЧислоПозиции(ДатаП, ЧасП, МинП, СекП)
Рез = Формат(ДатаП, "ДГГГГММДД") + Формат(ЧасП, "Ч(0)2") + Формат(МинП, "Ч(0)2") + Формат(СекП, "Ч(0)2");
Рез = Число(Рез);
Возврат Рез;
КонецФункции // СформироватьЧислоПозиции()
//----------------------------------------------
Функция ПрошлиСутки(Док)
Перем ДатаП, ЧасП, МинП, СекП;
ТекущееВремя(ЧасП, МинП, СекП);
ТекПозиция = СформироватьЧислоПозиции(РабочаяДата(), ЧасП, МинП, СекП);
РазобратьПозициюДокумента(Док, ДатаП, ЧасП, МинП, СекП);
ПозицияРеакции = СформироватьЧислоПозиции(ДатаП + 1, ЧасП, МинП, СекП);
Если ТекПозиция > ПозицияРекции Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции // ПрошлиСутки()
ПоказатьВозвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
кажется вариант реализации в большей степени будет зависеть от того, что подразумевается по реагированием сотрудника на документ
если просто изменить\записать\провести, то вариант с позицией сомнителен, ибо ее придется всякий раз устанавливать заново для следующего контроля
я бы предложил добавить в документ реквизит и на нем регистрировать ДатаВремя изменения документа, при чем если док перепровели без изменений, значение не меняется
а контроль выполнять сравнением значения реквизита с ТекущаяДата() и заданным лагом по времени
если просто изменить\записать\провести, то вариант с позицией сомнителен, ибо ее придется всякий раз устанавливать заново для следующего контроля
я бы предложил добавить в документ реквизит и на нем регистрировать ДатаВремя изменения документа, при чем если док перепровели без изменений, значение не меняется
а контроль выполнять сравнением значения реквизита с ТекущаяДата() и заданным лагом по времени
Решил следующим способом:
Возвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
//----------------------------------------------
Функция СформироватьЧислоПозиции(ДатаП, ЧасП, МинП, СекП)
Рез = Формат(ДатаП, "ДГГГГММДД") + Формат(ЧасП, "Ч(0)2") + Формат(МинП, "Ч(0)2") + Формат(СекП, "Ч(0)2");
Рез = Число(Рез);
Возврат Рез;
КонецФункции // СформироватьЧислоПозиции()
//----------------------------------------------
Функция ПрошлиСутки(Док)
Перем ДатаП, ЧасП, МинП, СекП;
ТекущееВремя(ЧасП, МинП, СекП);
ТекПозиция = СформироватьЧислоПозиции(РабочаяДата(), ЧасП, МинП, СекП);
РазобратьПозициюДокумента(Док, ДатаП, ЧасП, МинП, СекП);
ПозицияРеакции = СформироватьЧислоПозиции(ДатаП + 1, ЧасП, МинП, СекП);
Если ТекПозиция > ПозицияРекции Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции // ПрошлиСутки()
ПоказатьВозвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот