Определить прошло ли некоторое время с позиции документа

1. Harry_udm 2 09.10.19 15:47 Сейчас в теме
Всем добра!

Подтолкните, пожалуйста, в сторону реализации решения следующей проблемы. Для реагирования на документ сотруднику даются сутки. В момент работы обработки надо определить: прошло ли 24 часа с позиции указанного документа?

Есть некрасивый, как мне кажется, вариант решения через РазобратьПозициюДокумента() с последующим сравнением рабочей даты и даты документа, плюс к этому куча условий на проверку времени.

Есть в голове "красивый" набросок:
1) В переменную ПолучитьПозицию() документа
2) К переменной добавить 24 часа
3) Сформировать новую позицию переменной
4) Сравнить позицию переменной и текущую позицию текущих даты и времени

Есть предложения как это сделать? Или придется идти по "некрасивому" варианту?
По теме из базы знаний
Найденные решения
9. Harry_udm 2 09.10.19 17:21 Сейчас в теме
Решил следующим способом:
//----------------------------------------------
Функция СформироватьЧислоПозиции(ДатаП, ЧасП, МинП, СекП)
	
	Рез = Формат(ДатаП, "ДГГГГММДД") + Формат(ЧасП, "Ч(0)2") + Формат(МинП, "Ч(0)2") + Формат(СекП, "Ч(0)2");
	Рез = Число(Рез);
	
	Возврат Рез;
	
КонецФункции // СформироватьЧислоПозиции()

//----------------------------------------------
Функция ПрошлиСутки(Док)
	Перем ДатаП, ЧасП, МинП, СекП;
	
	ТекущееВремя(ЧасП, МинП, СекП);
	ТекПозиция = СформироватьЧислоПозиции(РабочаяДата(), ЧасП, МинП, СекП);
	
	РазобратьПозициюДокумента(Док, ДатаП, ЧасП, МинП, СекП);
	ПозицияРеакции = СформироватьЧислоПозиции(ДатаП + 1, ЧасП, МинП, СекП);
			
	Если ТекПозиция > ПозицияРекции Тогда
		Возврат 1;
	КонецЕсли;
	
	Возврат 0;
	
КонецФункции // ПрошлиСутки()
Показать


Возвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ruslan2011 09.10.19 16:06 Сейчас в теме
это для работника ?
т.е. документ записан и проведен
работник сегодня выходной.что делать ?

может условие , что он принял этот документ...
5. Harry_udm 2 09.10.19 17:07 Сейчас в теме
(2) (3) (4) Господа, варианты с выходными, больничными и т.п., пожалуйста, не прорабатывайте.
Документ записан, проведен. Надо вывести в отчет прошли ли сутки с его позиции.
3. Ruslan2011 09.10.19 16:11 Сейчас в теме
сегодня принял документ.вечером заболел.или на другой день
это также нужно принять во внимание
4. VictorRGB2 14 09.10.19 17:00 Сейчас в теме
кажется вариант реализации в большей степени будет зависеть от того, что подразумевается по реагированием сотрудника на документ
если просто изменить\записать\провести, то вариант с позицией сомнителен, ибо ее придется всякий раз устанавливать заново для следующего контроля

я бы предложил добавить в документ реквизит и на нем регистрировать ДатаВремя изменения документа, при чем если док перепровели без изменений, значение не меняется
а контроль выполнять сравнением значения реквизита с ТекущаяДата() и заданным лагом по времени
6. VictorRGB2 14 09.10.19 17:08 Сейчас в теме
тогда все проще
РассчитатьПозициюДокумента() + 24 часа > ТекущаяДата() - ругаемся
7. Harry_udm 2 09.10.19 17:11 Сейчас в теме
(6) Не только ТекущаяДата(), но и ТекущееВремя().
Т.к. документ мог быть записан на позицию 08.10.2019 г. 16:45:30, формируют отчет 09.10.2019 г. в 08:30:00 - сутки еще не прошли.
8. VictorRGB2 14 09.10.19 17:17 Сейчас в теме
9. Harry_udm 2 09.10.19 17:21 Сейчас в теме
Решил следующим способом:
//----------------------------------------------
Функция СформироватьЧислоПозиции(ДатаП, ЧасП, МинП, СекП)
	
	Рез = Формат(ДатаП, "ДГГГГММДД") + Формат(ЧасП, "Ч(0)2") + Формат(МинП, "Ч(0)2") + Формат(СекП, "Ч(0)2");
	Рез = Число(Рез);
	
	Возврат Рез;
	
КонецФункции // СформироватьЧислоПозиции()

//----------------------------------------------
Функция ПрошлиСутки(Док)
	Перем ДатаП, ЧасП, МинП, СекП;
	
	ТекущееВремя(ЧасП, МинП, СекП);
	ТекПозиция = СформироватьЧислоПозиции(РабочаяДата(), ЧасП, МинП, СекП);
	
	РазобратьПозициюДокумента(Док, ДатаП, ЧасП, МинП, СекП);
	ПозицияРеакции = СформироватьЧислоПозиции(ДатаП + 1, ЧасП, МинП, СекП);
			
	Если ТекПозиция > ПозицияРекции Тогда
		Возврат 1;
	КонецЕсли;
	
	Возврат 0;
	
КонецФункции // ПрошлиСутки()
Показать


Возвращаемые значения функцией СформироватьЧислоПозиции()
для документа от 08.10.2019 г. - 20191009164530
для рабочей даты - 20191009182000
10. zarankony 306 10.10.19 13:07 Сейчас в теме
В языке запросов есть ДобавитьКДате(Документ.ДатаВремяСобытия,1,ДЕНЬ) который сравниваете с текщей датой, скорее всего это решит Ваш вопрос и позволит вывести просроченные документы списком. Не делайте в цикле то, что можно сделать запросом.
11. CheBurator 3122 10.10.19 23:42 Сейчас в теме
(10) реактивная 7.7 не нуждается в тормозах 8-ки! ;-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот