Как корректно преобразовывать даты из JSON в 1С, если поле может быть пустым?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Метод ПрочитатьJSON при указании параметра ФорматДатыJSON ожидает, что в указанных свойствах будет находиться строка строго определенного формата. Если на вход попадает «пустышка», функция пытается ее обработать как дату, что приводит к исключению. Обычная попытка преобразовать строку через Дата(Строка) или Сред() в случае пустых значений также вызывает ошибку выполнения. Чтобы этого избежать, нам нужно перехватить процесс обработки свойства до того, как платформа упадет с ошибкой.

Решение через использование функции восстановления

Наиболее профессиональный и надежный способ — это использование механизма функции восстановления. Этот подход позволяет гибко обрабатывать каждое значение, которое 1С встречает при разборе файла или строки JSON.

Для реализации этого метода нам потребуется выполнить следующие шаги:

  1. Создать отдельную функцию, которая будет принимать параметры Свойство, Значение и ДополнительныеПараметры.
  2. Внутри этой функции прописать логику проверки: если значение пустое, возвращать Дата(1, 1, 1), а если заполнено — применять преобразование.
  3. Указать имя этой функции при вызове ПрочитатьJSON.

Посмотрим, как это выглядит на практике в коде:


Функция ФункцияВосстановленияЧтения(Свойство, Значение, ДополнительныеПараметры) Экспорт
    Если Свойство = "closedDate" Тогда
        Результат = Дата(1, 1, 1);
        Если ЗначениеЗаполнено(Значение) Тогда
            Результат = ПрочитатьДатуJSON(Значение);
        КонецЕсли;
        Возврат Результат;
    КонецЕсли;
    // Можно добавить обработку других свойств
    Возврат Значение;
КонецФункции

Далее, при считывании данных, мы вызываем ПрочитатьJSON, передавая имя нашей функции в качестве параметра:


Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("ПутьКФайлу.json");
Данные = ПрочитатьJSON(Чтение, Ложь, , , "ФункцияВосстановленияЧтения", ЭтотОбъект);
Чтение.Закрыть();

Альтернативный подход: использование XMLЗначение

Если вы хотите избежать создания сложных функций восстановления или данные приходят в простом строковом формате ISO, можно считать JSON как обычные строки (без попытки автоматического восстановления даты), а затем уже в коде обработать их через XMLЗначение. Этот метод хорош тем, что он «прощает» многие огрехи формата.

Рассмотрим пример того, как это можно реализовать:


// Предположим, что при чтении мы получили строку "2022-01-01T23:59:59"
СтрокаДата = "2022-01-01T23:59:59";
Если Не ПустаяСтрока(СтрокаДата) Тогда
    ПреобразованнаяДата = XMLЗначение(Тип("Дата"), СтрокаДата);
Иначе
    ПреобразованнаяДата = Дата(1, 1, 1);
КонецЕсли;

Основные рекомендации по работе с датами в JSON

Чтобы ваш код был стабильным, придерживайтесь следующих правил:

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

← На главную