// Получает разность календарных дат указанного вида. В случае ошибки возвращает -1 Функция ПолучитьРазностьДат(рНачДата,рКонДата,рВидРазности="ДЕНЬ") Экспорт Если не ЗначениеЗаполнено(рНачДата) или не ЗначениеЗаполнено(рКонДата) Тогда Возврат -1 КонецЕсли; Если рНачДата=рКонДата Тогда Возврат 0 КонецЕсли; строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД"; Если Найти(строСтандПер,рВидРазности)=0 Тогда рВидРазности="ДЕНЬ" КонецЕсли; тз="ВЫБРАТЬ РАЗНОСТЬДАТ(&НачДата,&КонДата,"+СокрЛП(рВидРазности)+")+1 КАК ПериодовВремени"; з=Новый Запрос(тз); Если рВидРазности="СЕКУНДА" или рВидРазности="МИНУТА" или рВидРазности="ЧАС" Тогда // ставим, как есть, с учётом времени Если рНачДата>рКонДата Тогда // всё наоборот рПервая=рКонДата; рВторая=рНачДата; коэф=-1; Иначе рПервая=рНачДата; рВторая=рКонДата; коэф=1; КонецЕсли; Иначе // ставим от начала дня Если рНачДата>рКонДата Тогда // всё наоборот рПервая=НачалоДня(рКонДата); рВторая=НачалоДня(рНачДата); коэф=-1; Иначе рПервая=НачалоДня(рНачДата); рВторая=НачалоДня(рКонДата); коэф=1; КонецЕсли; КонецЕсли; Попытка з.УстановитьПараметр("НачДата",рПервая); з.УстановитьПараметр("КонДата",рВторая); рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).ПериодовВремени; Если ТипЗнч(рРезультат)<>Тип("Число") Тогда Возврат -1 Иначе Возврат коэф*рРезультат КонецЕсли; Исключение Возврат -1 КонецПопытки; КонецФункции Функция ДобавитьКДате(рДата,рРазность,рВидРазности="ДЕНЬ") Экспорт Если рРазность=0 Тогда Возврат рДата КонецЕсли; строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД"; Если Найти(строСтандПер,рВидРазности)=0 Тогда рВидРазности="ДЕНЬ" КонецЕсли; тз="ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&УслДата,"+СокрЛП(рВидРазности)+",&УслРазность) КАК РезДата"; з=Новый Запрос(тз); з.УстановитьПараметр("УслДата",рДата); з.УстановитьПараметр("УслРазность",рРазность); рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).РезДата; Если ТипЗнч(рРезультат)<>Тип("Дата") Тогда Возврат Дата(1,1,1) Иначе Возврат рРезультат КонецЕсли; КонецФункции Функция ГраницаПериода(рДата,рВидПериода="ДЕНЬ",рВидГраницы) Экспорт строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД"; Если Найти(строСтандПер,рВидПериода)=0 Тогда рВидПериода="ДЕНЬ" КонецЕсли; Если Найти(ВРег(рВидГраницы),"НАЧ")<>0 Тогда рГраница="НАЧАЛОПЕРИОДА"; ИначеЕсли Найти(ВРег(рВидГраницы),"КОН")<>0 Тогда рГраница="КОНЕЦПЕРИОДА"; Иначе Возврат рДата; КонецЕсли; тз="ВЫБРАТЬ "+рГраница+"(&УслДата,"+СокрЛП(рВидПериода)+") КАК РезДата"; з=Новый Запрос(тз); з.УстановитьПараметр("УслДата",рДата); рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).РезДата; Если ТипЗнч(рРезультат)<>Тип("Дата") Тогда Возврат Дата(1,1,1) Иначе Возврат рРезультат КонецЕсли; КонецФункции