1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
// Получает разность календарных дат указанного вида. В случае ошибки возвращает -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) Иначе Возврат рРезультат КонецЕсли; КонецФункции |