Top.Mail.Ru

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

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

Содержание

Работа с типом Дата в языке 1С

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

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

// Формат ‘ГГГГММДДччммсс’ Дата = ‘20210505121515’; // 05.05.2021 12:15:15 // Для удобства можно использовать любые нечисловые разделители, результат будет одинаковым // Все нечисловые символы в литерале игнорируются Дата = ‘2021.05.05:12:15:15’; // 05.05.2021 12:15:15 Дата = ‘2021+05/05*12%1515′; // 05.05.2021 12:15:15 Дата = ‘2021050512ё15&15’; // 05.05.2021 12:15:15 Дата = ‘Это литерал типа дата 2021 Я год 05 Я месяц 05 А я день!12час15минута15секунда!’; // 05.05.2021 12:15:15 // Допустимо не указывать часы, минуты и секунды НачалоДня = ‘2021.05.05’; // 05.05.2021 00:00:00 // Функция-конструктор даты // Также как для литерала, достаточно указать год, месяц и день // В отличие от литерала, использование нечисловых символов приведет к ошибке. Дата = Дата(«20210505»); // 05.05.2021 00:00:00 Дата = Дата(2021,05,05); // 05.05.2021 00:00:00 Дата = Дата(2021,05,05,12,15,15); // 05.05.2021 12:15:15

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

Дата1 = Дата(2021,05,05); Дата2 = Дата1 + 0.05; РазницаВМиллисекундах = Дата2 Дата1; // 0.05

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

// Текущая системная дата на компьютере ТекДата = ТекущаяДата();  // Следующие функции доступны только на сервере или в толстом клиенте // Получить текущую дату по Гринвичу. ДатаПоГринвичу = ТекущаяУниверсальнаяДата(); // Получить текущую дату по Гринвичу в миллисекундах // Возвращает число, а не дату! ТекДатаВМиллисекундах = ТекущаяУниверсальнаяДатаВМиллисекундах(); // Текущая системная дата сервера, приведенная к часовому поясу сеанса ТекДата = ТекущаяДатаСеанса();

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

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

// Получить часть даты в виде числа Г = Год(‘20210505121515’); // 2021 М = Месяц(‘20210505121515’); // 5 Д = День(‘20210505121515’); // 5 ч = Час(‘20210505121515’); // 12 м = Минута(‘20210505121515’); // 15 с = Секунда(‘20210505121515’); // 15

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

// Можно добавить или отнять нужное число секунд
Дата = ТекущаяДата() + 1; // Прибавить секунду

// Добавить или отнять нужное количество месяцев
Дата = ДобавитьМесяц(ТекущаяДата(),1); // Прибавить к дате месяц
Дата = ДобавитьМесяц(ТекущаяДата(),1); // Отнять от даты месяц

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

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

НачГода = НачалоГода(‘20210505121515’); // 01.01.2021 00:00:00 НачМинуты = НачалоМинуты(‘20210505121515’); // 05.05.2021 12:15:00 КонКвартала = КонецКвартала(‘20210505121515’); // Распространенный прием — получить начало следующего дня // Вариант 1 — прибавляем число секунд равное 1 суткам (24*60*60), приводим к началу дня СледующийДень = НачалоДня(ТекущаяДата() + 86400); // Вариант 2 — получаем конец текущих суток, прибавляем секунду, приводим к началу дня СледующийДень = НачалоДня(КонецДня(ТекущаяДата())+1); // Получить разность дат в секундах // Важно! Складывать даты нельзя. РазностьДат = ‘20210505121515’ ‘20210504121515’ // 86400

Проверить дату на заполненность (что дата пустая)

Дата = ‘00010101′; ДатаНеЗаполнена = Дата = ‘00010101’; ДатаНеЗаполнена = Не ЗначениеЗаполнено(Дата); ДатаНеЗаполнена = Дата = Дата(1 , 1 , 1); ДатаНеЗаполнена = Дата = Дата(«00010101»);

Функции для работы с датой в языке запросов 1С

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

Функция Год

ГОД(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает год этой даты. Возвращаемое значение — целое число.

Функция Квартал

КВАРТАЛ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер квартала этой даты. Возвращаемое значение — целое число от 1 до 4.

Функция Месяц

МЕСЯЦ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер месяца этой даты. Возвращаемое значение — целое число от 1 до 12.

Функция Неделя

НЕДЕЛЯ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает порядковый номер недели этой даты. Возвращаемое значение — целое число от 1 до 52.

Функция День

ДЕНЬ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня в месяце этой даты. Возвращаемое значение — целое число от 1 до 31.

Функция ДеньНедели

ДЕНЬНЕДЕЛИ(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня недели этой даты. Возвращаемое значение — целое число от 1 до 7.

Функция ДеньГода

ДЕНЬГОДА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает номер дня в году этой даты. Возвращаемое значение — целое число от 1 до 366.

Функция Час

ЧАС(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает час этой даты. Возвращаемое значение — целое число от 0 до 23.

Функция Минута

МИНУТА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает минуту этой даты. Возвращаемое значение — целое число от 0 до 59.

Функция Секунда

СЕКУНДА(<Дата>) — в качестве параметра принимает значение типа Дата, возвращает минуту этой даты. Возвращаемое значение — целое число от 0 до 59.

ДАТАВРЕМЯ - собираем дату из частей в запросе 1С

ДАТАВРЕМЯ(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>) — Возвращает значение типа Дата, по указанным составным частям. Обязательными являются только параметры Год, Месяц, День, остальные можно не указывать, тогда вместо них будут нули.
Важно! Значения параметров должны быть в допустимых диапазонах. Месяц не может быть больше 12, минута и секунда — не больше 59, и т.п.

НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА - преобразуем дату в запросе

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

НАЧАЛОПЕРИОДА(<Дата>,<Период>) — принимает два параметра — дату и период, и возвращает для указанной даты начало периода в который она входит (конец месяца, конец дня, и т.п.).

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

КОНЕЦПЕРИОДА(<Дата>,<Период>) — принимает два параметра — дату и период, и возвращает для указанной даты конец периода в который она входит (конец месяца, конец дня, и т.п.).

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

ДОБАВИТЬКДАТЕ

ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>) — принимает три параметра — дату, тип интервала и количество интервалов; добавляет к дате указанное количество временных интервалов. Возвращает значение типа Дата.

Параметр <Тип> в функции может принимать значения: ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, ДЕКАДА, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА.

Тут есть нюанс. Чтобы получить дату меньше переданной — просто указываем третьим параметром отрицательное число. Например, так можно получить дату на два месяца назад от текущей, или начало прошлого года.

РАЗНОСТЬДАТ

РАЗНОСТЬДАТ(<ПерваяДата>, <ВтораяДата>, <Тип>) — рассчитывает календарную разницу между двумя датами, в виде количества единиц измерения (целое число), переданных в параметр Тип.

Параметр <Тип> в функции РАЗНОСТЬДАТ может принимать значения: ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА

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

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