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

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

Код 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 |  Дата:   Прочитано: 18064
 0 
Распечатать
Возможно, вас также заинтересует
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: ... по причине: Ошибка компоновки данных по причине: Ошибка получени
Авто добавление обработки в справочник Внешних обработок 0
Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автома
В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 11
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.