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

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

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

Почему в 1С возникает ошибка «преобразование значения к типу Дата не может быть выполнено» и как её исправить: причины, проверка строк, функции Дата(), запросы и типовые решения.

Ошибка «Преобразование значения к типу Дата не может быть выполнено» возникает, когда платформа 1С пытается привести строку, число или другой тип к дате, но исходное значение не соответствует ожидаемому формату. Чаще всего проблема появляется при загрузке данных из файлов, обмене с внешними системами, обработке пользовательского ввода или выполнении запросов, где поле содержит пустую строку, текст или дату в нестандартном виде.

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

Важно понимать, что текст сообщения одинаковый при разных первопричинах: неправильный порядок дня и месяца, секунды и миллисекунды в строке, пустое значение из Excel, дата в формате «2026-12-31T00:00:00» из веб-сервиса. Ниже разобраны типовые сценарии и безопасные способы обработки каждого из них.

Где именно возникает ошибка и как её локализовать

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

Разработчику проще всего запустить конфигуратор в режиме отладки с включённой остановкой по ошибке (Отладка → Остановка по ошибке). Платформа прервёт выполнение ровно на строке, где произошло преобразование, и в табло или окне вычисления выражений можно посмотреть фактическое значение переменной — именно оно и не преобразуется.

Обратите внимание на контекст: если сбой происходит при массовой загрузке (например, из Excel или CSV), проблемное значение может быть в одной строке из тысячи. В этом случае полезно временно обернуть преобразование в попытку и записывать номер строки и значение в журнал, чтобы найти все некорректные данные за один проход.

Как найти источник ошибки
  1. 1
    Включите остановку по ошибке в конфигураторе и воспроизведите ситуацию
  2. 2
    В момент остановки посмотрите значение переменной, которая преобразуется в дату
  3. 3
    Если ошибка в пользовательском режиме — найдите событие в журнале регистрации
  4. 4
    При массовой загрузке добавьте запись номера строки и значения в лог через Попытка/Исключение
  5. 5
    Сравните найденное значение с ожидаемым форматом даты

Типичные причины: какие значения не преобразуются в дату

Наиболее частая причина — пустая строка или строка из пробелов, полученная из файла или поля ввода. Функция Дата(Строка) и неявное преобразование не умеют интерпретировать пустоту как «отсутствие даты» — для этого в 1С существует пустая дата '00010101', которую нужно присваивать явно.

Вторая группа причин — несовпадение форматов. Строка «31.12.2026» корректно воспринимается в русской локали, но «12/31/2026» (американский формат), «2026-12-31T15:30:00» (ISO из веб-сервиса) или «31 дек 2026» вызовут ошибку при прямом преобразовании. Чем разнообразнее источники данных, тем выше вероятность столкнуться с неожиданным форматом.

Третья группа — значения нестроковых типов: число (например, серийный номер даты Excel вида 45658), NULL из запроса, Неопределено из реквизита. Каждый из этих случаев требует своего способа обработки, универсального преобразования не существует.

Пустая строка или NULLИсточник данных не заполнен

Добавить проверку на пустоту и присваивать '00010101'

Строка с буквами или разделителямиНестандартный формат даты

Разобрать строку вручную по известному шаблону

Число вроде 45658Дата в числовом формате Excel

Пересчитать: дата Excel = Дата(1899,12,30) + число дней

Строка с T и ZФормат ISO из веб-сервиса

Вырезать части строки и собрать через Дата(год, месяц, день)

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

Надёжный подход — никогда не вызывать преобразование «в лоб», а сначала проверять значение. Минимальный шаблон: проверить, что значение заполнено, затем попытаться преобразовать внутри конструкции Попытка/Исключение, а при неудаче присвоить пустую дату или записать предупреждение в лог.

Для строк известного формата безопаснее разобрать значение по частям и собрать дату конструктором Дата(Год, Месяц, День). Например, для строки «2026-12-31» разделить по дефису и передать элементы в функцию Дата как числа. Такой код не зависит от региональных настроек сеанса и предсказуемо работает на любом сервере.

Функция СтрокаВДату(СтрокаДаты)

Результат = '00010101';

Если Не ЗначениеЗаполнено(СтрокаДаты) Тогда

Возврат Результат;

КонецЕсли;

Попытка

Части = СтрРазделить(СокрЛП(СтрокаДаты), "-");

Если Части.Количество() = 3 Тогда

Результат = Дата(Число(Части[0]), Число(Части[1]), Число(Части[2]));

КонецЕсли;

Исключение

Результат = '00010101';

КонецПопытки;

Возврат Результат;

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

Для дат из Excel в числовом виде используется пересчёт: число представляет количество дней от базовой даты. В 1С это выражается как Дата(1899,12,30) + ЧислоИзExcel * 86400 — прибавление секунд к базовой дате. Учтите, что дробная часть числа хранит время, и её можно отсечь функцией Цел(), если время не требуется.

Ошибка в запросах и СКД

В запросах ошибка преобразования к дате появляется реже, но встречается — например, когда в параметр типа «Дата» передаётся строка или когда в виртуальной таблице период задан некорректно. Проверьте типы параметров: Запрос.УстановитьПараметр("Период", ДатаНачала) должен получать именно значение типа Дата, а не строку из поля ввода.

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

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

Ошибка при обмене данными и загрузке из файлов

При обмене через XML, JSON или веб-сервисы даты приходят в текстовом виде, и формат зависит от отправителя. Стандарт ISO 8601 («2026-12-31T15:30:00») — самый частый источник проблем: буква T и секунды не воспринимаются прямым преобразованием. Разберите строку: отделите дату от времени по символу «T», затем разбейте обе части по разделителям.

При загрузке из Excel и CSV добавляются свои риски: ячейка может содержать текст «н/д», дефис, двойные пробелы или дату с точкой вместо разделителя. Перед массовой загрузкой полезно сделать пробный проход с валидацией: пройти по всем строкам, попытаться преобразовать каждое значение и вывести пользователю список некорректных строк до начала записи в базу.

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

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

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

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

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

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

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

Корректная строка даты
Норма

Преобразуется в ожидаемую дату без ошибки

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

Дата смещена (перепутаны день и месяц) или ошибка сохраняется

Пустое значение
Норма

Возвращается '00010101', выполнение продолжается

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

Ошибка преобразования или запись пустой строки в реквизит

Некорректный текст
Норма

Фиксируется в логе, обработка не прерывается

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

Обработка падает, часть данных не загружается

Работа на сервере
Норма

Результат одинаков на клиенте и сервере

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

На сервере с другой локалью ошибка возвращается

Типичные ошибки
01
Прямое преобразование Дата(Строка) без проверки — код падает на первом пустом или нестандартном значении
02
Игнорирование региональных настроек — на сервере с другой локалью тот же код перестаёт работать
03
Замена проблемных дат на текущую дату — искажает отчёты и историю, скрывая реальную причину
04
Перехват ошибки пустым Исключение без логирования — сбойные данные теряются незаметно
05
Хранение дат в строковых реквизитах — ошибки преобразования возвращаются в каждом новом отчёте
Итог

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

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

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

Можно ли отключить эту ошибку настройками платформы?

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

Почему код работает у меня, но падает у другого пользователя?

Скорее всего, преобразование зависит от региональных настроек сеанса, которые различаются на разных компьютерах и на сервере. Замените прямое преобразование строки на разбор по частям с явной сборкой даты — тогда результат перестанет зависеть от локали.

Как преобразовать дату из формата «2026-12-31T15:30:00»?

Разделите строку по символу «T», затем левую часть разбейте по дефису, а правую по двоеточию. Соберите результат через Дата(год, месяц, день, часы, минуты, секунды), преобразовав каждый фрагмент в число. Если время не нужно, достаточно левой части.

Что делать, если ошибка возникает в типовой обработке, которую нельзя менять?

Проверьте входные данные: чаще всего типовая обработка падает из-за некорректного значения в файле или реквизите. Исправьте источник данных. Если данные корректны, а ошибка воспроизводится стабильно, это повод обратиться к разработчику конфигурации или поставщику обработки с описанием шагов воспроизведения.

Опасно ли присваивать пустую дату '00010101' вместо реальной?

Технически безопасно, но прикладной смысл зависит от реквизита. Для необязательных полей (дата окончания договора, дата следующего звонка) пустая дата — нормальное состояние. Для обязательных периодов (дата документа, период записи регистра) заглушка исказит учёт, поэтому такие случаи нужно логировать и разбирать вручную.

Как найти все некорректные значения в большом файле за один раз?

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