helpf.pro
Регистрация
 0 
Распечатать

1С 8.x : Функции для работы с датами через запрос (Разность, Добавление, Граница)

Код 1C v 8.х
 // Получает разность календарных дат указанного вида. В случае ошибки возвращает -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) Иначе Возврат рРезультат КонецЕсли;
КонецФункции
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 18987
 0 
Распечатать
Возможно, вас также заинтересует
Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: ... по причине: Ошибка компоновки данных по причине: Ошибка получени
Авто добавление обработки в справочник Внешних обработок 0
Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автома
В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 12
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое
Вычислить возраст человека и выразить его прописью 0
Основная функция будет использовать в себе три вспомогательных: Функция РазностьМеждуДатамиВМесяцах(Дата1,Дата2) Год1 = Год(Дата1); Год2 = Год(Дата2); Месяц1 = Месяц(Дата1); Месяц2 = Месяц(Дата2); День1 = День(Дата1); День2 = День(Дата2); Рез
Добавление в набор сторно-записей 0
Если в рассчитываемом регистре установлено свойство Период действия, в сформированном наборе могут присутствовать записи, у которых период действия принадлежит более раннему периоду, чем период регистрации. В этом случае они могут вступать в конкурен
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.