Ввод и форматы дат в 1С 8.3: от поля документа до кода
Содержание
Дату в 1С вводят прямо в поле: наберите цифры 01012026 без точек — программа сама превратит их в 01.01.2026. Либо нажмите кнопку календаря справа от поля и выберите день мышью. Это работает одинаково во всех типовых конфигурациях на платформе 8.3 с интерфейсом «Такси».
Сложности начинаются не с ввода, а с нюансов: у даты в 1С внутри прячется время, из-за чего документ «пропадает» из отчёта; двузначный год подставляет не тот век; дата не сохраняется, потому что попала в закрытый период. Ниже — как заполнять дату правильно в поле, в отборе по периоду и в коде, и что делать, когда 1С её не принимает.
Что такое дата в 1С: день, время и пустое значение
В платформе 8.3 тип «Дата» хранит одновременно день и время — до секунды. Даже если на форме вы видите только 01.01.2026, внутри лежит значение 01.01.2026 00:00:00. Это ключевой момент, из которого растёт половина проблем с отборами и отчётами.
Поля на формах бывают трёх видов:
- 🗓️ только дата —
01.01.2026(большинство документов и справочников); - ⏱️ дата и время —
01.01.2026 14:30:00(регистры, журналы событий); - 📅 период — пара «с … по …» в отчётах и отборах.
Пустая дата отображается как 00.00.0000. Внутри это не ноль, а особое значение 01.01.0001 00:00:00 — самая ранняя дата, которую 1С умеет хранить. Проверять «дата не заполнена» нужно именно сравнением с пустой датой, а не с нулём.
Диапазон допустимых дат в платформе — с 01.01.0001 по 31.12.9999. На практике это значит, что любую реальную рабочую дату 1С примет без ограничений, но подставить «нулевую» дату вроде 01.01.1900 как признак пустоты не получится — для пустого значения есть отдельное 00.00.0000.
Если поле подсвечено рамкой и ждёт ввода, а вы хотите его очистить — выделите содержимое и нажмите Del. Поле вернётся к 00.00.0000.
Ручной ввод даты в поле документа
Самый быстрый способ — набрать дату цифрами подряд, без точек. 1С подставит разделители сама:
01012026→01.01.2026;1512→ день и месяц текущего года (15.12+ текущий год);15→ 15-е число текущего месяца и года.
Формат отображения в типовых конфигурациях — ДД.ММ.ГГГГ. Порядок всегда «день, месяц, год», независимо от региональных настроек Windows внутри 1С.
Альтернатива — кнопка календаря справа от поля (значок с клеткой). Она открывает выпадающий календарь: стрелками листаете месяцы, щелчком выбираете день. Удобно, когда нужна дата «пару месяцев назад» и лень считать.
Несколько приёмов, которые ускоряют работу:
- Стрелки
↑и↓в поле даты прибавляют и убавляют один день. +и–на цифровой клавиатуре — то же самое, на день вперёд/назад.Enterпосле ввода цифр фиксирует значение и переходит к следующему полю.
Если ввести несуществующую дату — например 31.02.2026 — поле подсветится и не примет значение. 1С не «округляет» до 28-го, а просит исправить.
Рабочая дата: откуда 1С берёт дату по умолчанию
Когда вы создаёте новый документ, 1С подставляет в поле даты рабочую дату. По умолчанию это текущая дата компьютера. Но её можно зафиксировать — это спасает, когда вы весь день заводите документы задним числом за прошлый месяц и не хотите каждый раз править дату вручную.
Настройка живёт здесь: Главное меню (значок в левом верхнем углу) → Сервис → Параметры. В открывшемся окне — блок «Рабочая дата» с двумя вариантами:
- использовать текущую дату компьютера (поведение по умолчанию);
- использовать значение — и вы задаёте конкретную дату.
После этого все новые документы будут создаваться с выбранной датой, пока вы не вернёте настройку обратно. Название пункта в вашей сборке может немного отличаться, но находится он всегда в параметрах программы.
Отбор по периоду: почему документ «пропадает» из отчёта
Самая частая жалоба: документ есть, дата входит в период отчёта, а в отчёте его нет. Причина — то самое скрытое время.
Когда вы ставите период «по 31.01.2026», 1С понимает конец периода как 31.01.2026 00:00:00 — то есть самое начало дня. Документ, созданный 31 января в 31.01.2026 10:15:00, в этот интервал уже не попадает.
Типовые отчёты эту ловушку обходят сами: при выборе периода «по дату» они автоматически берут конец дня (23:59:59). А вот ручной отбор в списке документов или в консоли запросов — нет. Там границу периода нужно задавать с запасом.
Как правильно задавать период:
| Что нужно | Как задать интервал |
|---|---|
| Весь январь 2026 | с 01.01.2026 00:00:00 по 31.01.2026 23:59:59 |
| Один день 31.01 | с 31.01.2026 00:00:00 по 31.01.2026 23:59:59 |
| «По сегодня включительно» | конец периода — конец дня, а не 00:00:00 |
В стандартных полях выбора периода (в отчётах) есть готовые варианты: «Этот месяц», «Прошлый квартал», «Произвольный период». Они уже учитывают границы дня — пользуйтесь ими вместо ручного ввода, где это возможно.
Ещё один источник путаницы — отбор по полю даты в динамическом списке (журнале документов). Если щёлкнуть по колонке «Дата» и задать условие «равно 31.01.2026», список сравнит значение с 31.01.2026 00:00:00 и покажет только те записи, у которых время ровно нулевое. Для журнала документов надёжнее отбор «в интервале» с нижней и верхней границей дня, а не «равно».
Даты в коде: функции для разработчика
Если вы пишете на встроенном языке, дату задают литералом в одинарных кавычках или функцией Дата():
// Литерал: год, месяц, день (время можно не указывать)
ДатаНачала = '20260101';
ДатаСоВременем = '20260101143000'; // 01.01.2026 14:30:00
// Функция Дата — удобна, когда части даты в переменных
Дата1 = Дата(2026, 1, 1);
Дата2 = Дата(2026, 1, 15, 14, 30, 0);
// Пустая дата
ПустаяДата = '00010101';
Текущую дату берут так: на сервере — ТекущаяДата(), в клиентском коде управляемого приложения — ТекущаяДатаСеанса(). Обе возвращают дату вместе со временем.
Для работы с границами периодов в платформе есть готовые функции — не надо вычислять их вручную:
НачалоМесяца(ТекущаяДата()) // 1-е число, 00:00:00
КонецМесяца(ТекущаяДата()) // последний день, 23:59:59
НачалоДня(Дата) // этот день, 00:00:00
КонецДня(Дата) // этот день, 23:59:59
НачалоГода(Дата) // 1 января, 00:00:00
НачалоКвартала(Дата) // 1-е число квартала
ДобавитьМесяц(Дата, 3) // +3 месяца с учётом длины месяцев
Именно КонецДня() закрывает проблему из прошлого раздела: граница периода в коде должна быть КонецДня(ДатаПо), иначе документы последнего дня выпадут.
Чтобы вытащить из даты отдельную часть — число, месяц или год — есть парные функции:
Год(Дата) // 2026
Месяц(Дата) // 1
День(Дата) // 31 (число месяца)
Час(Дата) // 14
ДеньНедели(Дата) // 1 — понедельник, 7 — воскресенье
Разницу между датами получают вычитанием — результат в секундах:
РазницаВСекундах = Дата2 - Дата1;
РазницаВДнях = (Дата2 - Дата1) / 86400; // 86400 секунд в сутках
Отформатировать дату для вывода пользователю помогает функция Формат:
Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") // 01.01.2026
Формат(ТекущаяДата(), "ДЛФ=D") // 1 января 2026 г.
Формат(ТекущаяДата(), "ДФ=MMMM yyyy") // январь 2026
Не склеивайте дату со строкой напрямую — используйте Формат() или СтрШаблон("Отчёт за %1", Формат(Дата, "ДЛФ=DD")). Иначе в текст попадёт техническое представление со временем.
Строка и дата: преобразование при загрузке данных
Когда данные приходят из внешнего файла (CSV, выгрузка из банка, обмен с другой программой), дата в них — это текст. Чтобы записать её в поле типа «Дата», строку нужно преобразовать.
Если строка уже в «склеенном» формате ГГГГММДД, её принимает тот же литерал через функцию Дата:
// Строка "20260131" → дата
ДатаИзСтроки = Дата("20260131");
Но файлы чаще отдают дату «по-человечески» — 31.01.2026 или 2026-01-31. Такую строку сначала разбирают на части (день, месяц, год), а потом собирают функцией Дата():
// Разбор строки "31.01.2026"
Части = СтрРазделить("31.01.2026", ".");
ДатаИзСтроки = Дата(Число(Части[2]), Число(Части[1]), Число(Части[0]));
Обратная задача — выгрузить дату строкой — решается через Формат() с нужным шаблоном: для обмена обычно берут машинный формат "ДФ=yyyy-MM-dd" (ISO), для печати — человекочитаемый.
При загрузке из текста легко перепутать местами день и месяц — например 03.04.2026 в одном источнике значит 3 апреля, в другом 4 марта. Всегда уточняйте формат исходного файла до массовой загрузки, иначе получите тысячи документов с неверными датами.
Для разовой проверки, что строка вообще конвертируется в дату, удобна обработка попытки: оберните Дата(...) в Попытка … Исключение, чтобы «мусорные» строки не прерывали загрузку всего файла.
Дата запрета изменения: когда период закрыт
Если дата документа не сохраняется или программа ругается, что период закрыт, — скорее всего, включена дата запрета изменения данных. Это защита от правок задним числом в уже сданных периодах.
Посмотреть и настроить её можно здесь (в «1С:Бухгалтерии» и «1С:Зарплате и управлении персоналом»): Администрирование → Настройки пользователей и прав → Даты запрета изменения. Там задают предельную дату — раньше неё редактировать и проводить документы
нельзя (либо можно только отдельным пользователям).
Варианты, которые встречаются:
- общая дата для всех пользователей и всех разделов учёта;
- по разделам — отдельно для продаж, зарплаты, банка;
- по организациям — если в базе ведут несколько юрлиц.
Если дату нужно поставить в закрытый период осознанно (нашли ошибку в прошлом квартале) — либо сдвиньте дату запрета, либо попросите об этом администратора. Не отключайте запрет «на всякий случай»: он защищает уже сформированную отчётность от случайных правок.
Почему 1С не принимает дату: разбор ошибок
Пройдитесь по симптому — рядом причина и что проверить.
Отдельно про последовательность документов внутри одного дня. Если за одну дату заведено несколько документов, 1С расставляет им время автоматически — чтобы движения в регистрах шли в правильном порядке. Поэтому вручную время в поле документа обычно не задают: его распределяет сама программа.
Частые вопросы
Как ввести дату задним числом?
Что означает дата `00.00.0000`?
01.01.0001. Встречается, когда поле необязательное и его оставили пустым.Почему при вводе `01.01.26` год стал 1926, а не 2026?
Можно ли изменить дату у уже проведённого документа?
Как в коде получить первый и последний день месяца?
НачалоМесяца(Дата) и КонецМесяца(Дата). Первая вернёт 1-е число с временем 00:00:00, вторая — последний день месяца с временем 23:59:59.