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