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

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

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

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

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

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

Исправление зависит от того, где именно возникает сбой: в пользовательском режиме, при обмене данными или в программном коде. Ниже разобраны основные сценарии, способы диагностики и безопасные методы исправления с примерами кода.

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

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

Типичные ситуации, в которых появляется сообщение:

  • загрузка данных из Excel или CSV, где дата записана как «31.12.2026», «12/31/2026» или текстом;
  • обмен между базами, где в источнике реквизит даты не заполнен и передаётся пустая строка;
  • программный вызов Дата(СтроковоеЗначение) со строкой не в каноническом формате;
  • ввод даты в поле формы, когда региональные настройки сеанса отличаются от ожидаемых;
  • разбор ответа веб-сервиса или JSON, где дата пришла в формате ISO или в виде числа миллисекунд.
Ошибка в пользовательском режимеПроблема в данных

Проверьте вводимое значение, формат даты в файле загрузки или настройки обмена

Ошибка в коде при отладкеПроблема в логике

Найдите строку с преобразованием и посмотрите фактическое значение переменной

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

Проверьте, заполнен ли реквизит даты в базе-источнике и как он сериализуется

Ошибка после обновленияИзменились данные или код

Сравните поведение до и после, проверьте новые обработчики загрузки

Как найти источник проблемы

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

Если есть доступ к конфигуратору, включите отладку и остановку по ошибке: меню «Отладка» → «Остановка по ошибке». Платформа остановится ровно на той строке кода, где произошло исключение, и вы увидите фактическое значение переменной, которое не удалось преобразовать. Это самый быстрый способ диагностики.

При обменах и загрузках полезно открыть исходный файл (Excel, XML, CSV) и найти проблемную колонку. Часто оказывается, что в части строк дата записана текстом, содержит время в нестандартном виде или ячейка пуста, а обработчик загрузки не предусматривает таких вариантов.

Порядок диагностики
  1. 1
    Зафиксируйте момент возникновения ошибки: действие, форма, кнопка
  2. 2
    Если есть доступ к конфигуратору — включите остановку по ошибке и повторите действие
  3. 3
    Посмотрите фактическое значение переменной, которое не преобразуется
  4. 4
    Определите источник значения: поле формы, файл, запрос, реквизит объекта
  5. 5
    Исправьте данные в источнике или добавьте проверку перед преобразованием
  6. 6
    Повторите операцию и убедитесь, что ошибка ушла, а результат корректен

Исправление в пользовательском режиме

Если ошибка возникает при ручном вводе даты, проверьте формат ввода. В большинстве конфигураций дата вводится как «дд.мм.гггг». Ввод «31/12/2026» или «2026-12-31» в поле, не рассчитанном на такой формат, может вызвать ошибку. Введите дату через точку или воспользуйтесь календарём, встроенным в поле ввода.

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

Если ошибка возникает при обмене между базами, проверьте в базе-источнике объект, на котором падает выгрузка. Незаполненный реквизит даты, дата вида «01.01.0001» в поле, которое приёмник считает обязательным, — типовые причины. Заполните реквизит и повторите обмен.

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

Во встроенном языке 1С конструктор Дата() принимает строку только в каноническом формате «ГГГГММДДччммсс» (время можно опускать). Строка «31.12.2026» вызовет именно ту ошибку, о которой идёт речь. Поэтому строки из внешних источников нужно предварительно разбирать.

Типовой безопасный приём — разобрать строку на составляющие и собрать дату из чисел:

СтрокаДаты = "31.12.2026";

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

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

Попытка

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

Исключение

Результат = Дата(1,1,1); // пустая дата как признак ошибки

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

Иначе

Результат = Дата(1,1,1);

КонецЕсли;

Для строк уже в каноническом формате (например, «20261231235959» из обмена) прямой вызов Дата(Строка) допустим, но его тоже стоит оборачивать в Попытка...Исключение, если источник данных не контролируется. Альтернатива — проверка регулярным выражением или длины строки перед преобразованием.

Отдельный случай — даты из JSON и веб-сервисов. Там дата часто приходит в формате ISO «2026-12-31T23:59:59» или как число миллисекунд Unix. Для ISO-строки уберите разделители и символ «T» через СтрЗаменить, получив канонический вид, и только затем вызывайте Дата().

bsl
Функция СтрокаВДату(Строка)
    Строка = СтрЗаменить(Строка, "-", "");
    Строка = СтрЗаменить(Строка, "T", "");
    Строка = СтрЗаменить(Строка, ":", "");
    Попытка
        Возврат Дата(Строка);
    Исключение
        Возврат Дата(1,1,1);
    КонецПопытки;
КонецФункции

Проверка значения перед преобразованием

Лучший способ избежать ошибки — не преобразовывать заведомо некорректные значения. Перед вызовом Дата() проверяйте входные данные:

  • пустая строка или значение Неопределено — преобразование пропускается, результатом назначается пустая дата Дата(1,1,1) или значение по умолчанию;
  • длина строки и допустимые символы — только цифры и ожидаемые разделители;
  • тип значения — если источник может вернуть число, ссылку или объект, сначала проверьте тип через ТипЗнч().

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

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

Типичные ошибки
01
Прямой вызов Дата("31.12.2026") — конструктор понимает только формат ГГГГММДД, строка с разделителями вызовет ту же ошибку
02
Глушение ошибки пустым блоком Исключение без журналирования — данные теряются незаметно, а причина остаётся
03
Исправление данных только в приёмнике при обмене — при следующей выгрузке из источника ошибка вернётся
04
Игнорирование часовых поясов при разборе дат из веб-сервисов — дата сдвигается на день, хотя формально ошибки нет
05
Изменение кода типовой конфигурации без анализа — при обновлении исправление затрётся, и ошибка появится снова

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

Как проверить, что проблема решена

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

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

Повторная загрузка файла
Норма

Загрузка завершается без сообщений об ошибке, все строки на месте

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

Часть строк пропала или ошибка повторяется на других значениях

Значение даты в объекте
Норма

Дата соответствует исходным данным, без сдвига на день

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

Дата пустая или отличается от ожидаемой

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

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

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

Ошибки фиксируются при каждом обмене

Обмен между базами
Норма

Объект выгружается и загружается без исключений

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

Обмен прерывается на том же объекте

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

Итог

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

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

Частые вопросы

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

Конструктор Дата() принимает строку только в каноническом формате «ГГГГММДДччммсс» без разделителей. Строку «31.12.2026» нужно сначала разобрать на день, месяц и год (например, через СтрРазделить) и передать в конструктор три числа: Дата(2026, 12, 31).

Ошибка возникает при загрузке из Excel, хотя в файле даты выглядят нормально. Что делать?

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

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

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

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

В базе-источнике. Найдите объект, на котором прерывается обмен, и проверьте его реквизиты с типом «Дата»: незаполненные поля или значения, которые правила обмена сериализуют как пустую строку, — самая частая причина. Исправлять нужно данные в источнике, а не только в приёмнике.

Дата из веб-сервиса приходит как «2026-12-31T23:59:59». Как её преобразовать?

Уберите разделители и символ «T» функцией СтрЗаменить, получив строку «20261231235959», и передайте её в Дата(). Учтите также возможный сдвиг из-за часовых поясов, если время в ответе указано в UTC.

Ошибка возникает в типовой конфигурации при штатной операции. Нужно ли править код?

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