Разработка и Конфигурация · 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Сохраните полный текст ошибки и вспомните, какое действие её вызвало
- 2Откройте журнал регистрации и найдите событие ошибки с деталями
- 3Если есть конфигуратор — включите «Остановку по ошибке» и воспроизведите ситуацию
- 4В отладчике оцените значение, передаваемое в Дата() или в реквизит даты
- 5Определите источник значения: пользовательский ввод, файл, запрос, обмен
- 6Исправьте данные или добавьте проверку перед преобразованием
Исправление в коде: безопасное преобразование дат
Главный принцип защитного программирования в 1С: никогда не передавать в Дата() значение, которое не проверено. Перед преобразованием строки убедитесь, что она не пустая и имеет ожидаемую длину и состав символов.
Типовой защитный шаблон выглядит так:
Функция СтрокаВДату(СтрокаДаты)
Если НЕ ЗначениеЗаполнено(СтрокаДаты) Тогда
Возврат Дата(1, 1, 1); // пустая дата
КонецЕсли;
СтрокаДаты = СокрЛП(СтрокаДаты);
Если СтрДлина(СтрокаДаты) < 8 Тогда
Возврат Дата(1, 1, 1);
КонецЕсли;
Попытка
Возврат Дата(СтрокаДаты);
Исключение
Возврат Дата(1, 1, 1);
КонецПопытки;
КонецФункции
Обратите внимание на приём с Дата(1, 1, 1) — это «пустая дата» в 1С. Возвращать её вместо аварийного прерывания удобно, когда отсутствие даты — допустимая ситуация. Если дата обязательна, лучше не глотать ошибку, а вывести понятное сообщение пользователю: в какой строке файла или в каком реквизите найдено некорректное значение.
Для дат в формате «ДД.ММ.ГГГГ», которые часто приходят из Excel и внешних систем, прямое преобразование не сработает — строку нужно разобрать вручную:
// Строка вида "15.03.2026"
Части = СтрРазделить(СтрокаДаты, ".");
Если Части.Количество() = 3 Тогда
НоваяДата = Дата(Число(Части[2]), Число(Части[1]), Число(Части[0]));
КонецЕсли;
Попытка
Результат = Дата(СтрокаИзФайла);
Исключение
Сообщить("Не удалось распознать дату: " + СтрокаИзФайла);
Результат = Дата(1, 1, 1);
КонецПопытки;Ошибка в запросах и значения NULL
Отдельный класс проблем — запросы. Когда поле даты получено левым соединением и совпадений не нашлось, в выборке оказывается NULL. Если затем это значение участвует в сравнении с датой или передаётся в функцию преобразования, возникает та же ошибка.
Решение — обработать NULL прямо в запросе с помощью конструкции ЕСТЬNULL:
ВЫБРАТЬ
ЕСТЬNULL(Заказы.ДатаОтгрузки, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОтгрузки
ИЗ
Документ.ЗаказПокупателя КАК Заказы
Также проверяйте параметры запроса. Если параметр периода не был установлен, в запрос уйдёт Неопределено, и сравнение с датой может завершиться ошибкой. Перед выполнением запроса убедитесь, что параметры заполнены, либо задайте значение по умолчанию: Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода) после проверки на заполненность.
Ошибка у пользователя без доступа к коду
Если ошибка возникает у вас как у пользователя типовой конфигурации и прав на конфигуратор нет, действовать нужно через данные. Наиболее частые пользовательские сценарии — незаполненная дата в документе, некорректный период в отчёте или проблема при загрузке данных из файла.
Начните с простого: проверьте, все ли поля с датами заполнены в документе или настройках отчёта, который вызывает ошибку. Если ошибка появляется при загрузке файла (например, прайса или выписки), откройте файл и посмотрите на колонку с датами: нет ли там пустых ячеек, текста вроде «—» или «нет», дат в нестандартном виде. Часто достаточно привести колонку к единому формату даты в Excel и повторить загрузку.
Если ошибка возникает при открытии конкретного документа, который раньше работал, возможно, данные были повреждены при обмене или доработкой. В этом случае стоит запустить тестирование и исправление информационной базы (только на копии и только администратору) либо обратиться к специалисту, сопровождающему вашу конфигурацию.
Типичные ошибки при исправлении
Отдельно стоит упомянуть «лечение» ошибки через Попытка...Исключение...КонецПопытки с пустым блоком исключения. Формально программа перестаёт падать, но фактически вы теряете данные: вместо даты записывается пустое значение, и никто об этом не узнает, пока не понадобится отчёт за этот период. Блок исключения всегда должен либо сообщать о проблеме, либо записывать её в журнал.
Проверка результата после исправления
После внесения изменений проверьте не только исходный сценарий, но и смежные. Если ошибка была при загрузке файла — повторите загрузку на том же файле и на файле с пустыми ячейками дат. Если в отчёте — сформируйте его с разными периодами, включая пустой период и период без данных.
Как проверить результат
Действие выполняется без сообщения об ошибке
Ошибка воспроизводится на тех же данных
Пустые и некорректные даты обрабатываются с понятным сообщением или корректным значением по умолчанию
На пустом значении программа падает или молча пропускает строку
Данные по датам в отчётах совпадают с ожидаемыми
Появились документы с пустой или подставленной текущей датой
Новых ошибок преобразования даты нет
Ошибки продолжают записываться после исправления
Как выбрать способ решения
Как выбрать действие
Часто задаваемые вопросы
Может ли эта ошибка испортить данные в базе?
Сама по себе — нет: ошибка прерывает выполнение кода до того, как некорректное значение будет записано. Однако если транзакция была начата, её откат происходит автоматически, поэтому частично записанные данные не остаются. Опасность представляет не ошибка, а неправильное её «лечение» — например, подмена дат произвольными значениями.
Почему ошибка появилась «сама», хотя раньше всё работало?
Код не менялся, но изменились данные. Типичные триггеры: загружен файл с новым форматом дат, обмен стал присылать пустые значения, пользователь оставил незаполненным реквизит, который раньше всегда заполнялся. Ищите, что изменилось во входных данных в момент появления ошибки.
Как преобразовать строку вида «15.03.2026» в дату?
Функция Дата() такой формат напрямую не принимает — она ожидает «ГГГГММДД». Разбейте строку функцией СтрРазделить по точке и соберите дату из числовых компонентов: Дата(Год, Месяц, День). Перед этим убедитесь, что частей ровно три и все они числовые.
Что делать, если дата приходит из Excel как число?
Excel хранит даты как количество дней от своей точки отсчёта, и такое число напрямую в дату 1С не преобразуется. Правильный путь — настроить чтение ячейки как даты через формат ячейки в файле или через методы объекта Excel, либо пересчитать число в дату с учётом базовой даты Excel, что менее надёжно. Проще всего заранее привести колонку в файле к текстовому формату «ГГГГММДД».
Ошибка возникает только у одного пользователя. В чём причина?
Скорее всего, дело в данных, с которыми работает именно этот пользователь: его документы, его настройки отчётов или сохранённые варианты с пустым периодом. Попробуйте воспроизвести его действие под его учётной записью и проверьте сохранённые настройки отчётов — их очистка часто решает проблему.
Нужно ли обновлять конфигурацию, чтобы убрать ошибку?
Если конфигурация типовая и ошибка воспроизводится на корректных данных, возможно, это известная ошибка релиза, исправленная в обновлении — проверьте актуальность версии. Но чаще причина в данных или доработках, и обновление само по себе проблему не решит. Обновление имеет смысл после того, как источник ошибки локализован.
Что важно запомнить
Ошибка «Преобразование значения к типу Дата не может быть выполнено» всегда означает, что в функцию Дата(), реквизит даты или операцию сравнения попало значение, не похожее на дату: пустая строка, текст, число, NULL или Неопределено. Найдите место преобразования через журнал регистрации или остановку по ошибке, проверьте фактическое значение и добавьте проверку перед преобразованием. Не маскируйте ошибку пустым блоком Попытка/Исключение и не работайте с рабочей базой без резервной копии.