«Не может быть выполнено преобразование к Дате» в 1С: причины и исправление

· 11 мин

Содержание

Ошибка возникает, когда 1С получает на вход строку или число, из которых нельзя собрать дату: год вне диапазона, месяц 13, точки вместо цифр, пустой текст из внешнего файла. Лечится в три шага: найти строку кода или документ из стека ошибки, посмотреть, что реально лежит в значении, и привести его к виду ГГГГММДД или к типу Дата до преобразования.

Вот как выглядят сообщения, с которыми приходят чаще всего:

  • Преобразование значения к типу Дата не может быть выполнено
  • Значение календарного года не соответствует формату
  • Неверный формат даты (при ручном вводе в поле)
  • Ошибка преобразования данных в тип Дата (при загрузке из внешнего источника)

Ниже разобрано, откуда они берутся и как чинить: у пользователя, у администратора и у программиста.

Откуда берётся ошибка: пять типовых причин

Платформа понимает дату в диапазоне от 01.01.0001 до 31.12.9999. Всё, что в этот диапазон не укладывается или не разбирается как дата, даёт исключение.

ПричинаПример значенияГде встречается
Год из двух цифр или нулевой год15.03.26, 15.03.0000Ручной ввод, загрузка из Excel
Несуществующий день или месяц31.02.2026, 12.13.2026Табличные файлы, обмены
Строка в «чужом» формате2026/03/15, 15 марта 2026Веб-сервисы, выгрузки банков
Пустая строка или пробелы"", " "Внешние источники, пустые ячейки
Число вместо даты46096 (серийный номер Excel)Копирование из таблиц

Отдельный случай — ошибки в старых данных после обновления конфигурации. Раньше реквизит был строкой, теперь он типа Дата, а в базе остались значения вроде "б/д" или "01.01.1". Пока формы не трогали эти записи, всё работало. После обновления каждое открытие такого элемента падает.

Быстрая диагностика в режиме «Предприятие»

Начните с того, чтобы понять, что именно сломалось. Для этого есть два инструмента, и ни одному не нужен Конфигуратор.

Шаг 1. Посмотрите подробное описание ошибки

В окне с ошибкой нажмите «Подробно». Внизу будет стек вызовов: имя модуля, процедура и номер строки. Если ошибка из типовой конфигурации, запишите имя модуля и документ, который вы проводили.

Скопируйте текст ошибки целиком, вместе со стеком. Если дойдёт до программиста, это сэкономит полчаса вопросов.

Шаг 2. Откройте журнал регистрации

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

Шаг 3. Найдите документ или запись, из-за которых это случилось

  • Если ошибка при проведении — откройте документ и проверьте все поля с датами, включая табличные части.
  • Если при формировании отчёта — проверьте настройки периода и пользовательские поля отбора.
  • Если при открытии справочника — ищите элемент с испорченной датой в карточке.

Чтобы решить, что делать дальше, пройдите короткую диагностику:

Диагностика: выберите симптом

Что делать пользователю, если ошибка вылезла в форме

Пользовательские способы работают, когда ошибка появляется в конкретной форме и конкретном поле.

  1. Введите дату полностью: день, месяц и год из четырёх цифр. Разделитель — точка.
  2. Если поле не принимает дату, очистите его и выберите значение кнопкой календаря.
  3. Чтобы получить пустую дату, очистите поле выделением и клавишей Delete: значение станет 01.01.0001.
  4. Если ошибка при открытии формы, а не при вводе, закройте форму, выберите другой элемент и вернитесь.

Не исправляйте даты прямо в базе без резервной копии. Если запись «битая», лучше сначала сохранить копию информационной базы, а потом править.

Если ошибка воспроизводится после правильного ввода даты, дело не в вашем вводе. Переходите к администратору или программисту.

Форматы даты в настройках: когда виноват региональный формат

Иногда код написан верно, а ошибка идёт от того, как компьютер или сервер представляет даты. 1С берёт региональные настройки из операционной системы (на клиенте) или из процесса сервера (на сервере).

Проверьте:

  • ✅ Формат даты в Windows: Панель управления → Региональные стандарты → вкладка «Форматы», краткая дата dd.MM.yyyy.
  • ✅ Язык интерфейса и язык формата в профиле пользователя 1С. Если у кого-то стоит английский формат, он вводит 03/15/2026 и получает ошибку.
  • ✅ Региональные настройки учётной записи, под которой запущена служба сервера 1С. Они могут отличаться от настроек пользователей.
  • ✅ Настройку «Язык» (Администрирование → Настройки программы → Интерфейс или аналог в вашей конфигурации): строка формата дат берётся отсюда.

Если ошибка есть только у одного человека, а у остальных нет, ищите причину в его профиле Windows.

Исправление кода: как безопасно преобразовать строку в дату

Если ошибку выдаёт самописная обработка, расширение или доработанный типовой модуль, чинить придётся код. Главное правило: не доверяйте входным данным и проверяйте значение до вызова Дата().

Что принимает функция Дата()

Функция Дата(Строка) разбирает строки только в виде ГГГГММДД или ГГГГММДДЧЧММСС. Точки, косые черты и тире она не понимает.

// Работает
Д1 = Дата("20260315");
Д2 = Дата("20260315143000");
Д3 = Дата(2026, 3, 15);

// Падает: "Преобразование значения к типу Дата не может быть выполнено"
Д4 = Дата("15.03.2026");
Д5 = Дата("2026-03-15");

Безопасный разбор строки вида ДД.ММ.ГГГГ

Разберите строку на части, проверьте каждую и только потом собирайте дату. Так вы получите контролируемую ошибку, а не падение посреди проведения.

Функция РазобратьДату(Знач Строка, ПустаяДата = Неопределено) Экспорт

	Строка = СокрЛП(Строка);
	Если Строка = "" Тогда
		Возврат '00010101';
	КонецЕсли;

	Части = СтрРазделить(Строка, ".");
	Если Части.Количество() <> 3 Тогда
		Возврат Неопределено;
	КонецЕсли;

	Попытка
		День  = Число(Части[0]);
		Месяц = Число(Части[1]);
		Год   = Число(Части[2]);
	Исключение
		Возврат Неопределено;
	КонецПопытки;

	// Двузначный год считаем годом текущего века
	Если Год < 100 Тогда
		Год = Год + 2000;
	КонецЕсли;

	Если Год < 1 ИЛИ Год > 9999 ИЛИ Месяц < 1 ИЛИ Месяц > 12 ИЛИ День < 1 Тогда
		Возврат Неопределено;
	КонецЕсли;

	Попытка
		Возврат Дата(Год, Месяц, День);
	Исключение
		Возврат Неопределено; // например, 31.02
	КонецПопытки;

КонецФункции

Для даты из XML и JSON используйте XMLЗначение(Тип("Дата"), "2026-03-15T00:00:00"). Она понимает формат ISO, который отдают веб-сервисы.

Обратное преобразование: дата в строку

Когда нужно вывести дату или передать её во внешнюю систему, не склеивайте строку руками. Используйте Формат().

Строка1 = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
Строка2 = Формат(ТекущаяДата(), "ДФ=yyyyMMdd");
Строка3 = Формат(ТекущаяДата(), "ДФ='dd MMMM yyyy'"); // 15 марта 2026

Проверка значения перед использованием

Если дата приходит из реквизита произвольного типа, проверьте тип:

Если ТипЗнч(Значение) = Тип("Дата") И ЗначениеЗаполнено(Значение) Тогда
	// работаем с датой
КонецЕсли;

Для проверки строки, годится ли она как дата, применяйте Попытка … Исключение вокруг преобразования, как в функции выше.

Особый случай: ошибка про календарный год

Сообщение «Значение календарного года не соответствует формату» говорит о годе, который не укладывается в допустимые рамки. Обычно в него попадают три случая.

  1. Год равен нулю или состоит из одной-двух цифр. Такое приходит из внешних файлов, где ячейка пустая или записана как 15.03.00.
  2. Год вне допустимого диапазона базы. В клиент-серверном варианте на MS SQL Server база хранит даты со смещением. Если смещение 2000, верхняя граница, как правило, 5999 год. Дата вроде 01.01.9999 в таких базах не записывается.
  3. Год появился из арифметики. Например, к дате прибавили слишком большое число секунд: Дата + 99999999999.

Как проверить, какое смещение у вашей базы:

  • В файловой базе смещения нет, ограничений на год меньше.
  • В клиент-серверной базе смотрите в консоли кластера сервера 1С свойства информационной базы: поле «Смещение дат» (обычно 0 или 2000).
  • Смещение задаётся при создании базы, потом его не поменять без выгрузки и загрузки данных.

Не пытайтесь «подвинуть» смещение дат на рабочей базе. Это пересоздание базы. Правьте данные: исключите даты за пределами диапазона из обмена и введите корректную верхнюю границу, например 31.12.3999 для сроков действия «бессрочно».

Загрузка из Excel и внешних источников

Если ошибка появляется при загрузке данных, смотрите на исходный файл. 1С читает ячейку Excel как дату, только если сама ячейка в Excel имеет формат даты. Если там текст 15.03.26, придёт строка. Если там число 46096, придёт число.

Практический порядок:

  1. Откройте исходный файл и выделите колонку с датами.
  2. Выберите формат ячеек «Дата» с маской ДД.ММ.ГГГГ. Если часть ячеек остаётся текстом, преобразуйте их функцией ДАТАЗНАЧ() в соседней колонке.
  3. Удалите пустые строки в конце файла. Пустая ячейка в колонке даты часто выглядит как пробел, а не как пустое значение.
  4. Сохраните файл в .xlsx и повторите загрузку.

Для интеграций через веб-сервисы, XML или JSON правило другое: договоритесь о формате заранее. ISO 8601, то есть 2026-03-15T14:30:00, читается платформой без доработок, а строки с точками придётся разбирать кодом.

Сопоставление полей
Дата в Excel (ячейка с форматом «Дата»)→Тип Дата без преобразования
Текст ДД.ММ.ГГГГ в Excel→Разбор строки в коде (функция разбора по частям)
Строка ГГГГММДД→Дата("20260315")
Строка ISO 8601 (XML, JSON)→XMLЗначение(Тип("Дата"), строка)
Число 46096 из Excel→Дата(1899, 12, 30) + 46096 * 86400
Пустая ячейка или пробел→Пустая дата 01.01.0001

Проверка числа из таблицы: серийный номер Excel отсчитывается от 30.12.1899, поэтому 46096 дней от этой даты дают 15.03.2026. Так можно восстановить дату, если Excel вместо неё отдал голое число.

Как найти и вылечить «битые» даты после обновления

Если ошибка пошла после обновления конфигурации, проблема лежит в данных, а не в формах. Нужно найти записи, где реквизит содержит что-то, что новая версия не читает как дату.

Порядок действий:

  1. Сделайте резервную копию информационной базы: Администрирование → Администрирование → Выгрузить информационную базу или через Конфигуратор Администрирование → Выгрузить информационную базу.
  2. Откройте консоль запросов (или выгрузите обработку «Консоль запросов» из своих сервисных инструментов) и запросите записи объекта, отсортированные по проблемному реквизиту.
  3. Ищите записи с пустой датой или с датой вне ожидаемого периода. Типичный признак: 01.01.0001 там, где дата должна быть всегда, или 01.01.2001 вместо реальной.
  4. Исправляйте не вручную по одной, а обработкой: считали список, проставили дату по правилу, записали с режимом ОбменДанными.Загрузка = Истина, чтобы не запускать проведение и контроль.
Выборка = Справочники.Договоры.Выбрать();
Пока Выборка.Следующий() Цикл
	Объект = Выборка.ПолучитьОбъект();
	Если НЕ ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
		Объект.ДатаНачала = Объект.ДатаСоздания;
		Объект.ОбменДанными.Загрузка = Истина;
		Объект.Записать();
	КонецЕсли;
КонецЦикла;

Имена объекта и реквизитов здесь условные: подставьте свои из конфигуратора.

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

Профилактика: как не получить ошибку снова

Ошибки типа «дата» не появляются сами. Каждый раз их кто-то приносит: файл, обмен, самописный код. Поэтому защита строится на входе.

Перед запуском загрузки или самописной обработки
Выполнено: 0 / 6

Дополнительно:

  • 📌 В реквизитах с датой используйте тип Дата с составом «Дата» или «Дата и время», а не строку.
  • 📌 Для обязательных дат включите «Проверку заполнения» в свойствах реквизита.
  • 📌 Тестируйте обновление конфигурации на копии и открывайте несколько старых документов и справочников. Битые даты обычно всплывают сразу.
  • 📌 Ведите журнал загрузок: при ошибке нужна строка исходного файла, а не только номер ошибки.

Типичные ошибки при исправлении

  • Лечат следствие. Пользователь вводит дату иначе, ошибка уходит, но сломанная запись в базе остаётся и снова падает при формировании отчёта.
  • Заменяют Дата(Строка) на Дата(СтрЗаменить(Строка, ".", "")). Для 15.03.2026 получится 15032026, а нужен 20260315: порядок частей другой.
  • Берут ТекущаяДата() вместо пустой. Это скрывает проблему: документ проводится «сегодняшним» числом, хотя дата должна быть другой.
  • Оставляют Попытка … Исключение без обработки. Ошибка проглочена, документ записан с пустой датой, а выяснится это при закрытии периода.
  • Правят значения в обход платформы (SQL-запросом в таблицу). Так портится целостность базы, и поддержка 1С такие базы не принимает.

Проверьте себя

Проверьте себя
Какая строка разберётся функцией Дата() без ошибки?
Что сделать, если после обновления конфигурации открывается не каждый элемент справочника?

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

Чем отличаются «Преобразование к типу Дата» и «Неверный формат даты»?
Первое срабатывает в коде, когда Дата() получает строку неподходящего вида. Второе показывается в поле ввода формы, когда пользователь ввёл текст, не похожий на дату.
Почему ошибка только у одного пользователя?
Чаще всего у него другие региональные настройки Windows или язык формата в профиле 1С. Сравните настройки с рабочим компьютером коллеги.
Можно ли записать в 1С дату 31.12.9999?
В файловой базе да, в клиент-серверной на MS SQL при смещении дат 2000 обычно нет: верхняя граница около 5999 года. Для «бессрочно» берут условную дату, например 31.12.3999.
Как в 1С задать пустую дату?
Значение '00010101' или Дата(1, 1, 1). В интерфейсе очистите поле клавишей Delete.
Ошибка осталась после правки кода. Что проверить?
Убедитесь, что опубликовано именно то расширение или конфигурация, которые вы правили, и что у пользователей перезапущены клиенты. В клиент-серверной базе кеш иногда держит старый модуль до перезапуска сеансов.