Тип Дата широко используется при разработке в 1С Предприятие 8, и любому разработчику 1С так или иначе приходится сталкиваться с этим типом. Ниже рассмотрены основные примеры и приемы работы с датами в 1С средствами встроенного языка и языка запросов, а также основные функции работы с датой в 1С.
Содержание
Работа с типом Дата в языке 1С
Инициализация переменной с типом Дата
Дату можно инициализировать при помощи литералов встроенного языка, а также при помощи функции-конструктора. Минимально необходимыми при указании даты являются год, месяц и день. Часы, минуты и секунды можно не указывать.
При работе средствами встроенного языка, дата поддерживает точность до 0,1 миллисекунды.
К сожалению, ни в запросах, ни при помещении в базу данных, эта точность не сохраняется.
Функции для получения текущей даты
Получить часть даты в виде числа
Платформа 1С позволяет получить нужную часть даты — например, из даты можно получить год, месяц или день. Это можно использовать для повторного конструирования новой даты из частей.
Операции над датами в 1С 8
Дата = ТекущаяДата() + 1; // Прибавить секунду
// Добавить или отнять нужное количество месяцев
Дата = ДобавитьМесяц(ТекущаяДата(),1); // Прибавить к дате месяц
Дата = ДобавитьМесяц(ТекущаяДата(),—1); // Отнять от даты месяц
Получить начало и конец некоторого периода по дате
Функции имеют название вида [Начало/Конец][Года/Квартала/Месяца/Недели/Дня/Часа/Минуты]Например НачалоГода, КонецГода, НачалоЧаса, КонецЧаса и т.д.
Несмотря на то, что тип Дата в 1С не поддерживает периоды Неделя и Квартал, у них также есть возможность получить начало и конец периода, так как они имеют значимое прикладное значение (при автоматизации расчета зарплаты, начислении налогов и т.п.)
Проверить дату на заполненность (что дата пустая)
Функции для работы с датой в языке запросов 1С
Значения типа Дата в языке запросов могут содержать не только дату, но и время, и есть целый ряд функций и операторов для работы с типом Дата. Частично они похожи с методами встроенного языка, но есть и отличия
Функция Год
ГОД(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает год этой даты. Возвращаемое значение — целое число.
Функция Квартал
КВАРТАЛ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер квартала этой даты. Возвращаемое значение — целое число от 1 до 4.
Функция Месяц
МЕСЯЦ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер месяца этой даты. Возвращаемое значение — целое число от 1 до 12.
Функция Неделя
НЕДЕЛЯ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает порядковый номер недели этой даты. Возвращаемое значение — целое число от 1 до 52.
Функция День
ДЕНЬ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня в месяце этой даты. Возвращаемое значение — целое число от 1 до 31.
Функция ДеньНедели
ДЕНЬНЕДЕЛИ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня недели этой даты. Возвращаемое значение — целое число от 1 до 7.
Функция ДеньГода
ДЕНЬГОДА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня в году этой даты. Возвращаемое значение — целое число от 1 до 366.
Функция Час
ЧАС(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает час этой даты. Возвращаемое значение — целое число от 0 до 23.
Функция Минута
МИНУТА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает минуту этой даты. Возвращаемое значение — целое число от 0 до 59.
Функция Секунда
СЕКУНДА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает минуту этой даты. Возвращаемое значение — целое число от 0 до 59.
ДАТАВРЕМЯ - собираем дату из частей в запросе 1С
ДАТАВРЕМЯ(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>) — Возвращает значение типа Дата, по указанным составным частям. Обязательными являются только параметры Год, Месяц, День, остальные можно не указывать, тогда вместо них будут нули.
Важно! Значения параметров должны быть в допустимых диапазонах. Месяц не может быть больше 12, минута и секунда — не больше 59, и т.п.
НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА - преобразуем дату в запросе
Во встроенном языке 1С есть методы приведения даты к началу определенного периода — например, НачалоДня, НачалоМесяца, НачалоГода. В языке запросов вместо множества разных методов существует универсальная функция НАЧАЛОПЕРИОДА, и аналогичная КОНЕЦПЕРИОДА для преобразования, соответственно, к концу определенного периода.
НАЧАЛОПЕРИОДА(<Дата>,<Период>) — принимает два параметра — дату и период, и возвращает для указанной даты начало периода в который она входит (конец месяца, конец дня, и т.п.).
Параметр <Период> может принимать следующие значения: ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, ДЕКАДА, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТА.
КОНЕЦПЕРИОДА(<Дата>,<Период>) — принимает два параметра — дату и период, и возвращает для указанной даты конец периода в который она входит (конец месяца, конец дня, и т.п.).
Параметр <Период> может принимать следующие значения: ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, ДЕКАДА, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТА.
ДОБАВИТЬКДАТЕ
ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>) — принимает три параметра — дату, тип интервала и количество интервалов; добавляет к дате указанное количество временных интервалов. Возвращает значение типа Дата.
Параметр <Тип> в функции может принимать значения: ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, ДЕКАДА, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА.
Тут есть нюанс. Чтобы получить дату меньше переданной — просто указываем третьим параметром отрицательное число. Например, так можно получить дату на два месяца назад от текущей, или начало прошлого года.
РАЗНОСТЬДАТ
РАЗНОСТЬДАТ(<ПерваяДата>, <ВтораяДата>, <Тип>) — рассчитывает календарную разницу между двумя датами, в виде количества единиц измерения (целое число), переданных в параметр Тип.
Параметр <Тип> в функции РАЗНОСТЬДАТ может принимать значения: ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА