К статье
Практический материал

Разработка и Конфигурация · 10 мин

00010101000000 в 1С: что это за значение и как с ним работать

Разбираем, что означает 00010101000000 в 1С — пустая дата 01.01.0001. Как проверить, очистить и исправить такое значение в запросах и документах.

Строка 00010101000000 в 1С — это внутреннее представление пустой даты: 1 января 0001 года, 0 часов 0 минут 0 секунд. Формат читается как ГГГГММДДЧЧММСС: год 0001, месяц 01, день 01, время 00:00:00. Такое значение появляется, когда реквизиту типа «Дата» не присвоено конкретное значение — программа заполняет его датой по умолчанию.

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

В большинстве случаев 00010101000000 — не сбой, а штатное поведение платформы. Однако если такая «дата» попадает в печатные формы, отчёты контрагентам или регламентированную отчётность, ситуацию нужно исправлять: либо заполнять реквизит реальным значением, либо корректно обрабатывать пустоту в коде и макетах.

Как расшифровать строку 00010101000000

Структура значения проста и повторяет общепринятый формат сериализации даты-времени. Первые четыре цифры — год (0001), следующие две — месяц (01), затем день (01), часы (00), минуты (00) и секунды (00). Итог: полночь 1 января 1 года — минимально возможная дата в календарной системе платформы.

Во встроенном языке 1С тому же значению соответствует литерал '00010101' или '00010101000000'. Разработчики используют его как константу «пустой даты» при сравнениях: если реквизит равен этому литералу, значит, дата не заполнена.

Важно не путать пустую дату с NULL. В запросах 1С NULL — это отсутствие значения в соединении таблиц, а '00010101' — вполне конкретное значение, хранящееся в поле. Проверки ЕСТЬ NULL и сравнение с пустой датой дают разные результаты, и смешение этих подходов — частая причина ошибок в запросах.

Где встречается это значение на практике

Первый типичный источник — файлы обмена и выгрузки XML. При сериализации объектов пустая дата записывается в узел как 0001-01-01T00:00:00 или в «плоском» виде 00010101000000. Если выгрузку открыть текстовым редактором, такие значения бросаются в глаза.

Второй источник — прямой просмотр таблиц базы данных средствами СУБД (SQL Server Management Studio, pgAdmin и подобные). В полях типа datetime незаполненные даты хранятся именно как 01.01.0001, и при выборке они отображаются в сыром виде.

Третий источник — отчёты и печатные формы с небрежно написанным кодом. Если разработчик вывел реквизит даты без проверки на заполненность, пользователь увидит в документе «01.01.0001» или строку цифр вместо ожидаемой даты оплаты, отгрузки или рождения.

Наконец, значение встречается в журналах обмена, сообщениях об ошибках конвертации и при отладке кода, когда переменная типа «Дата» объявлена, но не инициализирована.

Значение в XML-обменеНорма

Проверить, что при загрузке в базу-приёмник поле корректно трактуется как пустое

Значение в печатной формеДефект кода

Найти место вывода и добавить проверку на пустую дату

Значение в таблице СУБДНорма хранения

Не редактировать напрямую, исправлять через интерфейс 1С

Значение в регламентированном отчётеРиск сдачи отчётности

Заполнить реквизит реальной датой и пересформировать отчёт

Как проверить реквизит на пустую дату в коде

Классическая проверка во встроенном языке выглядит так: Если РеквизитДата = '00010101' Тогда .... Литерал сравнивается со значением реквизита, и при совпадении выполняется ветка обработки незаполненного поля. Это самый распространённый и надёжный способ.

Альтернатива — функция ЗначениеЗаполнено(РеквизитДата). Она возвращает Ложь для пустой даты, пустой строки, нуля и незаполненных ссылок. Универсальный вариант удобен, когда тип реквизита заранее неизвестен, но для строгой логики сравнение с литералом читается точнее.

В языке запросов проверка выглядит иначе: ГДЕ Документ.ДатаОплаты = &ПустаяДата, где параметр &ПустаяДата устанавливается как Запрос.УстановитьПараметр("ПустаяДата", '00010101'). Либо используется литерал ДАТАВРЕМЯ(1,1,1,0,0,0) прямо в тексте запроса.

bsl
Если Заказ.ДатаОтгрузки = '00010101' Тогда
    Сообщить("Дата отгрузки не заполнена");
Иначе
    Сообщить(Формат(Заказ.ДатаОтгрузки, "ДЛФ=D"));
КонецЕсли;

Как корректно вывести пустую дату в отчётах и печатных формах

Главное правило: не выводить сырое значение реквизита без проверки. Перед помещением даты в макет или параметр СКД убедитесь, что она заполнена. Если поле пустое, выводите пустую строку, прочерк или осмысленный текст вроде «не указана».

Функция Формат() с параметром позволяет задать представление пустой даты: Формат(ДатаЗначение, "ДЛФ=D; ДП='-'"). Параметр ДП (дата пустая) подставляет указанную строку вместо 01.01.0001. Это самый короткий способ избавиться от нулей в печатной форме без дополнительных условий.

В СКД аналогичную задачу решает выражение в поле компоновки: ВЫБОР КОГДА Дата = ДАТАВРЕМЯ(1,1,1) ТОГДА "" ИНАЧЕ Дата КОНЕЦ. Такой подход централизует логику в схеме и не требует изменения модулей.

Типичные ошибки при работе со значением

Первая ошибка — сравнение даты с пустой строкой или нулём вместо литерала '00010101'. Такое сравнение не выявит пустую дату, и ветка обработки просто не сработает.

Вторая ошибка — использование проверки ЕСТЬ NULL там, где нужно сравнение с пустой датой. NULL возникает в левых соединениях при отсутствии связанной записи, а пустая дата хранится в самом поле. Это разные ситуации, требующие разных условий в одном запросе иногда одновременно.

Третья ошибка — арифметика с пустой датой без проверки. Вычитание 01.01.0001 из реальной даты даёт огромное число дней, которое потом попадает в расчёты просрочки или стажа и искажает результат до абсурда.

Типичные ошибки
01
Сравнение с "" или 0 вместо '00010101' — проверка никогда не срабатывает
02
Смешение NULL и пустой даты в запросе — часть записей теряется из выборки
03
Расчёт разницы дат без проверки заполненности — в отчёт попадают миллионы дней просрочки
04
Вывод даты в макет без Формат() — пользователь видит 01.01.0001 в документе
05
Массовое исправление без резервной копии — невозможно откатить ошибочные изменения

Проверка результата после исправлений

После доработки кода или заполнения данных убедитесь, что исправление сработало во всех сценариях. Минимальный набор: документ с заполненной датой выводится корректно, документ без даты показывает прочерк или пустоту, а не 01.01.0001.

Для запросов проверьте, что выборка с условием на пустую дату возвращает ожидаемое число записей и не теряет строки из-за смешения NULL и пустого значения. Полезно сравнить количество записей до и после изменения условия.

Контрольные точки

Как проверить результат

Печатная форма с пустой датой
Норма

Отображается прочерк или пустая ячейка

Тревожный признак

Видна строка 01.01.0001 или 00010101000000

Запрос с условием на пустую дату
Норма

Возвращаются только записи с незаполненным полем

Тревожный признак

Пропадают записи из соединений или выборка пуста

Расчёт разницы дат
Норма

Для пустых дат расчёт пропускается или даёт 0

Тревожный признак

Появляются значения в сотни тысяч дней

Выгрузка XML
Норма

Пустые даты сериализуются единообразно

Тревожный признак

Часть полей пустая, часть содержит 0001-01-01 без системы

Частые вопросы

00010101000000 — это ошибка базы данных?

Нет, это штатное значение пустой даты в 1С: 01.01.0001 00:00:00. Ошибкой оно становится только тогда, когда попадает в отчёты, печатные формы или документы, где дата обязательна.

Чем отличается пустая дата от NULL в запросах 1С?

Пустая дата ('00010101') — конкретное значение, хранящееся в поле. NULL возникает в соединениях таблиц, когда связанной записи нет. Проверки для них разные: сравнение с литералом для пустой даты и конструкция ЕСТЬ NULL для отсутствующих записей.

Как быстро убрать 01.01.0001 из печатной формы без правки кода?

Если форма выводится через Формат(), достаточно добавить параметр пустой даты: Формат(ДатаЗначение, "ДЛФ=D; ДП='-'"). В отчётах на СКД используйте выражение ВЫБОР с проверкой на ДАТАВРЕМЯ(1,1,1) в поле компоновки.

Можно ли исправить пустые даты напрямую в таблицах SQL?

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

Почему после обмена данными появилось много записей с пустой датой?

Обычно причина в правилах конвертации: поле даты не сопоставлено или источник передаёт пустое значение. Проверьте правила обмена и образцы исходных данных, затем постройте запрос по пустым датам, чтобы оценить масштаб перед исправлением.

Как найти все документы с незаполненной датой реквизита?

Составьте запрос к таблице документа с условием Реквизит = &ПустаяДата, где параметр установлен в '00010101'. Результат выведите списком и обработайте вручную или групповой обработкой на копии базы.

Итог

Что важно запомнить

00010101000000 — это пустая дата 1С (01.01.0001 00:00:00), а не сбой. Проверяйте её литералом '00010101' или функцией ЗначениеЗаполнено, не путайте с NULL в запросах и не выводите в печатные формы без обработки. Массовые исправления выполняйте только средствами платформы после резервного копирования.