Неудачный эксперимент переделки типового Версионирования объектов из XML в JSON

12.01.26

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

«Ну я хотя бы попытался, черт возьми, хотя бы попробовал» — персонаж Джека Николсона в психушке из фильма «Пролетая над гнездом кукушки» (1975).

Вот мне все тыкают, о том почему я часто в 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",
				"ВариантОтсчета": "ОтДатыОтгрузки"
			}
		]
	}
}

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    6659    77    0    

72

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    180565    348    283    

409

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    157254    939    306    

475

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.262.x) и БП 3.0 (3.0.190.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    32164    237    61    

177

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    60926    76    128    

74

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 руб.

23.07.2020    65280    303    83    

243

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    198497    659    543    

559

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

55200 руб.

11.01.2021    36969    32    56    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dsdred 4194 12.01.26 15:51 Сейчас в теме
Дима извиняюсь не читал, пробежал бегло.

1 https://github.com/arkuznetsov/SerLib1C но это не совсем по теме.
2 Почему бы не использовать платформенную историю данных?
bulpi; Shmell; sapervodichka; +3 Ответить
2. sapervodichka 7432 12.01.26 15:56 Сейчас в теме
(1) Дим, привет. Историю данных ты прекрасно описал, я читал, классная статья. А я тут просто решил что-то потыкать на выходных под телевизор, и у меня не получилось, и я расстроился, и вот решил поплакаться, что бывает такое что идея ни во что не превращается
rpgshnik; NeLenin; vik070777; dsdred; +4 Ответить
5. dsdred 4194 12.01.26 16:03 Сейчас в теме
(2) Ну тогда могу лишь тебе плюсик поставить, чтобы не сильно обидно было ;)
rpgshnik; sapervodichka; +2 Ответить
18. fatman78 21 13.01.26 10:28 Сейчас в теме
(2) Дмитрий, если я правильно понял, то в первую очередь цель была уменьшить размер данных, занимаемых версиями в БД и увеличить скорость работы механизма версионирования.

Мой опыт.
После неудачной попытки перейти на историю данных (50+ миллионов записей) с целью уменьшить размер таблиц для хранения истории изменений объектов (о чем я писал в комментариях к статье Дмитрия Сидоренко), когда по факту переноса версий оказалось, что платформенный механизм для хранения занимает еще больше места в БД, а так же имеет ряд существенных для нас ограничений по сравнению механизмом версионирования в БСП, пошли другим путем.
Т.к. для нашей БД как правило чтение данных хранимых версий (и их сравнение) это интерактивное действие по конкретному объекту по инициативе пользователя, то было решено хранить "старые" версии объектов за переделами БД, без визуальной потери скорости работы. Заменили код БСП в части чтения реквизита регистра сведений с типом "хранилище значения" на чтение запакованных данных этого хранилища уже из файла тома сетевого хранилища, подключенного к БД. И создали рег. задание которое по ночам выгружает из записей регистра версий (например старше месяца) данные версий на том сетевого хранилища. Механизм создания новых версий остался типовым с максимальной производительностью. Таким образом удалось уменьшить размер таблиц БД регистра версий в 5 раз, что весьма положительно сказалось на размере бэкапов БД. при этом не потеряв в скорости и функциональности.

Если кому интересно могу выложить в качестве расширения для использования в конфигурациях на базе БСП
cleaner_it; bulldog; orakool2; blindcat2006; Sejix; Somebody1; sapervodichka; +7 Ответить
3. sapervodichka 7432 12.01.26 15:59 Сейчас в теме
(1) Но вот зато нашел противоречие в мифах Лазаренко между ИТС https://its.1c.ru/db/metod8dev/content/5940/hdoc и сайтом тех экспертов https://kb.1c.ru/articleView.jsp?id=111 и решил просто мысли в итоге скинуть
4. dsdred 4194 12.01.26 16:02 Сейчас в теме
(3) К сожалению его статья как в принципе и доклад Миф про Мифы. Он же замеры сделал с включенным дебагом, Надо отключать и все перезамерять.

П.С. Меня уже за такой замер ругали )) Правда я все тут же перезамерил и внес данные с отключенным дебагом ))
rpgshnik; +1 Ответить
12. triviumfan 102 12.01.26 21:03 Сейчас в теме
(4) 7% потерь производительности с включенным дебагом вряд ли можно считать большой погрешностью.
13. dsdred 4194 12.01.26 21:07 Сейчас в теме
(12) вот статья в которой меня за включенный дебаг отчитали -> https://infostart.ru/1c/articles/2227620/
и там не 5% было после пере замеров с отключенным дебагом
6. DmitryKlimushkin 132 12.01.26 16:46 Сейчас в теме
Вечные мальчишеские споры, сопровождающиеся замерами)) В нашем случае - пресловутых XML и JSON. Никогда не понимал попытки их как-то сравнить на одной линейке, как механизаторы никогда не равняют гусеничный и колесный тракторы. Оба - железные, вонючие и гремящие, но есть нюансы)
Давно уже не лазил в эти мучения, удивился, что автору это стало любопытно (с его-то опытом!)
Как по мне, XML более технологичен для парсинга. JSON примитивнее, а значит он более щадящий к стандартам и протоколам обменов, исходя из простой закономерности - "чем примитивнее, тем универсальнее".
Кажется, после появления FastInfoSet "объёмная" разница между двумя этими стандартами низвелась до пренебрежимого мизера. Видимо, где-то в это время я перестал маяться выбором).
Надо сдать тебя супруге с припиской "А мог бы за это время обои переклеить!"))
NeLenin; shard; SerVer1C; ixijixi; primat; user1964854; sapervodichka; +7 Ответить
9. sapervodichka 7432 12.01.26 18:16 Сейчас в теме
(6) 💯 взял лопату и пошел снег чистить )))
DmitryKlimushkin; +1 Ответить
7. starik-2005 3211 12.01.26 17:56 Сейчас в теме
У 1С в документации написано, что ВО компилируется при создании. Думаю, что если вызывать так:
ВО = ВнешниеОбработки.Создать(ИмяФайла);
for a in range(1, 1000) do
  ВО.ВызватьМетод();
enddo;
То скорость не сильно будет медленнее, чем скорость встроенной обработки, т.к. компилируется ВО однажды. Если же делать так:
for a in range(1, 1000) do
  ВО = ВнешниеОбработки.Создать(ИмяФайла);
  ВО.ВызватьМетод();
enddo;
То все начинает играть другими красками.
SerVer1C; sapervodichka; VyacheslavShilov; +3 Ответить
8. gybson 12.01.26 18:13 Сейчас в теме
Еще бы привести пример того JSON о котором речь. Он же вообще не читабельный и раздут не меньше.
sapervodichka; +1 Ответить
10. sapervodichka 7432 12.01.26 18:17 Сейчас в теме
(8) доеду до дома прикреплю, он простой и довольно оптимальный
11. sapervodichka 7432 12.01.26 20:26 Сейчас в теме
(8) снизу подцепил в публикации
14. Avatarzorro 69 13.01.26 04:03 Сейчас в теме
xml универсальнее и имеет свойства в тегах, чего нет в стетхэме. думаю это и основная причина почему выбран был xml изначально для реализации этого механизма разрабами бсп
15. DmitryKlimushkin 132 13.01.26 08:51 Сейчас в теме
(14) Прежде всего, XML имеет возможность сортировки документов без их полного чтения (DTD или Схема). В "Стэтхеме" надо прочитать всё, чтобы понять - что тебе пришло. Поэтому, его кажущаяся "меньшесть объёма" как раз и проигрывает более "толстому" XML. Я когда-то скраешку видел обмен одной глобальной торговой сети (уже ушедшей с нашего рынка). У них единая "шина" обмена документами. И их там в день - десятки тысяч (трудно сказать - глазами такое не окинешь) И как в таком режиме отобрать "свои"? Читать каждый - "до донышка"? А там есть ну о-очень объёмные тексты. В XML есть DTD, читаешь первую строчку и сразу знаешь - надо тебе это или нет. Если бы мне предложили описать такой же мега-обмен на базе "Стэтхема", я не представляю - как бы я отсеивал документы с первой строки. Перед тем, как с запалом хвалить какой-либо протокол, стоит посмотреть его в тех метах, где он реально нагружен, а не перемещает два документа реализации в день)
У XML есть парсинг. И это его главное преимущество. Есть XPath, как "язык запросов" к XML-текстам. Одна беда, документы DOM на нашей родной платформе "лепятся" только в оперативке, что сильно тормозит объёмные обмены. У меня была "липкая" надежда, что в какой-то новой версии платформы догадаются кардинально обновить блок методов работы с XML (DOM) и расширить эти методы для работы через потоки, например. Дождались новую версию плаформы, а там - что? Праильна! ... раскраска интерфейса) Офигенно актуально для людей с обострёнными эстетическими чувствами))
fatman78; sapervodichka; +2 Ответить
16. Avatarzorro 69 13.01.26 09:35 Сейчас в теме
(15) ну логично что xml универсальней. А туже шину можно реализовать в формате кролика (кролик как пример). Каждый док в нужную очередь пихаешь и нет нужны доп фильтров при загрузке, что сильно упростит все обмены.

Про новую платформу речь о 8.5? Если да, то там они умудрились сломать даже то что десятилетиями работало. Я себе дома ставил. В отчетах условное оформление сломано наглухо. И еще там несколько вещей что нашлось за беглые тесты.

Думаю причина не обновления работы методов в совместимости со старыми ведрами и старыми версиями платформы. Сомневаюсь что у них на это просто нет ресурсов. Тем более что они щас с 22 года активно заходят в рынок ERP систем, где высокие требования к скорости
17. DmitryKlimushkin 132 13.01.26 09:47 Сейчас в теме
(16)
Каждый док в нужную очередь пихаешь и нет нужны доп фильтров при загрузке, что сильно упростит все обмены

Как раз это наш, "отечественный", современный подход, увы. И это кажущееся упрощение. Попытка техническими мерами компенсировать организационную деградацию. Можно провести систематизацию, проектную работу и привести к некоему стандарту все свои документы, создать их электронные "слепки" (Схемы XSD). Но эта работа кажется скучной и нудной, а самое главное, квалификации такие утеряны во многих местах. А можно пойти "экстенсивным" путём, когда подчерпываешь откуда-то "бардак" и пытаешься создать некое "электронное сито", которое хоть как-то упорядочить и отсортировать тот хлам, который тебе свалили на, условно, "шину". Первый метод позволяет создать масштабируемую систему, переживающую кратное увеличение объёмов. А второй метод работает до следующего витка развития и надо будет постоянно быть на стрёме возле такой "шины".
21. Avatarzorro 69 14.01.26 02:17 Сейчас в теме
(17) так типовой обмен по факту делает тоже самое, только "очереди" отдельно прочитать нельзя, а парсить по файлу целиком. А в случае шин типо кролика ты фильтрацию осуществляешь со стороны отправителя, что существенно сокращает время выгрузки и загрузки. В общем способов реализации масса, а вот универсальный все равно только xml. Стетхем уже не универсален. Однако он значительно удобнее и быстрее для работы с заранее оговоренной типизацией и структурой передаваемых данных
DmitryKlimushkin; +1 Ответить
19. ids79 8782 13.01.26 16:38 Сейчас в теме
Какое-то время назад у меня была идея переделать интеграцию по КД3 на JSON.
Думал также производительность сильно повысить.
В итоге тоже бросил на пол пути. Прирост в скорости оказался минимальным.
основные потери времени оказались на обработчиках, а от них не уйдешь.
NeLenin; sapervodichka; +2 Ответить
20. sapervodichka 7432 13.01.26 20:51 Сейчас в теме
(19) Дима, спасибо за психологическую помощь = когда делаешь в никуда, приятно знать что ты не один такой
ids79; NeLenin; +2 Ответить
22. roman72 403 19.01.26 21:45 Сейчас в теме
Я делал конвертер XML в JSON, но не на языке 1С.
Причина такой потребности - слишком долго обрабатывался массив xml-файлов в определенных функциях (там десятки-сотни тысяч файлов.xml с размерами до 100Мб и больше и суммарно на сотни миллионов строк текста).
Так вот, в итоге дальше обрабатывались JSON файлы и система при их обработке часто зависала (java среда), было видно, что большие файлы json система не в состоянии проглотить.
Пришлось вернуться к XML.
Долго, но зато процессы обработки гарантированно завершались.
sapervodichka; +1 Ответить
23. e-rogov 6 22.01.26 23:38 Сейчас в теме
по количеству символов как раз и есть 5..7%
при последовательном чтении XML выиграет, важен обработчик, может ли он работать еще не дочитав до конца...
Для отправки сообщения требуется регистрация/авторизация