Разработка и Конфигурация · 11 мин
Ошибка «Преобразование значения к типу Дата не может быть выполнено» в 1С: причины и исправление
Почему в 1С возникает ошибка «преобразование значения к типу Дата не может быть выполнено» и как её исправить: причины, проверка строк, функции Дата(), запросы и типовые решения.
Ошибка «Преобразование значения к типу Дата не может быть выполнено» возникает, когда платформа 1С пытается привести строку, число или другой тип к дате, но исходное значение не соответствует ожидаемому формату. Чаще всего проблема появляется при загрузке данных из файлов, обмене с внешними системами, обработке пользовательского ввода или выполнении запросов, где поле содержит пустую строку, текст или дату в нестандартном виде.
Ошибка относится к категории ошибок времени выполнения: код синтаксически корректен, но конкретное значение в момент исполнения не поддаётся преобразованию. Поэтому исправление почти всегда сводится к двум шагам: найти, какое именно значение вызвало сбой, и добавить проверку или корректное преобразование перед операцией с датой.
Важно понимать, что текст сообщения одинаковый при разных первопричинах: неправильный порядок дня и месяца, секунды и миллисекунды в строке, пустое значение из Excel, дата в формате «2026-12-31T00:00:00» из веб-сервиса. Ниже разобраны типовые сценарии и безопасные способы обработки каждого из них.
Где именно возникает ошибка и как её локализовать
Первый шаг — определить место сбоя. Если ошибка возникает в пользовательском режиме, откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации) и найдите событие с текстом ошибки: там указаны пользователь, время и часто имя обработки или процедуры. Если ошибка возникает в фоновом задании, смотрите описание ошибки в консоли заданий.
Разработчику проще всего запустить конфигуратор в режиме отладки с включённой остановкой по ошибке (Отладка → Остановка по ошибке). Платформа прервёт выполнение ровно на строке, где произошло преобразование, и в табло или окне вычисления выражений можно посмотреть фактическое значение переменной — именно оно и не преобразуется.
Обратите внимание на контекст: если сбой происходит при массовой загрузке (например, из Excel или CSV), проблемное значение может быть в одной строке из тысячи. В этом случае полезно временно обернуть преобразование в попытку и записывать номер строки и значение в журнал, чтобы найти все некорректные данные за один проход.
- 1Включите остановку по ошибке в конфигураторе и воспроизведите ситуацию
- 2В момент остановки посмотрите значение переменной, которая преобразуется в дату
- 3Если ошибка в пользовательском режиме — найдите событие в журнале регистрации
- 4При массовой загрузке добавьте запись номера строки и значения в лог через Попытка/Исключение
- 5Сравните найденное значение с ожидаемым форматом даты
Типичные причины: какие значения не преобразуются в дату
Наиболее частая причина — пустая строка или строка из пробелов, полученная из файла или поля ввода. Функция Дата(Строка) и неявное преобразование не умеют интерпретировать пустоту как «отсутствие даты» — для этого в 1С существует пустая дата '00010101', которую нужно присваивать явно.
Вторая группа причин — несовпадение форматов. Строка «31.12.2026» корректно воспринимается в русской локали, но «12/31/2026» (американский формат), «2026-12-31T15:30:00» (ISO из веб-сервиса) или «31 дек 2026» вызовут ошибку при прямом преобразовании. Чем разнообразнее источники данных, тем выше вероятность столкнуться с неожиданным форматом.
Третья группа — значения нестроковых типов: число (например, серийный номер даты Excel вида 45658), NULL из запроса, Неопределено из реквизита. Каждый из этих случаев требует своего способа обработки, универсального преобразования не существует.
Добавить проверку на пустоту и присваивать '00010101'
Разобрать строку вручную по известному шаблону
Пересчитать: дата Excel = Дата(1899,12,30) + число дней
Вырезать части строки и собрать через Дата(год, месяц, день)
Исправление в коде: безопасное преобразование строки в дату
Надёжный подход — никогда не вызывать преобразование «в лоб», а сначала проверять значение. Минимальный шаблон: проверить, что значение заполнено, затем попытаться преобразовать внутри конструкции Попытка/Исключение, а при неудаче присвоить пустую дату или записать предупреждение в лог.
Для строк известного формата безопаснее разобрать значение по частям и собрать дату конструктором Дата(Год, Месяц, День). Например, для строки «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', выполнение продолжается
Ошибка преобразования или запись пустой строки в реквизит
Фиксируется в логе, обработка не прерывается
Обработка падает, часть данных не загружается
Результат одинаков на клиенте и сервере
На сервере с другой локалью ошибка возвращается
Что важно запомнить
Ошибка преобразования к типу Дата всегда означает несоответствие конкретного значения ожидаемому формату. Найдите значение через отладку или журнал, добавьте проверку на пустоту и безопасный разбор строки, а даты из внешних источников собирайте явно через Дата(год, месяц, день). Перед исправлением данных в рабочей базе сделайте резервную копию.
Частые вопросы
Можно ли отключить эту ошибку настройками платформы?
Нет, это штатная реакция платформы на некорректные данные, а не сбой конфигурации. Отключить её нельзя — можно только обрабатывать значения до преобразования или перехватывать ошибку через Попытка/Исключение.
Почему код работает у меня, но падает у другого пользователя?
Скорее всего, преобразование зависит от региональных настроек сеанса, которые различаются на разных компьютерах и на сервере. Замените прямое преобразование строки на разбор по частям с явной сборкой даты — тогда результат перестанет зависеть от локали.
Как преобразовать дату из формата «2026-12-31T15:30:00»?
Разделите строку по символу «T», затем левую часть разбейте по дефису, а правую по двоеточию. Соберите результат через Дата(год, месяц, день, часы, минуты, секунды), преобразовав каждый фрагмент в число. Если время не нужно, достаточно левой части.
Что делать, если ошибка возникает в типовой обработке, которую нельзя менять?
Проверьте входные данные: чаще всего типовая обработка падает из-за некорректного значения в файле или реквизите. Исправьте источник данных. Если данные корректны, а ошибка воспроизводится стабильно, это повод обратиться к разработчику конфигурации или поставщику обработки с описанием шагов воспроизведения.
Опасно ли присваивать пустую дату '00010101' вместо реальной?
Технически безопасно, но прикладной смысл зависит от реквизита. Для необязательных полей (дата окончания договора, дата следующего звонка) пустая дата — нормальное состояние. Для обязательных периодов (дата документа, период записи регистра) заглушка исказит учёт, поэтому такие случаи нужно логировать и разбирать вручную.
Как найти все некорректные значения в большом файле за один раз?
Сделайте отдельный проход валидации перед загрузкой: пройдите по строкам, попытайтесь преобразовать каждое значение внутри Попытка/Исключение и соберите номера и содержимое сбойных строк в таблицу. Покажите её пользователю до записи данных — так исправление файла займёт одну итерацию вместо множества падений.