Опубликовано: 15.01.2021

Работа с датами

Тип "Дата" — один из базовых типов данных, поддерживаемых в языке 1С версии 7.7. Типом "Дата" в системе «1С:Предприятие» может представляться любая корректная дата.

В выражениях литералы дат (то есть неизменяемые значения типа "Дата") записываются в формате 'ДД.ММ.ГГ' или 'ДД.ММ.ГГГГ', где ГГ или ГГГГ  — две или четыре цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца (01, 02, 03 и т.д.). В отличие от строковых литералов, литералы даты следует заключать в одинарные кавычки:

Результат = '01.06.2020' + 1;    // получим дату '02.06.2020'
Результат = "01.06.2020" + 1;    // получим строку "01.06.20201"

Операции с датами

Для операндов типа "Дата" в языке определены три арифметических операции:

  • Дата + Число (к дате прибавляется число дней);
  • Дата − Число (от даты отнимается число дней);
  • Дата − Дата (результатом будет число дней между датами).

Примеры арифметических операций с датами:

ВчерашняяДата = ТекущаяДата() − 1;
ЗавтрашняяДата = ТекущаяДата() + 1;
ЧислоДнейВМесяце = КонМесяца(РабочаяДата()) − НачМесяца(РабочаяДата()) + 1;

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

  • больше (Дата1 > Дата2);
  • больше или равно (Дата1 >= Дата2);
  • равно (Дата1 = Дата2);
  • не равно (Дата1 <> Дата2);
  • меньше (Дата1 < Дата2);
  • меньше или равно (Дата1 <= Дата2).

Пример использования дат в логических операциях:

Если (Дата2>=Дата1)И(Дата2<>КонМесяца(Дата2)) Тогда
   . . .
Иначе
   . . .
КонецЕсли;

Преобразование в тип «Дата» значений других базовых типов

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

  • Если в начале строки содержится что-то, что может быть проинтерпретировано как строковое представление даты в виде "ДД.ММ.ГГ", где ГГ — две цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца, то будет произведено соответствующее преобразование. В противном случае значение даты будет нулевым ('00.00.00').
  • В случае с числами делается попытка взять целую часть числа и проинтерпретировать как численное представление даты. Если число отрицательно, то итогом является нулевая дата ('00.00.00').

Пример:

Результат = НачМесяца("26.10.20");    // получим дату '01.10.20', так как строка "26.10.20" будет неявно преобразована в дату '26.10.20'
Результат = НачМесяца("_26.10.20");   // получим дату '00.00.00'
Результат = ТекущаяДата() - 2.4528;   // целая часть числа 2.4528 будет проинтерпретирована как 2 дня
Результат = НачМесяца(2452000);       // получим дату '01.03.01'

Для явного преобразования в тип "Дата" значений других базовых типов служит системная (встроенная) функция Дата(). Англоязычный синоним имени функции — Date().

Синтаксис функции:

Дата(<ПреобразуемоеЗначение>)

где <ПреобразуемоеЗначение> — числовое или строковое выражение, результат вычисления которого необходимо преобразовать в дату.

Пример использования функции:

ПолученнаяДата = Дата("_01.01.2001");   // получим нулевую дату '00.00.00'
ПолученнаяДата = Дата("01.01.2001");    // получим дату '01.01.01'
ПолученнаяДата = Дата(2451911);         // получим дату '01.01.01'

У системной функции Дата() имеется также ещё один синтаксис:

Дата(<Год>, <Месяц>, <Число>)

где

  • <Год> — числовое выражение, результат вычисления которого будет интерпретироваться как год даты (год должен указываться четырёхзначным числом);
  • <Месяц> — числовое выражение, результат вычисления которого будет интерпретироваться как номер месяца даты;
  • <Число> — числовое выражение, результат вычисления которого будет интерпретироваться как номер дня в месяце.

Пример использования:

УстанавливаемаяДата = Дата(Результат1, Результат2, Результат3);

Системные функции для работы с датами

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

Системная дата

Пример использования функции:

ДатаОС = ТекущаяДата();

Получить текущее время, то есть время, установленное в операционной системе, позволяет системная функция ТекущееВремя(). Возвращаемым значением функции является системное время в текстовом виде. Англоязычный синоним имени функции — CurrentTime().

Синтаксис функции:

ТекущееВремя(<Час>, <Мин>, <Сек>)

где

  • <Час> — имя переменной, куда система вернёт числовое значение часа текущего времени. Параметр является необязательным;
  • <Мин> — имя переменной, куда система вернёт числовое значение минут текущего времени. Параметр является необязательным;
  • <Сек> — имя переменной, куда система вернёт числовое значение секунд текущего времени. Параметр является необязательным.

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

Сообщить("Текущее время - " + ТекущееВремя());

Установить/получить рабочую дату системы «1С:Предприятие» позволяет системная функция РабочаяДата(). Её возвращаемым значением является значение текущей рабочей даты, установленной в системе «1С:Предприятие» до момента вызова функции. Англоязычный синоним имени — WorkingDate().

Синтаксис функции:

РабочаяДата(<Дата>, <РежимСменыРабДаты>)

где

  • <Дата> — выражение, содержащее дату, которая будет установлена в качестве рабочей. Параметр является необязательным. Если параметр не указан, то рабочая дата в системе не изменяется;
  • <РежимСменыРабДаты> — числовое значение, определяющее режим автоматической смены рабочей даты в полночь. Если па­ра­метр не ука­зан, то режим не меняется и действует установка, выбранная в параметрах системы. Возможные значения:
    • 0 — не менять дату автоматически;
    • 1 — менять автоматически с выдачей предупреждения;
    • 2 — менять автоматически без предупреждения.

Для получения рабочей даты функция обычно используется без параметров:

// оклад сотрудника на текущую рабочую дату
Сотрудник.Оклад.Получить(РабочаяДата());

Примечание: Рабочая дата, установленная в системе «1С:Предприятие», может отличаться от текущей даты (то есть от даты, установленной в операционной системы). Сменить рабочую дату бухгалтер может, например, в том случае, когда ему необходимо ввести большое количество документов «задним числом». Произвести смену рабочей даты можно в окне настройки параметров системы (вызывается из главного меню программы: «Сервис −> Параметры…»).

Установка рабочей даты

Установить/получить вариант задания начала стандартного интервала отображения журнала документов позволяет системная функция НачалоСтандартногоИнтервала(). Англоязычный синоним имени фнкции — BegOfStandardRange().

Синтаксис функции:

НачалоСтандартногоИнтервала(<Вариант>)

где <Вариант> — выражение со значением типа "Дата" или "Строка". Значением типа "Дата" задаётся конкретная дата начала интервала журнала документов. Возможные строковые значения параметра: "День" (или "Day"), "Месяц" (или "Month"), "Квартал" (или "Quarter") и "Год" (или "Year"). Причём, при указании строкового значения будут иметься в виду текущий день (тот, что установлен в системе как рабочая дата), текущий месяц, текущий квартал и текущий год.

Параметр функции является необязательным. Так, например, для получения варианта задания интервала функция используется без параметра. Возвращаемым значением функции является текущий установленный вариант.

Пример использования:

НачалоСтандартногоИнтервала("Месяц");

Установить/получить вариант задания конца стандартного интервала отображения журнала документов позволяет системная функция КонецСтандартногоИнтервала(). Англоязычный синоним имени фнкции — EndOfStandardRange().

Синтаксис функции:

КонецСтандартногоИнтервала(<Вариант>)

где <Вариант> — выражение со значением типа "Дата" или "Строка". Значением типа "Дата" задаётся конкретная дата конца интервала журнала документов. Возможные строковые значения параметра: "День" (или "Day"), "Месяц" (или "Month"), "Квартал" (или "Quarter") и "Год" (или "Year"). Причём, при указании строкового значения будут иметься в виду текущий день (тот, что установлен в системе как рабочая дата), текущий месяц, текущий квартал и текущий год.

Параметр функции является необязательным. Так, например, для получения варианта задания интервала функция используется без параметра. Возвращаемым значением функции является текущий установленный вариант.

Пример использования:

КонецСтандартногоИнтервала("Месяц");

Примечание: Установить или посмотреть вариант задания стандартного интервала пользователь может в окне настройки параметров системы (вызывается из главного меню программы: «Сервис −> Параметры…»).

Установка рабочего периода

Получить строковое представление стандартного периода, в соответствии с указанными датами начала и конца периода, позволяет системная функция ПериодСтр(). В качестве первого и второго параметров функции передаются соответственно даты начала и конца периода (выражения со значениями типа "Дата"), а функция возвращает его строковое представление. Возвращаемая функцией строка может использоваться, например, для выдачи информации о периоде итогов в отчётах. Англоязычный синоним имени функции — PeriodStr().

Пример использования:

Дата1 = '01.01.97';
Дата2 = '31.03.97';
Сообщить(ПериодСтр(Дата1, Дата2));  // Выведет "1 квартал 1997 г."

Функции для вычисления даты

Получить дату, отличающуюся от указанной даты на указанное количество месяцев, позволяет функция ДобавитьМесяц(). Англоязычный синоним имени функции — AddMonth().

Синтаксис функции:

ДобавитьМесяц(<ИсходнаяДата>, <КоличествоМесяцев>)

где

  • <ИсходнаяДата> — выражение типа "Дата", содержащее исходную дату;
  • <КоличествоМесяцев> — числовое выражение, задающее число месяцев, которое необходимо добавить к дате или вычесть из неё (при отрицательном значении).

Пример использования:

ДатаЗаТриМесяцаДоТекущей = ДобавитьМесяц(РабочаяДата(), −3);

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

Получить дату начала недели для указанной даты позволяет функция НачНедели(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfWeek().

Пример использования:

ДатаНачалаНедели = НачНедели(РабочаяДата());

Получить дату конца недели для указанной даты позволяет функция КонНедели(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfWeek().

Пример использования:

ДатаКонцаНедели = КонНедели(РабочаяДата());

Получить дату начала месяца для указанной даты позволяет функция НачМесяца(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfMonth().

Пример использования:

ДатаНачалаМесяца = НачМесяца(РабочаяДата());

Получить дату конца месяца для указанной даты позволяет функция КонМесяца(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfMonth().

Пример использования:

ДатаКонцаМесяца = КонМесяца(РабочаяДата());

Получить дату начала квартала для указанной даты позволяет функция НачКвартала(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfQuart().

Пример использования:

ДатаНачалаКвартала = НачКвартала(РабочаяДата());

Получить дату конца квартала для указанной даты позволяет функция КонКвартала(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfQuart().

Пример использования:

ДатаКонцаКвартала = КонКвартала(РабочаяДата());

Получить дату начала года для указанной даты позволяет функция НачГода(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfYear().

Пример использования:

ДатаНачалаГода = НачГода(РабочаяДата());

Получить дату конца года для указанной даты позволяет функция КонГода(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfYear().

Пример использования:

ДатаКонцаГода = КонГода(РабочаяДата());

Получить год указанной даты позволяет функция ДатаГод(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetYear().

Пример использования:

ЗначениеГода = ДатаГод(РабочаяДата());

Получить месяц указанной даты позволяет функция ДатаМесяц(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetMonth().

Пример использования:

ЗначениеМесяца = ДатаМесяц(РабочаяДата());

Получить день месяца указанной даты позволяет функция ДатаЧисло(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDay().

Пример использования:

ЗначениеДняМесяца = ДатаЧисло(РабочаяДата());

Получить номер недели в году для указанной даты позволяет функция НомерНеделиГода(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetWeekOfYear().

Пример использования:

ЗначениеНедели = НомерНеделиГода(РабочаяДата());

Получить порядковый номер дня в году для указанной даты позволяет функция НомерДняГода(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDayOfYear().

Пример использования:

ЗначениеДняГода = НомерДняГода(РабочаяДата());

Получить порядковый номер дня в неделе для указанной даты позволяет функция НомерДняНедели(). В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDayOfWeek().

Пример использования:

ЗначениеДняНедели = НомерДняНедели(РабочаяДата());

Другие статьи по схожей тематике