Манипуляции со временем

В регистре _ИнтервалыПодсчетаКассы хранится время начала и окончания, когда надо подсчитывать кассу.

В регистре _ПодсчетыКассы хранятся отметки о подсчете кассы.

Нужно в запросе понимать, нужно ли в текущий момент напоминать пользователю о том, что кассу нужно посчитать. Если интервал открыт, то нужно, но если в этот интервал пользователь уже посчитал кассу, не нужно.

Запрос оказался сложным тем, что приходится постоянно конвертировать время в дату. Вот финальный результат:

З = Новый Запрос(
"ВЫБРАТЬ
|	Т.ВремяНачала,
|	Т.ВремяОкончания,
|	ТПодсчеты.Дата,
|	ТПодсчеты.Пользователь
|ИЗ
|	РегистрСведений._ИнтервалыПодсчетаКассы КАК Т
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._ПодсчетыКассы КАК ТПодсчеты
|		ПО (ТПодсчеты.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&НачалоДня, СЕКУНДА, РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), Т.ВремяНачала, СЕКУНДА)) И ДОБАВИТЬКДАТЕ(&НачалоДня, СЕКУНДА, РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), Т.ВремяОкончания, СЕКУНДА)))
|			И (ТПодсчеты.Пользователь = &Пользователь)
|ГДЕ
|	ТПодсчеты.Дата ЕСТЬ NULL
|	И &ТекущееВремя МЕЖДУ Т.ВремяНачала И Т.ВремяОкончания");

НачалоДня = НачалоДня(ТекущаяДата());
СекундДня = ТекущаяДата() - НачалоДня;
СекундДня = ТекущаяДата() - НачалоДня;
З.УстановитьПараметр("ТекущееВремя", '00010101' +СекундДня);
З.УстановитьПараметр("НачалоДня", НачалоДня);
З.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);

Выборка = З.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
	_НужноПодсчитывать = истина;
Иначе
	_НужноПодсчитывать = ложь;
Конецесли;

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *