Содержание:
1. Как использовать функцию РАЗНОСТЬДАТ?
2. Как использовать функцию ДОБАВИТЬКДАТЕ?
1. Как использовать функцию РАЗНОСТЬДАТ?
В отличие от встроенного языка 1С, который позволяет производить операции вычитания и сложения дат при помощи математических функций, при написании запросов 1С требуется другой подход. В запросе 1С для того, чтобы определить отрезок времени между двумя датами в запросе 1С, необходимо использовать функцию РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>).
Дата1 – вычитаемая дата
Дата2 – исходная дата
Тип (периодичность) – тип периода, для которого вычисляется значение функции. Может принимать значения СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, ГОД.
Таким образом, если в запросе 1С нужно вычислить сколько дней между двумя датами 01.01.2021 и 15.01.2021 нужно использовать функцию РАЗНОСТЬДАТ следующим образом:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2021, 1, 1, 0, 0, 0), ДАТАВРЕМЯ(2021, 1, 15, 0, 0, 0), ДЕНЬ).
Запрос выдаст результат -14 дней.
В примере выше у нас обе даты указаны с временем начала дня (0:00:00).
Попробуем изменить время обеих дат, укажем для вычитаемой даты время 14:00, а исходную дату поместим в конец дня:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2021, 1, 1, 14, 0, 0), ДАТАВРЕМЯ(2021, 1, 15, 23, 59, 59), ДЕНЬ)
Результат получим тот же – 14 дней.
Таким образом, нужно помнить, что при вычитании дат рассматриваемая функция отбрасывает все значения после значения для указанной периодичности. В нашем примере – часы, минуты и секунды. Другими словами, при выбранной периодичности ДЕНЬ функция автоматически поместит обе даты в начало дня (если указать периодичность МЕСЯЦ – в начало месяца и т.д.).
2. Как использовать функцию ДОБАВИТЬКДАТЕ?
Иногда нужно вычислить разность между двумя датами, определив не количество полных дней, а рассчитав общее количество полных и неполных дней. В этом случае нужно предварительно обработать исходные даты с тем, чтобы привести вычитаемую дату к началу предыдущего периода. Для этого нужно сначала проверить совпадает ли вычитаемая дата с началом дня, и если не совпадает – переместить ее в начало предыдущего периода при помощи функции ДОБАВИТЬКДАТЕ():
ВЫБРАТЬ
РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ) КАК Количество Полных Периодов,
РАЗНОСТЬДАТ(ВЫБОР
КОГДА НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) = &Дата1
ТОГДА &Дата1
ИНАЧЕ ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, -1)
КОНЕЦ, &Дата2, ДЕНЬ) КАК Количество Неполных Периодов
Зададим значения &Дата1 - 01.01.2021 14:00:00, &Дата2 - 15.01.2021 0:00:00.
Получим в результате выполнения запроса:
КоличествоПолныхПериодов – 14
КоличествоНеполныхПериодов – 15
Теперь зададим в параметре &Дата1 - 01.01.2021 0:00:00
Получим результат:
КоличествоПолныхПериодов – 14
КоличествоНеполныхПериодов – 14
Синтаксис: ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>).
Дата – обрабатываемая дата
Тип (периодичность) - тип периода, для которого вычисляется значение функции. Может принимать значения СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, ГОД.
Количество – количество периодов, на которые нужно «сдвинуть» дату.
Данную функцию можно использовать как для сложения, так и для вычитания. Для того, чтобы уменьшить дату на нужное количество периодов, указывается отрицательное значение в параметре <Количество>.
Следует также помнить, что система обрабатывает значение параметра <Количество> как целое число, отбрасывая дробную часть. И несмотря на то, что система не выдаст ошибку при задании такой формулы в вычисляемом поле:
ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, 1.5),
Дата1 будет увеличена ровно на один день.
Специалист компании "Кодерлайн"
Юлия Романяк