Как в запросе указать пустую дату? Месяц в запросе 1с 8.2.

43
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL... 26
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос. Создается этот объект вызовом конструкции Новый Запрос. Запрос удобно... 18
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на... 13
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения...

В запросах 1С, так же как и во встроенном языке платформы 1С:Предприятие, есть функции для работы с датами. Они помогают упростить преобразования дат в запросах, избежать использования большого количества параметров. Рассмотрим эти функции.

Как задать дату в запросах 1С в виде константы

ДАТАВРЕМЯ (Год, Месяц, День, Час, Минута, Секунда) . Параметры Год, Месяц и День являются обязательными, остальные — нет. Если не указать время, то системой будет установлено начало дня.

Запрос. Текст= "ВЫБРАТЬ
ДАТАВРЕМЯ (2016,09,28,12,22,00)"
; // Результат: 28 сентября 2016 12:22:00

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

Запрос. Текст= "ВЫБРАТЬ
ДАТАВРЕМЯ (Год (Источник.Дата),09,28,12,22,00)
Из Справочник.Источник КАК Источник"
;

Как получить начало или конец года, полугодия, квартала, месяца, декады, недели, дня, часа, минуты в запросах 1С

Для этого используются соответственно функции:

  • НачалоПериода (Дата, Период)
  • КонецПериода (Дата, Период )

В качестве параметра Дата передается значение с типом Дата. Параметр Период .

Запрос. Текст= "ВЫБРАТЬ
НачалоПериода(ДАТАВРЕМЯ (2016,09,28,12,22,00), ДЕКАДА)"
; // Результат: 21 сентября 2016 0:00:00

Запрос. Текст= "ВЫБРАТЬ
КонецПериода(ДАТАВРЕМЯ (2016,09,28,12,22,00), КВАРТАЛ)"
; // Результат: 30 сентября 2016 23:59:59

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

Как получить в запросах 1С год, день года, квартал, месяц, неделю, день недели, день, час, минуту, секунду из даты

Для этого существуют соответствующие функции, в которые нужно передать дату в качестве параметра.

  • Функция ГОД (Дата) — возвращает номер года;
  • Функция ДЕНЬГОДА (Дата) — возаращает номер дня в году;
  • Функция КВАРТАЛ (Дата) — возвращает номер квартала;
  • Функция МЕСЯЦ (Дата) — возвращает номер месяца;
  • Функция НЕДЕЛЯ (Дата) — возвращает номер недели в году;
  • Функция ДЕНЬНЕДЕЛИ (Дата) — возвращает номер дня в неделе (понедельник — 1, воскресенье — 7);
  • Функция ДЕНЬ (Дата) — возвращает номер дня в месяце;
  • Функция ЧАС (Дата) — возвращает час;
  • Функция МИНУТА (Дата) — возвращает минуты;
  • Функция СЕКУНДА (Дата) — возвращает секунды.

Запрос. Текст= "ВЫБРАТЬ
ГОД(ДАТАВРЕМЯ (2016,09,28,12,22,00))"
; // Результат: 2016

Запрос. Текст= "ВЫБРАТЬ
НЕДЕЛЯ(ДАТАВРЕМЯ (2016,09,28,12,22,00))"
; // Результат: 40

Запрос. Текст= "ВЫБРАТЬ
ДЕНЬНЕДЕЛИ(ДАТАВРЕМЯ (2016,09,28,12,22,00))"
; // Результат: 3

Запрос. Текст= "ВЫБРАТЬ
ДЕНЬГОДА(ДАТАВРЕМЯ (2016,09,28,12,22,00))"
; // Результат: 272

Запрос. Текст= "ВЫБРАТЬ
ДЕНЬ(ДАТАВРЕМЯ (2016,09,28,12,22,00))"
; // Результат: 28

Как добавить к дате или отнять от даты год, полугодие, квартал, месяц, декаду, неделю, день, час, минуту, секунду в запросах 1С

Для этого используется функция ДобавитьКДате (Дата, Период, Значение).

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

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

Запрос. Текст= "ВЫБРАТЬ
ДобавитьКДате(ДАТАВРЕМЯ(2016, 9, 28, 12, 22, 0), ПОЛУГОДИЕ, 1)"
; // Результат: 28 марта 2017 12:22:00

Запрос. Текст= "ВЫБРАТЬ
ДобавитьКДате(ДАТАВРЕМЯ(2016, 9, 28, 12, 22, 0), ДЕКАДА, -1)"
; // Результат: 18 сентября 2016 12:22:00

Как вычислить разность дат в запросах 1С

Для этого используется функция РазностьДат (Дата1, Дата2, Период).

Параметр Дата1 — дата, которую вычитают.

Параметр Дата2 — дата, из которой вычитают.

Параметр Период может принимать одно из следующих значений: СЕКУНДА , МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД . Он показывает, в каких единицах мы хотим получить результат

Запрос. Текст= "ВЫБРАТЬ
РазностьДат(ДАТАВРЕМЯ(2016, 9, 28, 12, 22, 0), ДАТАВРЕМЯ(2017, 9, 28, 12, 22, 0), КВАРТАЛ)"
; // Результат: 4

Запрос. Текст= "ВЫБРАТЬ
РазностьДат(ДАТАВРЕМЯ(2016, 9, 28, 12, 22, 0), ДАТАВРЕМЯ(2017, 9, 28, 12, 22, 0), Секунда)"
; // Результат: 31 536 000

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

Тип «Дата» в 1С входит в число 4 основных типов данных наряду с числом, строкой и булево. В конфигурациях даты встречаются повсеместно – при разработке невозможно избежать работы с этим типом данных. Поэтому лучше начинать писать запросы, уже понимая, как обрабатывать даты, какие есть возможности для работы с ними, как они хранятся. Рассмотрим на примерах все нюансы написания запросов с различными датами.

Примеры работы с датами в запросах 1С

В первую очередь, необходимо получить дату в запросе в нужном формате – со временем или без него. Выполнить эту задачу можно несколькими путями:

  1. Передать через параметр. Получить текущую дату сеанса можно только этим методом;
  2. Получить дату в запросе из поля выборки;
  3. Преобразовать из числовых значений с помощью функции ДАТАВРЕМЯ().

Самой распространенной задачей при работе с документами является проверка на пустую дату в запросе 1С. В этом случае легче всего сравнить переменную или поле с пустой датой, которая получается с помощью функции ДАТАВРЕМЯ(1,1,1):

ДАТАВРЕМЯ (1, 1, 1)

Аналогичной командой можно получить произвольную дату и время в запросе. При этом их можно указать с точностью до секунды, задав в качестве параметров 6 чисел. Если же используется только 3 числа, то часы, минуты и секунды будут приравнены к 0 (начало дня). Например, нам необходимо в запросе выбрать документы за первые 10 дней января 2018 года:

ВЫБРАТЬ ПоступлениеНаРасчетныйСчет.Ссылка КАК Ссылка ИЗ Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет ГДЕ ПоступлениеНаРасчетныйСчет.Дата МЕЖДУ ДАТАВРЕМЯ(2018, 1, 1, 0, 0, 0) И ДАТАВРЕМЯ(2018, 1, 10, 23, 59, 59)

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

  • НАЧАЛОПЕРИОДА. В качестве параметров указывается дата и промежуток времени, в разрезе которого необходимо получить начало даты. Используется, чтобы преобразовать дату к формату без времени. Для этого необходимо задать второй параметр – «ДЕНЬ»;
НАЧАЛОПЕРИОДА(,) НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) период>дата>
  • КОНЕЦПЕРИОДА. Аналогичная команда, возвращающая последнюю дату в разрезе указанных в параметрах единиц;
  • ДОБАВИТЬКДАТЕ. Позволяет получить дату, большую на заданное количество указанных единиц времени. В качестве параметров функции указывают дату, единицу измерения времени и число;
ДОБАВИТЬКДАТЕ(,) ДОБАВИТЬКДАТЕ(&Дата, ДЕНЬ, 10) количество>тип>дата>
  • РАЗНОСТЬДАТ. Получает разницу между датами в указанных единицах измерения;
РАЗНОСТЬДАТ(,) РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ) тип>дата2>дата1>
  • ДЕНЬНЕДЕЛИ. Вернет порядковый номер одного из дней недели.

Грамотно применяя эти функции, разработчик может решать достаточно нетривиальные задачи. К примеру, получение наименования дня недели текущей даты в запросе в виде строки:

ВЫБОР КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 1 ТОГДА "понедельник" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 2 ТОГДА "вторник" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 3 ТОГДА "среда" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 4 ТОГДА "четверг" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 5 ТОГДА "пятница" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 6 ТОГДА "суббота" ИНАЧЕ "Воскресенье" КОНЕЦ

Преобразование типов в запросе 1С из числа или строки в дату – трудоемкое занятие. Из чисел можно получить дату с помощью функции ДАТАВРЕМЯ, из строки – комбинируя функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА ТОГДА ИНАЧЕ. Исходя из этого, разработчики предпочитают получать дату из других типов в модуле и передавать ее в запрос с помощью параметра. К сожалению, это не всегда реализуемо, поэтому приходится менять формат даты в запросе.

Есть возможность указать дату в запросе 1С в качестве параметра для получения данных из виртуальных таблиц регистров. В этой роли также можно использовать все вышеперечисленные функции. Но здесь важно не допустить, чтобы пустая дата в запросе 1С могла сказаться на конечном результате выполнения кода, поэтому обязательно надо делать проверку.

Понравилась статья? Поделитесь ей
Наверх