Ошибка 1С: Преобразование значения к типу Дата не может быть выполнено
- Ошибка при выполнении функции
Дата(Строка)или литеральной инициализации даты. - Сообщение об ошибке:
{Модуль(Строка)}: Преобразование значения к типу Дата не может быть выполнено. - Сбой при загрузке дат из внешних источников (CSV, JSON, REST, Web-сервисы), если строка не соответствует строгому каноническому формату 1С.
1. Архитектурные требования к литералам дат в 1С
Во встроенном языке 1С тип Дата всегда содержит как дату, так и время (с точностью до секунды). Конструктор Дата(Строка) принимает строковый литерал строго фиксированного формата: "ГГГГММДД" или "ГГГГММДДЧЧММСС" (ровно 8 или 14 цифр без разделителей).
Любые попытки передать строки вида "31.12.2023", "2023-12-31" или "2023/12/31" в конструктор Дата() вызывают ошибку приведения типа.
2. Способы корректного создания и преобразования Даты
Способ 1: Прямой конструктор по компонентам (самый надежный)
// Дата(Год, Месяц, День, Час, Минута, Секунда)
РабочаяДата = Дата(2023, 12, 31, 23, 59, 59);
ПустаяДата = Дата(1, 1, 1); // 0001-01-01 00:00:00 (Пустая дата в 1С)Способ 2: Каноническая строка (без точек и дефисов)
// Формат строго 8 символов (ГГГГММДД) или 14 (ГГГГММДДЧЧММСС)
КаноническаяДата = Дата("20231231235959");Способ 3: Парсинг произвольной строки (ДД.ММ.ГГГГ) в дату
Функция ПреобразоватьСтрокуВДoffsets(СтрДата) Экспорт
// Входная строка формата "31.12.2023 23:59:59"
Попытка
// Замена точек и двоеточий на пробелы
Стр = СтрЗаменить(СтрЗаменить(СтрДата, ".", ""), ":", "");
Стр = СтрЗаменить(Стр, " ", ""); // Получаем "31122023235959"
День = Сред(Стр, 1, 2);
Месяц = Сред(Стр, 3, 2);
Год = Сред(Стр, 5, 4);
Час = ?(СтрДлина(Стр) >= 10, Сред(Стр, 9, 2), 0);
Минута = ?(СтрДлина(Стр) >= 12, Сред(Стр, 11, 2), 0);
Секунда= ?(СтрДлина(Стр) >= 14, Сред(Стр, 13, 2), 0);
Возврат Дата(Год, Месяц, День, Час, Минута, Секунда);
Исключение
Возврат Дата(1, 1, 1);
КонецПопытки;
КонецФункцииСпособ 4: Использование XMLЗначение для формата ISO 8601 (2023-12-31T23:59:59)
// Парсинг дат из REST API / JSON:
ДатаISO = "2023-12-31T23:59:59";
Дата1С = XMLЗначение(Тип("Дата"), ДатаISO); Частые вопросы (FAQ)
Как в 1С проверить дату на пустоту?
Используйте функцию ЗначениеЗаполнено(ПроверяемаяДата) или сравнение: ПроверяемаяДата = Дата(1, 1, 1) (или 'Дата("00010101")').
Почему Дата('2023-02-29') вызывает ошибку приведения типа?
2023 год не является високосным, поэтому 29 февраля в нем календарно не существует. 1С выполняет строгую проверку валидности календарной даты при конвертации.
Как преобразовать дату БСП-методами?
Используйте функцию СтроковыеФункцииКлиентСервер.СтрокаВДoffsets(СтрокаДаты, ФорматнаяСтрока).
Какой диапазон дат поддерживает платформа 1С:Предприятие 8?
Платформа поддерживает диапазон дат от 0001-01-01 00:00:00 до 3999-12-31 23:59:59. Использование годов >= 4000 или отрицательных годов невозможно.