Ввод и форматы дат в 1С 8.3: от поля документа до кода

· 9 мин

Содержание

Дату в 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С.

Альтернатива — кнопка календаря справа от поля (значок с клеткой). Она открывает выпадающий календарь: стрелками листаете месяцы, щелчком выбираете день. Удобно, когда нужна дата «пару месяцев назад» и лень считать.

Несколько приёмов, которые ускоряют работу:

  1. Стрелки ↑ и ↓ в поле даты прибавляют и убавляют один день.
  2. + и – на цифровой клавиатуре — то же самое, на день вперёд/назад.
  3. Enter после ввода цифр фиксирует значение и переходит к следующему полю.

Если ввести несуществующую дату — например 31.02.2026 — поле подсветится и не примет значение. 1С не «округляет» до 28-го, а просит исправить.

Рабочая дата: откуда 1С берёт дату по умолчанию

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

Настройка живёт здесь: Главное меню (значок в левом верхнем углу) → Сервис → Параметры. В открывшемся окне — блок «Рабочая дата» с двумя вариантами:

  • использовать текущую дату компьютера (поведение по умолчанию);
  • использовать значение — и вы задаёте конкретную дату.

После этого все новые документы будут создаваться с выбранной датой, пока вы не вернёте настройку обратно. Название пункта в вашей сборке может немного отличаться, но находится он всегда в параметрах программы.

Ввод даты без ошибок
Выполнено: 0 / 4

Отбор по периоду: почему документ «пропадает» из отчёта

Самая частая жалоба: документ есть, дата входит в период отчёта, а в отчёте его нет. Причина — то самое скрытое время.

Когда вы ставите период «по 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С трактует двузначный год по внутреннему правилу, и результат не всегда тот, что вы ожидаете. Надёжный способ — всегда вводить год полностью, четырьмя цифрами.
Можно ли изменить дату у уже проведённого документа?
Да. Измените дату и перепроведите документ. Учтите, что при смене даты может сдвинуться последовательность движений — после правки имеет смысл перепровести документы периода, если в базе есть зависимые расчёты.
Как в коде получить первый и последний день месяца?
Функциями НачалоМесяца(Дата) и КонецМесяца(Дата). Первая вернёт 1-е число с временем 00:00:00, вторая — последний день месяца с временем 23:59:59.