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

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

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

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

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

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

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

Что буквально означает это сообщение

Встроенный язык 1С строго типизирован в момент выполнения операций. Когда код вызывает Дата("20260115") или Дата(СтрокаСДатой), платформа анализирует переданную строку и пытается распознать в ней год, месяц и день. Если строка пустая, содержит буквы, имеет неподдерживаемый формат или вместо строки передан вообще другой тип (число, NULL, Неопределено), платформа прерывает выполнение и выдаёт это сообщение.

Тот же эффект возникает при неявном преобразовании: например, когда строковое поле из табличного документа или файла загрузки присваивается реквизиту типа «Дата», или когда в запросе функция ДАТАВРЕМЯ() получает некорректные аргументы. Важно понимать: сама по себе ошибка — это симптом, а не причина. Причина — в данных, которые попали на вход преобразования.

Типичные причины возникновения ошибки

Чаще всего проблема сводится к нескольким повторяющимся ситуациям. Знание этого списка сильно ускоряет поиск, потому что проверять нужно не весь код, а конкретные места.

  • Пустая строка или строка с пробелами. Вызов Дата("") всегда завершается ошибкой. Такое бывает, когда значение читается из незаполненной ячейки файла Excel или из реквизита, который пользователь не заполнил.
  • Неподдерживаемый формат строки. Функция Дата() ожидает формат «ГГГГММДД» (например, «20260315») или «ГГГГММДДЧЧММСС». Строки вида «15.03.2026», «03/15/2026» или «15 марта 2026» напрямую не распознаются.
  • Значение NULL из запроса. Если в запросе поле даты оказалось NULL (например, при левом соединении без совпадений), а затем это значение передаётся в Дата() или сравнивается с датой, возникает ошибка.
  • Неопределено. Переменная, которой не присвоено значение, или несуществующая колонка таблицы значений дают Неопределено, которое не преобразуется в дату.
  • Число вместо строки. При загрузке из Excel дата может прийти как числовое представление (внутренний формат Excel), и прямое преобразование такого числа в дату штатными средствами не работает.
  • Повреждённые или «экзотические» данные обмена. При загрузке из XML, JSON или внешних систем дата может прийти в формате ISO (2026-03-15T10:30:00), который требует предварительной обработки.
Ошибка у пользователя при открытии документаПроблема в данных

Проверьте даты в самом документе и связанных регистрах — вероятно, там пустое или некорректное значение

Ошибка при формировании отчётаПроблема в параметрах или запросе

Проверьте заполнение периода отчёта и параметры, передаваемые в запрос

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

Посмотрите, что реально находится в ячейке с датой: строка, число или пусто

Ошибка в отладчике на строке с Дата()Проблема в коде

Оцените значение аргумента функции Дата() в момент остановки

Как быстро найти место ошибки

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

Если есть доступ к конфигуратору, самый надёжный способ — включить остановку по ошибке: меню «Отладка» → «Остановка по ошибке». Затем воспроизведите ситуацию. Отладчик остановится ровно в той строке, где происходит неудачное преобразование, и вы сможете через «Вычислить выражение» (Shift+F9) посмотреть фактическое значение переменной, которая передаётся в Дата().

Когда отладчик недоступен (рабочая база, нет прав разработчика), помогает анализ контекста: что делал пользователь в момент ошибки. Открытие конкретного документа — смотрим его реквизиты типа «Дата». Формирование отчёта — проверяем параметры периода. Обмен данными — смотрим файл обмена и правила конвертации.

Порядок поиска источника ошибки
  1. 1
    Сохраните полный текст ошибки и вспомните, какое действие её вызвало
  2. 2
    Откройте журнал регистрации и найдите событие ошибки с деталями
  3. 3
    Если есть конфигуратор — включите «Остановку по ошибке» и воспроизведите ситуацию
  4. 4
    В отладчике оцените значение, передаваемое в Дата() или в реквизит даты
  5. 5
    Определите источник значения: пользовательский ввод, файл, запрос, обмен
  6. 6
    Исправьте данные или добавьте проверку перед преобразованием

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

Главный принцип защитного программирования в 1С: никогда не передавать в Дата() значение, которое не проверено. Перед преобразованием строки убедитесь, что она не пустая и имеет ожидаемую длину и состав символов.

Типовой защитный шаблон выглядит так:

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

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

Возврат Дата(1, 1, 1); // пустая дата

КонецЕсли;

СтрокаДаты = СокрЛП(СтрокаДаты);

Если СтрДлина(СтрокаДаты) < 8 Тогда

Возврат Дата(1, 1, 1);

КонецЕсли;

Попытка

Возврат Дата(СтрокаДаты);

Исключение

Возврат Дата(1, 1, 1);

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

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

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

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

// Строка вида "15.03.2026"

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

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

НоваяДата = Дата(Число(Части[2]), Число(Части[1]), Число(Части[0]));

КонецЕсли;

bsl
Попытка
	Результат = Дата(СтрокаИзФайла);
Исключение
	Сообщить("Не удалось распознать дату: " + СтрокаИзФайла);
	Результат = Дата(1, 1, 1);
КонецПопытки;

Ошибка в запросах и значения NULL

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

Решение — обработать NULL прямо в запросе с помощью конструкции ЕСТЬNULL:

ВЫБРАТЬ

ЕСТЬNULL(Заказы.ДатаОтгрузки, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОтгрузки

ИЗ

Документ.ЗаказПокупателя КАК Заказы

Также проверяйте параметры запроса. Если параметр периода не был установлен, в запрос уйдёт Неопределено, и сравнение с датой может завершиться ошибкой. Перед выполнением запроса убедитесь, что параметры заполнены, либо задайте значение по умолчанию: Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода) после проверки на заполненность.

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

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

Начните с простого: проверьте, все ли поля с датами заполнены в документе или настройках отчёта, который вызывает ошибку. Если ошибка появляется при загрузке файла (например, прайса или выписки), откройте файл и посмотрите на колонку с датами: нет ли там пустых ячеек, текста вроде «—» или «нет», дат в нестандартном виде. Часто достаточно привести колонку к единому формату даты в Excel и повторить загрузку.

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

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

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

Отдельно стоит упомянуть «лечение» ошибки через Попытка...Исключение...КонецПопытки с пустым блоком исключения. Формально программа перестаёт падать, но фактически вы теряете данные: вместо даты записывается пустое значение, и никто об этом не узнает, пока не понадобится отчёт за этот период. Блок исключения всегда должен либо сообщать о проблеме, либо записывать её в журнал.

Проверка результата после исправления

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

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

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

Повторение исходного действия
Норма

Действие выполняется без сообщения об ошибке

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

Ошибка воспроизводится на тех же данных

Граничные данные
Норма

Пустые и некорректные даты обрабатываются с понятным сообщением или корректным значением по умолчанию

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

На пустом значении программа падает или молча пропускает строку

Отчёты за период
Норма

Данные по датам в отчётах совпадают с ожидаемыми

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

Появились документы с пустой или подставленной текущей датой

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

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

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

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

Как выбрать способ решения

Маршрут решения

Как выбрать действие

Ошибка у пользователя в типовой конфигурации без доработокПроверьте заполненность дат в документе и настройках отчёта; при повторении — обновите конфигурацию и обратитесь к сопровождающему специалисту
Ошибка при загрузке данных из файлаПриведите колонку дат в файле к единому формату и уберите пустые и текстовые значения; при необходимости доработайте обработку загрузки проверкой
Ошибка в собственном коде или обработкеДобавьте проверку значения перед Дата() и обработку исключения с информативным сообщением
Ошибка в запросе или отчёте на СКДИспользуйте ЕСТЬNULL для полей даты и проверьте заполненность параметров периода
Ошибка после обмена даннымиПроверьте формат дат в файле обмена и правила конвертации; при расхождении форматов добавьте преобразование в правила

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

Может ли эта ошибка испортить данные в базе?

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

Почему ошибка появилась «сама», хотя раньше всё работало?

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

Как преобразовать строку вида «15.03.2026» в дату?

Функция Дата() такой формат напрямую не принимает — она ожидает «ГГГГММДД». Разбейте строку функцией СтрРазделить по точке и соберите дату из числовых компонентов: Дата(Год, Месяц, День). Перед этим убедитесь, что частей ровно три и все они числовые.

Что делать, если дата приходит из Excel как число?

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

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

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

Нужно ли обновлять конфигурацию, чтобы убрать ошибку?

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

Итог

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

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