При обмене данными между 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 может привести к логическим ошибкам в базе данных получателя.
Чтобы избежать ошибок при обмене данными, рекомендуем придерживаться следующих правил:
null для отсутствующих данных. Это стандарт де-факто в современных API. Если дата в 1С пустая, в JSON-структуре должно быть передано значение null.0001-01-01.Для реализации корректной сериализации необходимо программно проверять значение переменной перед записью в 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. Это универсальный способ обеспечить совместимость с большинством современных систем автоматизации.