Ошибка «Преобразование значения к типу Дата не может быть выполнено» в 1С
Содержание
Загрузили реестр из Excel, нажали «Записать» и получили Преобразование значения к типу Дата не может быть выполнено. Документ не проведён, в таблице триста строк, и непонятно, какая из них виновата.
Ошибка преобразования типа Дата в 1С значит одно: платформа получила значение, из которого не смогла собрать дату. Это может быть текст вроде 31.02.2026, пустая строка, число, дата вне допустимого диапазона или значение другого типа. Ниже — как найти источник, исправить данные и застраховать код.
Из чего 1С не может собрать дату
Тип «Дата» в 1С хранит и дату, и время. Допустимый диапазон — от 01.01.0001 до 31.12.9999. Значение 01.01.0001 0:00:00 называют пустой датой, это нормальное состояние реквизита.
Ошибка возникает, когда в операцию попадает что-то, что в такую дату не превращается. Типичные причины:
- 📄 Текст вместо даты. Ячейка Excel выглядит как дата, а на деле это строка с пробелом, апострофом или точкой в конце.
- 🔢 Несуществующий день.
30.02.2026,31.04.2026,00.01.2026. Календарь такого не знает. - 🌍 Другой формат. Файл выгружен в
2026-03-15или03/15/2026, а загрузка рассчитывает на15.03.2026. - 🧮 Число вместо даты. Excel хранит даты как порядковые числа (например,
46096), и при загрузке без преобразования они приходят числом. - 🕳 Пустая строка или
Неопределено. Часто из-за пустой ячейки в загружаемом файле. - 🔁 Смена типа реквизита. Раньше поле было строкой, потом его сделали датой, а в старых данных остались тексты.
- 🔌 Обмен. Пришёл XML, в котором дата записана с лишними символами или не в формате
ГГГГ-ММ-ДДTЧЧ:ММ:СС.
Первым делом надо понять, где именно возникает ошибка: при ручном вводе, при загрузке данных, в отчёте или в чужом коде. От этого зависит способ исправления.
Как найти место сбоя: сообщение и журнал регистрации
Сначала прочитайте сообщение целиком. В окне ошибки платформа показывает «Ошибка в модуле» или «Ошибка при вызове метода контекста» и номер строки. Если разработчик не нужен, а вы работаете в обычном режиме, нажмите кнопку подробного текста и скопируйте всё: имя модуля и процедуры подскажут, что именно запускалось.
Дальше открываем журнал.
- Откройте
Администрирование → Поддержка и обслуживание → Журнал регистрации. - Нажмите «Отбор» и выберите уровень «Ошибка».
- Задайте интервал: от момента, когда вы нажали кнопку, плюс минута в запас.
- Отфильтруйте по своему пользователю.
- Откройте запись и прочитайте комментарий и данные: в них видно документ, справочник или процедуру.
Если запись одна и без подробностей, повторите действие, а потом посмотрите журнал ещё раз. Два одинаковых события с разными данными сразу показывают, какое значение ломает операцию.
Если журнал пуст, а ошибка видна на экране, она, скорее всего, возникла на клиенте до записи в базу: при вводе в поле, при заполнении табличной части формой или внешней обработкой.
Что делать пользователю: исправляем данные без Конфигуратора
Большая часть случаев решается без программиста. Порядок такой — от простого к сложному.
Проверка введённой даты
Если ошибка выскакивает при вводе в поле:
- Сотрите значение целиком (
Ctrl+A,Delete) и введите дату цифрами с точками:15.03.2026. - Если нужно время, добавьте его через пробел:
15.03.2026 14:30:00. - Не вставляйте дату из мессенджера или PDF: вместе с ней приходят неразрывные пробелы. Наберите руками.
- Проверьте, что такой день вообще существует.
Проверка файла для загрузки
Для загрузки из Excel и CSV работает такая последовательность:
- Откройте файл и выделите столбец с датами.
- Задайте ячейкам формат «Дата» и посмотрите, изменилось ли отображение. Те ячейки, что остались прежними, текстовые.
- Найдите пустые ячейки и ячейки с пробелами: фильтр по столбцу покажет «(Пустые)» и значения с пробелами.
- Приведите все даты к одному виду
ДД.ММ.ГГГГ. - Сохраните файл и загрузите заново.
Быстрая проверка для сотен строк: в соседнем столбце напишите формулу =ЕСЛИОШИБКА(ДАТАЗНАЧ(A2);"ОШИБКА") и протяните вниз. Строки со словом «ОШИБКА» и есть виновники.
Загрузка в базу с реальными данными — операция необратимая по смыслу. Если загружаете массив документов, сначала прогоните файл в копии базы.
Пустые и «нулевые» даты в самой базе
Бывает, что реквизит документа содержит 01.01.0001, а форма или отчёт требуют настоящую дату. Откройте объект и проставьте дату вручную. Для массового исправления нужна обработка (см. ниже), правка записей по одной не поможет.
Сводка по способам:
| Способ | Когда использовать | Риск |
|---|---|---|
| Ввести дату заново цифрами | Ошибка в поле ввода | Минимальный |
| Исправить столбец в Excel | Ошибка при загрузке файла | Минимальный |
| Прогнать файл в копии базы | Большой объём данных | Нужна копия |
| Обработка по замене значений | Много записей с битой датой | Средний, нужна копия |
| Правка кода с проверкой | Ошибка в типовой или своей обработке | Зависит от навыка |
Технические методы исправления в Конфигураторе
Если ошибка повторяется в одном и том же месте, значит, дело в коде. Откройте Конфигуратор, найдите процедуру из текста ошибки (Ctrl+Alt+F — поиск по всей конфигурации) и посмотрите, что и откуда подставляется.
Функция Дата() и строки
Функция Дата(...) принимает либо числа, либо строку из цифр. Строка должна быть в виде ГГГГММДД или ГГГГММДДЧЧММСС.
// Правильно
Д1 = Дата(2026, 3, 15);
Д2 = Дата("20260315");
Д3 = Дата("20260315143000");
// Вызовет ошибку: в строке разделители
Д4 = Дата("15.03.2026");
Строку с точками надо сначала разобрать: взять день, месяц и год по частям и собрать дату через Дата(Год, Месяц, День). Если в строке мусор, а в Дата(2026, 2, 30) невозможный день — получите ту же ошибку.
Безопасное приведение через ОписаниеТипов
Метод ПривестиЗначение у описания типа не бросает исключение. Если дату собрать не удалось, он вернёт пустую дату:
ОписаниеДаты = Новый ОписаниеТипов("Дата");
Результат = ОписаниеДаты.ПривестиЗначение(ИсходноеЗначение);
Если Не ЗначениеЗаполнено(Результат) Тогда
// значение не распозналось: пропускаем строку или пишем в протокол
КонецЕсли;
Способ удобен в циклах загрузки: строка с мусором не обрывает весь процесс. Минус — пустая дата, которая получилась «по ошибке», неотличима от настоящей пустой. Поэтому проверяйте исходное значение, а не только результат.
Попытка и Исключение
Когда нужна своя реакция на сбой, оберните вызов:
Функция ПрочитатьДату(Текст)
Попытка
Возврат Дата(Текст);
Исключение
ЗаписьЖурналаРегистрации("Загрузка.Дата",
УровеньЖурналаРегистрации.Предупреждение,
,
,
"Не распознана дата: " + Текст);
Возврат Дата(1, 1, 1);
КонецПопытки;
КонецФункции
Первый шаг — не глушить ошибку молча. Запись в журнал даёт возможность потом найти все проблемные строки.
Дата из XML и JSON
При обмене между базами и с внешними системами дата приходит строкой в формате 2026-03-15T14:30:00. Преобразуйте её средствами платформы, а не подстановкой кусков строки:
ДатаИзXML = XMLЗначение(Тип("Дата"), "2026-03-15T14:30:00");
Обратная операция — XMLСтрока(Дата). Если в строке лишняя буква или смещение, которого платформа не ждёт, будет всё та же ошибка. Выведите исходный текст в журнал и посмотрите на него глазами.
Правка типовой конфигурации «на поддержке» блокирует автоматическое обновление этого модуля. Для типовых решений лучше расширение: оно переопределяет поведение и не снимает объект с поддержки.
Обработка некорректных значений при массовой правке
Когда в базе накопились записи с битыми датами (после неудачной загрузки или смены типа реквизита), делают так:
- Сделайте копию базы . Это единственный раз, когда копия обязательна.
- Выберите объекты с проблемой: через запрос к таблице документа с отбором по пустой дате или по условию
Дата < ДАТАВРЕМЯ(2000, 1, 1). - Для каждого найденного объекта определите правильное значение. Часто оно есть в другом реквизите: дате документа-основания, дате создания записи.
- Запишите значение через обработку объектов, а не напрямую в таблицу базы.
Запрос для поиска годится даже в консоли запросов:
ВЫБРАТЬ
Док.Ссылка,
Док.Дата
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Док
ГДЕ
Док.Дата < ДАТАВРЕМЯ(2000, 1, 1)
Имя документа замените на нужное. В запросах дату задают именно функцией ДАТАВРЕМЯ(год, месяц, день), а не строкой. Строкой в условии она не сработает.
Даты раньше 2000 года в современной базе подозрительны почти всегда. Это либо ошибка ввода (в 26 вместо 2026), либо «нулевая» дата.
Ввод двузначного года
Если пользователь ввёл 15.03.26, платформа достроит год сама. Но при вводе 15.03.126 получится год 126-й, и потом отчёты за период поведут себя странно. Если в базе встречаются такие записи, найдите их тем же запросом, поправьте и поставьте проверку при вводе.
Отчёты и динамические списки: ошибка в параметрах
Ошибка бывает и в отчёте на СКД. Тогда она не связана с данными базы, виноваты параметры.
- 📊 Параметр отчёта «Период» содержит текст вместо даты.
- 🧾 Настройка отбора использует значение типа «Строка» в условии с датой.
- 🔄 Сохранённый вариант отчёта остался от старой версии конфигурации, где тип поля был другим.
Что делать: откройте настройки отчёта, сбросьте сохранённые настройки (в меню «Ещё» или «Все действия» — в разных формах эта команда называется по-разному, поищите «Установить стандартные настройки»), задайте период заново через выбор из календаря. Если после этого отчёт открывается, значит, дело было в сохранённом варианте.
Профилактика: чтобы ошибка не вернулась при обмене и загрузках
Несколько приёмов, которые работают на практике:
- ✅ Единый формат даты в шаблонах загрузки. Заведите файл-образец, где столбец с датами уже отформатирован как дата, и раздайте его сотрудникам.
- ✅ Проверка до записи. В своих обработках сначала разберите строку и проверьте, что день, месяц и год укладываются в календарь. Только потом собирайте дату.
- ✅ Лог загрузки. Пишите в протокол номер строки и исходное значение. Через неделю вы поблагодарите себя.
- ✅ Тест на границах. Прогоните обработку на датах
29.02невисокосного года,31.12, пустом значении и дате в формате с временем. - ✅ Контроль при смене типа реквизита. Меняете строку на дату — сначала очистите или преобразуйте старые данные.
Для ручной проверки перед обменом удобен чек-лист:
Если ничего не помогло
Если даты в порядке, а ошибка остаётся, проверьте менее очевидные вещи.
- Региональные настройки. Формат даты в операционной системе сервера и клиента может отличаться. Для серверной базы смотрите настройки пользователя, под которым работает служба.
- Версия платформы и конфигурации. После обновления поведение отдельных функций иногда меняется. Проверьте, что платформа и конфигурация актуальные и совместимые.
- Внешняя обработка или отчёт. Откройте их в Конфигураторе и посмотрите, под какую версию они писались. Проблему часто решает обновлённая версия файла от разработчика.
- Повреждение данных. Запустите проверку и исправление информационной базы (
Администрирование → Тестирование и исправлениев Конфигураторе). Для этого нужен монопольный доступ, поэтому выбирайте время, когда в базе никто не работает . - Режим отладки. Включите остановку по ошибке и посмотрите значение переменной в момент сбоя. Это самый быстрый способ найти нужную строку в чужом коде.
Если ваш разработчик недоступен, пришлите ему полный текст ошибки с номером строки и запись из журнала регистрации. По этим двум фрагментам причину обычно находят за несколько минут.
Частые вопросы
Чем пустая дата отличается от неправильной?
01.01.0001 0:00:00, допустимое значение. Неправильная — любое, из которого платформа не может собрать дату, например 30.02.2026 или текст с буквами.Почему ошибка появляется только у одного пользователя?
Можно ли хранить дату строкой, чтобы не мучиться?
Как задать дату в запросе, чтобы не получить ошибку?
ДАТАВРЕМЯ(год, месяц, день) или передайте дату параметром запроса типа «Дата». Подстановка строки вида 15.03.2026 в текст запроса не сработает.