«Не может быть выполнено преобразование к Дате» в 1С: причины и исправление
Содержание
Ошибка возникает, когда 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. Найдите документ или запись, из-за которых это случилось
- Если ошибка при проведении — откройте документ и проверьте все поля с датами, включая табличные части.
- Если при формировании отчёта — проверьте настройки периода и пользовательские поля отбора.
- Если при открытии справочника — ищите элемент с испорченной датой в карточке.
Чтобы решить, что делать дальше, пройдите короткую диагностику:
Что делать пользователю, если ошибка вылезла в форме
Пользовательские способы работают, когда ошибка появляется в конкретной форме и конкретном поле.
- Введите дату полностью: день, месяц и год из четырёх цифр. Разделитель — точка.
- Если поле не принимает дату, очистите его и выберите значение кнопкой календаря.
- Чтобы получить пустую дату, очистите поле выделением и клавишей
Delete: значение станет01.01.0001. - Если ошибка при открытии формы, а не при вводе, закройте форму, выберите другой элемент и вернитесь.
Не исправляйте даты прямо в базе без резервной копии. Если запись «битая», лучше сначала сохранить копию информационной базы, а потом править.
Если ошибка воспроизводится после правильного ввода даты, дело не в вашем вводе. Переходите к администратору или программисту.
Форматы даты в настройках: когда виноват региональный формат
Иногда код написан верно, а ошибка идёт от того, как компьютер или сервер представляет даты. 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
Проверка значения перед использованием
Если дата приходит из реквизита произвольного типа, проверьте тип:
Если ТипЗнч(Значение) = Тип("Дата") И ЗначениеЗаполнено(Значение) Тогда
// работаем с датой
КонецЕсли;
Для проверки строки, годится ли она как дата, применяйте Попытка … Исключение вокруг преобразования, как в функции выше.
Особый случай: ошибка про календарный год
Сообщение «Значение календарного года не соответствует формату» говорит о годе, который не укладывается в допустимые рамки. Обычно в него попадают три случая.
- Год равен нулю или состоит из одной-двух цифр. Такое приходит из внешних файлов, где ячейка пустая или записана как
15.03.00. - Год вне допустимого диапазона базы. В клиент-серверном варианте на MS SQL Server база хранит даты со смещением. Если смещение 2000, верхняя граница, как правило, 5999 год. Дата вроде
01.01.9999в таких базах не записывается. - Год появился из арифметики. Например, к дате прибавили слишком большое число секунд:
Дата + 99999999999.
Как проверить, какое смещение у вашей базы:
- В файловой базе смещения нет, ограничений на год меньше.
- В клиент-серверной базе смотрите в консоли кластера сервера 1С свойства информационной базы: поле «Смещение дат» (обычно 0 или 2000).
- Смещение задаётся при создании базы, потом его не поменять без выгрузки и загрузки данных.
Не пытайтесь «подвинуть» смещение дат на рабочей базе. Это пересоздание базы. Правьте данные: исключите даты за пределами диапазона из обмена и введите корректную верхнюю границу, например 31.12.3999 для сроков действия «бессрочно».
Загрузка из Excel и внешних источников
Если ошибка появляется при загрузке данных, смотрите на исходный файл. 1С читает ячейку Excel как дату, только если сама ячейка в Excel имеет формат даты. Если там текст 15.03.26, придёт строка. Если там число 46096, придёт число.
Практический порядок:
- Откройте исходный файл и выделите колонку с датами.
- Выберите формат ячеек «Дата» с маской
ДД.ММ.ГГГГ. Если часть ячеек остаётся текстом, преобразуйте их функциейДАТАЗНАЧ()в соседней колонке. - Удалите пустые строки в конце файла. Пустая ячейка в колонке даты часто выглядит как пробел, а не как пустое значение.
- Сохраните файл в
.xlsxи повторите загрузку.
Для интеграций через веб-сервисы, XML или JSON правило другое: договоритесь о формате заранее. ISO 8601, то есть 2026-03-15T14:30:00, читается платформой без доработок, а строки с точками придётся разбирать кодом.
Проверка числа из таблицы: серийный номер Excel отсчитывается от 30.12.1899, поэтому 46096 дней от этой даты дают 15.03.2026. Так можно восстановить дату, если Excel вместо неё отдал голое число.
Как найти и вылечить «битые» даты после обновления
Если ошибка пошла после обновления конфигурации, проблема лежит в данных, а не в формах. Нужно найти записи, где реквизит содержит что-то, что новая версия не читает как дату.
Порядок действий:
- Сделайте резервную копию информационной базы:
Администрирование→Администрирование→Выгрузить информационную базуили через КонфигураторАдминистрирование→Выгрузить информационную базу. - Откройте консоль запросов (или выгрузите обработку «Консоль запросов» из своих сервисных инструментов) и запросите записи объекта, отсортированные по проблемному реквизиту.
- Ищите записи с пустой датой или с датой вне ожидаемого периода. Типичный признак:
01.01.0001там, где дата должна быть всегда, или01.01.2001вместо реальной. - Исправляйте не вручную по одной, а обработкой: считали список, проставили дату по правилу, записали с режимом
ОбменДанными.Загрузка = Истина, чтобы не запускать проведение и контроль.
Выборка = Справочники.Договоры.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Если НЕ ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
Объект.ДатаНачала = Объект.ДатаСоздания;
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Имена объекта и реквизитов здесь условные: подставьте свои из конфигуратора.
Прежде чем запускать обработку на рабочей базе, прогоните её на копии. Если правила замены не очевидны, лучше согласовать их с руководителем и ответственным за данные.
Профилактика: как не получить ошибку снова
Ошибки типа «дата» не появляются сами. Каждый раз их кто-то приносит: файл, обмен, самописный код. Поэтому защита строится на входе.
Дополнительно:
- 📌 В реквизитах с датой используйте тип
Датас составом «Дата» или «Дата и время», а не строку. - 📌 Для обязательных дат включите «Проверку заполнения» в свойствах реквизита.
- 📌 Тестируйте обновление конфигурации на копии и открывайте несколько старых документов и справочников. Битые даты обычно всплывают сразу.
- 📌 Ведите журнал загрузок: при ошибке нужна строка исходного файла, а не только номер ошибки.
Типичные ошибки при исправлении
- Лечат следствие. Пользователь вводит дату иначе, ошибка уходит, но сломанная запись в базе остаётся и снова падает при формировании отчёта.
- Заменяют
Дата(Строка)наДата(СтрЗаменить(Строка, ".", "")). Для15.03.2026получится15032026, а нужен20260315: порядок частей другой. - Берут
ТекущаяДата()вместо пустой. Это скрывает проблему: документ проводится «сегодняшним» числом, хотя дата должна быть другой. - Оставляют
Попытка … Исключениебез обработки. Ошибка проглочена, документ записан с пустой датой, а выяснится это при закрытии периода. - Правят значения в обход платформы (SQL-запросом в таблицу). Так портится целостность базы, и поддержка 1С такие базы не принимает.
Проверьте себя
Частые вопросы
Чем отличаются «Преобразование к типу Дата» и «Неверный формат даты»?
Дата() получает строку неподходящего вида. Второе показывается в поле ввода формы, когда пользователь ввёл текст, не похожий на дату.Почему ошибка только у одного пользователя?
Можно ли записать в 1С дату 31.12.9999?
31.12.3999.Как в 1С задать пустую дату?
'00010101' или Дата(1, 1, 1). В интерфейсе очистите поле клавишей Delete.