Как указать дату в 1с
Дата публикации 22.09.2023
Использован релиз 3.0.142
При создании новых документов дата создания всегда совпадает с рабочей датой программы. Дату в документе можно изменить и записать, провести документ с измененной датой. Рабочая дата, как правило, совпадает с текущей датой компьютера.
Если вводится большое количество документов с датой, отличной от текущей, то на период такой работы удобно в качестве рабочей даты программы установить произвольную дату:
- Раздел: Главное – Персональные настройки.
- В открывшейся форме установите переключатель «Рабочая дата» в положение:
- «Другая дата» – если необходимо установить произвольную дату, отличную от текущей даты компьютера (все документы будут создаваться на указанную произвольную дату).
- «Текущая дата компьютера» – если необходимо вернуть текущую дату компьютера для автоматической подстановки в новые документы (все документы будут создаваться на текущую дату компьютера).
Подпишитесь на новости
Не пропускайте последние новости — подпишитесь
на бесплатную рассылку сайта:- десятки экспертов ежедневно мониторят изменения законодательства и судебную практику;
- рассылка бесплатная, независимо от наличия договора 1С:ИТС;
- ваш e-mail не передается третьим лицам;
Как указать дату в 1с
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.Полный синтаксис (нажмите, чтобы раскрыть)
Дата
Значения данного типа содержит дату григорианского календаря (с 01 января 0001 года) и время с точностью до 0,1 миллисекунды.
Литералы:
Строка цифр, заключенная в одинарные кавычки вида: ‘ГГГГММДДччммсс’, где:
- ГГГГ — четыре цифры года (включая тысячелетие и век);
- ММ — две цифры месяца;
- ДД — две цифры даты;
- чч — две цифры часа (в 24-х часовом формате);
- мм — две цифры минут;
- сс — две цифры секунд;
Во встроенном языке в литерале типа Дата обязательно должно задаваться значение года, месяца и дня. Для задания даты соответствующей началу отсчета достаточно указать ‘00010101’. Допускается при указании литералов типа Дата опускать последние символы (секунды, минуты, часы и т.д.). Это означает, что данные параметры будут равны нулю (для времени) или единице (для даты). В литерале даты допускается использование различных разделителей.
Оглавление (нажмите, чтобы раскрыть)
- Как инициализировать дату константой
- Как преобразовать строку в дату
- Как инициализировать дату отдельными компонентами
- Как указать в дате часы, минуты и секунды
- Как узнать год (месяц, день, час, минута, секунда) у даты
- Как получить текущую дату
- Операции с датой
- Вспомогательные функции для работы с датой
- Скачать и выполнить эти примеры на компьютере
&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как инициализировать дату константой в 1с 8.3, 8.2 МояДата = '20130724'; // 24.07.2013 /// Как преобразовать строку в дату в 1с 8.3, 8.2 МояДата = Дата("20130724"); // 24.07.2013 /// Как инициализировать дату отдельными компонентами в 1с 8.3, 8.2 МояДата = Дата(2013, 07, 24); // 24.07.2013 /// Как указать в дате часы, минуты и секунды в 1с 8.3, 8.2 МояДата = '20130724132506'; // 24 июля 2013 г. 13 ч. 25 мин. 6 сек. /// Как узнать год (месяц, день, час, минута, секунда) у /// даты в 1с 8.3, 8.2 Г = Год(МояДата); // 2013 М = Месяц(МояДата); // 7 Д = День(МояДата); // 24 Ч = Час(МояДата); // 13 Ми = Минута(МояДата); // 25 С = Секунда(МояДата); // 6 /// Как получить текущую дату в 1с 8.3, 8.2 Сообщить(ТекущаяДата()); /// Операции с датой в 1с 8.3, 8.2 Сообщить(ТекущаяДата() + 1); // прибавили секунду Сообщить(ДобавитьМесяц(ТекущаяДата(), 1)); // прибавили месяц Сообщить(ДобавитьМесяц(ТекущаяДата(), -1)); // отняли месяц /// Вспомогательные функции для работы с датой в 1с 8.3, 8.2 МояДата = '20130110125905'; // 10 января 2013 года 12:59:05 Сообщить(ДеньГода(МояДата)); // 10 Сообщить(ДеньНедели(МояДата)); // 4 т.е. четверг (нумерация с понедельника) Сообщить(НеделяГода(МояДата)); // 2 Сообщить(НачалоГода(МояДата)); // 01.01.2013 0:00:00 Сообщить(КонецГода(МояДата)); // 31.12.2013 23:59:59 Сообщить(НачалоКвартала(МояДата)); // 01.01.2013 0:00:00 Сообщить(КонецКвартала(МояДата)); // 31.03.2013 23:59:59 Сообщить(НачалоМесяца(МояДата)); // 01.01.2013 0:00:00 Сообщить(КонецМесяца(МояДата)); // 31.01.2013 23:59:59 Сообщить(НачалоНедели(МояДата)); // 07.01.2013 0:00:00 Сообщить(КонецНедели(МояДата)); // 13.01.2013 23:59:59 Сообщить(НачалоДня(МояДата)); // 10.01.2013 0:00:00 Сообщить(КонецДня(МояДата)); // 10.01.2013 23:59:59 Сообщить(НачалоЧаса(МояДата)); // 10.01.2013 12:00:00 Сообщить(КонецЧаса(МояДата)); // 10.01.2013 12:59:59 Сообщить(НачалоМинуты(МояДата)); // 10.01.2013 12:59:00 Сообщить(КонецМинуты(МояДата)); // 10.01.2013 12:59:59 КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Работа с типом Дата в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
1С 8.3 Дата и время — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С
Дата в 1С 8.3 — это примитивный тип данных, который всегда имеет формат: год, месяц, день, час, минута, секунда. Поэтому переменная типа дата содержит не только дату, но и время. Простой способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках вида ‘ГГГГММДДччммсс’ (если часы, минуты и секунды не указывать, то они приравниваются к 00:00:00) где:
ГГГГ — четыре цифры года (включая тысячелетие и век);
ММ — две цифры месяца;
ДД — две цифры даты;
чч — две цифры часа (в 24-х часовом формате);
мм — две цифры минут;
сс — две цифры секунд.
Оглавление:

✔ Работа с датой и временем
Работа с датой и временем в 1С 8.3:
&НаКлиенте
Процедура РаботаСДатойИВременем ( Команда )// Установка даты в переменную
ТолькоДата = ‘20200415’ ; // 15.04.2020// Преобразование строки в дату
ТолькоДата = Дата ( «20200415» ); // 15.04.2020// Преобразование чисел в дату отдельными частями
ТолькоДата = Дата ( 2020 , 04 , 15 ); // 15.04.2020// Установка в дате: часы, минуты и секунды
ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16 ч. 27 мин. 03 сек.// Получение года (месяца, дня, часа, минуты, секунды) у даты
Год_Даты = Год ( ДатаВремя ); // 2020
Месяц_Даты = Месяц ( ДатаВремя ); // 4
День_Даты = День ( ДатаВремя ); // 15
Час_Даты = Час ( ДатаВремя ); // 16
Минута_Даты = Минута ( ДатаВремя ); // 27
Секунда_Даты = Секунда ( ДатаВремя ); // 03// Прибавление к дате 3 секунды
Сообщить ( ДатаВремя + 3 ); // 15.04.2020 16:27:06// Прибавление к дате два месяца
Сообщить ( ДобавитьМесяц ( ДатаВремя , 2 )); // 15.06.2020 16:27:03// Вычитание от даты одного месяца
Сообщить ( ДобавитьМесяц ( ДатаВремя , — 1 )); // 15.03.2020 16:27:03// Получение текущей (рабочей) даты
Сообщить ( ТекущаяДата ());Прибавить день к дате или вычесть день из даты в 1С 8.3:
// вариант 1:
&НаКлиенте
Процедура ОперацииДеньДата ( Команда )Сообщить ( МатематикаДень ( ‘20200415’ , 1 )); //16.04.2020 0:00:00
Сообщить ( МатематикаДень ( ‘20200415’ , — 1 )); //14.04.2020 0:00:00&НаКлиенте
Функция МатематикаДень ( Дата , ЧислоДней )Возврат Дата + 86400 * ЧислоДней ; // 86400 сек.
// или вариант 2 (менее универсальный):
&НаКлиенте
Функция ПолучитьСледующийДень ( Дата )// с помощью функции КонецДня прибавляем секунду к 15.04.2020 23:59:59
Возврат КонецДня ( Дата )+ 1 ; // и получаем следующий день 16.04.2020 00:00:00
КонецФункции
Дополнительные функции при работе с датой в 1С 8.3:&НаКлиенте
Процедура ДополнительныеФункцииДаты ( Команда )// Указываем дату явно:
ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16:27:03
//или
ДатаВремя = ‘2020.04.15:16:27:03’ ; // 15 апреля 2020 г. 16:27:03Сообщить ( ДеньГода ( ДатаВремя )); // 15
Сообщить ( ДеньНедели ( ДатаВремя )); // 3 — Среда (нумерация с понедельника «1»)
Сообщить ( НеделяГода ( ДатаВремя )); // 3 Неделя
Сообщить ( НачалоГода ( ДатаВремя )); // 01.01.2020 0:00:00
Сообщить ( КонецГода ( ДатаВремя )); // 31.12.2020 23:59:59Сообщить ( НачалоКвартала ( ДатаВремя )); // 01.04.2020 0:00:00
Сообщить ( КонецКвартала ( ДатаВремя )); // 30.06.2020 23:59:59Сообщить ( НачалоМесяца ( ДатаВремя )); // 01.04.2020 0:00:00
Сообщить ( КонецМесяца ( ДатаВремя )); // 30.04.2020 23:59:59Сообщить ( НачалоНедели ( ДатаВремя )); // 13.04.2020 0:00:00
Сообщить ( КонецНедели ( ДатаВремя )); // 19.04.2020 23:59:59Сообщить ( НачалоДня ( ДатаВремя )); // 15.04.2020 0:00:00
Сообщить ( КонецДня ( ДатаВремя )); // 15.04.2020 23:59:59Сообщить ( НачалоЧаса ( ДатаВремя )); // 15.04.2020 16:00:00
Сообщить ( КонецЧаса ( ДатаВремя )); // 15.04.2020 16:59:59Сообщить ( НачалоМинуты ( ДатаВремя )); // 15.04.2020 16:27:00
Сообщить ( КонецМинуты ( ДатаВремя )); // 15.04.2020 16:27:59Преобразование в дату десятисимвольной строки в 1С 8.3:
&НаКлиенте
Процедура ПреобразованиеВДатуСтроки10Симв ( Команда ) // «15.04.2020» преобразуем в ‘15.04.2020 0:00:00’// Строковая дата без времени преобразовывается в дату со временем:
СтрокаДаты = «15.04.2020» ;
ТолькоДата = Дата ( Сред ( СтрокаДаты , 7 , 4 )+ Сред ( СтрокаДаты , 4 , 2 )+ Сред ( СтрокаДаты , 0 , 2 )); // формат даты ‘15.04.2020 0:00:00’Проверка на пустое значение даты (заполнение) в 1С 8.3:
&НаКлиенте
Процедура ПроверкаНаПустоеЗначениеДаты ( Команда )//способ №1
Если ПустаяДата = ‘00010101’ Тогда // или ‘00010101000000’
Сообщить ( «Эта дата пустая» );
КонецЕсли;//способ №2
Если ПустаяДата = ‘0001–01–01’ Тогда
Сообщить ( «Эта дата пустая» );
КонецЕсли;//способ №3
Если ПустаяДата = Дата ( 1 , 1 , 1 ) Тогда // или Дата(1, 1, 1, 0, 0, 0)
Сообщить ( «Эта дата пустая» );
КонецЕсли;//способ №4
Если НЕ ЗначениеЗаполнено ( ПустаяДата ) Тогда
Сообщить ( «Эта дата пустая» );
КонецЕсли;Проверка на пустое значение даты в Запросе в 1С 8.3:
&НаСервере
Процедура ПроверкаНаПустоеЗначениеДатыВЗапросе ( Команда )//способ №1
Запрос = Новый Запрос ( «ВЫБРАТЬ
| ДатаРегистрацииЕГР
| ИЗ
| Справочник.Контрагенты
| ГДЕ
| ДатаРегистрацииЕГР = &ПустаяДата» ;
Запрос . УстановитьПараметр ( «ПустаяДата» , ‘00010101’ );//способ №2
Запрос = Новый Запрос ( «ВЫБРАТЬ
| ДатаРегистрацииЕГР
| ИЗ
| Справочник.Контрагенты
| ГДЕ
| ДатаРегистрацииЕГР = ДАТАВРЕМЯ(1,1,1,0,0,0)» ;
// или ДАТАВРЕМЯ(0001,01,01,0,0,0) или ДАТАВРЕМЯ(1,1,1)РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;Сложение двух дат в 1С 8.3:
&НаКлиенте
Функция СложениеДат ( Команда )ПустаяДата = ‘00010101’ ;
Дата1 = ‘20200415’ ; // 15.04.2020
Дата2 = ‘20220214’ ; // 14.02.2022Результат = ПустаяДата + ( Дата1 — ПустаяДата ) + ( Дата2 — ПустаяДата );
Сообщить ( «Дата fs10lh1-5 cf2″>+ Результат ); // Дата = 29.05.4041 0:00:00
Сравнение двух дат в 1С 8.3:
&НаКлиенте
Процедура СравнениеДат ( Команда )Дата1 = ‘20200415’ ; // 15.04.2020
Дата2 = ‘20200415’ ; // 15.04.2020Если Дата1 . Сравнить ( Дата2 ) = 0 Тогда
Сообщить ( «Даты равны» );
КонецЕсли;Расчет количества дней между датами в 1С 8.3:
&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатами ( Команда )ДатаНач = ‘20200415’ ;
ДатаКон = ‘20200417’ ;РазницаВСекундах = ДатаКон — ДатаНач ; // 172800 секунды
РазницаВДнях = Цел ( РазницаВСекундах / 86400 ); // 2 дняРасчет количества дней между датами ЗАПРОСОМ в 1С 8.3:
&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатамиЗапросом ( Команда )ДатаНач = ‘20200415’ ;
ДатаКон = ‘20200417’ ;Сообщить ( РазницаДатНаСервере ( ДатаНач , ДатаКон , «ДЕНЬ» )); //2 дня
&НаСервере
Функция РазницаДатНаСервере ( ДатаНач , ДатаКон , СтрПериод )//СтрПериод — может быть «ДЕНЬ», «НЕДЕЛЯ», «МЕСЯЦ», «ГОД»
Запрос = Новый Запрос ( «ВЫБРАТЬ РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, » + СтрПериод + «) КАК РазностьДат» );
Запрос . УстановитьПараметр ( «ДатаНач» , ДатаНач );
Запрос . УстановитьПараметр ( «ДатаКон» , ДатаКон );Возврат Запрос . Выполнить (). Выгрузить ()[ 0 ]. РазностьДат ;
Узнать текущую дату в миллисекундах в 1С 8.3:
&НаКлиенте
Процедура УзнатьТекущуюДатуВМиллисекундах ( Команда )Сообщить ( ТекущаяУниверсальнаяДатаВМиллисекундах ()); //79 452 791 027 745
// Примечание: не совершайте чужих ошибок:
//
// Чтобы упорядочить данные в порядке поступления, разработчик добавил измерение МоментВремени И заполнил его// из ТекущаяУниверсальнаяДатаВМиллисекундах(). При поступлении пакета разные наборы данных зарегистрировались одной миллисекундой
// (см.скриншот ниже).
//
// Всё работало, до тех пор, пока в обмен не добавили сценарий «удаляем данные, затем добавляем данные».// Появилась плавающая ошибка — часть данных теряется. На самом деле данные сперва приходят, потом удаляются, т.к. нарушен порядок.
//
// Вывод: точности миллисекунд может быть недостаточно.// Вариант решения, например — добавить поле с порядковым номером записи, по всем записям или в рамках секунды.
Момент времени в 1С 8.3:
// Момент времени — комбинация даты и ссылки на документ.
// Момент времени используется в тех случаях, когда важно различать моменты времени для объектов,
// имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.
// То есть позволяет разделить и упорядочить документы в пределах одной секунды,
// выстраивая все документы в однозначную последовательность.
// Получение данных при проведении на момент времени гарантирует,
// что будут учтены движения сделанные в ту же секунду что и проводимый документ,
// но находящиеся перед ним.
// Но есть особенность — документы проведенные в одну и ту же секунду располагаются
// в произвольном порядке, а не в порядке их физического создания (как было в 7.7).Функция СравнитьДваДокумента ( Док1 , Док2 )
// У «Док1» и «Док2» одинаковая дата и время: 15.04.2020 23:59:59
РезультатСравнения = Док1 . МоментВремени (). Сравнить ( Док2 . МоментВремени () );Сообщить ( РезультатСравнения );
Возврат РезультатСравнения ;// Распространенная ошибка в формировании движений документов по регистрам:
// Не знать, что в 1 секунде времени может быть несколько тысяч документов, и для определения последовательности
// использовать поле «Дата» из документа. Необходимо использовать МоментВремени(), который равен Дата + Ссылка.
// И еще нужно иметь ввиду, что Ссылка — это не только УИД, но и идентификатор типа документа.
// Поэтому при упорядочивании внутри одной секунды сначала идут документы одного типа, а потом уже другого.
Работа с датами в 1С
Дата в 1С один из примитивных типов данных в системе. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Очевидно, что очень часто программистам приходится работать с датой и временем и естественно, по мере работы возникают вопросы, ответы на которые приходится где то искать. Я накидал для себя небольшую шпаргалку по работе с датами.
Хранение дат в системе
В базе данных даты хранятся с точностью до секунд. Для реквизитов типа “дата” можно установить вариант хранения “дата и время”, “только дата”, “только время”.
Переменные типа “дата” всегда представляют дату с секундами. Отсчет дат ведется с Рождества Христова (наша эра), т.е. с 01.01.0001 00:00:00 по Григорианскому календарю. Начальная дата – это не совсем дата. Это значение в системе используется для представления “пустой даты” (аналог пустой ссылки для ссылочных типов или пустой строки “” для строкового типа).
Максимальная дата – 31.12.3999 23:59:59
Как получить текущую дату и время?
Дата = ТекущаяДата();
Как явно указать нужную дату?
- Литералом встроенного языка вида ‘ГГГГММДДччммсс’ :
'20201103160457' // вернет значение 03.11.2020 16:04:57 '2021.05.09:11:00:05' // получим 09.05.2021 11:00:05
- Функцией глобального контекста Дата():
Дата(2020, 06, 4, 18,45, 23) // вернет значение 04.06.2020 18:45:23 Дата(2021, 2, 16) // вернет значение 16.02.2021 0:00:00
- Если нам необходимо в тексте запроса указать конкретную дату — тогда используем литерал ДАТАВРЕМЯ():
ДАТАВРЕМЯ(2019, 10, 04)
Пустая дата в 1С
В текстах модулей
Дата
Запрос Запрос
