1с текущая дата добавить день
Как в 1С 8.3 прибавить месяц, день, неделю и т.д.
Рассмотрим разные способы добавления различных периодов дат в 1С 8.3 — от месяца, до секунды.
Простой и «топорный» метод
Метод хорошо отрабатывает при добавлении дня. Что касается месяца, в таком способе нам придётся контролировать количество дней в прибавляемом месяце, учитывая количество дней в следующем, ещё високосный год. Получается совсем сложно и громоздко.
Таким образом для операций с месяцами во встроенном языке 1С, как стандарт, существует две функции это ДобавитьМесяц() и в языке запросов ДОБАВИТЬКДАТЕ(). Рассмотрим подробно работу с каждой из них.
Функция ДобавитьМесяц()
Где параметр это «наша дата», количество добавляемых месяцев (цифра).
Если следует отнимать месяцы, то количество месяцев необходимо указывать со знаком минус.
Функция ДОБАВИТЬКДАТЕ() — в запросах 1С
Получите понятные самоучители по 1С бесплатно:
Где параметры это «наша дата», это единица измерения временного интервала (ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, НЕДЕЛЯ, ДЕКАДА, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА), а в параметре указывается число прибавляемых временных интервалов.
Если необходимо отнять временной интервал параметр необходимо задавать со знаком минус.
Примечание — возможны ошибки
Если стоит задача отнять или прибавить к дате несколько месяцев. Используя данные функции, не стоит отнимать или прибавлять месяца последовательно, так как это приведёт к неверному результату. Допустим необходимо к дате 31 января 2020г. прибавить 2 месяца.
Как в 1С прибавить к дате 1 день?
1. Дата в программе 1С
Дата в программе 1С – примитивный тип данных.
Дату можно задать прямо в коде программы 1С, в одинарных кавычках: первые 4 цифры — это год, затем 2 цифры — это месяц, и последние – день.
Дату можно задать командой Дата () и указать параметры этой команды в скобках, из которых будет сформирована дата.
Чтобы присвоить переменной «Дата» какое-либо значение, мы сначала определяем переменную, где будет храниться дата и присваиваем ей начальное значение 01.01.0001 00:00:00 – представление пустой даты.
В команде «Ввести Дату ()» указываем переменную, в которую будет помещено введенное значение.
Начальное или «Пустое» значение даты 1С можно вводить и так:
Дата () имеет формат год – месяц – день – час – минута – секунда, то есть дата содержит не только дату, но и время.
Текущую дату и время в системе можно получить следующим образом:
Явно указать нужную дату можно с помощью литералов встроенного языка запросов 1С «ГГГГММДДЧЧММСС», «20200825000012» – получим 25.08.2020 00:00:12
Либо через функцию Дата () или ДатаВремя ()\
Кроме того, в программах 1С возможно сложить две даты. Делается это следующим образом:
2. Прибавить к дате день в 1С – решение задачи
Выше мы перечислили основные манипуляции с типом данных Дата, изначально предусмотренные в 1С. Однако нет специальной встроенной функции, которая бы прибавляла к дате день в 1С, хотя у пользователей иногда возникает такая потребность. Далее попробуем разобраться, как реализовать подобное.
Итак, есть несколько вариантов решения этой задачи. Первый – прибавить к дате день в 1С при помощи оператора «+» секунды. Например, используя функцию КонецДня() :
Мы прибавляем секунду к 25.08.2020 23:59:59 и получаем следующий день 26.08.2020 00:00:00
Для прибавления целого дня, нужно прибавить количество секунд в одном дне.
Количество секунд в сутках 60*60*24 = 86400 секунд.
Второй способ – используя запрос:
Функция позволяет добавить и вычесть из даты нужное количество времени в произвольном количестве. ЕдиницаИзмерения – определяет единицу времени (год, месяц, день, час, минута, секунда).
Программирование в 1С для всех
В прошлой статье мы узнали, что такое дата и как с неё работать. В этой статье изучим основные функции работы с датами в 1С 8.3.
Текущая дата в 1С
В 1С имеется возможность получить текущую дату, ту дату, которая выставлена в данный момент в операционной системе компьютера. Делается это при помощи метода ТекущаяДата.
Этот метод является функцией, не имеет параметров и с его помощью можно получить текущую дату в 1С 8.3.
Посмотрим, что возвращает этот код
Как вы могли заметить, текущая дата получена в полном формате (год, месяц, день, час, минута и секунда), т.е. текущая дата у нас возвращается с точностью до секунды.
Определить год, месяц, день, час, минуту и секунду даты в 1С
В платформе 1С имеются методы, которые возвращают числовое представление года, месяца, дня, часа, минут и секунды определенной даты. Данные методы так и называются
Год( ) – возвращает год даты
Месяц( ) – возвращает месяц даты
День( ) – возвращает день даты
Час( ) – возвращает час даты
Минута( ) – возвращает минут даты
Секунда( ) – возвращает секунду даты
Рассмотрим пример, в котором возьмем текущую дату и вернем год, месяц, час, минуту и секунду этой даты.
И результат работы этого кода.
Дата начала и дата конца периода в 1С
В платформе 1С 8.3. имеется возможность определить начало и конец периода даты, которому она принадлежит.
Делается это при помощи следующих методов:
И противоположные методы:
Данные методы являются функциями, которые имеют один параметр с типом дата и возвращают соответствующую дату.
Рассмотрим пример, в котором будем получать начало и конец квартала текущей даты, начало и конец недели текущей даты, и начало и конец часа текущей даты. В этом примере будет шесть методов: НачалоКвартала, НачалоНедели, НачалоЧаса, КонецКвартала, КонецНедели, КонецЧаса. Остальные методы определения начала и конца периода работают аналогично.
И результат работы этих методов.
Неделя года, день года и день недели
Рассмотрим похожие функции, которые возвращают порядковый номер соответствующего периода, которому принадлежит дата.
НеделяГода( ) – возвращает порядковый номер недели в году, на которую приходится дата.
ДеньГода( ) – возвращает порядковый номер дня года указанной даты.
ДеньНедели( ) – возвращает порядковый номер дня недели указанной даты.
Сделаем пример, в котором у текущей даты определим какой день недели (понедельник, вторник и т.д.), какой день года, и какая неделя в году.
В этом примере я использовал условие, в котором в зависимости от того, что возвращал метод ДеньНедели выводил строкой нужное сообщение.
Добавить месяц к дате в 1С
В предыдущей статье мы научились добавлять к дате секунды (или вычитать из даты секунды). Делается это прибавлением к дате любого целого числового значения. Например, так:
В этом примере мы прибавили к дате 1 час. Но если нужно к какой-то дате прибавить месяц, то данный метод не всегда подойдет: в разных месяцах разное количество дней.
И если такая задача возникает, то нужно использовать метод ДобавитьМесяц. При помощи этого метода, можно добавить к дате или убавить от даты нужное количество месяцев.
Этот метод является функцией, возвращает переменную с типом дата и имеет следующий синтаксис:
Этот метод добавляет или вычитает из даты в первом параметре количество месяцев из второго параметра.
Рассмотрим пример: добавим к текущей дате месяц и год, а также вычтем из текущей даты месяц и год.
И результат этого кода:
Другие статьи о примитивных типах:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Функции для работы с датой в 1С
Получение частей даты
С помощью функций Год, Месяц, День, Час, Минута, Секунда из даты можно получить какую-либо ее часть:
День года и день недели
Функция День возвращает порядковый номер в месяце. То есть для 3 июня это будет 3. Функция ДеньГода вернет порядковый номер дня в году:
Для определения дня недели есть функция ДеньНедели, которая возвращает порядковый номер дня недели:
Начало и конец периода
Чтобы привести дату к началу определенного периода можно использовать функции НачалоМинуты, НачалоЧаса, НачалоДня, НачалоНедели, НачалоМесяца, НачалоКвартала, НачалоГода:
С помощью функций КонецМинуты, КонецЧаса, КонецДня, КонецНедели, КонецМесяца, КонецКвартала, КонецГода можно получить конец определенного периода:
Арифметические операции с датами
К дате можно прибавлять количество секунд, можно вычесть из одной даты другую, чтобы получить разность в секундах. Чтобы к одной дате прибавить или вычесть месяц можно использовать функцию ДобавитьМесяц:
Текущая дата
Функция ТекущаяДата возвращает системную дату компьютера. Может использоваться как на сервере, так и на клиенте. Причем если сервер и клиент это разные компьютеры и дата или время на них не совпадает, то данная функция вернет разные значения:
Часовые пояса
1С позволяет работать в одной информационной базе из разных часовых поясов. Часовой пояс может быть определен для:
Если часовой пояс не задан для сеанса, то используется часовой пояс информационной базы. Если для информационной базы часовой пояс тоже не задан, то используется часовой пояс сервера.
Часовой пояс информационной базы сохраняется в базе данных, часовой пояс сеанса должен устанавливаться при начале каждого сеанса.
Для установки часового пояса сеанса используется функция УстановитьЧасовойПоясСеанса. Чтобы получить текущее значение часового пояса сеанса предназначена функция ЧасовойПоясСеанса:
Для работы с часовым поясом информационной базы предназначены функции УстановитьЧасовойПоясИнформационнойБазы и ПолучитьЧасовойПоясИнформационнойБазы. Изменение часового пояса информационной базы возможно только в монопольном режиме. Чтобы изменение часового пояса информационной базы вступило в силу нужно перезайти в базу.
Чтобы получить часовой пояс сервера нужно использовать функцию ЧасовойПояс:
На сервере для получения текущей даты и времени нужно использовать функцию ТекущаяДатаСеанса. Данная функция получает дату и время с учетом часового пояса. То есть если сервер физически установлен в часовом поясе «Europe/Moscow», а подключение к нему выполняется из часового пояса «Asia/Krasnoyarsk», то функция ТекущаяДата вернет дату и время сервера, что не будет корректным. А если при старте сеанса в Красноярке установить часовой пояс «Asia/Krasnoyarsk», то функция ТекущаяДатаСеанса приведет время к часовому поясу сеанса пользователя.
Чтобы узнать все возможные часовые пояса можно воспользоваться функцией ПолучитьДопустимыеЧасовыеПояса. Данная функция вернет массив со всеми возможными часовыми поясами:
С помощью функции ПредставлениеЧасовогоПояса можно получить представление часового пояса:
Универсальная дата
С помощью функции ТекущаяУниверсальнаяДата можно получить дату и время UTC. С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить количество миллисекунд, начиная с 01.01.0001 года:
С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить замер времени в миллисекундах:
Также есть функции МестноеВремя и УниверсальноеВремя, которые позволяют получить местное время из универсального и универсальное время из местного:
Сравнение функций
Для сравнения функций работы с часовыми поясами представим, что есть информационная база, которая физически находится в Москве. Для данной базы методом УстановитьЧасовойПоясИнформационнойБазы был установлен часовой пояс «Europe/Moscow». А также есть пользователи из Красноярска, которые тоже работают с этой информационной базой. Для них при старте системы, в модуле сеанса устанавливается часовой пояс «Asia/Krasnoyarsk» с помощью метода УстановитьЧасовойПоясСеанса. Результаты представлены в таблице, вызовы всех функций были выполнены на сервере:
Программная работа с датой
Тип данных Дата позволяет привязывать события учета к шкале времени. Для этого значения типа Дата могут хранить три варианта даты:
На физическом уровне (в таблицах базы данных) тип Дата хранится в числовом виде, представляя количество секунд, прошедшее с 1 января 0001 года. Верхняя граница технически ограничена значением 31.12.3999 23:59:59
Дату в коде можно представить двумя способами:
Обратите внимание, что составные части даты имеют одну и ту же последовательность: год, месяц, день, час, минута, секунда. Схематично это можно представить так:
Операции с датой
Сложение
Поскольку дата на физическом уровне приводится к числовому значению, то прибавив к нему некоторое числовое значение, вы снова получите число. При сложении даты и числа, последнее воспринимается платформой, как количество прибавляемых секунд:
Здесь важно соблюдать последовательность операндов: на первом месте должна идти дата, а затем число. Например, следующий код будет ошибочным:
Причем, с ошибкой Вы столкнетесь только на этапе выполнения программы!
Вычитание
Вычитание — операция обратная от сложения. Это равноценно тому, что мы прибавляли бы к дате отрицательное значение. Здесь также важно соблюдать последовательность:
Кроме того, можно из одной даты, вычесть другую и мы получим длину интервала в секундах:
Склеивание (конкатенация)
В том случае, если вы работаете со строковыми представлениями даты, возможна обычная конкатенация (склеивание) строк:
Функции работы с датой
Дата() | функция преобразования к типу дата |
ТекущаяДата() | возвращает текущую дату |
НачалоДня() | возвращает дату и время начала дня для даты |
КонецДня() | возвращает дату и время конца дня для даты |
ДобавитьМесяц() | добавляет к дате целое число месяцев |
ДеньНедели() | возвращает номер дня недели для даты |
Внимание! В таблице перечислены не все функции работы с датой