Обмен данными онлайн через Веб-сервис с использованием обработки "Универсальный обмен данными XML"

Публикация № 557914

Разработка - Системная интеграция - Обмен через XML

Обмен данными Онлайн В режиме реального времени Веб-сервис Универсальный обмен данными XML Конвертация данных

Доработка позволяет организовать двухсторонний обмен данными в режиме реального времени между любыми конфигурациями (типовые, самописные, обычные формы, управляемые формы). Также предлагается вариант в виде расширения конфигурации (.cfe) для конфигураций стоящих на поддержке без возможности изменения. В обмене может участвовать любое количество баз. Правила обмена подготавливаются с использованием конфигурации "Конвертация данных".

К слову, в БСП 2.3 уже реализован универсальный обмен данными через Веб-сервис, но для его внедрения необходимо включение в конфигурацию всех сопутствующих подсистем БСП, что не всегда представляется возможным. Особенно, если текущая конфигурация на обычных формах (БСП 2.3 ориентировано на управляемые формы).

В представленных алгоритмах были проработаны следующие вопросы:

1. Запуск синхронизации производится в реальном режиме времени при записи (удалении) объекта (документа, справочника), но только если запись выполняется интерактивно. То есть, при пакетном перепроведении документов при восстановлении последовательности или из обработки "Групповая обработка справочников и документов" синхронизация не требуется (предполагается, что движения документов не переносятся, а формируются при проведении).

2. Предусмотрен механизм гарантированной доставки данных в базу приемник. Для этих целей, при запуске синхронизации, объект предварительно регистрируется в плане обмена. В случае сбоя синхронизации по ежеминутному регламентному заданию выполняется проверка наличия зарегистрированных объектов в плане обмена и производится повторная попытка передачи данных в базу приемник. Далее, в случае успешности передачи данных, регистрация объекта в плане обмена удаляется.

3. Для исключения задержек при записи объектов, синхронизация запускается асинхронно в фоновом задании. Если же требуется организовать отказ от проведения документа в текущей базе в зависимости от успешности проведения этого документа в базе приемнике, имеется возможность предусмотреть запуск синхронизации в основном потоке (по опыту, документ реализация товаров в УПП имеющий в табличной части до 10 строчек синхронизируется за 1-2 сек), в этом случае производится ожидание завершения синхронизации и в зависимости от успешности проведения выставляется отказ и дублируется сообщение о причине неуспешности, переданное из базы приемника.

4. Для универсальности данные передаются в базу приемник в формате XML, сформированными программно с помощью обработки "Универсальный обмен данными XML" по правилам обмена, подготовленными в конфигурации "Конвертация данных". Соответственно, на стороне приемника производится загрузка этой же обработкой. Как правило, во всех типовых конфигурациях данная обработка присутствует, а для самописных можно загрузить из состава .cf данной публикации.

5. Пакет передаваемых данных должен иметь минимальный объем данных, Чтобы не загружать сетевые службы и Веб-сервер. Для этих целей, предусмотрено:

- за один раз производится выгрузка только одного объекта (с подчиненными объектами, выгруженными по ссылкам, если это справочник);

- при разработке правил обмена для всех документов устанавливается режим "Не выгружать объекты свойств источника по ссылкам". В этом случае исключается избыточность передаваемых данных. Если же в реквизите встречается ссылка на элемент объекта, который не включен в состав регистрируемых объектов плана обмена (то есть данный вид объектов самостоятельно не синхронизируется) и эта ссылка не была найдена в базе приемнике (в терминах обработки это фиктивная ссылка), то формируется список фиктивных ссылок, который возвращается в базу источник и рекурсивно инициируется синхронизация для этих объектов.

6. Как следствие из предыдущего пункта, проведение документа в базе приемнике реализовано отдельным запросом после полной передачи всего пакета вместе с рекурсивной синхронизацией фиктивных ссылок по предыдущему пункту. Так как для документов отключена выгрузка объектов свойств источника по ссылкам, то на момент первичной записи документа в нем могут присутствовать фиктивные ссылки, из за которых нормальное проведение документа в этот момент невозможно. 

Реализация

1. Для всех синхронизируемых объектов в форме элемента справочника (форме документа) в обработчике "При открытии" необходимо добавить следующий код:
Процедура ПриОткрытии()
	
	ДополнительныеСвойства.Вставить("СинхронизироватьПриЗаписи");
	
КонецПроцедуры
2. Добавляем подписки на события

ПодпискаОбъектПриЗаписи

ПодпискаОбъектПередУдалением

3. Общий модуль "ЛУ_СинхронизацияКлиентСервер" (Сервер, Клиент Обычное приложение) - обработчики подписок
Процедура ОбъектПриЗаписиСинхронизировать(Источник, Отказ) Экспорт
	
	ПланОбменаРегистрацияИзменений(ПланыОбмена.ЛУ_WebСервис, Источник, Отказ);
	
КонецПроцедуры

Процедура ОбъектПередУдалениемСинхронизировать(Источник, Отказ) Экспорт
	
	ПланОбменаРегистрацияИзменений(ПланыОбмена.ЛУ_WebСервис, Источник, Отказ, Истина);
	
КонецПроцедуры

Процедура ПланОбменаРегистрацияИзменений(ПланОбмена, Источник, Отказ, Удаление=Ложь) Экспорт
	
	#Если НЕ ТолстыйКлиентОбычноеПриложение Тогда
		Возврат;
	#КонецЕсли
		
	Если Отказ или Источник.ОбменДанными.Загрузка Тогда 
		Возврат; 
	КонецЕсли;
	
	Если НЕ (Источник.ДополнительныеСвойства.Свойство("СинхронизироватьПриЗаписи") или Удаление)  Тогда
		Возврат; 
	КонецЕсли;
	
	ПланОбменаМетаданные = ПланОбмена.ПустаяСсылка().Метаданные();
	Если НЕ ПланОбменаМетаданные.Состав.Содержит(Источник.Метаданные()) Тогда
		Возврат; 
	КонецЕсли;

	// Регистрация изменениий в плане обмена
	ВыборкаУзлов = ПланОбмена.Выбрать();
	Пока ВыборкаУзлов.Следующий() Цикл
		
		ТекущийУзел = ВыборкаУзлов.Ссылка;
		Если ТекущийУзел = ПланОбмена.ЭтотУзел() Тогда
			Продолжить;
		КонецЕсли;
		
		Если НЕ ТекущийУзел.Синхронизировать Тогда 
			Продолжить;
		КонецЕсли;
		
		ОбъектРегистрации = ?(Удаление, Новый УдалениеОбъекта(Источник.Ссылка), Источник.Ссылка);
		ПланыОбмена.ЗарегистрироватьИзменения(ТекущийУзел, ОбъектРегистрации);
		
	КонецЦикла;
	
	ЛУ_СинхронизацияВызовСервера.ПланОбменаСинхронизироватьАсинхронно(ПланОбменаМетаданные.Имя);

КонецПроцедуры
4. План обмена ЛУ_WebСервис

Структура плана обмена

Здесь:

  • Синхронизировать - булево,
  • Сервер, База, Пользователь, Пароль - Строка, 100, переменная
  • ПравилаКонвертации - ХранилищеЗначения (в форме узла реализована загрузка в этот реквизит правил обмена из файла XML)
5. Общий модуль "ЛУ_СинхронизацияВызовСервера" (Сервер, Вызов сервера)
(для наглядности из листингов исключены все конструкции связанные с обработкой исключений, вывода ошибок, и вспомогательные методы)
Процедура ПланОбменаСинхронизировать(ИмяПланаОбмена) Экспорт
	
	ПланОбмена = ПланыОбмена[ИмяПланаОбмена];
	
	ВыборкаУзлов = ПланОбмена.Выбрать();
	Пока ВыборкаУзлов.Следующий() Цикл
		
		ТекущийУзел = ВыборкаУзлов.Ссылка;
		Если ТекущийУзел = ПланОбмена.ЭтотУзел() Тогда
			Продолжить;
		КонецЕсли;
		
		Если НЕ ТекущийУзел.Синхронизировать Тогда 
			Продолжить;
		КонецЕсли;
		
		ИмяСобытияДляЖурнала = "ПланОбмена." + ИмяПланаОбмена + " " + ПланОбмена.ЭтотУзел().Код + " -> " + ТекущийУзел.Код;
		
		ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
		ЗаписьСообщенияXML = Новый ЗаписьXML;
		ЗаписьСообщенияXML.УстановитьСтроку();
		
		Попытка
			ЗаписьСообщения.НачатьЗапись(ЗаписьСообщенияXML, ТекущийУзел);
		Исключение
			// ТекущийУзел заблокирован, пока пропустим, следующая попытка будет по регламентному заданию через 60 сек
			Продолжить;	
		КонецПопытки;
		
		НомерСообщения = ЗаписьСообщения.НомерСообщения;
		МетаданныеДокументы = Метаданные.Документы;
		МассивУдаляемыхОбъектов = Новый Массив;
		МассивОбъектов = Новый Массив;
		
		Выборка = ПланыОбмена.ВыбратьИзменения(ТекущийУзел, НомерСообщения);
		Пока Выборка.Следующий() Цикл
			// В этом цикле только подготовим массив объектов, содержащихся в сообщении плана обмена
			// Чтобы побыстрее освободить ЗаписьСообщения
			// (до вызова метода ЗакончитьЗапись() в плане обмена устанавливается исключительная блокировка)
			Объект = Выборка.Получить();
			Если ТипЗнч(Объект) = Тип("УдалениеОбъекта") Тогда
				МассивУдаляемыхОбъектов.Добавить(Объект);
			ИначеЕсли НЕ МетаданныеДокументы.Содержит(Объект.Ссылка.Метаданные()) Тогда
				МассивОбъектов.Вставить(0, Объект.Ссылка);  // Документы сдвигаем в конец массива
			Иначе
				МассивОбъектов.Добавить(Объект.Ссылка);
			КонецЕсли;
		КонецЦикла;
		
		Если МассивОбъектов.Количество() = 0 и МассивУдаляемыхОбъектов.Количество() = 0 Тогда
			ЗаписьСообщения.ПрерватьЗапись(); // Освобождаем номер сообщения плана обмена
			Продолжить;
		КонецЕсли;
		ЗаписьСообщения.ЗакончитьЗапись(); // Фиксируем исходящее сообщение плана обмена данных
		// Полученный XML сообщения игнорируем. 
		// Так как в базе приемнике фиксация номеров входящих сообщений плана обмена не предусмотрена 
		// (В приемнике вообще может не быть корреспондирующего плана обмена при одностороннем обмене).
		ЗаписьСообщенияXML.Закрыть(); 
		
		// Передача измененных объектов в базу приемник
		Отказ = Ложь;
		ОбработкаОбмена = ИнициализироватьОбработкуОбмена(ТекущийУзел, ИмяСобытияДляЖурнала, Отказ);

		ФайлОбмена = Новый Файл(ОбработкаОбмена.ИмяФайлаОбмена);
		
		// Подключение
		LuExchange = ПолучитьWSПрокси(ТекущийУзел, "LuExchange.1cws", "http://www.LuExchange.ru", "LuExchange");
		
		// Удаляемые объекты // Поиск удаляемого объекта выполняется только по ссылке
		ВыгрузитьУдаляемыеОбъектыВБазуПриемник(ТекущийУзел, МассивУдаляемыхОбъектов, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, Отказ);
		
		// Измененные объекты
		Для каждого ОбъектСсылка Из МассивОбъектов Цикл
			
			ОшибкаВыгрузкиОбъекта = Ложь;
			СтрокаЗагруженныеДокументы = ""; // Массив загруженных документов в базе приемнике (строка внутренняя) для инициации последующего проведения
			ВыгрузитьОбъектВБазуПриемник(ОбъектСсылка, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, СтрокаЗагруженныеДокументы, ОшибкаВыгрузкиОбъекта);

			Если ОшибкаВыгрузкиОбъекта Тогда
				Отказ = Истина;
				Продолжить;	
			КонецЕсли;
			
			// Для выгруженных документов необходимо выполнить команду проведения или, если документ был распроведен, удалить движения
			ОшибкаПроведенияДокумента = Ложь;
			ОбработкаПризнакаПроведенияДокумента(СтрокаЗагруженныеДокументы, LuExchange, ИмяСобытияДляЖурнала, ОшибкаПроведенияДокумента);
				
			// Фиксируем успешную синхронизацию в плане обмена для объекта
			ПланыОбмена.УдалитьРегистрациюИзменений(ТекущийУзел, ОбъектСсылка);	
			
		КонецЦикла;
		
		УдалитьФайлы(ОбработкаОбмена.ИмяФайлаОбмена);
		
		Если НЕ Отказ Тогда
			// Фиксируем успешную синхронизацию в плане обмена для всего сообщения
			ПланыОбмена.УдалитьРегистрациюИзменений(ТекущийУзел, НомерСообщения);	
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Процедура ВыгрузитьОбъектВБазуПриемник(ОбъектСсылка, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, СтрокаЗагруженныеДокументы="", Отказ)
	
	// Получаем ДанныеXML
	ВыгруженоОбъектов = 0; 
	ДанныеXML = ПолучитьДанныеXMLПоПравиламКонвертации(ОбработкаОбмена, ОбъектСсылка, ВыгруженоОбъектов, ИмяСобытияДляЖурнала);
	
	// ExecuteExchange
	ТекстОшибки = "";
	ОшибкаВыгрузки = Ложь;
	СтрокаФиктивныеСсылки = "";
	Данные = Новый ХранилищеЗначения(ДанныеXML, Новый СжатиеДанных(9));
	ЗагруженоОбъектов = LuExchange.ExecuteExchange(Данные, ИмяСобытияДляЖурнала, СтрокаФиктивныеСсылки, СтрокаЗагруженныеДокументы, ТекстОшибки);

	// Фиктивные ссылки (выгружаем объекты по ссылкам)
	ОбработкаФиктивныхСсылок(СтрокаФиктивныеСсылки, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, ОшибкаВыгрузки);
	
КонецПроцедуры
Процедура ОбработкаФиктивныхСсылок(СтрокаФиктивныеСсылки, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, Отказ)
	
	Если ПустаяСтрока(СтрокаФиктивныеСсылки) Тогда
		Возврат;
	КонецЕсли;
	
	ФиктивныеСсылки = ЗначениеИзСтрокиВнутр(СтрокаФиктивныеСсылки);
	Для каждого ФиктивнаяСсылка Из ФиктивныеСсылки Цикл
		ФиктивнаяСсылка = СтрЗаменить(ФиктивнаяСсылка, ".", Символы.ПС);
		ВидПриемника = СтрПолучитьСтроку(ФиктивнаяСсылка, 1);
		ТипПриемника = СтрПолучитьСтроку(ФиктивнаяСсылка, 2); 
		УИД = СтрПолучитьСтроку(ФиктивнаяСсылка, 3);
		
		// Здесь тип объекта соответствует метаданным базы приемника, 
		// для обработки необходимо привести к соответствующему типу текущей базы
		// Найдем корреспондирующий тип по правилам обмена
		ПравилоКонвертации = ОбработкаОбмена.ТаблицаПравилКонвертации.Найти(ВидПриемника+"Ссылка."+ТипПриемника, "Приемник");
		Если ПравилоКонвертации = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		TypeOf = СтрЗаменить(ПравилоКонвертации.ТипИсточника, ".", Символы.ПС);
		ВидИсточника = СтрПолучитьСтроку(TypeOf, 1);
		ТипИсточника = СтрПолучитьСтроку(TypeOf, 2);
		
		Если ВидИсточника = "ДокументСсылка" Тогда
			МенеджерОбъекта = Документы[ТипИсточника];
		ИначеЕсли ВидИсточника = "СправочникСсылка" Тогда
			МенеджерОбъекта = Справочники[ТипИсточника];
		Иначе
			Отказ = Истина;
			Продолжить;	
		КонецЕсли;
		
		ОбъектСсылка = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
		
		НайденныйОбъект = ОбъектСсылка.ПолучитьОбъект();
		Если НайденныйОбъект = Неопределено Тогда
			Отказ = Истина;
			Продолжить;	
		КонецЕсли;
		
		ВыгрузитьОбъектВБазуПриемник(ОбъектСсылка, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала,, Отказ);
		
	КонецЦикла;

КонецПроцедуры
Процедура ОбработкаПризнакаПроведенияДокумента(СтрокаЗагруженныеДокументы, LuExchange, ИмяСобытияДляЖурнала, Отказ)
	
	Если ПустаяСтрока(СтрокаЗагруженныеДокументы) Тогда
		Возврат;
	КонецЕсли;
	
	// PostingDocuments
	ТекстОшибки = "";
	Отказ = LuExchange.PostingDocuments(СтрокаЗагруженныеДокументы, ТекстОшибки);

КонецПроцедуры
Функция ИнициализироватьОбработкуОбмена(ТекущийУзел, ИмяСобытияДляЖурнала, Отказ)
	
	// Инициализация
	ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	ОбработкаОбмена.РежимОбмена = "Выгрузка";
	ОбработкаОбмена.ПостроительОтчета = Новый ПостроительОтчета;
	ОбработкаОбмена.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;
	
	// Загрузка правил
	ПравилаОбмена = ТекущийУзел.ПравилаКонвертации.Получить();
	ОбработкаОбмена.ЗагрузитьПравилаОбмена(ПравилаОбмена, "Строка");
	ОбработкаОбмена.ИмяФайлаПравилОбмена = "Неопределено"; // Обходим глюк обработки, иначе она считает, что правила не загружены
	
	// ИмяФайлаОбмена	
	ОбработкаОбмена.ИмяФайлаОбмена = ПолучитьИмяВременногоФайла("xml");
	
	// Для всех правил конвертации справочников и документов рекомендуется по возможности устанавливать в ИСТИНА следующие свойства: 
	//	- Искать объект приемника по внутреннему идентификатору объекта источника;
	//	- При переносе объкта по ссылке НЕ создавать новый объект, а только переносить ссылку;
	// Для правил конвертации документов дополнительно рекомендуется устанавливать в ИСТИНА следующее свойство: 
	//	- Не выгружать объекты свойств источника по ссылкам;
	// В этом случае файл данных XML для выгружаемого объекта не будет содержать объекты выгружаемые по ссылкам. 
	// Это существенно уменьшит размер передаваемого файла и ускорит процесс синхронизации.
	// Выгрузка этих объектов при необходимости будет инициироваться автоматически.
	
	Возврат ОбработкаОбмена;
	
КонецФункции
Функция ПолучитьДанныеXMLПоПравиламКонвертации(ОбработкаОбмена, ОбъектСсылка, ВыгруженоОбъектов, ИмяСобытияДляЖурнала)
	
	МетаИмя = ОбъектСсылка.Метаданные().Имя;
	
	// Сначала все отключаем
	Для Каждого Строка из ОбработкаОбмена.ТаблицаПравилВыгрузки.Строки Цикл
		Строка.Включить = 0;
		ОбработкаОбмена.УстановитьПометкиПодчиненных(Строка, "Включить");
	КонецЦикла;
	
	// Включаем нужное правило
	СтрПравил = ОбработкаОбмена.ТаблицаПравилВыгрузки.Строки.Найти(МетаИмя, "Имя", Истина);
	
	Если СтрПравил = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли; 
	
	Если НЕ ЗначениеЗаполнено(СтрПравил.ИмяОбъектаДляЗапроса) Тогда
		Возврат Неопределено;
	КонецЕсли; 
	
	СтрПравил.Включить = 1;
	ОбработкаОбмена.УстановитьПометкиРодителей(СтрПравил, "Включить");
	
	// Отбор
	ИмяОтбора = СтрЗаменить(СтрПравил.ИмяОбъектаДляЗапроса, ".", "_");
	ПостроительОтчета = Новый ПостроительОтчета("ВЫБРАТЬ ПЕРВЫЕ 1 _.* ИЗ " + СтрПравил.ИмяОбъектаДляЗапроса + " КАК _ {ГДЕ _.Ссылка.* КАК " + ИмяОтбора + "}");
	
	Отбор = ПостроительОтчета.Отбор.Добавить(ИмяОтбора);
	Отбор.ВидСравнения = ВидСравнения.Равно;
	Отбор.Установить(ОбъектСсылка); 
	
	СтрПравил.ИспользоватьОтбор = Истина;
	СтрПравил.НастройкиПостроителя = ПостроительОтчета.ПолучитьНастройки();
	
	// Выгрузка
	ОбработкаОбмена.ВыполнитьВыгрузку();
	ВыгруженоОбъектов = ОбработкаОбмена.мСчетчикВыгруженныхОбъектов;
	ЧтениеТекста = Новый ЧтениеТекста;
	ЧтениеТекста.Открыть(ОбработкаОбмена.ИмяФайлаОбмена, КодировкаТекста.UTF8);
	СтрокаXML = ЧтениеТекста.Прочитать();
	ЧтениеТекста.Закрыть();
	
	Возврат СтрокаXML;
	
КонецФункции // ПолучитьДанныеXMLПоПравиламКонвертации()
Функция ПолучитьWSПрокси(Параметры, ИмяФайлаПубликации, URIПространстваИменСервиса, ИмяСервиса)
	
	Определения = Новый WSОпределения("http://"+Параметры.Сервер+"/"+Параметры.База+"/ws/"+ИмяФайлаПубликации+"?wsdl", Параметры.Пользователь, Параметры.Пароль);
	WSПрокси = Новый WSПрокси(Определения, URIПространстваИменСервиса, ИмяСервиса, ИмяСервиса+"Soap");
	WSПрокси.Пользователь = Параметры.Пользователь;
	WSПрокси.Пароль = Параметры.Пароль;
	Возврат WSПрокси;
	
КонецФункции
6. Настройка Веб-сервиса для базы приемника

Настройка Веб-сервиса для базы приемника

7. Модуль Веб-сервиса

Функция ExecuteExchange(DataXML, NameOfEvent, FictitiousObjects, UploadedDocuments, ErrorMessage)       

	УстановитьПривилегированныйРежим(Истина);
	
	Попытка
		
		ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
		ОбработкаОбмена.РежимОбмена = "Загрузка";
		ОбработкаОбмена.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;
		ОбработкаОбмена.ЗагружатьДанныеВРежимеОбмена = Истина;
		ОбработкаОбмена.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
		ОбработкаОбмена.ОптимизированнаяЗаписьОбъектов = Истина;
		ОбработкаОбмена.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
	
		РаботаВозможна = ОбработкаОбмена.ВыполнитьДействияПередЧтениемДанных(DataXML.Получить());
		Если НЕ РаботаВозможна Тогда
			ErrorMessage = "ExecuteExchange(1). ОбработкаОбмена.ВыполнитьДействияПередЧтениемДанных - работа не возможна";
			Возврат 0;
		КонецЕсли;	

		ОбработкаОбмена.ПроизвестиЧтениеДанных(ErrorMessage);
		Если НЕ ПустаяСтрока(ErrorMessage) Тогда
			Возврат 0;
		КонецЕсли;

		ОбработкаОбмена.ВыполнитьДействияПослеЗавершенияЧтенияДанных(); 

		// Подготовим для возврата в базу источник массивы Фиктивных ссылок и массив выгруженных документов
		МассивФиктивныхСсылок = Новый Массив;
		МассивЗагруженныхДокументов = Новый Массив;
		МетаданныеДокументы = Метаданные.Документы;
		Для каждого КлючИЗначение Из ОбработкаОбмена.ЗагруженныеОбъекты Цикл
			ОбъектСсылка = КлючИЗначение.Значение.СсылкаНаОбъект;
			ОбъектМетаданные = ОбъектСсылка.Метаданные();
			Если КлючИЗначение.Значение.СсылкаФиктивная Тогда  
				// Фиктивная ссылка - объект не найденный в базе приемнике и не выгруженный по ссылкам
				МассивФиктивныхСсылок.Добавить(ОбъектМетаданные.ПолноеИмя() + "." + XMLСтрока(ОбъектСсылка.Ссылка));
			ИначеЕсли МетаданныеДокументы.Содержит(ОбъектМетаданные) Тогда
				МассивЗагруженныхДокументов.Добавить(ОбъектСсылка.Ссылка);
			КонецЕсли;
		КонецЦикла;
		Если МассивФиктивныхСсылок.Количество() > 0 Тогда
			FictitiousObjects = ЗначениеВСтрокуВнутр(МассивФиктивныхСсылок);
		КонецЕсли;
		Если МассивЗагруженныхДокументов.Количество() > 0 Тогда
			UploadedDocuments = ЗначениеВСтрокуВнутр(МассивЗагруженныхДокументов);
		КонецЕсли;

	Исключение
		ErrorMessage = "ExecuteExchange(2). " + ОписаниеОшибки();
		Возврат 0;
	КонецПопытки;
	
	Возврат ОбработкаОбмена.мСчетчикЗагруженныхОбъектов;	
	
КонецФункции

Функция DeleteObject(TypeOf, UUID, ErrorMessage)
	
	УстановитьПривилегированныйРежим(Истина);
	Попытка
		
		TypeOf = СтрЗаменить(TypeOf, ".", Символы.ПС);
		ВидОбъекта = СтрПолучитьСтроку(TypeOf, 1);
		ТипОбъекта = СтрПолучитьСтроку(TypeOf, 2);

		Если ВидОбъекта = "ДокументСсылка" Тогда
			МенеджерОбъекта = Документы[ТипОбъекта];
		ИначеЕсли ВидОбъекта = "СправочникСсылка" Тогда
			МенеджерОбъекта = Справочники[ТипОбъекта];
		Иначе
			ErrorMessage = "DeleteObject(1). Ошибка получения менеджера объекта " + ВидОбъекта + "." + ТипОбъекта + "!";
			Возврат Истина;	
		КонецЕсли;
		
		ОбъектСсылка = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(UUID));
		НайденныйОбъект = ОбъектСсылка.ПолучитьОбъект();
		Если НЕ НайденныйОбъект = Неопределено Тогда
			НайденныйОбъект.Удалить(); 
			// В базе приемнике удаление происходит без проверки ссылочной целостности
			// В некоторых схемах целесообразнее отключать данный функционал
			// а удаление выполнять соответствующей обработкой
			// ("ПометкаУдаления" синхронизируется обычным образом в ExecuteExchange)
		КонецЕсли;
			
	Исключение
		ErrorMessage = "DeleteObject(2). " + ОписаниеОшибки();
		Возврат Истина;
	КонецПопытки;
	
	Возврат Ложь;	
	
КонецФункции

Функция PostingDocuments(UploadedDocuments, ErrorMessage)
	
	УстановитьПривилегированныйРежим(Истина);
	Отказ = Ложь;
	Попытка
		
		МассивВыгруженныхДокументов = ЗначениеИзСтрокиВнутр(UploadedDocuments);
		Для каждого ДокументСсылка Из МассивВыгруженныхДокументов Цикл
			
			ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
			Если ДокументОбъект = Неопределено Тогда
				Отказ = Истина;
				ErrorMessage = ErrorMessage + Символы.ПС + "PostingDocuments(1). Объект не найден: " + ДокументСсылка;
				Продолжить;
			КонецЕсли;
			
			// Проведение
			Если ДокументОбъект.Проведен Тогда
				Попытка
					ПолучитьСообщенияПользователю(Истина); // Очистим все предыдущие сообщения на момент проведения
					ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
				Исключение
					Сообщения = ПолучитьСообщенияПользователю(Истина); // Вернем в базу источник ошибки проведения
					ТекстСообщения = "";
					Для каждого Сообщение Из Сообщения Цикл
						ТекстСообщения = ТекстСообщения + Символы.ПС + Сообщение.Текст;
					КонецЦикла;
					ErrorMessage = ErrorMessage + Символы.ПС + "PostingDocuments(2). " + ДокументСсылка + Символы.ПС + ОписаниеОшибки() + ТекстСообщения;
					Отказ = Истина;
					// Сбросим признак проведения
					ДокументОбъект.Проведен = Ложь;
					ДокументОбъект.ОбменДанными.Загрузка = Истина;
					ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
				КонецПопытки;
			КонецЕсли;
			
			// Если снят с проведения, очистим движения
			Если НЕ ДокументОбъект.Проведен Тогда
				Для каждого НаборДвижений Из ДокументОбъект.Движения Цикл
					НаборДвижений.Прочитать();
					Если НаборДвижений.Количество() > 0 Тогда
						НаборДвижений.Очистить();
						НаборДвижений.Записать();
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
			
		КонецЦикла;
		
	Исключение
		ErrorMessage = "PostingDocuments(3). " + ОписаниеОшибки();
		Отказ = Истина;
	КонецПопытки;
	
	Возврат Отказ;	
	
КонецФункции
8. Рекомендации
При  разработке правил конвертации очень сложно отлаживать правила в боевой схеме, поэтому для сложных конвертаций рекомендую сначало воспользоваться средствами отладки встроенными в обработку "Универсальный обмен данными XML", в этом случае имеется возможность подключить алгоритмы из правил в виде модулей внешней обработки как при выгрузке, так и при загрузке данных. И только после успешной выгрузки - загрузки в интерактивном режиме через промежуточный файл - пробовать синхронизацию через Веб.
 
9. Опыт внедрения

Данная схема успешно реализована в реальных действующих системах:

  • связка УТ 10.3 и УПП 1.3. (УТ нетиповая, доработана под производство с вводом данных через тач-панели на конвейерной линии)
  • связка Самописная конфигурация и БП 3.0 (В самописной конфигурации ведется учет технологических операций на фабрике птицы)
10. Состав вложенных файлов
  • ОбменДаннымиОнлайнЧерезВебСервис.cf - содержит все описанные объекты для синхронизации (Источник + Приемник). Обычные формы. Клиент-серверный вариант. В файловом варианте тоже все будет работать, кроме регламентного задания. В этом случае необходимо предусмотреть периодический запуск синхронизации с помощью метода ПодключитьОбработчикОжидания(). При сравнении, объединении необходимо отметить по подсистемам файла: подсистема "ЛУ_СинхронизацияЧерезВебСервис".
  • ДемоБазы.zip - содержит выгрузки из двух баз (PR1.dt и PR2.dt) для демонстрации готовой настроенной схемы синхронизации. Базы содержат простенькие документы и справочники. Имена метаданных синхронизируемых объектов различаются. Правила конвертации загружены в базу. Необходимо восстановить базы из .dt. Выполнить публикацию на Веб-сервере под именами PR1 и PR2 с установленной галочкой Публиковать Веб-сервисы и LuExchange. В режиме Предприятия в настройках соответствующих узлов планов обмена необходимо прописать имя Веб-сервера на котором была выполнена публикация баз.
  • ОбменДаннымиОнлайнЧерезВебСервис.cfe - вариант доработки в виде расширения конфигурации для баз находящихся на поддержке без возможности редактирования. Ввиду ограниченного функционала расширений, не содержит объекты: План обмена и Регламентное задание. То есть синхронизация здесь реализована без квитирования успешности доставки данных, но полностью совместима с протоколом обмена основного .cf

11. Инструкция по внедрению (ОбменДаннымиОнлайнЧерезВебСервис.cf)

Скачиваем файл ОбменДаннымиОнлайнЧерезВебСервис.cf

Выполняем команду: Конфигурация - Сравнить, объединить с конфигурацией из файла...
После вывода результатов сравнения конфигураций выполняем команду:
Действия - Отметить по подсистемам файла - отмечаем подсистему "ЛУ_СинхронизацияЧерезВебСервис".
Далее - Выполнить.
Обновляем конфигурацию базы данных.
 
То же повторяем для корреспондирующей базы.
 
Публикуем обе базы на Веб-сервере (Как? - это отдельная тема, поиск в помощь)
При публикации отмечаем галочками Публиковать Веб-сервисы и LuExchange.
 
Настраиваем соответствующие узлы Планов обменов обеих баз
В первой базе создаем узел с настройками подключения ко второй базе и наоборот.
Здесь:
  • Сервер - имя веб-сервера, на котором выполнена публикация баз
  • База - имя, под которым выполнена публикация корреспондирующей базы на веб-сервере, как правило совпадает с именем базы на сервере 1С Предприятие
  • Логин - имя пользователя, которого необходимо создать в обеих базах с ролью WebСервисLuExchange (подключение веб-сервиса будет происходить под этим пользователем)
  • Пароль
  • Правила конвертации - сюда необходимо загрузить правила конвертации, созданные в конфигурации "Конвертация данных"
Создание правил конвертации - тоже отдельная большая тема. (Если не в курсе, можно поштудировать инет)
Если Вы владеете этим мощным и универсальным инструментом, то для идентичных корреспондирующих баз, правила конвертации сможете создать полностью автоматически за несколько минут.
Открываем состав плана обмена ЛУ_WebСервис и добавляем все объекты, для которых в правилах конвертации прописали ПВД (Правила выгрузки данных).
Для всех объектов состава запрещаем авторегистрацию.
 
При разработке правил конвертации придерживаемся следующих рекомендаций:
  • Для ПВД поддерживается только способ выборки: "Стандартная выборка"
  • Для всех ПКО справочников и документов рекомендуется устанавливать в ИСТИНА следующие свойства:
    • Искать объект приемника по внутреннему идентификатору объекта источника;
    • При переносе объкта по ссылке НЕ создавать новый объект, а только переносить ссылку;
  • Для ПКО документов дополнительно рекомендуется устанавливать в ИСТИНА следующее свойство:
    • Не выгружать объекты свойств источника по ссылкам;

В этом случае файл данных XML для выгружаемого объекта не будет содержать объекты выгружаемые по ссылкам. Это существенно уменьшит размер передаваемых данных и ускорит процесс синхронизации. Выгрузка этих объектов при необходимости будет инициироваться автоматически.

Если возникнут затруднения в настройке планов обменов
можно скачать вложение "ДемоБазы.zip" и посмотреть как это выполнено в них.
 
Если понравилось и желаешь порекомендовать другим коллегам, ставь плюс!

Скачать файлы

Наименование Файл Версия Размер
ОбменДаннымиОнлайнЧерезВебСервис.cf
.cf 221,56Kb
07.02.19
111
.cf 1 221,56Kb 111 Скачать
ДемоБазы.zip
.zip 582,91Kb
07.02.19
64
.zip 1 582,91Kb 64 Скачать
ОбменДаннымиОнлайнЧерезВебСервисУФ.cfe (расширение конфигурации, управляемые формы)
.cfe 203,46Kb
06.11.16
66
.cfe 1.01 203,46Kb 66 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 19 31.10.16 14:04 Сейчас в теме
А какой объём данных можно передать за одно подключение?
У меня бывает пакеты по 30-40 Мб. На плохих каналах связи не всегда через ftp удаётся передать такой объём.
2. linkov 242 31.10.16 14:47 Сейчас в теме
(1) TODD22,

А какой объём данных можно передать за одно подключение?
У меня бывает пакеты по 30-40 Мб. На плохих каналах связи не всегда через ftp удаётся передать такой объём.

В представленной публикации алгоритм реализован именно для минимизации размера передаваемых данных через Веб-сервис.
Для этого:
- В одном пакете передается только один объект (элемент справочника или документ)
- Для документов в правилах конвертации отключена выгрузка объектов по ссылкам. Эта настройка существенно уменьшает размер передаваемых данных, исключая их избыточность. В случае необходимости, если подчиненный объект все же отсутствует в базе приемнике, то автоматически рекурсивно запускается его выгрузка в новых пакетах.
В итоге максимальный размер одного пакета в реальной схеме при синхронизации УПП 1.3 - УТ 10.3 для документа Поступление товаров и услуг (в среднем 10-20 строчек в табличной части) не превышает 0.5 Мб.

При стандартной установке для IIS максимальный размер обрабатываемого сообщения ~30 МБ

Если в Вашей схеме вес одного пакета зашкаливает за 30 Мб., то тогда Вам в помощь эта публикация: Передача больших пакетов через веб-сервисы
3. artbear 1180 02.11.16 20:13 Сейчас в теме
4. rash7wolf 05.11.16 20:08 Сейчас в теме
Приобрел оба файла. не жалею. все работает. спасибо ,нужная вещь . советую
5. a_titeev 12 09.12.16 10:46 Сейчас в теме
Зачем сервис для этого? Какие задачи это решает?
6. linkov 242 09.12.16 13:21 Сейчас в теме
(5)

Зачем сервис для этого? Какие задачи это решает?

Можно организовать онлайн обмен и без Веб-сервиса (в некоторых случаях), например используя COM-объект.
Здесь можно отметить преимущества и недостатки синхронизации через Веб-сервис в отличии от COM-объекта:

Недостатки COM-объекта:
1. Подключиться к базе через COM-объект вне локальной сети невозможно (хотя, если извратиться, то можно, но в любом случае, это вызовет хождение колоссального трафика). Через Веб-сервис можно легко обмениваться данными через интернет. В этом случае для безопасности необходимо подключаться используя SSL.

2. COM-объект - тяжелая штука. Ресурсы жрет немерено. Если у Вас работает несколько сотрудников, то скорее Вы этого не ощутите, а вот если 100-200 и все начнут что-то онлайн синхронить....

3. Для запуска COM-объекта требуется некоторое время.

4. Для COM-объекта обязательным условием для подключения является точное соответствие версии платформы базы Источника и базы Приемника. То есть, если Ваши базы находятся на разных серверах, обновление платформы 1С на обоих серверах необходимо производить одновременно!

Недостатки Веб-сервиса:
1. Стартует Веб-сервис быстро, даже при холодном старте, но пропускная способность http оставляет желать лучшего.

2. К недостаткам Веб-сервиса так же можно отнести необходимость заботиться о размере передаваемых данных, при стандартной настройке Веб-сервера IIS размер одного пакета данных не должен превышать 30Мб.
7. Ксакеп 63 20.01.17 10:54 Сейчас в теме
Разрабатываю похожий сервис, но несколько иного характера. Нет необходимости синхронизации "на лету". Столкнулся с проблемой подключения к веб-сервису с использованием шифрования. На клиенте все хорошо, 1с видит сертификат, считает ресурс надежным. На сервере же что только не перепробовал - "Удаленный узел не прошел проверку" и все. Хоть убей. Платформа 8.3.9.1818.

- добавлял сертификат в cacert.pem
- добавлял сертификат в доверенный центры
- подсовывал файл сертификата в ЗащищенноеСоединениеOpenSSL
- отключал проверку сертификата в ЗащищенноеСоединениеOpenSSL

Если зайти на сервер, открыть браузер, перейти по ссылке веб-сервиса, то браузер покажет что узел надежный.
8. linkov 242 20.01.17 12:04 Сейчас в теме
(7) Возможно при выпуске клиентского сертификата вы не указали политику применения - подтверждать подлинность клиента.
Если Вам не нужна проверка подлинности клиента, то в настройках Веб-сервера укажите - сертификат клиента игнорировать.
9. Ксакеп 63 20.01.17 12:29 Сейчас в теме
(8) я не выпускал клиентский сертификат. Был создан самоподписанный сертификат для сервера, и добавлен в системный список доверенных центров сертификации. И проблема именно в том, что сервер 1С не видит, что этот сертификат в доверенных, и, соответственно, не может доверять узлу, на котором расположен web-сервис.
10. linkov 242 20.01.17 13:00 Сейчас в теме
я не выпускал клиентский сертификат. Был создан самоподписанный сертификат для сервера, и добавлен в системный список доверенных центров сертификации. И проблема именно в том, что сервер 1С не видит, что этот сертификат в доверенных, и, соответственно, не может доверять узлу, на котором расположен web-сервис.

В моем случае все работало с использованием следующего кода, но сертификат был не самоподписанный:
ssl = Новый ЗащищенноеСоединениеOpenSSL();  
HTTPСоединение = Новый HTTPСоединение("gateway.*****.ru",, Логин, Пароль, ,, ssl);
HTTPЗапрос = Новый HTTPЗапрос("/base/hs/Exchange/info");
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
11. Ксакеп 63 20.01.17 13:51 Сейчас в теме
(10) Если сертификат имеет подпись поверенного центра сертификации, строка: "ssl = Новый ЗащищенноеСоединениеOpenSSL()" вообще не требуется.

Кстати, по заявлению 1С, в 8.3.9 внесенго исправление, согласно которому, если ЗащищенноеСоединениеOpenSSL создать без указания хранилища серверных сертификатов, то проверка сертификата вообще не должна выполнятся. Однако выполняется.
12. linkov 242 20.01.17 13:54 Сейчас в теме
Не помню на какой версии платформы, это было в 2015 году, но только так и работало.
Возможно с тех пор все поменялось...
Ксакеп; +1 Ответить
13. murenysh 15 02.03.18 10:34 Сейчас в теме
Можно ли настроить обмен, чтобы опубликовать только одну базу?
14. linkov 242 02.03.18 10:49 Сейчас в теме
Можно, соответственно, данные будут синхронизироваться только в одну сторону.
15. murenysh 15 02.03.18 19:50 Сейчас в теме
но подтверждение о доставке тогда не будет работать.
Наемному бухгалтеру на компьютере ведь не будешь веб-сервер устанавливать.
Придется мучить стандартный Прочий обмен данными и обмен через ftp.
16. linkov 242 02.03.18 23:21 Сейчас в теме
(15)
но подтверждение о доставке тогда не будет работать.

Почему не будет? Будет. Алгоритм текущей доработки следующий:
При односторонней синхронизации на Веб-сервере публикуется только база-приемник.
База источник отправляет данные в базу приемник и не завершая сессию ждет ответ.
Если ответ положительный, то в плане обмена удаляется регистрация переданного объекта,
иначе не удаляется и при следующем запуске обмена повторяется попытка передачи этого объекта.
Но можно и наоборот, см.ниже.

Наемному бухгалтеру на компьютере ведь не будешь веб-сервер устанавливать.
Придется мучить стандартный Прочий обмен данными и обмен через ftp.

Для Вашего случая можно предложить переделать алгоритм следующим образом:
На веб-сервере публикуем только базу-источник.
В этом случае периферийная база должна выступать в роли инициатора обмена,
То есть, по инициативе пользователя или по регл.заданию выполняется запрос в базу-источник,
в ответ на который сервер должен передать данные очередного объекта.
Объект записывается в текущей базе, на сервер передается квитанция об успешности записи
и запрашивается очередной объект. До тех пор, пока сервер не ответит, что все объекты синхронизированы.
Этот вариант можно реализовать самостоятельно, используя те же методы получения данных объекта в формате XML
и обратного преобразования, описанных в публикации.
Не забудьте проконтролировать "фиктивные ссылки" и дополнительно запросить их данные с сервера.
17. murenysh 15 18.03.18 00:17 Сейчас в теме
К сожалению не смог применить к своей задаче данную разработку.
1. Если не выгружать подчиненные по ссылке, то база-приемник запросит недостающие объекты, но в будущем, если в источнике изменят например номенклатуру, то изменения не попадут в приемник.

2. Изменения в нужных для обмена документах происходят не только интерактивно, но и программно, например пакетами загружаются с сайта. Запускать обмен при получении каждого документа невозможно.

Еще в коде непонятно, чем отличается
ОбъектРегистрации = Новый УдалениеОбъекта(Источник.Ссылка);
ПланыОбмена.ЗарегистрироватьИзменения(ТекущийУзел, ОбъектРегистрации);


от
ПланыОбмена.ЗарегистрироватьИзменения(ТекущийУзел, Источник.Ссылка);


ведь в первом случае все равно регистрируется просто ссылка из УдалениеОбъекта

"Но с данным кодом возникнет следующая проблема – при наличии строки Удаление.Записать(); будет удален объект в текущей базе (а это не нужно). При отсутствии строки Удаление.Записать(); в удаленной базе данные останутся, то есть задача не будет решена."
https://infostart.ru/public/188547/
18. linkov 242 19.03.18 21:29 Сейчас в теме
(17)
1. Если не выгружать подчиненные по ссылке, то база-приемник запросит недостающие объекты, но в будущем, если в источнике изменят например номенклатуру, то изменения не попадут в приемник.

Смотри внимательнее подписки:
Источник - СправочникОбъект, ДокументОбъект
то есть, при изменении Номенклатуры, так же запуститься синхронизация и данный элемент будет синхронизирован!

2. Изменения в нужных для обмена документах происходят не только интерактивно, но и программно, например пакетами загружаются с сайта. Запускать обмен при получении каждого документа невозможно.

В данных алгоритмах целенаправленно была реализована выборочная регистрация измененных объектов в плане обмена только при интерактивной записи (по условиям задания).
В Вашем же случае все гораздо проще: убираем соответствующие подписки для регистрации объектов, активируем автоматическую регистрацию в плане обмена типовыми средствами, а после загрузки данных с сайта вызываем синхронизацию процедурой:
ЛУ_СинхронизацияВызовСервера.ПланОбменаСинхронизироватьАсинхронно(ПланОбменаМетаданные.Имя);
либо вешаем этот метод на регламентное задание с нужной периодичностью.

3. Еще в коде непонятно, чем отличается ... от ... ведь в первом случае все равно регистрируется просто ссылка из УдалениеОбъекта

Опять, читаем код более внимательно:
Объект УдалениеОбъекта в данном случае нужен исключительно для того, чтобы далее, при чтении изменений из плана обмена для отправки в кор. базу отличать измененные объекты от удаленных,
соответственно массив удаленных объектов отправляется в кор.базу собственным методом,
см.
Если ТипЗнч(Объект) = Тип("УдалениеОбъекта") Тогда
				МассивУдаляемыхОбъектов.Добавить(Объект);


Далее:
ВыгрузитьУдаляемыеОбъектыВБазуПриемник(ТекущийУзел, МассивУдаляемыхОбъектов, LuExchange, ОбработкаОбмена, ФайлОбмена, ИмяСобытияДляЖурнала, Отказ);


Ну, и на стороне базы приемника:
Функция DeleteObject(TypeOf, UUID, ErrorMessage)
19. murenysh 15 20.03.18 01:39 Сейчас в теме
Если ТипЗнч(Объект) = Тип("УдалениеОбъекта") Тогда
                МассивУдаляемыхОбъектов.Добавить(Объект);

В этом коде МассивУдаляемыхОбъектов будет всегда пустым, так как УдалениеОбъекта без выполненного метода Записать попадает в УзелОбмена как ссылка на измененный объект, а не как объект УдалениеОбъекта.


Я предположил, что раз есть механизм фиктивных ссылок, то включать подчиненные справочники в состав плана обмена не нужно. Ведь если регистрировать все подчиненные справочники, то механизм фиктивных ссылок становится не нужен.


Смотри внимательнее подписки:

Опять, читаем код более внимательно:

Лучше без этого
20. linkov 242 20.03.18 13:22 Сейчас в теме
(19)
Лучше без этого

- Согласен, действительно получилось не очень корректно.
Исправлюсь)

В этом коде МассивУдаляемыхОбъектов будет всегда пустым, так как УдалениеОбъекта без выполненного метода Записать попадает в УзелОбмена как ссылка на измененный объект, а не как объект УдалениеОбъекта.

Но по факту - не пустой!)
Метод Записать(), инициирующий удаление объекта, в данном случае не используется, так как код и так выполняется в подписке ПередУдалением.
Здесь важно, чтобы на момент чтения изменений из плана обмена, объект уже был удален. Это достигается тем, что соответствующий участок кода выполняется асинхронно в фоновом задании, которое стартует с некоторой задержкой, после того, как отработает подписка ПередУдалением и транзакция удаления объекта уже завершилась.

Я предположил, что раз есть механизм фиктивных ссылок, то включать подчиненные справочники в состав плана обмена не нужно. Ведь если регистрировать все подчиненные справочники, то механизм фиктивных ссылок становится не нужен.

Тут главное отличие механизма Фиктивных ссылок (с регистрацией всех подчиненных справочников) от выгрузки По ссылкам в том, что
в первом случае элементы справочников синхронизируются только при изменении, либо отсутствии подчиненной ссылки в базе назначения (фиктивная ссылка),
Этим как раз и достигается основной эффект уменьшения размера пакетов передаваемых данных и существенного увеличения скорости обмена.

во втором случае (при выгрузке по ссылкам) каждый раз при выгрузке документа вместе с ним выгружаются все подчиненные справочники.
21. murenysh 15 22.03.18 11:45 Сейчас в теме
(20)
Это достигается тем, что соответствующий участок кода выполняется асинхронно в фоновом задании, которое стартует с некоторой задержкой, после того, как отработает подписка ПередУдалением и транзакция удаления объекта уже завершилась.

Интересная комбинация. Протестировать затратно по времени, но раз работает, то работает.


(20)
во втором случае (при выгрузке по ссылкам) каждый раз при выгрузке документа вместе с ним выгружаются все подчиненные справочники.

Я предполагал третий вариант. Первичная выгрузка документов делается с выгрузкой подчиненных объектов по ссылкам, потом выгрузка подчиненных по ссылкам у документов отключается и подчиненные выгружаются только при их изменении и попадании в регистрацию узла обмена.
В таком случае и файл обмена небольшой и дополнительный механизм фиктивных ссылок не нужен.
22. xan333 48 26.04.18 16:31 Сейчас в теме
Добрый день! 12. Инструкция по внедрению Расширения конфигурации (ОбменДаннымиОнлайнЧерезВебСервис.cfe)
(в процессе, будет чуть позже) есть где то? Не хочется снимать конфигурацию с поддержки.
23. demart-omsk 18 23.06.18 00:32 Сейчас в теме
Спасибо, пригодилось! Все отлично работает.
24. mars207 27 25.07.18 16:56 Сейчас в теме
Все работает, большое спасибо!!!
25. Synoecium 684 24.02.19 21:00 Сейчас в теме
статья отличная, только пришлось хорошо допилить план обмена, чтобы взлетело на УФ. Плюс еще ошибка была с реквизитом "ЭтотУзел", не знаю в какой версии его убрали, но у меня на платформе в режиме совместимости 8.3.10 и 8.2.13 такая ошибка есть. Делал обмен ДО 2.1->УПП 1.3.115
Если возникнет такая ошибка, можно воткнуть перед использованием реквизита "ЭтотУзел" такой код:
ссылкаЭтотУзел = ПланыОбмена.ЛУ_WebСервис.ЭтотУзел();
ЭтотУзел = (Ссылка = ссылкаЭтотУзел);
26. linkov 242 24.02.19 21:20 Сейчас в теме
(25)
еще ошибка была с реквизитом "ЭтотУзел", не знаю в какой версии его убрали, но у меня на платформе в режиме совместимости 8.3.10 и 8.2.13 такая ошибка есть.

- Спасибо, буду иметь ввиду!
27. RBA1972 21.05.19 17:03 Сейчас в теме
Сергей, спасибо за публикацию! Где можно увидеть 12. Инструкция по внедрению Расширения конфигурации (ОбменДаннымиОнлайнЧерезВебСервис.cfe)?
29. linkov 242 21.05.19 20:46 Сейчас в теме
(27)

Сергей, спасибо за публикацию! Где можно увидеть 12. Инструкция по внедрению Расширения конфигурации (ОбменДаннымиОнлайнЧерезВебСервис.cfe)?

Инструкцию по внедрению расширения не писал. Здесь никаких особенностей нет. Нужно добавить в список расширений и прямо в коде исправить настройки на свои.
28. RBA1972 21.05.19 17:04 Сейчас в теме
Напишите в личку, пожалуйста.
30. RBA1972 22.05.19 09:20 Сейчас в теме
Сергей, а можно ли с вами связаться через альтернативные способы связи? Ответьте пожалуйста в личку, спасибо!
31. alexlx 71 16.07.19 13:17 Сейчас в теме
32. linkov 242 16.07.19 13:50 Сейчас в теме
Эта доработка наврятли.
У меня есть доработка специально написанная для РИБ.
В которой стандартная выгрузка РИБ отправляется через Web.

Постараюсь в ближайшее время выложить.
33. sitec 01.10.19 14:16 Сейчас в теме
Регистры сведений вот только не выгружаются... А как в правила подпихнуть отбор по регистру?

ИмяОтбора = СтрЗаменить(СтрПравил.ИмяОбъектаДляЗапроса, ".", "_");
ПостроительОтчета = Новый ПостроительОтчета("ВЫБРАТЬ ПЕРВЫЕ 1 _.* ИЗ " + СтрПравил.ИмяОбъектаДляЗапроса + " КАК _ {ГДЕ _.Ссылка.* КАК " + ИмяОтбора + "}");

Вот вместо этого собственно.
34. IVKuzmin 21.01.20 11:55 Сейчас в теме
Добрый день.
А как с помощью данного обмена можно сделать первоначальную выгрузку и сопоставление данных?
35. linkov 242 22.01.20 09:32 Сейчас в теме
(34)
А как с помощью данного обмена можно сделать первоначальную выгрузку

Точно так-же, как и при обычном универсальном обмене - необходимо зарегистрировать необходимые объекты в плане обмена.

и сопоставление данных?

Сопоставление данных реализовывается в правилах обмена:
Для всех ПКО справочников и документов рекомендуется устанавливать в ИСТИНА свойство:
- Искать объект приемника по внутреннему идентификатору объекта источника
(хотя, для справочников в некоторых случаях можно извратиться и по другому)

Соответственно, первоначальную выгрузку рекомендуется делать в пустую базу
или начинать работу с базами - копиями друг друга!
36. IVKuzmin 22.01.20 17:56 Сейчас в теме
А если это разные базы, которые уже содержат в себе данные?
Возможно ли как-то сделать первичную выгрузку и сопоставление данных, как это реализовано в типовых обменах? (например, между БП и ЗУП)
37. linkov 242 24.01.20 09:33 Сейчас в теме
(36)
А если это разные базы, которые уже содержат в себе данные?
Возможно ли как-то сделать первичную выгрузку и сопоставление данных, как это реализовано в типовых обменах? (например, между БП и ЗУП)

Возможно.
Необходимо прописать сопоставление данных вручную в правилах обмена.
38. IVKuzmin 25.02.20 07:09 Сейчас в теме
Добрый день!
Обнаружил еще такой момент, что при обмене не пишутся данные в регистр сведений "Соответствия объектов информационных баз". Регистры сведений пустой. Это действительно так или какая-то у меня проблема?
39. chg 20.03.20 07:44 Сейчас в теме
Добрый день.

Возможна ли переделка на УФ?
40. linkov 242 20.03.20 10:21 Сейчас в теме
(39)

Возможна ли переделка на УФ?

Возможна.
Основные методы выполняются на сервере.
Чтобы не заморачиваться с клиентскими методами в формах, можно активировать автоматическую регистрацию в плане обмена типовыми средствами, при этом, подписки для интерактивной регистрации можно удалить.

Формы для настройки узлов плана обмена можно скопировать из расширения ОбменДаннымиОнлайнЧерезВебСервисУФ.cfe

Кстати, ОбменДаннымиОнлайнЧерезВебСервисУФ.cfe - изначально был реализован для управляемых форм, возможно этого функционала Вам будет достаточно.
41. chg 20.03.20 10:35 Сейчас в теме
(40)Попробую, хотя я привязываюсь к правилам написанными мной на КД 2.1, сам собой нужен будет план обмена, хотя его как вариант просто вынести в основную конфигурацию с рег заданием.
42. chg 27.03.20 07:36 Сейчас в теме
Добрый день.

При открытии обработки РасшXML_УниверсальныйОбменДаннымиXML вываливается ошибка:

Право Удаление неприменимо к РегистрСведений.ABCXYZКлассификацияКлиентов
{ОбменДаннымиЧерезВебСервис Обработка.РасшXML_УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(800)}: Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда
{ОбменДаннымиЧерезВебСервис Обработка.РасшXML_УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(24)}: ЗаполнитьСписокТиповДоступныхДляУдаления();

по причине:
Право Удаление неприменимо к РегистрСведений.ABCXYZКлассификацияКлиентов
43. linkov 242 27.03.20 11:21 Сейчас в теме
(42) Добрый день!

Это не обработка, а расширение...
44. chg 03.04.20 09:47 Сейчас в теме
(43)Добрый день.

Я понимаю, что расширение, но вы же в само расширение "РасшXML_УниверсальныйОбменДаннымиXML" добавили обработкой, соответственно открываю через Все функции....
45. linkov 242 03.04.20 10:18 Сейчас в теме
(44)

Если хотите выдернуть из расширения обработку, сначала подключите расширение как расширение, затем сохраните из него обработку на диск. А уже потом обработку можно открывать как обработку. Извините, за тафтологию)))
46. Cyberhawk 118 21.04.20 13:12 Сейчас в теме
Поддерживается ли асинхронный режим квитирования? Т.е.:
- в первый раз источник только "плюет" в веб-сервис пакет данных и приемник этот пакет только складывает в себя, на этом сеанс связи завершается
- приемник обрабатывает пакет и сохраняет результат обработки (в простейшем виде "успех" или "неуспех" всего пакета)
- при следующем сеансе источник сначала забирает результат обработки и (в случае успеха) удаляет регистрацию ранее отправленных и успешно принятых, а после уже отправляет в приемник очередной пакет объектов
.
47. linkov 242 25.04.20 12:55 Сейчас в теме
(46)
Нет, не поддерживается.
Хотя, согласен, предложенная Вами схема более правильная с методологической точки зрения)
Но чуть-чуть более сложная в реализации.
Текущая разработка использует только синхронный режим квитирования.
Оставьте свое сообщение

См. также

Выгрузка и загрузка XML для управляемых форм 8.3 (с отбором)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

В работе постоянно приходится разделять в различные базы или объединять несколько организаций в одну базу, долгое время пользовался стандартной обработкой выгрузка-загрузка из UNIREPS 8.2, в режиме обычного приложения, но, к сожалению, для управляемого приложения стандартная обработка из UNIREPS 8.3 (Диск ИТС) не позволяет нормально сделать выгрузку с отбором, поэтому ей никогда не воспользовался. Решил что напишу обработку, которая позволит делать отборы в различных вариациях, кроме того, в обработках из UNIREPS (8.2 и 8.3) существенно отличается процесс загрузки предопределенных, что не всегда удобно при больших объемах данных. Обработка написана на базе UNIREPS 8.3, но есть существенные изменения. Но интерфейс доработан так, чтобы обработка была похожа на старую добрую обработку из UNIREPS 8.2, к которой все так привыкли.

1 стартмани

05.11.2019    6838    124    o.kovalev    14    

Преобразование XML файла в переменную структура, Загрузка в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

Обработка, демонстрирующая работу процедур и функций по преобразованию XML файла в дерево значений, а также в переменную типа структура.

1 стартмани

14.09.2019    6482    9    vik070777    18    

Документы и Справочники в JSON

Обмен через XML v8 1cv8.cf Абонемент ($m)

Пример выгрузки всех данных Документа или Справочника в JSON

1 стартмани

20.06.2019    9677    12    darkmessiahan    15    

XDTO для чайников

Обмен через XML v8 1cv8.cf Абонемент ($m)

Пример использования XDTO пакетов для выгрузки документа с табличной частью.

1 стартмани

29.05.2019    22276    20    HAMMER_59    37    

Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек)

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка предназначена для загрузки и выгрузки данных по правилам обмена в любых конфигурациях, реализованных на платформе 1С:Предприятие 8.3. Преимуществом перед типовой обработкой является добавленный функционал: #1. Установка произвольных фильтров на выгружаемые объекты при помощи механизма системы компоновки данных #2. Сохранение различных вариантов настроек (сохраняются правила обмена, фильтры выгрузки, параметры, настройки обработки) - что позволяет гибко настроить в базе-источнике фильтры для выгрузки объектов по различным правилам обмена для различных баз-приемников, сохранить выполненные настройки и в будущем уже пользоваться этими вариантами настроек. Проверялась на 1С:ERP Управление предприятием 2.4.7.141.

1 стартмани

29.04.2019    11489    214    sapervodichka    20    

Выгрузка и загрузка данных XML 8.3 на управляемых формах с отбором и конструктором запроса (в полной мере возможности реализованы для версии 1С:Предприятия 8.3 выше версии 8.3.5)

Обмен через XML Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

В этой форме всегда не хватало конструктора запросов для удобной выгрузки уникальных элементов по ссылке. Теперь он здесь есть. Как только стало возможным создавать конструктор запроса в управляемых формах, я добавил её в стандартную обработку. Необходимо напомнить, что обработка функционирует полноценно только с версии 8.3.5 1С:Предприятия 8.3.

1 стартмани

24.04.2019    6461    34    AlexandrSmith    1    

Выгрузка - загрузка данных в XML с отбором по организации Промо

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Выгрузка - загрузка данных в XML с отбором по организации (УФ)

1 стартмани

25.05.2014    44332    297    buganov    42    

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки

Практика программирования Внешние источники данных Обмен через XML WEB Разработка v8 1cv8.cf Абонемент ($m)

В этой статье мы рассмотрим путь и основные моменты создания небольшого вэб-сервиса, который мы называем "Онлайн Прайс-лист". Выгрузка из 1С, бэкенд, фронтенд, получение заказов в 1С.

1 стартмани

22.04.2019    27063    32    riposte    63    

Перенос данных с использованием XDTO

Обмен через XML v8 Россия Абонемент ($m)

Использование объекта типа "ОбъектXDTO" для переноса данных из одной конфигурации в другую

1 стартмани

21.04.2019    8928    9    axae    10    

Выгрузка и загрузка данных XML с гибкими отборами

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Обработка выгрузки и загрузки данных через XML между идентичными конфигурациями с возможностью установки произвольных отборов на выгружаемые объекты.

1 стартмани

07.04.2019    13591    345    sapervodichka    7    

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1 Промо

Обмен через XML Зарплата Перенос данных из 1C8 в 1C8 Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    35009    151    kostya_whiskas    24    

Перенос данных КА 1.1 -> КА 2

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 КА2 Россия Абонемент ($m)

Перенос данных КА 1.1 => КА 2 с помощью правил обмена данными в формате XML КД 2 (переносятся остатки, документы, справочная информация).

5 стартмани

20.03.2019    12999    234    gudogu    127    

Обработка для выгрузки и загрузки данных XML 8.3. С отбором, предпросмотром данных и сохранением настроек

Обмен через XML Перенос данных из 1C8 в 1C8 v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка Выгрузки и загрузки данных XML 8.3 на управляемых формах. Универсальная обработка "Выгрузка и загрузка данных XML" производит полную или частичную выгрузку данных информационной базы в файл в формате XML. Впоследствии этот файл может быть загружен в информационную базу с помощью этой же обработки. Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью. (Описание взято с ИТС)

1 стартмани

07.03.2019    10732    175    Gmix    5    

Правила обмена УПП 1.3 -> БП 3.0 (+ БП КОРП 3.0 + перенос остатков)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 УПП1 КД БП3.0 БУ Абонемент ($m)

Актуальные правила обмена: УПП 1.3.137.1 -> БП 3.0.76.77; УПП 1.3.137.1 -> БП КОРП 3.0.76.77; УПП 1.3.128.1 -> БП 3.0.74.63; УПП 1.3.128.1 -> БП КОРП 3.0.74.63; УПП 1.3.123.3 -> БП 3.0.71.83; УПП 1.3.123.3 -> БП КОРП 3.0.71.83; УПП 1.3.118.1 -> БП 3.0.68.61; УПП 1.3.118.1 -> БП КОРП 3.0.68.61.

1 стартмани

04.03.2019    8757    210    Смешной 1С    41    

Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3 Промо

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v7.7 v8 1cv7.md Россия Абонемент ($m)

Воспользоваться современным средством переноса данных "Конвертация данных 3.0.5.3" можно только выгрузив из системы - источника данных XML в формате обмена данными EnterpriseData. В этой публикации можно скачать приемы выгрузки из 1С 7.7 универсального формата обмена для Конвертации данных 3. Выполняем перенос данных из «1С:Предприятие 7.7» в «1С:Предприятие 8.3». Используем Конвертацию данных КД 3.0 из 1c 7.7 --> 1С 8.3. На первой стадии еще не опубликовано иного способа подложить файл для Конвертации данных 3 кроме как сформировать его вручную, постараемся решить данную проблему.

1 стартмани

26.02.2018    34821    49    ksnik    3    

1С: Розница/УТ 10.3. ЕГАИС, загрузка акцизных марок в справочник Штрихкоды и Упаковки, регистр Акцизные марки из XML-сообщений входящих ТТН ЕГАИС + Печать акцизных марок

Розничная торговля Обработка справочников Обмен через XML Ценники Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Пакетная загрузка/обновление списка акцизных марок ЕГАИС из входящих ТТН ЕГАИС. Для 1С Розница 2.2.9.ХХХ/2.2.10.ХХХ//2.2.11.ХХХ/2.2.12.ХХХ/Управление торговлей 10.3.49.ХХХХ и выше с возможностью печати

1 стартмани

31.01.2019    15181    126    independ    107    

Ручная выгрузка и загрузка данных через универсальный обмен данными с настройками (расширение, платформа 8.3+)

Обработка документов Обработка справочников Обмен через XML Перенос данных из 1C8 в 1C8 v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Данное расширение (не требует изменения конфигураций) служит как надстройка для конфигураций, у которых обмен между базами происходит через универсальный формат (EnterpriseData), с использованием стандартных правил конвертации, которые уже есть в конфигурации. Интерфейс адаптирован для простых пользователей, сделан общий отбор по Организации для всех документов, имеется пару настроек для передачи в параметры конвертации, которые расположены в общем модуле конфигураций, а так же есть возможность выбора запуска - в фоне или в текущем сеансе. Теперь не нужно настраивать обмен между базами, для того чтоб просто перенести нужные документы. Подходит точно для УТ 11.4, БП 3.0.67, КА 2.4.5, Розница 2.2.9 (Обновление 1.2 от 02.03.2019)

2 стартмани

19.01.2019    17633    116    hakerxp    10    

Перенос данных КА 1.1.115.1 => БП 3.0.75.104 (перенос остатков, документов, зарплатный блок и справочной информации)

Перенос данных из 1C8 в 1C8 Обмен через XML v8 КА1 БП3.0 Россия Абонемент ($m)

Переносятся: остатки по счетам 01, 02, 10, 20, 41, 60, 62, 71, 97 и их субсчетам; документы; отдельно можно перенести справочники (номенклатура, контрагенты, договоры контрагентов, организации, склады, физические лица, сотрудники).

5 стартмани

22.12.2018    11187    315    gudogu    152    

Универсальный обмен данными в формате XML (2.1.8) 8.3 УФ с отбором и без модальности

Обмен через XML v8 v8::УФ 1cv8.cf Абонемент ($m)

К типовой обработке "Универсальный обмен данными в формате XML" добавлены отбор и возможность работать в конфигурациях с отключенным режимом модальности.

1 стартмани

07.11.2018    19328    269    nicxxx    7    

SOAP для чайников

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Немножко про SOAP сервис. И пример работы с подключением и получением данных по SOAP за 5 минут.

1 стартмани

05.09.2018    37600    34    dusha0020    18    

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора. Промо

Обработка документов Универсальные обработки Обмен через XML v8 Абонемент ($m)

Редактор набора записей движений документа. Позволяет сохранить набор записей в XML, в настройки пользователя, прочитать сохраненный XML в другой идентичной базе, заменить регистратор. Можно изменять порядок записей, менять активность, как массово, так и по одной и др. Тонкий клиент, управляемые формы.

1 стартмани

07.09.2016    37822    153    Aphanas    4    

003. Почему я больше не люблю "Выгрузку Загрузку XML"

Обмен через XML v8 1cv8.cf Абонемент ($m)

Ниже будет много букаф, но если коротко — можно ускорить этот инструмент в 1000 раз

1 стартмани

03.09.2018    6831    8    Nikola23    8    

Простой эмулятор вызова веб-сервиса 1С с просмотром результата

Обмен через XML WEB v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

24.04.2018    11275    18    anvolkov1cbit    9    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Обмен через XML Перенос данных из 1C8 в 1C8 Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов, справочников и планов видов расчета из конфигурации 1С ЗУП 2.5 в ЗУП 3.1.

3 стартмани

28.03.2018    25802    408    Cobranet123    64    

Загрузка файлов грузовых таможенных деклараций из файлов ФТС формата xml (Альта софт, Сигма софт, Декларант +) Промо

Внешнеэкономическая деятельность (ВЭД) Обмен через XML Внешнеэкономическая деятельность (ВЭД) v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:" если что. Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные)

5 стартмани

09.08.2016    42104    171    capitan    283    

Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен)

Обмен через XML Перенос данных из 1C8 в 1C8 Розничная торговля Розничная торговля v8 КД УТ11 Розничная и сетевая торговля (FMCG) Абонемент ($m)

В статье по шагам рассматривается создание обмена между центральной базой и базами филиалов на базе конфигурации УТ 11. Для решения поставленной задачи было решено не использовать РИБ, т.к. требуется односторонний обмен ограниченным набором данных, к тому же по определенным условиям. Обмен реализован на основе типовой синхронизации на основе универсального обмена в формате EnterpriseData. Данная публикация может быть полезна внедренцам, которые работают с торговыми сетями, в том числе по модели франчайзинга.

1 стартмани

26.02.2018    34146    13    Kutuzov    18    

Перенос данных. Правила конвертации из УТ 10.3 в УТ 11.4

Перенос данных из 1C8 в 1C8 Обмен через XML v8 УТ10 КД УТ11 Россия Абонемент ($m)

Правила конвертации из УТ10.3(10.3.32.2) в  УТ11.4(11.4.1.261) (для переноса остатков, справочников)

2 стартмани

02.01.2018    43603    349    appolon321    36    

Пример заполнения/создания файла XML из XSD схемы, используя XDTO

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

1 стартмани

21.12.2017    40964    52    sandybaev    23    

1С:Интеграция ЕГАИС + Инвентаризация на ТСД Промо

Обработка справочников Обмен через XML Оптовая торговля Оптовая торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Интеграция ЕГАИС модуля для 1С: 8.3 + модуль WMS контура для инвентаризации алкогольных марок на ТСД.

1 стартмани

10.12.2015    34061    27    JetBrain    5    

Правила переноса документов из ЗУП 2.5 в ЗУП 3.1

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Перенос документов из ЗУП 2.5 в ЗУП 3.1 - позволяет снизить объем работ при опытной эксплуатации ЗУП 3.1 параллельно с ЗУП 2.5.

1 стартмани

04.12.2017    30143    494    AntonH851    38    

Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().

Обмен через XML Перенос данных из 1C8 в 1C8 v8 ЗУП2.5 КД БП3.0 Абонемент ($m)

В статье рассказываю: 1) о механизмах и транспорте обмена данными, где одной из сторон обмена выступает конфигурация на базе 1С, и о том, какой транспорт и в каких случаях лучше использовать 2) о решении задачи выгрузки данных документа «Зарплата к выплате организаций» (с выгрузкой банковский счетов физ лиц документа) из ЗУП 2.5.123.1 (далее Источник) в БП КОРП 3.0.52.39 (далее Приемник) путем создания правил обмена данными с использованием конфигурации «Конвертация данных» (далее просто КД) ред. 2.1.8.2. для (далее ЗкВО) 3) о тестирование полученных правил обмена данными.

1 стартмани

03.11.2017    29899    5    RailMen    5    

XML JSON преобразователь

Обмен через XML v8 1cv8.cf Россия Абонемент ($m)

Обработка демонстрирует возможность программного преобразования XML в JSON и обратно без подключения внешних модулей.

1 стартмани

11.10.2017    14702    46    m-rv    4    

Простой универсальный обмен между отличающимися конфигурациями. Код открыт! (СериализаторXDTO,ПостроительDOM) +примеры использования Промо

Обмен через XML v8 1cv8.cf Абонемент ($m)

Очень удобная обработка всего с двумя "командами": Выгрузить(Что, Куда) Загрузить(Откуда)

1 стартмани

02.09.2015    21933    100    Mi4man    15    

Правила обмена ЗУП 3.1 - БП 2.0 и ЗУП 3.1 - УПП 1.3 (отражение, ведомости и справочники)

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::БУ v8::СПР БП2.0 БП3.0 ЗУП3.x Россия БУ Абонемент ($m)

Правила обмена для выгрузки документов "Отражение зарплаты в бухучете", "Ведомость в банк", "Ведомость в кассу", справочников "Сотрудники" и "Физические лица"

1 стартмани

01.08.2017    72112    1533    forseil    205    

«Горыныч - то НЕ НАСТОЯЩИЙ!» … или О Конвертации Данных ред.3 (КД 3) и обменах в универсальном формате Enterprise Data… доступным русско-народным языком

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

Тем, кто хочет быстро разобраться с темой инструмента Конвертация данных 3.0 и технологией обмена по новому формату 1С, активно применяемому во всех новых конфигурациях от 1С на БСП, расширяющем возможности интеграции, пакет полезных материалов.

1 стартмани

13.06.2017    19272    138    Davlad_A    16    

"Конвертация данных" + Git. Решение проблемы различий в файлах

Инструментарий разработчика Обмен через XML v8 КД Абонемент ($m)

Как известно, типовая конфигурация «Конвертация данных» обладает одним недостатком, мешающим работать с ней в Git-е. Если выгруженные из нее правила обмена загрузить в другую КД, а потом снова выгрузить, то полученные два файла будут очень сильно отличаться друг от друга, и при сравнении (diff) доработок будет невозможно провести код-ревью, равно как найти сами изменения, которые закоммитил разработчик.

1 стартмани

08.06.2017    22402    39    stas_ganiev    13    

Навигатор по файлу обмена Промо

Универсальные обработки Обмен через XML v8 1cv8.cf Абонемент ($m)

Просмотр содержимого XML-файла выгрузки данных

5 стартмани

02.04.2014    28490    35    RocKeR_13    22    

Пообъектный разбор разметки

Инструментарий разработчика Обмен через XML v8 Абонемент ($m)

Обработка облегчает разбор разметки XML и позволяет обращаться с узлами (элементами, тэгами) почти как с объектами, не привлекая XDTO и не описывая формат предварительно. При этом обходится без загрузки всего файла в оперативную память, что позволяет читать файлы любого размера.

1 стартмани

26.04.2017    8407    4    9-pm    8    

XMPP(jabber) на чистом 1С

Обмен через XML v8 1cv8.cf Абонемент ($m)

На сайте infostart, есть несколько реализаций работы 1С с протоколом XMPP (jabber), но в основном они на использование сторонних библиотек (нативных), которые надо регистрировать в операционке (и только в винде), или на основе других систем - php, python и т.п. Предлагаю пример реализации отправки сообщения через этот протокол только средствами 1С.

1 стартмани

26.12.2016    14623    14    kodnik    10    

Загрузка XML в дерево значений

Обмен через XML v8 1cv8.cf Абонемент ($m)

Случайно наткнулся на статью с алгоритмом загрузки XML-строки в дерево значений и подумал, а не проще ли сделать это через механизм XDTO рекурсивно. На мой взгляд, решение получилось неплохое - даже атрибуты грузит..

1 стартмани

17.11.2016    22593    46    starik-2005    24    

Перенос справочников и документов из 1С 7.7 "Торговля и склад 9.2" в 1С 8.2 "Бухгалтерия предприятия 2.0". Промо

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v8 БП2.0 1С7:ТиС Россия Абонемент ($m)

Немного доработанные типовые правила обмена для конфигураций из ТиС 9.2. в БП 2.0 - «ПОД_Перенос_Справочников_ТиС_БП20.xml» и «ОбработкаВыгрузкиСправочников.ert». Добавлены правила выгрузки справочников: Организации, контрагенты и номенклатура. Доработал типовые ПОД для переноса только контрагентов и номенклатуры без документов в новую базу бухгалтерии 2.0, протестировал на типовых конфигурациях ТиС 9.2 рел.984 и БП 2.0.64.23.

1 стартмани

05.06.2015    47567    91    Kuzya_brаtsk    3    

Использование SoapUi для работы с веб-сервисами. Часть 2

Практика программирования Обмен через XML v8 Абонемент ($m)

Сложные примеры работы с xml в веб-сервисах 1С.

1 стартмани

04.10.2016    19907    17    kiv1c    6    

Использование SoapUi для работы с веб-сервисами. Часть1

Практика программирования Обмен через XML v8 Абонемент ($m)

Как работать с SoapUi для тестирования веб-сервисов .

1 стартмани

30.09.2016    117004    35    kiv1c    29    

Перенос данных из Бухгалтерии 2.0 в Бухгалтерию 3.0 Промо

Перенос данных из 1C8 в 1C8 Обмен через XML v8 БП2.0 БП3.0 Россия БУ Абонемент ($m)

Перенос данных и остатков с Бухгалтерии 2.0 в Бухгалтерию 3.0 с помощью универсального обмена данными XML.

1 стартмани

30.12.2014    42758    297    sergeyzhuravlev    10    

Обмен документами по правилам КД 2.0 с помощью внешней обработки

Обмен через XML v8 1cv8.cf Абонемент ($m)

Вам нужно разово выгрузить документ? Настроить периодическую выгрузку, не снимая конфигурацию с поддержки? Вы написали правила на КД 2.0 и думаете, как лучше дальше поступить? Тогда эта обработка для Вас.

1 стартмани

09.03.2016    10250    64    Ifboop_Figure    11    

Генерация кода 1С:8 для создания XML файла

Инструментарий разработчика Обмен через XML v8 1cv8.cf Абонемент ($m)

Внешняя обработка для генерации кода 1С:8, создающего XML файл.

1 стартмани

22.02.2016    10660    71    ily.fomin    5    

Разбор XML Документа с помощью XDTO, без использования XDTO-пакетов и XML-схем (для очень ленивых)

Обмен через XML v8 1cv8.cf Абонемент ($m)

Как разобрать XML Документ с помощью XDTO без изменений в конфигурации, без XML-схем данных, и при этом не выпасть с ошибкой "не достаточно памяти" ? Тем более что вам этот XML Документ нужно считать разово.

1 стартмани

14.11.2015    20838    39    TESL    8    

Пример обработки загрузки данных из XML-файла в облаке 1С:Fresh

Практика программирования Обмен через XML v8 УНФ Абонемент ($m)

Внешняя обработка, адаптированная для работы в УНФ, размещенной в облаке 1С:Fresh (легко редактируется под любую другую конфигурацию) В обработке использованы следующие механизмы (их варианты при работе в безопасном режиме): 1. Механизм выполнения сценариев дополнительных обработок. 2. Механизм отложенной записи объектов. 3. Механизм клиент-серверной передачи файлов. 4. Механизм чтения XML в безопасном режиме. 5. Механизм создания и поиска элементов с помощью UID.

1 стартмани

20.10.2015    19403    59    laperuz    18