Как правильно передавать пустую дату 1С в JSON при интеграции с другими системами?

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

При обмене данными между 1С и сторонними системами разработчики часто сталкиваются с проблемой: как корректно передать «пустую» дату. В 1С пустая дата по стандарту имеет значение 0001-01-01T00:00:00. Однако для большинства внешних систем и протоколов обмена это значение является валидной датой начала летоисчисления, а не признаком отсутствия данных. Разберем подробно, как решить эту задачу и обеспечить корректную интеграцию.

Почему возникает проблема с пустой датой?

Внутренняя архитектура 1С предполагает, что тип Дата является примитивным и не может содержать значение null. Если переменная типа Дата не инициализирована, 1С присваивает ей значение 0001-01-01T00:00:00. При сериализации в JSON стандартными средствами платформы 1С буквально транслирует это значение в строковый формат.

Проблема заключается в том, что стандарт JSON (RFC 8259) не имеет специализированного типа «Дата». Даты в JSON передаются как строки. Внешние системы, такие как веб-сервисы на C#, Java или PHP, ожидают либо специфический формат строки, либо значение null, означающее отсутствие данных. Передача 0001-01-01 может привести к логическим ошибкам в базе данных получателя.

Рекомендации по реализации интеграции

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

  1. Используйте null для отсутствующих данных. Это стандарт де-факто в современных API. Если дата в 1С пустая, в JSON-структуре должно быть передано значение null.
  2. Согласуйте «контракт данных». Перед началом разработки обязательно уточните у разработчиков принимающей системы, как именно они ожидают видеть «пустую» дату.
  3. Фильтруйте поля. Если API позволяет, просто не включайте ключ с датой в JSON-объект, если значение равно 0001-01-01.

Техническая реализация в 1С

Для реализации корректной сериализации необходимо программно проверять значение переменной перед записью в JSON. Рассмотрим пример, как заменить пустую дату на null:


// Пример функции для формирования структуры с корректной датой
Функция ПодготовитьДанныеДляJSON(ИсходнаяДата)
    Результат = Новый Структура;
    
    Если ИсходнаяДата = '00010101' Тогда
        Результат.Вставить("ДатаДокумента", Null);
    Иначе
        Результат.Вставить("ДатаДокумента", ИсходнаяДата);
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

// Сериализация структуры
Данные = ПодготовитьДанныеДляJSON(Дата);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
ОтветСтрока = ЗаписьJSON.Закрыть();

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

При использовании метода ЗаписатьJSON вы можете гибко настраивать параметры сериализации, передавая объект НастройкиСериализации. Это позволяет управлять форматом даты (ISO, JavaScript или Microsoft) и способом обработки смещения времени (UTC или локальное время).

Важно помнить, что при десериализации (чтении данных из JSON в 1С) процесс еще более требователен к форматам. Если принимающая сторона присылает свои данные, вам необходимо заранее определить ИменаСвойствСоЗначениямиДата и указать ОжидаемыйФорматДаты. Если формат присланных данных не совпадет с настроенным в 1С, система вызовет исключение.

Резюме

Не полагайтесь на автоматическую конвертацию пустой даты 1С в формат 0001-01-01, если вы не уверены, что принимающая сторона умеет с этим работать. Всегда стремитесь к тому, чтобы отсутствие значения в 1С превращалось в null в JSON. Это универсальный способ обеспечить совместимость с большинством современных систем автоматизации.

← На главную