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

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

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

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

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

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

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

Функции работы с датами

Дата

Функция Дата() служит для создания значения типа “Дата”. Использовать ее можно двумя способами:

  • Дата(x) — где параметр “x” это строка вида “ГГГГММДДччммсс”, часы, минуты и секунды можно опустить, т.е. преобразуем строку в дату;
  • Дата(x, y, z, w, v, c) — в этом случае параметры “x”, “y”, “z”, “w”, “v” и “c” являются числами и означают год, месяц, день, час, минуту и секунду соответственно. Как и в предыдущем случае час, минуту и секунду можно опустить.

ТекущаяДата

Функция ТекущаяДата() просто возвращает текущую дату того компьютера на котором она исполняется. В клиент-серверных системах будет разумно инкапсулировать эту функцию в общем модуле (с исполнением на сервере) и использовать ее только таким образом.

ТекущаяУниверсальнаяДатаВМиллисекундах

Функция ТекущаяУниверсальнаяДатаВМиллисекундах() позволяет узнать дату в миллисекундах. Данная функция доступна начиная с версии платформы 8.2.17. Замечание о клиент-серверных системах из функции выше справедливо и для этой функции.

Год, Месяц, День, Час, Минута, Секунда

Функции Год(x), Месяц(x), День(x), Час(x), Минута(x) и Секунда(x) возвращают соответствующую часть переданной им даты “x” в виде числа.

Начало…

Функции вида “Начало…(x)” получают дату в параметре “x” и возвращают дату начала периода времени в соответствии с названием конкретной функции. Существуют следующие функции:

  • НачалоГода;
  • НачалоКвартала;
  • НачалоМесяца;
  • НачалоНедели;
  • НачалоДня;
  • НачалоЧаса;
  • НачалоМинуты.

Конец…

Функции вида “Конец…(x)” получают дату в параметре “x” и возвращают дату окончания периода времени в соответствии с названием конкретной функции. Существуют следующие функции:

  • КонецГода;
  • КонецКвартала;
  • КонецМесяца;
  • КонецНедели;
  • КонецДня;
  • КонецЧаса;
  • КонецМинуты.

НеделяГода, ДеньГода

Функции НеделяГода(x) И ДеньГода(x) возвращают соответственно номер недели и номер дня в году для указанной даты “x”.

ДеньНедели

Функция ДеньНедели(x) возвращает номер дня недели для указанной даты “x”.

ДобавитьМесяц

Функция ДобавитьМесяц(x, y) добавляет к дате “x” количество месяцев “y”, которое может быть отрицательным, в этом случае происходит вычитание месяцев из даты “x”.

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

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

ВвестиДату

Функция ВвестиДату(x, y, z) вызывает диалог для ввода даты, введенная дата записывается в переменную “x”, кроме этого можно указать подсказку “y”, а также какую часть даты нужно ввести “z” Функция возвращает Истина — если ввод был произведен, Ложь — если пользователь отказался от ввода.

Выглядит это окно примерно так:

Окно ввода даты
Окно ввода даты

Типовые задачи представления данных

Разность даты в днях, количество дней между датами

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

Кроме этого можно воспользоваться функцией «РАЗНОСТЬДАТ» из языка запросов:

Таким образом можно узнать следующие типы разности дат:

  • СЕКУНДА;
  • МИНУТ;
  • ЧАС;
  • ДЕНЬ;
  • МЕСЯЦ;
  • КВАРТАЛ;
  • ГОД.

Разница между датами в месяцах, количество месяцев между датами

Здесь все в точности также, как и в предыдущем пункте.

Прибавить день к дате, вычесть день из даты, отнять от даты день

Прибавить месяц к дате, вычесть месяц из даты, отнять месяц от даты

Для прибавления/вычитания месяцев существует встроенная функция:

День недели по дате

Сравнение дат

Так как дата в 1С это по сути количество секунд прошедшее с начала нашей эры (т.е. число) то и сравнение производится так же как и числами. У объекта «МоментВремени» существует специальный метод «Сравнить» который позволяет сравнить один объект «МоментВремени» с другим.

Дата равна нулю (проверка на заполненность), проверка на пустую дату

3 комментария к “Работа с датами в 1С 8.2 и 8.3

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

Оставить комментарий