Вот мне все тыкают, о том почему я часто в XML делаю, а не в JSON.
Типа JSON ведь круто выигрывает перед XML и быстрее и меньше весит...
Вот решил переделать ради эксперимента типовую систему версионирования объектов в 1С на JSON
- Сохранение в JSON:
Поменял типовое сохранение версии в XML через СериализаторXDTO в JSON
Примечение: См. комментарии //+Малышев ... //-Малышев, доработок минимально
&Вместо("СериализоватьОбъект")
Функция рвjson_СериализоватьОбъект(Объект)
//+Малышев Д.А. 2026-01-04
//было_н
//ЗаписьXML = Новый ЗаписьFastInfoset;
//ЗаписьXML.УстановитьДвоичныеДанные();
//ЗаписьXML.ЗаписатьОбъявлениеXML();
//
//ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное);
//
//Возврат ЗаписьXML.Закрыть();
//было_к
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Объект, НазначениеТипаXML.Явное);
Возврат ЗаписьJSON.Закрыть();
//-Малышев Д.А. 2026-01-04
КонецФункции
- Восстановление версии из JSON:
Сделал через обратный возврат версии из формата JSON в XML формат, и дальше идёт разбор типовым кодом (чтобы длинный типовой код разбора не переписывать)
Функция рвjson_ПолучитьДвоичныеДанныеJSON(ДвоичныеДанные)
//Преобразуем JSON в XML
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ДвоичныеДанные);
ОбъектXDTO = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
ЗаписьXML = Новый ЗаписьFastInfoset;
ЗаписьXML.УстановитьДвоичныеДанные();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписатьXML(ЗаписьXML, ОбъектXDTO, НазначениеТипаXML.Явное);
Возврат ЗаписьXML.Закрыть();
КонецФункции
&Вместо("ВосстановитьОбъектПоXML")
Функция рвjson_ВосстановитьОбъектПоXML(ДанныеОбъекта, ТекстСообщенияОбОшибке)
УстановитьПривилегированныйРежим(Истина);
ДвоичныеДанные = ДанныеОбъекта;
Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда
ДвоичныеДанные = ДанныеОбъекта.Объект;
КонецЕсли;
//+Малышев Д.А. 2026-01-04
Попытка
ДвоичныеДанные = рвjson_ПолучитьДвоичныеДанныеJSON(ДвоичныеДанные);;
Исключение
ДвоичныеДанные = ДанныеОбъекта.Объект;
КонецПопытки;
//-Малышев Д.А. 2026-01-04
ЧтениеFastInfoSet = Новый ЧтениеFastInfoSet;
ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные);
Попытка
Объект = ПрочитатьXML(ЧтениеFastInfoSet);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование';
|en = 'Versioning'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось перейти на выбранную версию.
|Возможная причина: версия объекта была записана в другой версии приложения.
|Техническая информация об ошибке: %1';
|en = 'Couldn''t migrate to the selected version.
|Possible causes: The object version was saved in the app with a different version.
|Error details: %1'");
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Неопределено;
КонецПопытки;
Возврат Объект;
КонецФункции
&Вместо("РазборПредставленияОбъектаXML")
Функция рвjson_РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка)
Результат = Новый Структура;
Результат.Вставить("ТабличныеДокументы");
Результат.Вставить("ДополнительныеРеквизиты");
Результат.Вставить("СкрываемыеРеквизиты", Новый Массив);
ДвоичныеДанные = ДанныеВерсии;
Если ТипЗнч(ДанныеВерсии) = Тип("Структура") Тогда
ДвоичныеДанные = ДанныеВерсии.Объект;
ДанныеВерсии.Свойство("ТабличныеДокументы", Результат.ТабличныеДокументы);
ДанныеВерсии.Свойство("ДополнительныеРеквизиты", Результат.ДополнительныеРеквизиты);
ДанныеВерсии.Свойство("СкрываемыеРеквизиты", Результат.СкрываемыеРеквизиты);
КонецЕсли;
ЗначенияРеквизитов = Новый ТаблицаЗначений;
ЗначенияРеквизитов.Колонки.Добавить("НаименованиеРеквизита");
ЗначенияРеквизитов.Колонки.Добавить("ЗначениеРеквизита");
ЗначенияРеквизитов.Колонки.Добавить("ТипРеквизита");
ЗначенияРеквизитов.Колонки.Добавить("Тип");
ТабличныеЧасти = Новый Соответствие;
//+Малышев Д.А. 2026-01-04
Попытка
ДвоичныеДанные = рвjson_ПолучитьДвоичныеДанныеJSON(ДвоичныеДанные);;
Исключение
ДвоичныеДанные = ДанныеОбъекта.Объект;
КонецПопытки;
//-Малышев Д.А. 2026-01-04
ЧтениеXML = Новый ЧтениеFastInfoSet;
ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные);
// Уровень позиции маркера в иерархии XML:
// 0 - уровень не задан
// 1 - первый элемент (имя объекта)
// 2 - описание реквизита или табличной части
// 3 - описание строки табличной части
// 4 - описание поля строки табличной части.
УровеньЧтения = 0;
МетаданныеОбъекта = Ссылка.Метаданные();
ТипЗначенияПоляТЧ = "";
// Основной цикл разбора по XML.
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
УровеньЧтения = УровеньЧтения + 1;
Если УровеньЧтения = 1 Тогда // Указатель на первом элементе XML - корень XML.
// В ЧтениеXML.Имя имя объекта, но оно нам не нужно.
ИначеЕсли УровеньЧтения = 2 Тогда // Указатель на втором уровне - это реквизит или имя табличной части.
ИмяРеквизита = ЧтениеXML.Имя;
// Любой реквизит "может оказаться" табличной частью, поэтому на всякий случай его запомним.
ИмяТабличнойЧасти = ИмяРеквизита;
Если МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТабличнойЧасти) <> Неопределено Тогда
ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений);
КонецЕсли;
НовоеЗначение = ЗначенияРеквизитов.Добавить();
НовоеЗначение.НаименованиеРеквизита = ИмяРеквизита;
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут
И ЧтениеXML.Имя = "xsi:type" Тогда
НовоеЗначение.ТипРеквизита = ЧтениеXML.Значение;
XMLТип = ЧтениеXML.Значение;
Если СтрНачинаетсяС(XMLТип, "xs:") Тогда
НовоеЗначение.Тип = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema"));
Иначе
НовоеЗначение.Тип = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, ""));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(НовоеЗначение.Тип) Тогда
ОписаниеРеквизита = МетаданныеРеквизита(МетаданныеОбъекта, ИмяРеквизита);
Если ОписаниеРеквизита = Неопределено Тогда
ОписаниеРеквизита = Метаданные.ОбщиеРеквизиты.Найти(ИмяРеквизита);
КонецЕсли;
Если ОписаниеРеквизита = Неопределено И Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) Тогда
ОписаниеРеквизита = МетаданныеОбъекта.ПризнакиУчета.Найти(ИмяРеквизита);
КонецЕсли;
Если ОписаниеРеквизита <> Неопределено
И ОписаниеРеквизита.Тип.Типы().Количество() = 1 Тогда
НовоеЗначение.Тип = ОписаниеРеквизита.Тип.Типы()[0];
КонецЕсли;
КонецЕсли;
ИначеЕсли (УровеньЧтения = 3) И ЧтениеXML.Имя = "Row" Тогда // Указатель на поле табличной части.
Если ТабличныеЧасти[ИмяТабличнойЧасти] = Неопределено Тогда
ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений);
КонецЕсли;
ТабличныеЧасти[ИмяТабличнойЧасти].Добавить();
ИначеЕсли УровеньЧтения = 4 Тогда
Если ЧтениеXML.Имя = "v8:Type" Тогда
Если НовоеЗначение.ЗначениеРеквизита = Неопределено Тогда
НовоеЗначение.ЗначениеРеквизита = "";
КонецЕсли;
Иначе // Указатель на поле табличной части.
ТипЗначенияПоляТЧ = "";
ИмяПоляТЧ = ЧтениеXML.Имя;
Таблица = ТабличныеЧасти[ИмяТабличнойЧасти];// ТаблицаЗначений
Если Таблица.Колонки.Найти(ИмяПоляТЧ)= Неопределено Тогда
Таблица.Колонки.Добавить(ИмяПоляТЧ);
КонецЕсли;
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут
И ЧтениеXML.Имя = "xsi:type" Тогда
XMLТип = ЧтениеXML.Значение;
Если СтрНачинаетсяС(XMLТип, "xs:") Тогда
ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema"));
Иначе
ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, ""));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
УровеньЧтения = УровеньЧтения - 1;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если (УровеньЧтения = 2) Тогда // значение реквизита
Попытка
НовоеЗначение.ЗначениеРеквизита = ?(ЗначениеЗаполнено(НовоеЗначение.Тип), XMLЗначение(НовоеЗначение.Тип, ЧтениеXML.Значение), ЧтениеXML.Значение);
Исключение
НовоеЗначение.ЗначениеРеквизита = ЧтениеXML.Значение;
КонецПопытки;
ИначеЕсли (УровеньЧтения = 4) Тогда // значение реквизита
Если НовоеЗначение.Тип = Тип("ОписаниеТипов") Тогда
ТипСтрокой = Строка(ИзXMLТипа(Новый ТипДанныхXML(ЧтениеXML.Значение, "")));
Если ПустаяСтрока(ТипСтрокой) Тогда
ТипСтрокой = ЧтениеXML.Значение;
КонецЕсли;
Если Не ПустаяСтрока(НовоеЗначение.ЗначениеРеквизита) Тогда
НовоеЗначение.ЗначениеРеквизита = НовоеЗначение.ЗначениеРеквизита + Символы.ПС;
КонецЕсли;
НовоеЗначение.ЗначениеРеквизита = НовоеЗначение.ЗначениеРеквизита + ТипСтрокой;
Иначе
Если ТипЗначенияПоляТЧ = "" Тогда
ОписаниеРеквизита = Неопределено;
МетаданныеТабличнойЧасти = МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТабличнойЧасти);
Если МетаданныеТабличнойЧасти <> Неопределено Тогда
ОписаниеРеквизита = МетаданныеРеквизитаТабличнойЧасти(МетаданныеТабличнойЧасти, ИмяПоляТЧ);
Если ОписаниеРеквизита = Неопределено И Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) Тогда
ОписаниеРеквизита = МетаданныеОбъекта.ПризнакиУчетаСубконто.Найти(ИмяПоляТЧ);
КонецЕсли;
Если ОписаниеРеквизита <> Неопределено
И ОписаниеРеквизита.Тип.Типы().Количество() = 1 Тогда
ТипЗначенияПоляТЧ = ОписаниеРеквизита.Тип.Типы()[0];
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1);
Значение = ЧтениеXML.Значение;
Если ЗначениеЗаполнено(ТипЗначенияПоляТЧ) Тогда
Попытка
Значение = XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение);
Исключение
Значение = ЧтениеXML.Значение;
КонецПопытки;
КонецЕсли;
ПоследняяСтрока[ИмяПоляТЧ] = Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Из списка реквизитов исключаем табличные части.
Для Каждого Элемент Из ТабличныеЧасти Цикл
ЗначенияРеквизитов.Удалить(ЗначенияРеквизитов.Найти(Элемент.Ключ));
КонецЦикла;
// Заполнение колонок таблицы в случае, когда в объекте табличная часть пустая, и имена колонок не были прочитаны.
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
ИмяТаблицы = ТабличнаяЧасть.Ключ; // Строка -
Таблица = ТабличнаяЧасть.Значение; // ТаблицаЗначений -
Если Таблица.Колонки.Количество() = 0 Тогда
МетаданныеТаблицы = МетаданныеТабличнойЧасти(МетаданныеОбъекта, ИмяТаблицы);
Если МетаданныеТаблицы <> Неопределено Тогда
Для Каждого ОписаниеКолонки Из РеквизитыТабличнойЧасти(МетаданныеТаблицы) Цикл
Если Таблица.Колонки.Найти(ОписаниеКолонки.Имя)= Неопределено Тогда
Таблица.Колонки.Добавить(ОписаниеКолонки.Имя);
КонецЕсли;
КонецЦикла;
Если Метаданные.ПланыСчетов.Содержит(МетаданныеОбъекта) Тогда
Для Каждого ОписаниеКолонки Из МетаданныеОбъекта.ПризнакиУчетаСубконто Цикл
Если Таблица.Колонки.Найти(ОписаниеКолонки.Имя)= Неопределено Тогда
Таблица.Колонки.Добавить(ОписаниеКолонки.Имя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат.Вставить("Реквизиты", ЗначенияРеквизитов);
Результат.Вставить("ТабличныеЧасти", ТабличныеЧасти);
Если Результат.СкрываемыеРеквизиты <> Неопределено Тогда
Для Каждого ИмяРеквизита Из Результат.СкрываемыеРеквизиты Цикл
Если СтрЗаканчиваетсяНа(ИмяРеквизита, ".*") Тогда
ИмяТабличнойЧасти = Лев(ИмяРеквизита, СтрДлина(ИмяРеквизита) - 2);
Если Результат.ТабличныеЧасти[ИмяТабличнойЧасти] <> Неопределено Тогда
Результат.ТабличныеЧасти.Удалить(ИмяТабличнойЧасти);
КонецЕсли;
Иначе
НайденныеРеквизиты = Результат.Реквизиты.НайтиСтроки(Новый Структура("НаименованиеРеквизита", ИмяРеквизита));
Для Каждого Реквизит Из НайденныеРеквизиты Цикл
Результат.Реквизиты.Удалить(Реквизит);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Результат.ДополнительныеРеквизиты <> Неопределено Тогда
Для Каждого ДополнительныйРеквизит Из Результат.ДополнительныеРеквизиты Цикл
Реквизит = ЗначенияРеквизитов.Добавить();
Реквизит.НаименованиеРеквизита = ДополнительныйРеквизит.Наименование;
Реквизит.ЗначениеРеквизита = ДополнительныйРеквизит.Значение;
Реквизит.Тип = ТипЗнч(ДополнительныйРеквизит.Значение);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
- Сравнение результатов в серверной базе 1С:
Размер версии в байтах:
Проверил на Справочнике и Документе размер версии стал меньше на 7-8%


Скорость записи версий:
Скорость проверял на записи 100 элементов справочника и 100 документов через Замер производительности в конфигураторе, смотрел время метода ОбщийМодуль.ВерсионированиеОбъектов.СериализоватьОбъект. Предварительно сохранил первые нулевые версии объектов. Затем сделал по 3 прогона 100 версий для XML и JSON вариантов, изменяя комментарии элементов (т.е. версия меняется по сравнению с предыдущей)
Получил средние значения времени выполнения версионирования. Изменений нет в скорость записи, одинаково по времени пишет FastInfoset в XML и СериализаторXDTO в JSON.
//1. Типовая XML
ЗаписьXML = Новый ЗаписьFastInfoset;
ЗаписьXML.УстановитьДвоичныеДанные();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное);
//2. JSON запись
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Объект, НазначениеТипаXML.Явное);
Подумал, что возможно это из-за того что изменения для метода внесены в расширении, а оно работает медленнее метода встроенного в конфигурацию см. тут Миф № 2 в статье Еще 10 мифов о платформе 1С .... но судя по статье Технологические вопросы крупных внедрений с экспертной базы знаний миф № 2 о том, что расширения работают медленнее уже победили в платформе в 2017-м году и проблема осталась только с внешними обработками, а с расширениями решена
Ну вот хоть уже нашел противоречие в мифе № 2 Лазаренко Юрия между ИТС https://its.1c.ru/db/metod8dev/content/5940/hdoc и сайтом тех экспертов https://kb.1c.ru/articleView.jsp?id=111

Вообщем, двинулся дальше к ограничениям восстановления сериализованных XDTO объектов, там нашел поинтереснее проблемы...
- Борьба с ограничениями СериализатораXDTO
У СериализатораXDTO есть ограничения, он не может отрабатывать JSON файлы старых версий, если у объекта менялись реквизиты метаданных (появился новый или удалили старый).
Я дальше начал переписывать код разбора JSON вручную, чтобы уйти от этого ограничения.
Боролся с заморочками по типизации реквизитов, подсовыванием новых и удалением старых полей из файла JSON.
Люблю вот так бороться и останавливаться подумать, и в какой-то момент остановился подумать. Еще раз прокрутил в голове общие выводы по смене версионирования c XML на JSON: О том что размер не так сильно уменьшился, О том что скорость записи вообще не изменилась.
Думаю, какой смысл мне с этими ограничениями дальше бороться, если улучшения будут незначительные. И прекратил этот эксперимент, поехав к родным на рождество.
Если подытожить, то эксперимент у меня оказался неудачным, а думал будет вау. Написал кратко о результате, чтобы вы коллеги с этой идеей не заморачивались и не тратили время впустую.
Пример файла сериализации объекта через XDTO, который надо разбирать (если сериализация совпадает с метаданными конфигурации, то он автоматом разбирается, если в объекте удалены или добавлены реквизиты, то автоматически не получится, надо свой код писать)
{
"#type": "jcfg:DocumentObject.РеализацияТоваровУслуг",
"#value": {
"Ref": "847f10a9-3d1f-11f0-9497-005056929b21",
"DeletionMark": false,
"Date": "2025-05-30T09:30:05",
"Number": "МП00-000007",
"Posted": false,
"АдресДоставки": "",
"БанковскийСчетОрганизации": "00000000-0000-0000-0000-000000000000",
"БанковскийСчетКонтрагента": "00000000-0000-0000-0000-000000000000",
"БанковскийСчетГрузоотправителя": "00000000-0000-0000-0000-000000000000",
"БанковскийСчетГрузополучателя": "00000000-0000-0000-0000-000000000000",
"Валюта": "02685080-62aa-11ee-80c2-ac1f6b91042d",
"ВалютаВзаиморасчетов": "02685080-62aa-11ee-80c2-ac1f6b91042d",
"Грузоотправитель": "00000000-0000-0000-0000-000000000000",
"Грузополучатель": "00000000-0000-0000-0000-000000000000",
"ДоверенностьВыдана": "",
"ДоверенностьДата": "0001-01-01T00:00:00",
"ДоверенностьЛицо": "",
"ДоверенностьНомер": "",
"ЗаказКлиента": {
"#type": "jcfg:DocumentRef.ЗаказКлиента",
"#value": "4b8c2cba-3c8f-11f0-9497-005056929b21"
},
"Организация": "b224d4dc-7491-11ee-80c2-ac1f6b91042d",
"Контрагент": "4fd01d62-24cc-11f0-9495-005056929b21",
"Менеджер": "85f9218a-f4e2-11ef-9487-005056929b21",
"НалогообложениеНДС": "ПродажаОблагаетсяНДС",
"СуммаДокумента": 4800,
"Партнер": "4fd01d60-24cc-11f0-9495-005056929b21",
"Подразделение": "00000000-0000-0000-0000-000000000000",
"Сделка": "00000000-0000-0000-0000-000000000000",
"СкидкиРассчитаны": true,
"Склад": "7f51e0bd-7a39-11ee-80c2-ac1f6b91042d",
"Согласован": false,
"Соглашение": "00000000-0000-0000-0000-000000000000",
"СуммаВзаиморасчетов": 4800,
"Комментарий": "",
"ФормаОплаты": "",
"ХозяйственнаяОперация": "РеализацияКлиенту",
"ЦенаВключаетНДС": false,
"Касса": "00000000-0000-0000-0000-000000000000",
"Отпустил": "00000000-0000-0000-0000-000000000000",
"ОтпустилДолжность": "",
"РеализацияПоЗаказам": true,
"ГруппаФинансовогоУчета": "e064fd3d-78c1-11ee-80c2-ac1f6b91042d",
"КартаЛояльности": "00000000-0000-0000-0000-000000000000",
"Договор": "b38b7581-3c8e-11f0-9497-005056929b21",
"Основание": "Заказ клиента № 15 от 23 мая 2025 г.",
"Статус": "Отгружено",
"Автор": "85f9218a-f4e2-11ef-9487-005056929b21",
"СпособДоставки": "Самовывоз",
"ЗонаДоставки": "00000000-0000-0000-0000-000000000000",
"АдресДоставкиЗначенияПолей": "",
"ПеревозчикПартнер": "00000000-0000-0000-0000-000000000000",
"ВремяДоставкиС": "0001-01-01T00:00:00",
"ВремяДоставкиПо": "0001-01-01T00:00:00",
"АдресДоставкиПеревозчика": "",
"АдресДоставкиПеревозчикаЗначенияПолей": "",
"ДополнительнаяИнформацияПоДоставке": "",
"КонтактноеЛицо": "00000000-0000-0000-0000-000000000000",
"Руководитель": "98a8a892-78b4-11ee-80c2-ac1f6b91042d",
"ГлавныйБухгалтер": "b60715c3-78b4-11ee-80c2-ac1f6b91042d",
"ПорядокРасчетов": "ПоЗаказамНакладным",
"ВернутьМногооборотнуюТару": false,
"ДатаВозвратаМногооборотнойТары": "2025-05-30T00:00:00",
"СостояниеЗаполненияМногооборотнойТары": "",
"ВидыЗапасовУказаныВручную": false,
"ТребуетсяЗалогЗаТару": false,
"ОснованиеДата": "2025-05-23T00:00:00",
"ОснованиеНомер": "15",
"ДопоставкаПоРеализации": null,
"ДатаПереходаПраваСобственности": "0001-01-01T00:00:00",
"ВариантОформленияПродажи": "РеализацияТоваровУслуг",
"ИдентификаторПлатежа": "НК2505МП000000070001",
"ОсобыеУсловияПеревозки": false,
"ОсобыеУсловияПеревозкиОписание": "",
"НаправлениеДеятельности": "00000000-0000-0000-0000-000000000000",
"КурсЧислитель": 1,
"КурсЗнаменатель": 1,
"ЕстьМаркируемаяПродукцияГИСМ": false,
"СуммаВзаиморасчетовПоТаре": 0,
"ОплатаВВалюте": false,
"Курьер": "00000000-0000-0000-0000-000000000000",
"Сборщик": "00000000-0000-0000-0000-000000000000",
"АдресДоставкиЗначение": "",
"АдресДоставкиПеревозчикаЗначение": "",
"ВариантВыбытияМаркируемойПродукции": "",
"КлиентКонтрагент": "00000000-0000-0000-0000-000000000000",
"КлиентПартнер": "00000000-0000-0000-0000-000000000000",
"КлиентДоговор": "00000000-0000-0000-0000-000000000000",
"ЭтапГосконтрактаЕИС": "",
"ОбъектРасчетовУпр": "00000000-0000-0000-0000-000000000000",
"ГрафикОплаты": "00000000-0000-0000-0000-000000000000",
"СопроводительныеДокументы": "",
"СведенияОТранспортировкеИГрузе": "",
"КодСпециальныхОбстоятельств": "",
"Товары": [
{
"Номенклатура": "27a384ad-8f57-11ee-80c2-ac1f6b91042d",
"Характеристика": "00000000-0000-0000-0000-000000000000",
"Назначение": "00000000-0000-0000-0000-000000000000",
"Упаковка": "00000000-0000-0000-0000-000000000000",
"КоличествоУпаковок": 5,
"Количество": 5,
"ВидЦены": "00000000-0000-0000-0000-000000000000",
"Цена": 800,
"Сумма": 4000,
"СтавкаНДС": "2fdf4d21-62aa-11ee-80c2-ac1f6b91042d",
"СуммаНДС": 800,
"СуммаСНДС": 4800,
"КодСтроки": 5,
"СуммаРучнойСкидки": 0,
"СуммаАвтоматическойСкидки": 0,
"ПроцентРучнойСкидки": 0,
"ПроцентАвтоматическойСкидки": 0,
"КлючСвязи": 0,
"Склад": "7f51e0bd-7a39-11ee-80c2-ac1f6b91042d",
"СтатусУказанияСерий": 0,
"СуммаВзаиморасчетов": 4800,
"ЗаказКлиента": {
"#type": "jcfg:DocumentRef.ЗаказКлиента",
"#value": "4b8c2cba-3c8f-11f0-9497-005056929b21"
},
"СрокПоставки": 0,
"ИдентификаторСтроки": "02db7e7b-0175-45f3-876b-d418e23d3fe5",
"Серия": "00000000-0000-0000-0000-000000000000",
"АналитикаУчетаНоменклатуры": "95a71f13-8f66-11ee-80c2-ac1f6b91042d",
"НоменклатураНабора": "00000000-0000-0000-0000-000000000000",
"ХарактеристикаНабора": "00000000-0000-0000-0000-000000000000",
"АналитикаУчетаНаборов": "00000000-0000-0000-0000-000000000000",
"КодТНВЭД": "00000000-0000-0000-0000-000000000000",
"ОбъектРасчетов": "847f10aa-3d1f-11f0-9497-005056929b21",
"Подразделение": "00000000-0000-0000-0000-000000000000",
"НоменклатураПартнера": "00000000-0000-0000-0000-000000000000",
"СуммаБонусныхБалловКСписанию": 0,
"СуммаБонусныхБалловКСписаниюВВалюте": 0,
"СуммаНачисленныхБонусныхБалловВВалюте": 0
}
],
"РасшифровкаПлатежа": [
{
"Сумма": 4800,
"ВалютаВзаиморасчетов": "00000000-0000-0000-0000-000000000000",
"СуммаВзаиморасчетов": 4800,
"ОбъектРасчетов": "847f10aa-3d1f-11f0-9497-005056929b21"
}
],
"ЭтапыГрафикаОплаты": [
{
"Заказ": {
"#type": "jcfg:DocumentRef.ЗаказКлиента",
"#value": "4b8c2cba-3c8f-11f0-9497-005056929b21"
},
"СверхЗаказа": false,
"ВариантОплаты": "ПредоплатаДоОтгрузки",
"ДатаПлатежа": "2025-05-23T00:00:00",
"Сдвиг": 0,
"СуммаПлатежа": 1440,
"ПроцентПлатежа": 30,
"СуммаЗалогаЗаТару": 0,
"ПроцентЗалогаЗаТару": 0,
"СуммаВзаиморасчетов": 1440,
"СуммаВзаиморасчетовПоТаре": 0,
"ОбъектРасчетов": "847f10aa-3d1f-11f0-9497-005056929b21",
"ВариантОтсчета": "ОтДатыЗаказа"
},
{
"Заказ": {
"#type": "jcfg:DocumentRef.ЗаказКлиента",
"#value": "4b8c2cba-3c8f-11f0-9497-005056929b21"
},
"СверхЗаказа": false,
"ВариантОплаты": "КредитСдвиг",
"ДатаПлатежа": "2025-05-30T00:00:00",
"Сдвиг": 0,
"СуммаПлатежа": 1680,
"ПроцентПлатежа": 35,
"СуммаЗалогаЗаТару": 0,
"ПроцентЗалогаЗаТару": 0,
"СуммаВзаиморасчетов": 1680,
"СуммаВзаиморасчетовПоТаре": 0,
"ОбъектРасчетов": "847f10aa-3d1f-11f0-9497-005056929b21",
"ВариантОтсчета": "ОтДатыОтгрузки"
},
{
"Заказ": {
"#type": "jcfg:DocumentRef.ЗаказКлиента",
"#value": "4b8c2cba-3c8f-11f0-9497-005056929b21"
},
"СверхЗаказа": false,
"ВариантОплаты": "КредитСдвиг",
"ДатаПлатежа": "2025-06-29T00:00:00",
"Сдвиг": 30,
"СуммаПлатежа": 1680,
"ПроцентПлатежа": 35,
"СуммаЗалогаЗаТару": 0,
"ПроцентЗалогаЗаТару": 0,
"СуммаВзаиморасчетов": 1680,
"СуммаВзаиморасчетовПоТаре": 0,
"ОбъектРасчетов": "847f10aa-3d1f-11f0-9497-005056929b21",
"ВариантОтсчета": "ОтДатыОтгрузки"
}
]
}
}
Вступайте в нашу телеграмм-группу Инфостарт
