Найти в Дзене

11. Тип "Дата" и операции с датами

Дата — это первый необычный тип данных, с которым мы часто сталкиваемся. В повседневной жизни даты используются очень часто для различных операций. При том, что мы можем воспринимать их отдельными частями. Например, когда спрашивают: «Сколько вам лет?», надо из одного года вычесть другой год. То есть из одного числа вычесть другое. Когда вас спрашивают, через сколько минут начнётся фильм, также требуется из одного числа (количество минут) вычесть другое число (количество минут). В 1С:Предприятии значение типа "Дата" — это всегда календарная дата вместе со временем с точностью до секунд. Например, «31.03.2016 12:25:59». Это значит «двенадцать часов двадцать пять минут пятьдесят девять секунд тридцать первого марта две тысячи шестнадцатого года». Чтобы убедиться в этом, вы можете выполнить простой пример. Напишите в модуле инструкцию (когда пишем ТекущаяДата(), не забываем пользоваться контекстной подсказкой): Установим точку останова на строке КонецПроцедуры и запустим 1С:Предприятие

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

Например, когда спрашивают: «Сколько вам лет?», надо из одного года вычесть другой год. То есть из одного числа вычесть другое. Когда вас спрашивают, через сколько минут начнётся фильм, также требуется из одного числа (количество минут) вычесть другое число (количество минут).

В 1С:Предприятии значение типа "Дата" — это всегда календарная дата вместе со временем с точностью до секунд. Например, «31.03.2016 12:25:59». Это значит «двенадцать часов двадцать пять минут пятьдесят девять секунд тридцать первого марта две тысячи шестнадцатого года». Чтобы убедиться в этом, вы можете выполнить простой пример. Напишите в модуле инструкцию (когда пишем ТекущаяДата(), не забываем пользоваться контекстной подсказкой):

Инструкция для текущей даты
Инструкция для текущей даты

Установим точку останова на строке КонецПроцедуры и запустим 1С:Предприятие в режиме отладки для просмотра значения переменной Сейчас. В ней будет текущее время, установленное на компьютере. Значения типа Дата, также как числа и строки, можно записывать в тексте программы. Это используется не очень часто, но используется. Поэтому посмотрите, как выглядит литерал типа Дата:

Литерал типа «Дата»
Литерал типа «Дата»

Литерал обязательно обрамляется символами одинарная кавычка — «’». Внутри разные части даты указываются в последовательности: год, месяц, день, час, минуты, секунды. При этом их можно отделять друг от друга какими-нибудь символами, чтобы легче читалось. Главное при этом - соблюдалась последовательность, в которой они указаны. Литералы типа Дата используют не часто, выглядят довольно сложно и читать их не очень удобно. Гораздо чаще для работы с датами используют функции встроенного языка, которые можно посмотреть в синтакс-помощнике по кнопке в командной панели наверху:

Открыть синтакс-помощник
Открыть синтакс-помощник

Синтакс-помощник открывается в правой стороне экрана, на том же месте, что и палитра свойств. Чтобы переключаться между ними, используйте закладки, расположенные в нижней части экрана:

Переключение между синтакс-помощником и палитрой свойств
Переключение между синтакс-помощником и палитрой свойств

Синтакс-помощник — это большой справочник по встроенному языку. В верхнем окне находится его «оглавление». В нём вы можете выбрать интересующий вас раздел и дважды щёлкнуть на нём мышью. Тогда в нижнем окне откроется содержимое этого раздела

Содержимое раздела в синтакс-помощнике
Содержимое раздела в синтакс-помощнике

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

 Изменение вертикального размера окон
Изменение вертикального размера окон

Встроенные функции, предназначенные для работы с датами, находятся в разделе Глобальный контекст — Функции работы со значениями типа Дата

Функции для работы со значениями типа Дата
Функции для работы со значениями типа Дата

вразделеФункции преобразования значений находитсяещёоднаполезная функция — Дата()

Функция «Дата()»
Функция «Дата()»

Она создаёт значение типа "Дата" из года, месяца, дня и т. д., которые можно перечислить в скобках через запятую. После первой строки примера вставьте пустую строку и напишите в ней НачалоЗанятийВчера =

Не забывайте пользоваться контекстной подсказкой!

 Начало строки
Начало строки

Синтакс-помощник не только рассказывает, из чего состоит встроенный язык, но и помогает писать программы. Поэтому вы не будете писать слово «Дата», а просто перетащите его мышью из окна синтакс-помощника в вашу программу:

Перетащите функцию в текст программы
Перетащите функцию в текст программы

Платформа вставит в программу «заготовку» этой функции и останется только дописать её содержимое:

«Заготовка» функции
«Заготовка» функции

Поставьте курсор внутрь скобок, наберите текущий год. Появится контекстная подсказка, которая подскажет, что нужно написать в скобках. Год вы уже написали. Теперь нужно дописать месяц. Поэтому он и выделен жирным шрифтом. А тип у этого «месяца» — Число. Значит, можно написать не 03, как было выше, а просто 3. Как только будет поставлена запятая после тройки, подсказка изменится. Теперь она будет говорить, что нужно ввести день:

Подсказка следующего параметра
Подсказка следующего параметра

Возьмите себе за правило "ставить пробелы после запятой", тогда текст программы будет читаться легко. Пользуясь контекстной подсказкой, допишите инструкцию до конца. Не забудьте закончить её точкой с запятой.

Запустите "1С:Предприятие" в режиме отладки и убедитесь, что в переменной НачалоЗанятийВчера то же значение, которое было и в предыдущем примере, но с функцией Дата() текст выглядит и читается лучше:

Использование функции «Дата()»
Использование функции «Дата()»

Если окно контекстной подсказки параметров закрылось, в любой момент его можно открыть снова. Используем комбинацию клавиш Ctrl+Shift+Пробел. Подробнее про сочетания клавиш для работы с текстом программ можно прочитать во встроенной справке (кнопка на командной панели сверху): Справка — Содержание справки — Сочетания клавиш (Конфигуратор) — Редактор текстовых документов и модулей.

Возвращаемся к функциям для работы с датами. Уже использовали функцию "ТекущаяДата()", и часто в 1С:Предприятии могут понадобиться такие даты, как начало некоторого дня и конец некоторого дня. Для их получения существуют две функции с аналогичными именами: НачалоДня() и КонецДня(). Познакомьтесь с тем, где в 1С:Предприятии день начинается и где он заканчивается. В одну переменную поместите текущую дату, а в другую переменную — результат функции НачалоДня(), примененной к первой переменной:

Начало дня
Начало дня

Запустите 1С:Предприятие в режиме отладки и посмотрите, чему равно НачалоСегодня.

Это будет сегодняшняя дата и нулевое время. Например, 31.03.2026 0:00:00.

В 1С:Предприятии для проставления какой-либо отметки в любой из дней в качестве даты такой отметки обычно используют начало дня. Теперь посмотрите, чему равен конец дня. Создайте переменную, в которую будет помещён результат функции КонецДня(). Но внутри скобок у этой функции напишите не имя переменной ТекДата, а саму функцию ТекущаяДата()

 Использование результата функции в качестве параметра
Использование результата функции в качестве параметра

Так тоже можно делать, и внутри скобок может быть не только литерал или переменная, но и выражение. То есть некоторая формула, результатом которой может быть значение. Например, функция, возвращающая значение. Запустите 1С:Предприятие в режиме отладки и посмотрите, чему равно НачалоСегодня. Это будет сегодняшняя дата и время 23:59:59. Например, 31.03.2016 23:59:59.

Теперь познакомьтесь с тем, какие операции можно выполнять с датами. Для значений типа Дата и типа Число во встроенном языке определены операции сложения и вычитания. То есть к дате можно прибавить некоторое количество секунд. Это используется для того, чтобы прибавить или убавить какой-то фиксированный промежуток времени.

Например, в одной переменной у вас находится текущее время. Как в другой переменной получить время на один час больше?

Попробуйте выполнить это самостоятельно.

Для сравнения посмотрите на рисунок:

Дата на час больше
Дата на час больше

Чтобы получить дату на час больше, нужно к дате прибавить 60 раз по 60 секунд. То есть то количество секунд, которое содержится в одном часе.

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

Конец предыдущего дня
Конец предыдущего дня

Ещё одна операция, которая определена для значений типа "Дата" — это вычитание. Из одной даты можно вычесть другую дату.

В этом случае получится некоторое количество секунд. Но во встроенном языке нет функции, которая могла бы преобразовать количество секунд к виду «прошло 2 месяца, 11 дней, 5 часов и 48 минут».

Попробуйте самостоятельно написать программ из нескольких инструкций, которая будет это делать. Для этого потребуются операция деления, функция получения целой части Цел() и операция получения остатка от деления %.

Задание 3.15

Запишите начало дня 2 сентября 2026 года с помощью литерала даты.

Задание 3.16

Запишите начало дня 2 сентября 2026 года с помощью функции Дата().

Задание 3.17

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

Задание 3.18

В одной переменной сохраните произвольную дату. В другой переменной вычислите девять утра для произвольной даты.

Задание 3.19

Разность двух дат представьте в виде количества часов, минут и секунд. Например, «3 ч. 29 мин. 40 с».