[Alimir_BootModal_Login]

Язык запросов 1С 8.3 для начинающих программистов: функции для работы с датой

Автор уроков и преподаватель школы: Владимир Милькин

Функции для работы с датой в запросе

На сегодняшнем уроке мы разберём функции для работы с реквизитами типа Дата в запросах.

Мы уже сталкивались с этим типом, например, когда выводили реквизит Дата у документов.

Функция ДАТАВРЕМЯ

И самая первая функция, которую нам следует разобрать - это, конечно же, ДАТАВРЕМЯ.

В качестве параметров она принимает целочисленные Год, Месяц, День, Час, Минута и Секунда. Последние три параметра являются необязательными.

Назначение функции ДАТАВРЕМЯ состоит в конструировании даты по её отдельным компонентам.

Таким образом следующий запрос

ВЫБРАТЬ	
    ДАТАВРЕМЯ(2013, 02, 01)

вернёт нам таблицу с типом поля ДАТА и значением 1 февраля 2013 года:

01

Значение часов, минут и секунд равно нулю, так как мы их не указали при вызове функции (последние три параметра).

Отступление

Отдельно обращаю ваше внимание на текст предыдущего запроса. Мы получаем таблицу как бы "из воздуха", не указывая в секции ИЗ источник данных.

Получается, что вовсе необязательно делать запрос к реально существующим таблицам базы данных. Можно конструировать эти таблицы самостоятельно, задавая константные значения полей.

Например, так (поля типа ЧИСЛО):

ВЫБРАТЬ	
    1,
    2,
    3

02

Или так (поля типа СТРОКА):

ВЫБРАТЬ	
    "Привет",
    ",",
    "Мир",
    "!"

03

Или вообще вот так (поля разных типов):

ВЫБРАТЬ	
    "Одна секунда до нового тысячелетия!",
    ДАТАВРЕМЯ(1999, 12, 31, 23, 59, 59),
    1

04

Вернёмся к функциям для работы с датой.

Функция ГОД

Принимает параметр типа ДАТА. Возвращает год.

ВЫБРАТЬ	
    ГОД(ДАТАВРЕМЯ(2013, 02, 01))

05

Функция КВАРТАЛ

Принимает параметр типа ДАТА. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Возвращает номер квартала даты (целочисленное значение от 1 до 4).

ВЫБРАТЬ	
    КВАРТАЛ(ДАТАВРЕМЯ(2013, 02, 01))

06

Функция МЕСЯЦ

Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).

ВЫБРАТЬ	
    МЕСЯЦ(ДАТАВРЕМЯ(2013, 02, 01))

07

Функция ДЕНЬГОДА

Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).

ВЫБРАТЬ	
    ДЕНЬГОДА(ДАТАВРЕМЯ(2013, 02, 01))

08

Функция ДЕНЬ

Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).

ВЫБРАТЬ	
    ДЕНЬ(ДАТАВРЕМЯ(2013, 02, 01))

09

 Функция НЕДЕЛЯ

Принимает параметр типа ДАТА. Возвращает номер недели в году.

ВЫБРАТЬ	
	НЕДЕЛЯ(ДАТАВРЕМЯ(2013, 02, 01))

10

 Функция ДЕНЬНЕДЕЛИ

Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).

ВЫБРАТЬ	
    ДЕНЬНЕДЕЛИ(ДАТАВРЕМЯ(2013, 02, 01))

11

Функция ЧАС

Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).

ВЫБРАТЬ	
    ЧАС(ДАТАВРЕМЯ(2013, 02, 01, 20, 38, 59))

12

Функция МИНУТА

Принимает параметр типа ДАТА. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Возвращает минуты часа (целочисленное значение от 0 до 59).

ВЫБРАТЬ	
    МИНУТА(ДАТАВРЕМЯ(2013, 02, 01, 20, 38, 59))

13

Функция СЕКУНДА

Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).

ВЫБРАТЬ	
    СЕКУНДА(ДАТАВРЕМЯ(2013, 02, 01, 20, 38, 59))

14

Функция НАЧАЛОПЕРИОДА

Принимает параметр типа ДАТА и тип периода (одно из значений МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ).

Функция предназначена для получения даты начала периода по дате, принадлежащей этому периоду.

ВЫБРАТЬ	
    НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2013, 02, 01), ГОД)

15

ВЫБРАТЬ	
	НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2013, 02, 01), НЕДЕЛЯ)

16

Функция КОНЕЦПЕРИОДА

Принимает параметр типа ДАТА и тип периода (одно из значений МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ).

Функция предназначена для получения даты конца периода по дате, принадлежащей этому периоду. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

ВЫБРАТЬ	
    КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2013, 02, 01), ГОД)

17

ВЫБРАТЬ	
	КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2013, 02, 01), НЕДЕЛЯ)

18

Функция ДОБАВИТЬКДАТЕ

Принимает параметр типа ДАТА, тип увеличения (одно из значений СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ) и величину увеличения (целочисленное значение).

Функция предназначена для прибавления к дате некоторой величины.

ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2013, 02, 01), МЕСЯЦ, 1)

19

ВЫБРАТЬ	
    ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2013, 02, 01), КВАРТАЛ, 2)

20

Функция РАЗНОСТЬДАТ

Принимает два параметра типа ДАТА и третий параметр тип разности (одно из значений СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД).

Функция предназначена для получения разницы между двумя датами (вторым и первым параметром).

ВЫБРАТЬ	
    РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2013, 02, 01), ДАТАВРЕМЯ(2014, 02, 01), ГОД)

21

ВЫБРАТЬ	
    РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2013, 02, 01), ДАТАВРЕМЯ(2014, 02, 01), МЕСЯЦ)

22

В функции можно передавать не только константы, но и поля таблиц

Отдельно обращаю ваше внимание, что в функции можно передавать не только даты, сконструированные при помощи ДАТАВРЕМЯ, но и свойства объектов, которые мы запрашиваем из базы, имеющие тип ДАТА.

К примеру, если мы запрашиваем документы и нам известно, что свойство Дата у документа имеет тип ДАТА, это означает, что мы можем использовать его в качестве параметров для функций работающих с датой.

Вот пример:

ВЫБРАТЬ
    Дата,
    ГОД(Дата),
    НАЧАЛОПЕРИОДА(Дата, МЕСЯЦ),
    ДАТАВРЕМЯ(1999, 01, 01)
ИЗ
    Документ.ЗаказКлиента

03 

Ещё раз: когда мы конструируем дату при помощи функции ДАТАВРЕМЯ, задавая конкретные значения года, месяца и числа, то получаем значение даты, которое жёстко прописано в коде и уже никогда не изменится.

Когда же мы пишем Дата, то в случае выборки из документов это означает, что вместо Дата будут подставляться даты из документов, забитых в базе.

Поэтому даты, заданные первым способом называются константными (то есть постоянными), а вторые нет.

Как вы понимаете, ничто нам не мешает использовать одновременно оба типа дат:

ВЫБРАТЬ
    Дата,
    РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1999, 01, 01), Дата, ДЕНЬ)
ИЗ
    Документ.ЗаказКлиента

04

Пройдите тест

Начать тест

Домашнее задание

а) Напишите запрос, который получает все заказы клиентов (таблица Документ.ЗаказКлиента) и отдельно выводит год, месяц и день, на которые приходится заказ:

1 

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

б) Напишите запрос, который выводит разницу между 1 января 2014 и 1 января 2000 годов в годах, месяцах, днях, часах, минутах и секундах:

2 

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся