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

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

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

Разбираем ошибку преобразования к типу Дата в 1С: причины, типичные сценарии в коде и запросах, способы исправления через Дата(), СтрокаВДату и проверки.

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

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

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

Что означает эта ошибка и когда она возникает

Тип «Дата» в 1С хранит дату и время с точностью до секунды. При явном преобразовании — например, через конструктор Дата("20260115") — платформа ожидает строку строго в формате «ГГГГММДДччммсс» (время можно опустить). Любое отклонение: лишние разделители, другой порядок, буквы, пустая строка — приводит к ошибке преобразования.

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

Типичные ситуации возникновения:

  • загрузка данных из Excel, CSV или DBF, где дата записана как «15.01.2026», «15/01/24» или вообще как текст;
  • обмен между базами, где дата сериализована в неожиданном формате;
  • запрос с функцией ДАТАВРЕМЯ(), куда переданы некорректные параметры;
  • обращение к реквизиту составного типа, где вместо даты лежит строка или NULL;
  • обработки, где значение из формы напрямую передаётся в Дата() без проверки.

Как найти источник ошибки

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

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

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

Порядок диагностики
  1. 1
    Воспроизведите ошибку и сохраните полный текст сообщения с указанием модуля и строки
  2. 2
    Откройте конфигуратор и включите остановку по ошибке в настройках отладки
  3. 3
    Повторите действие и посмотрите в отладчике фактическое значение переменной перед преобразованием
  4. 4
    Определите тип значения через ТипЗнч() и его содержимое — пустая строка, NULL, текст в неверном формате
  5. 5
    Проследите по стеку вызовов, откуда значение пришло: форма, файл, запрос, обмен

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

Преобразование строки через Дата()

Самая частая ситуация — вызов Дата(СтроковоеЗначение), где строка не соответствует формату «ГГГГММДД». Например, Дата("15.01.2026") вызовет ошибку, потому что платформа не понимает точки-разделители и порядок «день-месяц-год».

Решение — предварительно разобрать строку вручную или проверить её перед преобразованием. Для строк вида «ДД.ММ.ГГГГ» можно извлечь части и собрать дату из чисел:

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

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

Попытка

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

Исключение

Результат = Дата(1, 1, 1); // пустая дата

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

КонецЕсли;

Пустые значения и NULL

Функция Дата("") или попытка преобразовать NULL из запроса тоже завершаются ошибкой. Перед преобразованием всегда проверяйте значение на пустоту: Если Не ПустаяСтрока(Значение) Тогда ..., а для результата запроса — на NULL через Если Значение = NULL или функцию ЕСТЬNULL в самом запросе.

Реквизиты составного типа

Если реквизит объявлен как составной (например, «Дата или Строка»), обращение к нему с ожиданием даты может дать строку. Проверяйте тип через ТипЗнч(Значение) = Тип("Дата") перед использованием значения в операциях с датами.

bsl
Функция СтрокаВДатуБезопасно(Строка)
    Если ПустаяСтрока(Строка) Тогда
        Возврат Дата(1,1,1);
    КонецЕсли;
    Попытка
        Возврат Дата(Строка); // ожидается формат ГГГГММДД
    Исключение
        Возврат Дата(1,1,1);
    КонецПопытки;
КонецФункции

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

В языке запросов преобразование выполняет функция ДАТАВРЕМЯ(год, месяц, день) и операция приведения типов. Ошибка возникает, когда в параметры попадают нулевые или отрицательные числа, либо когда в выражении СКД используется преобразование строкового поля к дате.

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

Решения для запросов:

  • используйте ЕСТЬNULL(Поле, ДАТАВРЕМЯ(1,1,1)) для полей, которые могут содержать NULL;
  • проверяйте параметры до выполнения запроса, подставляя пустую дату Дата(1,1,1) вместо незаполненных;
  • в СКД задавайте параметрам тип «Дата» явно, чтобы платформа не пыталась интерпретировать строку;
  • избегайте вычисляемых полей с неявным преобразованием — лучше привести тип на уровне запроса.

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

Загрузка из Excel — классический источник проблемы. Excel хранит даты как числа, и в зависимости от способа чтения (через COM-объект, табличный документ, форматированный документ) вы можете получить число, строку в региональном формате или готовую дату. Универсальный код, ожидающий один вариант, ломается на другом.

При чтении через табличный документ дата «15.01.2026» часто приходит строкой в региональном формате. Надёжный подход — проверять тип прочитанного значения и обрабатывать каждый вариант: число переводить через Дата(1899,12,30) + Число * 86400 (особенность хранения дат в Excel), строку разбирать по разделителям, готовую дату использовать как есть.

В обменах (XML, JSON, EnterpriseData) даты обычно сериализуются в формате ISO «2026-01-15T00:00:00». Стандартные механизмы XDTO такие строки понимают, но ручной разбор через Дата() — нет: дефисы и литера «T» вызовут ошибку. Для ISO-строк используйте XMLЗначение(Тип("Дата"), Строка) или удаляйте лишние символы перед преобразованием.

Исправление данных в базе

Иногда причина не в коде, а в самих данных: в реквизит попало некорректное значение при старой загрузке, после обмена или из-за сбоя. Тогда ошибка воспроизводится стабильно на конкретном документе или элементе справочника, и правка кода не поможет — нужно исправить данные.

Порядок безопасного исправления:

  1. Сделайте резервную копию базы (выгрузку в dt для файловой базы или средствами СУБД для клиент-серверной).
  2. Найдите проблемные записи: запросом отберите объекты, где реквизит имеет неожиданный тип или пустое значение там, где обязательна дата.
  3. Исправьте значения вручную через форму объекта, если их немного, или обработкой — если записей много.
  4. Проверьте, что операция, вызывавшая ошибку, теперь выполняется до конца.

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

Типичные ошибки
01
Передача строки «15.01.2026» напрямую в Дата() — платформа понимает только формат ГГГГММДД без разделителей
02
Отсутствие проверки на NULL из запроса — попытка работы с NULL как с датой ломает выполнение кода
03
Подстановка числа 0 или пустой строки вместо пустой даты Дата(1,1,1)
04
Глушение ошибки пустым блоком Попытка/Исключение без логирования — проблема маскируется и всплывает позже в другом месте
05
Исправление данных обработкой без резервной копии — при ошибке в самой обработке данные теряются безвозвратно

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

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

Для профилактики в собственных разработках придерживайтесь простых правил: любое внешнее значение (из файла, формы, обмена) проверяйте перед преобразованием; используйте единые функции разбора дат в общем модуле, а не разрозненные куски кода; в запросах подставляйте ДАТАВРЕМЯ(1,1,1) через ЕСТЬNULL для необязательных полей.

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

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

Повторное выполнение операции
Норма

Документ проводится, отчёт формируется, загрузка завершается без сообщений об ошибке

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

Ошибка возникает снова на той же или следующей записи

Значения дат в данных
Норма

Все обязательные даты заполнены, пустые имеют значение 01.01.0001

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

Встречаются строки, числа или NULL в полях типа Дата

Журнал регистрации
Норма

Нет новых ошибок преобразования после исправления

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

Ошибки продолжают появляться — источник не найден

Часто задаваемые вопросы

Почему Дата("15.01.2026") вызывает ошибку, хотя дата выглядит правильно?

Конструктор Дата() со строковым параметром принимает только формат «ГГГГММДДччммсс» без разделителей — например, Дата("20260115"). Строку с точками нужно предварительно разобрать на части и собрать дату из чисел: Дата(2026, 1, 15).

Ошибка возникает только у одного пользователя. В чём причина?

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

Как преобразовать дату из формата ISO «2026-01-15T10:30:00»?

Используйте XMLЗначение(Тип("Дата"), Строка) — этот механизм понимает ISO-формат. Функция Дата() такую строку не примет из-за дефисов и литеры «T». Альтернатива — убрать из строки все символы кроме цифр и передать первые 14 знаков в Дата().

Можно ли просто обернуть преобразование в Попытка/Исключение и забыть?

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

Ошибка появляется в типовом отчёте без доработок. Что делать?

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

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

Пустая дата — это конкретное значение Дата(1,1,1), то есть 01.01.0001. NULL — отсутствие значения, которое появляется в результатах запросов при левых соединениях и обращениях к несуществующим реквизитам. NULL нельзя сравнивать обычным равенством и использовать как дату — его нужно обрабатывать через ЕСТЬNULL или проверку «ЕСТЬ NULL».

Итог

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

Ошибка преобразования к типу Дата означает, что в преобразование попало значение неподходящего формата: строка не в виде «ГГГГММДД», NULL, число или пустая строка. Найдите источник значения через отладку, проверяйте тип и пустоту перед преобразованием, используйте Дата(1,1,1) как пустую дату, а перед массовым исправлением данных делайте резервную копию.