Функции языка запросов 1С. Работа с датами

Научиться программировать в 1С сможет каждый! В удобное время и без отрыва от работы. Для бухгалтеров, администраторов и начинающих программистов.

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

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

Получение дат

Как передать текущую дату в запрос?

Запрос

= Новый

Запрос

(«ВЫБРАТЬ &ТекущаяДата»);

Запрос.УстановитьПараметр(«ТекущаяДата»,ТекущаяДата());
тзРезультатЗапроса = Запрос.Выполнить().Выгрузить();

Далее приводятся только тексты запросов.

Как получить начало текущего месяца?

Используем функцию НАЧАЛОПЕРИОДА(ДАТА,{ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ})

ВЫБРАТЬ
  НАЧАЛОПЕРИОДА(&ТекущаяДата,МЕСЯЦ)

Конец текущего года?

ВЫБРАТЬ
  КОНЕЦПЕРИОДА(&ТекущаяДата,ГОД)

Как получить полдень текущей даты?

Добавим использование функции ДОБАВИТЬКДАТЕ(ДАТА,{ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ},ЧИСЛО)

ВЫБРАТЬ
  ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата,ДЕНЬ),ЧАС,12)

Как получить дату без времени (0:00)

ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(&ТекущаяДата,ДЕНЬ)

Как задать дату-константу в запросе 1С?

ВЫБРАТЬ
  ДАТАВРЕМЯ(2017,1,1)

Возможно задать дату с точностью до секунды?

ВЫБРАТЬ
  ДАТАВРЕМЯ(2017,1,1,8,0,1)

А до милисекунды?

Нет!

Дата

Тип Дата всегда включает в себя дату и время с точностью до секунды.
При создании реквизитов объектов и реквизитов форм можно ограничить ввод допустимых значений, задав свойство «состав даты»:

  • Дата — можно вводить только дату, время всегда будет равно «00:00:00»;
  • Время — можно вводить только время, дата всегда будет равна «0001.01.01»;
  • Дата и время — можно вводить и дату, и время.

Вне зависимости от указанного свойства «состав даты», в базе данных дата хранится в едином формате, с точностью до секунды.

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

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

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

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

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

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

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

01

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

Функция ГОД

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

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

05

Момент времени

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

Момент = Новый МоментВремени(ДокументСсылка.Дата, ДокументСсылка);
Момент = ДокументСсылка.МоментВремени();

Преобразовать строку в дату в запросе

Специальных функций нет. но возможно преобразование через функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА

[cl-popup title=»Запрос,приводится в академических целях» btn_label=»Открыть текст запроса» size=»m» border_radius=»3″]

ВЫБРАТЬ
“20161012” КАК Параметр,
&Парам = “20161012” КАК ВерныйПараметр,
ПОДСТРОКА(&Парам, 1, 1) КАК символ1,
ПОДСТРОКА(&Парам, 2, 1) КАК символ2,
ПОДСТРОКА(&Парам, 3, 1) КАК символ3,
ПОДСТРОКА(&Парам, 4, 1) КАК символ4
ПОМЕСТИТЬ Расчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расчеты.Параметр,
Расчеты.ВерныйПараметр,
ВЫБОР
КОГДА Расчеты.символ1 = “2”
ТОГДА 2
КОГДА Расчеты.символ1 = “1”
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ * 1000 + ВЫБОР
КОГДА Расчеты.символ2 = “0”
ТОГДА 0
КОГДА Расчеты.символ2 = “1”
ТОГДА 1
КОГДА Расчеты.символ2 = “2”
ТОГДА 2
КОГДА Расчеты.символ2 = “3”
ТОГДА 3
КОГДА Расчеты.символ2 = “4”
ТОГДА 4
КОГДА Расчеты.символ2 = “5”
ТОГДА 5
КОГДА Расчеты.символ2 = “6”
ТОГДА 6
КОГДА Расчеты.символ2 = “7”
ТОГДА 7
КОГДА Расчеты.символ2 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 100 + ВЫБОР
КОГДА Расчеты.символ3 = “0”
ТОГДА 0
КОГДА Расчеты.символ3 = “1”
ТОГДА 1
КОГДА Расчеты.символ3 = “2”
ТОГДА 2
КОГДА Расчеты.символ3 = “3”
ТОГДА 3
КОГДА Расчеты.символ3 = “4”
ТОГДА 4
КОГДА Расчеты.символ3 = “5”
ТОГДА 5
КОГДА Расчеты.символ3 = “6”
ТОГДА 6
КОГДА Расчеты.символ3 = “7”
ТОГДА 7
КОГДА Расчеты.символ3 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 10 + ВЫБОР
КОГДА Расчеты.символ4 = “0”
ТОГДА 0
КОГДА Расчеты.символ4 = “1”
ТОГДА 1
КОГДА Расчеты.символ4 = “2”
ТОГДА 2
КОГДА Расчеты.символ4 = “3”
ТОГДА 3
КОГДА Расчеты.символ4 = “4”
ТОГДА 4
КОГДА Расчеты.символ4 = “5”
ТОГДА 5
КОГДА Расчеты.символ4 = “6”
ТОГДА 6
КОГДА Расчеты.символ4 = “7”
ТОГДА 7
КОГДА Расчеты.символ4 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ КАК НомерГода
ПОМЕСТИТЬ Цифры
ИЗ
Расчеты КАК Расчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
цифры.Параметр,
цифры.ВерныйПараметр,
цифры.НомерГода,
ДобавитьКДате(ДАТАВРЕМЯ(1,1,1),ГОД,цифры.НомерГода-1)
ИЗ
Цифры КАК цифры[/cl-popup]

Про использование пустой даты в запросе.

Реклама похоронного бюро: «Если наши клиенты воскреснут, то вновь обратятся к нам!

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

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

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

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

15

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

16

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

Начать тест

1. В запросах 1С допускается использовать

Только свои функции, предопределенных нет

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

Ограниченный набор функций, определенный платформой

2. Как добавить в запрос конкретное значение даты 19 сентября 2005 года

‘20050919’

Любым из перечисленных способов

ДАТАВРЕМЯ(2005, 09, 19)

3. Тип дата в запросах хранит (выберите наиболее полный ответ)

год, месяц, день, час, минута, секунда, миллисекунда

год, месяц, день, час, минута, секунда

год, месяц, день

4. Требуется отнять от даты 5 дней

ОТНЯТЬОТДАТЫ(Дата, ДЕНЬ, 5)

ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, -5)

ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, 5)

5. Требуется прибавить к дате 2 квартала

ДОБАВИТЬКДАТЕ(Дата, КВАРТАЛ, 2)

ОТНЯТЬОТДАТЫ(Дата, КВАРТАЛ, -2)

ДОБАВИТЬКДАТЕ(Дата, 2)

6. Функция РАЗНОСТЬДАТ возвращает разность дат

в часах

в соответствии с указанным типом разности (третий параметр)

в секундах

в днях

7. Требуется вычислить каким днём года (по порядку от 1 января) является указанная дата

ДЕНЬНЕДЕЛИ(Дата)

ДЕНЬ(Дата)

ДЕНЬГОДА(Дата)

8. Требуется вычислить значение миллисекунд в дате

СЕКУНДА(Дата)

Это невозможно. Дата хранит значение до секунд.

МИЛЛИСЕКУНДА(Дата)

МИНУТА(Дата)

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

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...