Как сравнить даты в 1с
Перейти к содержимому

Как сравнить даты в 1с

  • автор:

Как сравнить даты в 1с

При работе с датами 1С, типовой порядок частей даты – год, месяц, день, час, минуты, секунды. При этом часы, минуты, секунды можно пропустить.

При создании даты из строки («приведение к дате») можно указать в локализованном формате (день.месяц.год часы:минуты:секунды), но только полностью.

Например:
//Работа с датами 1С — преобразовать дату в 1С из частей — год, месяц, день (плюс необязательно время)
Дата = Дата(2012,10,30); //без времени
Дата = Дата(2012,10,30,12,00,00); //со временем

//Работа с датами 1С — преобразовать дату в 1С из строки, разные способы
Дата = Дата(«20121030»); //год, месяц, день
Дата = Дата(«30.10.2012 12:00:00»); //локализованный формат, только полностью

//Работа с датами 1С — указание значения даты без приведения, напрямую
Дата = ‘20121030’; //без времени
Дата = ‘20121030120000’; //со временем

Работа с датами 1С — Пустая дата 1С

Чтобы проверить дату 1С на заполненность – ее сравнивают с «пустой датой». При наличии в справочнике/документе реквизита с типом дата, если пользователь не заполнил это поле, то ее значение также будет – «пустая дата».

«Пустая дата» — это 01.01.0001 00:00:00.

Например:
ПустаяДата = ‘00010101000000’;
Если НужнаяДата = ‘00010101000000’ Тогда
Сообщить(«Вы не заполнили очень нужную дату»);
КонецЕсли;

Работа с датами 1С — Дата в реквизитах (справочников, документов и т.п.)

При указании типа реквизита можно указать использовать:

  • Только дату (время тогда всегда равно 00:00:00)
  • Только время (дата тогда всегда равна 01.01.0001)
  • Дату и время

Для получения даты и времени используется функция 1С ТекущаяДата().

Очень важно место – где вызывается эта функция – на клиенте или на сервере. Подробнее см. тему «Режим исполнения/Исполнение». Часто бывает, что на клиентских машинах время немного разное, поэтому стараются везде использовать серверное время – даже если оно установлено на сервере не верно, то хотя бы у всех клиентов будет одинаковое неверное время.

Для того, чтобы получить серверную дату (дату, установленную в операционной системе компьютера сервера), обычно в конфигурации создают общий модуль с установленной галочкой «Сервер» в свойствах, и в нем создают функцию
//функция расположена в общем модуле, например с именем СерверныеФункции
//в свойствах общего модуля установлена галочка «Сервер» и не установлена галочка «Клиент»
Функция ПолучитьДатуСервера() Экспорт
Возврат ТекущаяДата();
КонецФункции

//вызов этой функции для использования из другого модуля выглядит так
ДокументОбъект.Дата = СерверныеФункции.ПолучитьДатуСервера(); //ИмяМодуля.ИмяФункции()

Также в тонком клиенте непосредственно у функций модулей указывается где она будет исполнена:

Начало и конец дня

  • дата начала дня выглядит так «30.10.2012 00:00:00»
  • дата конца дня выглядит так «30.10.2012 23:59:59»

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

Так например период с «01.01.2012 00:00:00» по «31.01.2012 00:00:00» неверен, так как не включает в себя один день месяца (но включает в себя одну секунду последнего дня месяца).

Работа с датами 1С — Сравнение дат

Дата содержит дату и время. При сравнении дат (без учета времени) их обычно приводят к началу дня (месяца, года).

Например:
Дата1 = Дата(«30.10.2012 12:00:00»);
Если НачалоДня(Дата1) = НачалоДня(ДокументСсылка.Дата) Тогда
Сообщить(«Документ введен заданной датой»);
КонецЕсли;

На всякий случай, пример сравнения даты в периоде:
Если ДокументСсылка.Дата >= НачалоМесяца(ТекущаяДата()) и
ДокументСсылка.Дата

Работа с датами 1С — Изменение даты

Дата является числом секунд. Если мы хотим не просто узнать – больше ли одна дата другой – но и на сколько больше, то получаем разницу в секундах.

Например:
СНачалаДня = ТекущаяДата() – НачалоДня(ТекущаяДата());
Сообщить(«С начала дня прошло » + Строка(СНачалаДня) + » секунд»);
Сообщить(«С начала дня прошло » + Строка(СНачалаДня/60) + » минут»);
Сообщить(«С начала дня прошло » + Строка(СНачалаДня/60/60) + » часов»);

Также мы можем изменить дату, при изменении мы добавляем или отнимаем количество секунд:
НачалоЭтогоДня = НачалоДня(ТекущаяДата());

НачалоПредыдущегоДня = НачалоДня(НачалоЭтогоДня – 1); //убираем секунду – делая «вчера» и берем начало дня у «вчера»

НачалоПредыдущегоДня = НачалоЭтогоДня – 24*60*60; //другой способ – отнимаем 24 часа – 24(часа)*60(получились минуты)*60(секунды)

Работа с датами 1С — Момент времени

Момент времени – это расширенное представление даты, применимое к документам (и соответственно регистрам).

Оно требуется для сравнения времени документов, если дата и время документов одно и то же. Соответственно его можно использовать при отборах в запросах.

Момент времени можно получить у документа следующими способами:
//способ 1
МоментВремениДокумента = ДокументСсылка.МоментВремени();

Также можно сравнить момент времени с датой/временем:
МоментВремениЭталон = Новый МоментВремени( НачалоДня(ТекущаяДата()) );
Если ДокументСсылка.МоментВремени().Сравнить( МоментВремениЭталон ) = -1 Тогда
Сообщить(«Документ введен раньше, чем сегодня»);
КонецЕсли;
//Если документ введен сегодняшней датой в 00:00:00, то он все равно введен — сегодня

Работа с датами 1С — Форматирование дат

Форматирование дат (перевод значения даты в строковое представление с учетом локализации, для вывода пользователю) подробнее в статье про форматирование в 1С.

Тип Дата в языке 1С 8 – примеры работы

Тип Дата широко используется при разработке в 1С Предприятие 8, и любому разработчику 1С так или иначе приходится сталкиваться с этим типом. Ниже рассмотрены основные примеры и приемы работы с датами в 1С средствами встроенного языка.

Инициализация переменной с типом Дата

Дату можно инициализировать при помощи литералов встроенного языка, а также при помощи функции-конструктора. Минимально необходимыми при указании даты являются год, месяц и день. Часы, минуты и секунды можно не указывать.

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

Функции для получения текущей даты

Получить часть даты в виде числа

Платформа 1С позволяет получить нужную часть даты – например, получить год, месяц или день. Это можно использовать для повторного конструирования новой даты из частей.

Операции над датами в 1С 8

Получить начало и конец некоторого периода по дате

Функции имеют название вида [Начало/Конец][Года/Квартала/Месяца/Недели/Дня/Часа/Минуты]Например НачалоГода, КонецГода, НачалоЧаса, КонецЧаса и т.д.
Несмотря на то, что тип Дата в 1С не поддерживает периоды Неделя и Квартал, у них также есть возможность получить начало и конец периода, так как они имеют значимое прикладное значение (при автоматизации расчета зарплаты, начислении налогов и т.п.)

Работа с датами в 1С 8.2 и 8.3

Дата — это один из примитивных типов данных существующих в 1С. Также как числа и строки используется абсолютно повсеместно, и следовательно знание основных функций и принципов работы с типом “Дата” приобретают просто драматическую важность.

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

Типовой порядок частей даты принятый в 1С — год, месяц, день, час, минута, секунда.

Собственно простейший способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках (обязательно) вида ‘ГГГГММДДччммсс’ где:

  • ГГГГ — четыре цифры года (включая тысячелетие и век);
  • ММ — две цифры месяца;
  • ДД — две цифры даты;
  • чч — две цифры часа (в 24-х часовом формате);
  • мм — две цифры минут;
  • сс — две цифры секунд.

Часы, минуты и секунды можно не указывать, при этом они приравниваются к нулю.

Функции с датами в запросе 1С 8.3

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

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

1. ДобавитьКДате

Сегодня опишу некоторые из них. Для начала возьмем одну из простейших функций «ДобавитьКДате()». Это очень легкая функция.

Когда, в запросе мы добавляем или изменяем поле и выбираем эту функцию, то она появляется перед нам в таком вот виде:

Давайте разберем каждый из параметров функции 1С. А именно параметр 1С «Дата». Как все поняли, этот параметр именно и есть наша дата, к которой необходимо добавить какую-то дату.

Следующий, по плану, параметр у нас «Тип». Он отвечает, за то, какой именно тип увеличения даты будет. У него строго определенное количество типов, а именно:

При выборе необходимого параметра типа, на этот тип и увеличится наша дата. Например, мы выбрали тип «День», указали количество дней, которое необходимо добавить(об этом далее) и в результате получили, что к нашей дате добавилось указанное количество дней.

Итак, последний параметр «Количество». Этот параметр отвечает за количество, на которое будет увеличено дату. В зависимости от условий, оно может быть положительным или отрицательным. Если число отрицательное, то от нашей даты, будет отнято определенное количество показателей данных.

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

2. НАЧАЛОПЕРИОДА

Следующая функция, с которой я хотел бы Вас познакомить, это НАЧАЛОПЕРИОДА().

При использовании она имеет вот такой вот вид:

Рассмотрим оба параметра этой функции. По первому все предельно ясно, это наша дата. Второй параметр, «Период», имеет такой же определенный функционал, как и второй параметр функции 1С ДОБАВИТЬКДАТЕ() и имеет такой же перечень вариантов периода.

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

3. КОНЕЦПЕРИОДА

Аналогичная функция, которая отвечает за приравнивание, к концу периода есть и имеет она такую форму:

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

4. РАЗНОСТЬДАТ

И последняя функция, о которой я хотел бы рассказать, это РАЗНОСТЬДАТ().

Если Вам необходимо сравнить две даты и вывести количественную разницу этих дат, то Вам необходима именно эта функция.

При использовании она имеет такой формат:

Итак, по параметрам, все предельно ясно, «Дата1» — это дата от которой мы будем отнимать второй параметр, а именно «Дата2». В каком именно варианте периода будет рассчитываться, нам поможет последний параметр «Тип». У него такие же критерии и варианты выбора как я описал выше.

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

В том случае, если первая дата, будет меньше второй, то вернется отрицательное значение разности. Это надо запомнить.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *