1с запрос разница дат в днях
Разность дат в запросе 1С 8.3
РазностьДат() — конструкция встроенного языка запросов 1С 8.3, с помощью которой непосредственно в запросе можно получить разницу между различными датами.
Функция рассчитывает календарную разницу между двумя датами, и ее нельзя использовать в местах, где необходимо рассчитать разницу банковских или рабочих дней. Временные единицы задаются на усмотрение разработчика — от секунды до года. РазностьДат часто используется в отчетах, например, для динамического расчета временного периода в параметрах запроса.
Дата1 и Дата2 — даты, из которых необходимо получить разность.
ЕдиницаВремени — показатель, для которого необходимо получить разность. Допустимые значения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД.
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2005, 09, 12, 10, 15, 34), ДАТАВРЕМЯ(2005, 09, 14, 9, 18, 06), ДЕНЬ) — вернет «2»
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12), (ДАТАВРЕМЯ(2002, 11, 03), МЕСЯЦ) — вернет «1»
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12), (ДАТАВРЕМЯ(2004, 11, 03), ГОД) — вернет «2»
Пример использования в рабочей конфигурации 1С для получения разности дат в днях:
ВЫБРАТЬ
ДанныеДляРасчета.Организация КАК Организация,
ДанныеДляРасчета.Склад КАК Склад,
СУММА(ДанныеДляРасчета.СтоимостьКонечныйОстаток) КАК СтоимостьОстатковЗапасов,
ДанныеДляРасчета.ДатаРасчета,
СУММА(ДанныеДляРасчета.СтоимостьРасход) КАК СебестоимостьРеализованныхТоваров,
РАЗНОСТЬДАТ(&НачалоПериода, КОНЕЦПЕРИОДА(&ДатаРасчета, ДЕНЬ), ДЕНЬ) КАК ДнейВПериодеПоЗапасам
ИЗ
(ВЫБРАТЬ
ОборотныеСредства.Организация КАК Организация,
ОборотныеСредства.Склад КАК Склад,
СУММА(ОборотныеСредства.СуммаКонечныйОстаток) КАК СтоимостьКонечныйОстаток,
&ДатаРасчета КАК ДатаРасчета,
0 КАК СтоимостьРасход
ИЗ
ОборотныеСредства КАК ОборотныеСредства
Читайте и другие статьи по запросам 1С
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
РазностьДат()
Сами формулы можешь нарисовать красивей. Но ход мыслей расчета я думаю понятен.
(4) Zircool,
Вот с этого и надо было начинать.
Берем разность дат в часах и отнимаем разность дат в днях с погрешностью в 4 часа (т.к. нам нужно в сутках 20 часов).
строка в запросе будет выглядеть следующим образом
Здесь немного другая ситуация. Смотрите например у нас 2 даты:
02.05.2012 20:00:00 и 03.05.2012 20:10:00
Получается что второго числа человек отработал 4 часа а третьего 20 часов в сумме должено получиться 24 часа, а в отчете пишет 20, т.к. 24 принимает за 20. Должно идти сокращение до 20 часов, если это сутки. Т.е. если человек отработал бы 3.05.2012 23 часа, должно взяться 20 часов.
(5) Zircool,
От блин! Что ж ты как пользователь!?
Нужную вводную информацию по частям выдаешь?
Надо было сразу описание задачи написать. (полностью)
Алгоритм описанный выше (для запроса) имеет только одну маленькую погрешность.
Расчет именно того самого «хвостика».
Т.е. когда сутки были полные. тут и гадать не стоит берем за аксиому что когда полные сутки то 24-4 = 20 часов.
А вот если тот самый преславутый «хвостик» те самые последние часы последних суток.
Тут нужно добавить следующее:
Если «хвостик» по часам меньше 20, то оставляем как есть, а если больше то вместо него ставим 20 часов.
Сначала считаем количество полных суток:
ВторойДень = НачалоДня(Дата1)+ 86400.
(округляй либо конечный результат, либо промежуточный)
(8) brunhilda,
Если для данной задачи. Точкой перевала суток будет время именно 00:00
То твой алгоритм правильней чем мой.
Если точкой перевала суток считать время в составе первой даты(начало периода), то достаточно моего.
Но по уму, твой алгоритм правильней.
Сутки все таки начинаются с 00:00 и поэтому всегда будет «предхвостик» в начале перед следующими полными сутками.
Но если у них в сутках 20 часов, то фиг его знает с какого времени у них сутки начинаются 🙂
При твоих условиях и в запросе это будет выглядеть так:
Ребят спасибо за помощь, в датах у меня большой пробел)))
02.05.2012 8:00:00 | 02.05.2012 20:00:00 | 16,00
Дата1 = Выборка.ДатаВыезда;
Дата2 = Выборка.ДатаВозвращения;
Если НачалоДня(Дата1) = НачалоДня(Дата2) Тогда
ВторойДень = НачалоДня(Дата1)+ 86400;
КоличествоСуток = (НачалоДня(Дата2)-ВторойДень)/86400;
Результат = КоличествоСуток*20+ХвостикВначале+ХвостикВКонце;
ЗП = Результат * 77;
Функции языка запросов 1С. Работа с датами
Функции работы с датами
Дата — один из примитивных типов данных в системе 1С:Предприятие. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Одной из первых моих статей в этой рубрике была небольшая шпаргалка по работе с датами, но о датах в запросах там было написано очень мало. В запросах 1С с датами приходится работать довольно часто, особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии).
Функция Год
Функция Квартал
Возвращает номер квартала даты (целочисленное значение от 1 до 4)
Предположим, в ЗаказПокупателя передаем заказ №100 от 12.03.2016, в этом случае наш запрос вернет НомерКвартала = 1
Функция Месяц
Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).
Функция ДеньГода
Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).
Запрос вернет — 175
Функция День
Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).
Функция Неделя
Принимает параметр типа ДАТА. Возвращает номер недели в году.
Функция ДеньНедели
Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).
Функция Час
Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).
Функция Минута
Принимает параметр типа ДАТА. Возвращает минуты часа (целочисленное значение от 0 до 59).
Функция Секунда
Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).
Функция НачалоПериода
Функция возвращает для указанной даты начало периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 01.06.2016
Функция КонецПериода
Функция возвращает для указанной даты конец периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 30.06.2016
Функция ДобавитьКДате
Функция добавляет к дате указанное количество временных интервалов.
Получаем дату 15.10.2016 0:00:00 Очень удобно, что не приходится задумываться о количестве дней в месяцах.
Количество может быть и отрицательным. Тогда отсчет интервала производится в обратную сторону.
Функция РазностьДат
Функция рассчитывает календарную разницу между двумя датами и ее нельзя использовать в местах, где необходимо рассчитать банковских или рабочих дней. Тип может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Как посчитать количество месяцев между датами 1С
Функция РАЗНОСТЬДАТ() в запросе
Рассчитать количество месяцев между датами в системе 1с проще всего в запросе, здесь разработчику доступна замечательная функция РАЗНОСТЬДАТ(). Функция рассчитывает календарную разницу между датами в заданной единице измерения.
Где параметр это единица измерения, в которой необходимо получить результат функции (Год, Квартал, Месяц, День, Час, Минута, Секунда).
Пример №1
Пример №2
Примеры способов расчёта в коде
Для решения таких задач в модулях программы 1С, нет специальной функции, и в какой-то степени приходится изобретать «велосипед».
Пример №1
С использование функций Год(), Месяц():
Пример№2
Интересный пример расчёта количества месяцев с помощью рекурсии с использование функции НачалоМесяца().
Возможные ошибки
Для расчётов временных промежутков между датами следует не путать местами начальную и конечную даты, в противном случае можно получить результат со знаком минус.
Пример:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Запросы 1С:Предприятие 8. Функции работы с датами
В запросах 1С, так же как и во встроенном языке платформы 1С:Предприятие, есть функции для работы с датами. Они помогают упростить преобразования дат в запросах, избежать использования большого количества параметров. Рассмотрим эти функции.
Как задать дату в запросах 1С в виде константы
Для этого используется функция ДАТАВРЕМЯ (Год, Месяц, День, Час, Минута, Секунда). Параметры Год, Месяц и День являются обязательными, остальные — нет. Если не указать время, то системой будет установлено начало дня.
Кроме того, в качестве параметров этой функции могут быть указаны только числа в явном виде. Нельзя в качестве параметров указывать значения других функций. Например, такая конструкция работать не будет:
Как получить начало или конец года, полугодия, квартала, месяца, декады, недели, дня, часа, минуты в запросах 1С
Для этого используются соответственно функции:
В качестве параметра Дата передается значение с типом Дата. Параметр Период может принимать одно из следующих значений: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, ДЕКАДА, МЕСЯЦ, КВАРТАЛ, ПОЛУГОДИЕ, ГОД.
Как видно из примеров, в этих функциях можно использовать другие, вложенные, функции.
Как получить в запросах 1С год, день года, квартал, месяц, неделю, день недели, день, час, минуту, секунду из даты
Для этого существуют соответствующие функции, в которые нужно передать дату в качестве параметра.
Как добавить к дате или отнять от даты год, полугодие, квартал, месяц, декаду, неделю, день, час, минуту, секунду в запросах 1С
Для этого используется функция ДобавитьКДате (Дата, Период, Значение).
В качестве параметра Дата передается значение с типом Дата. Параметр Период может принимать одно из следующих значений: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, ДЕКАДА, МЕСЯЦ, КВАРТАЛ, ПОЛУГОДИЕ, ГОД.
Параметр Значение показывает количество добавляемых периодов. Если период нужно вычесть, то параметр Значение должен быть отрицательным.
Как вычислить разность дат в запросах 1С
Для этого используется функция РазностьДат (Дата1, Дата2, Период).
Параметр Дата1 — дата, которую вычитают.
Параметр Дата2 — дата, из которой вычитают.
Параметр Период может принимать одно из следующих значений: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД. Он показывает, в каких единицах мы хотим получить результат
Во всех функциях, кроме функции ДАТАВРЕМЯ, в качестве параметра Дата может выступать не только конкретное значение даты (константа или параметр запроса), но и поля таблицы источника.