helpf.pro
Регистрация
 +2 
Распечатать

Как организовать обмен данными между произвольными конфигурациями?

Код 1C v 8.х
 Процедура Выгрузка(Элемент) 

	Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы 

	ЗаписьXML = Новый ЗаписьXML(); 
	ЗаписьXML.ОткрытьФайл(Путь + "выгрузка.xml"); 
	Узел = ПланыОбмена.Поставка.НайтиПоКоду("Маг1"); 

	ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); 
	ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел); 

	Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения); 

	Пока Выборка.Следующий() Цикл 
		Данные = Выборка.Получить(); 

		Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
			ВыгрузкаРеализации(ЗаписьXML, Данные); 
	
		Иначе // все остальные объекты 
			ЗаписатьXML(ЗаписьXML, Данные); 
		КонецЕсли; 
	КонецЦикла; 

	ЗапСообщения.ЗакончитьЗапись(); 
	ЗаписьXML.Закрыть(); 

КонецПроцедуры 


Процедура ВыгрузкаРеализации(ЗаписьXML, Документ) 

	ЗаписьXML.ЗаписатьНачалоЭлемента("DocumentObject.ПередачаТовара"); 

	ЗаписатьXML(ЗаписьXML, Документ.Ссылка.УникальныйИдентификатор(), "Ref", НазначениеТипаXML.Явное); 
	ЗаписатьXML(ЗаписьXML, Документ.ПометкаУдаления, "DeletionMark", НазначениеТипаXML.Явное); 
	ЗаписатьXML(ЗаписьXML, Документ.ВалютаДокумента, "ВалютаДокумента", НазначениеТипаXML.Явное); 

	// Остальные свойства документа. 

	// Табличная часть. 
	ЗаписьXML.ЗаписатьНачалоЭлемента("Товары"); 

	Для Каждого ТекСтрока Из Документ.Товары Цикл
		ЗаписьXML.ЗаписатьНачалоЭлемента("Row"); 

		ЗаписатьXML(ЗаписьXML, ТекСтрока.Номенклатура, "Номенклатура", НазначениеТипаXML.Явное); 
		ЗаписатьXML(ЗаписьXML, ТекСтрока.Количество, "Количество", НазначениеТипаXML.Явное); 

		// Остальные реквизиты табличной части. 

		ЗаписьXML.ЗаписатьКонецЭлемента(); 
	КонецЦикла; 

	ЗаписьXML.ЗаписатьКонецЭлемента(); 
	ЗаписьXML.ЗаписатьКонецЭлемента(); 

КонецПроцедуры 


Процедура Загрузка(Элемент) 

	Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы 

	ЧтениеXML = Новый ЧтениеXML(); 
	ЧтениеXML.ОткрытьФайл(Путь + "выгрузка.xml"); 
	
	ЧтСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); 
	ЧтСообщения.НачатьЧтение(ЧтениеXML); 

	ПланыОбмена.УдалитьРегистрациюИзменений(ЧтСообщения.Отправитель, ЧтСообщения.НомерСообщения); 

	Пока ВозможностьЧтенияДанных(ЧтениеXML) Цикл 
		Данные = ПрочитатьДанные(ЧтениеXML); 
		
		Если РазрешениеКоллизий(Данные) Тогда 
			Данные.ОбменДанными.Отправитель = ЧтСообщения.Отправитель; 
			Данные.ОбменДанными.Загрузка = Истина; 
			Данные.Записать(); 
		КонецЕсли; 
	КонецЦикла; 

	ЧтСообщения.ЗакончитьЧтение(); 
	ЧтениеXML.Закрыть(); 

КонецПроцедуры 


Функция ВозможностьЧтенияДанных(ЧтениеXML) 

	ТипXML = ПолучитьXMLТип(ЧтениеXML); 

	Если ТипXML = Неопределено Тогда 
		Возврат Ложь; 
	КонецЕсли; 

	Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда 
		Возврат Истина; 
	КонецЕсли; 

	Возврат ВозможностьЧтенияXML(ЧтениеXML); 

КонецФункции 


Функция ПрочитатьДанные(ЧтениеXML) 

	ТипXML = ПолучитьXMLТип(ЧтениеXML); 
	
	Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда 
		Возврат ЧтениеРеализации(ЧтениеXML); 
	КонецЕсли; 

	Возврат ПрочитатьXML(ЧтениеXML); 

КонецФункции 


Функция ЧтениеРеализации(ЧтениеXML) 

	ЧтениеXML.Прочитать(); 

	// Работа со ссылкой документа. 
	ПолученнаяСсылка = ПрочитатьXML(ЧтениеXML); 
	Док = Документы.ПоступлениеТоваров.ПолучитьСсылку(Новый УникальныйИдентификатор(ПолученнаяСсылка)); 

	Документ = Док.ПолучитьОбъект(); 

	Если Документ = Неопределено Тогда 
		Документ = Документы.ПоступлениеТоваров.СоздатьДокумент(); 
		Документ.УстановитьСсылкуНового(Док);
		Документ.Дата = ТекущаяДата; 
		Документ.УстановитьНовыйНомер(); 
	КонецЕсли; 

	Документ.ПометкаУдаления = ПрочитатьXML(ЧтениеXML); 
	Документ.ВалютаДокумента = ПрочитатьXML(ЧтениеXML); 

	// Табличная часть "Товары. 
	// Построчное чтение. 
	ЧтениеXML.Прочитать(); 
	Документ.Товары.Очистить(); 

	Пока ЧтениеXML.Имя = "Row" Цикл 

		// Позиционируемся на узле с номенклатурой. 
		ЧтениеXML.Прочитать(); 
		НоваяСтрока = Документ.Товары.Добавить(); 
		НоваяСтрока.Номенклатура = ПрочитатьXML(ЧтениеXML); 
		НоваяСтрока.Количество = ПрочитатьXML(ЧтениеXML); 

		// Читаем конец узла Row. 
		ЧтениеXML.Прочитать(); 
	КонецЦикла; 

	// Читаем конец табличной части. 
	ЧтениеXML.Прочитать(); 

	// Читаем конец документа. 
	ЧтениеXML.Прочитать(); 

	Возврат(Документ); 

КонецФункции 


Функция РазрешениеКоллизий(Данные) 

	Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда 

		Если Не Данные.ЭтоНовый() Тогда 
			СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт"); 

			Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда 
				Возврат(Ложь); 
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 

	Возврат(Истина); 

КонецФункции    
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 32799
 +2 
Распечатать
Возможно, вас также заинтересует
Где находится файл лицензии 1С 24
Многие спрашивают А где хранится лицензия на 1С: Предприятие 8? или Где посмотреть лицензионный ключ в 1С? В 1С информацию о полученной лицензии можно посмотреть нажав «Справка» — «О программе» В разделе Лицензия: сначала идет клиентская лиценз
Как организовать обмен данными между одинаковыми, идеинтичными конфигурациями? 0
Нужно документ РеализацияТоваровУслуг (ссылка на который выбирается в диалоге создаваемой обработки) перенести в другую базу данных. Структура конфигураций идентична. Справочники (и другие сопутствующие объекты) синхронизированы по значениям внутренн
Как работать с "1С Конвертация данных" 6
Инструкция создания одностороннего обмена данными между конфигурациями " Источник" и " Приемник" с нуля: 1 Скачиваем последнюю версию конфигурации " Конвертация данных" . Сейчас на сайте ИТС перестали почему-то публиковать полные дистрибутивы, поэ
Конвертация данных 3.0. Настройка правил конвертации в формате Enterprise Data. Пример использования 78
Задача Передать информацию о контрагентах из УП в БП . Данные передаются в одностороннем порядке, идентификация производится по уникальному идентификатору.Настройка правил конвертации выполняется с помощью специальной конфигурации Конвертация
Обмен 1С c клиентом используя web сервисы 1С 20
Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является
Посмотреть все результаты поиска похожих
Комментарии
LIA
28.10.2013 23:22Комментарий: 2
LIA
вау!!! спасибки... чего я только не перепробовала....но всё равно какой нибудь косяк получался. а теперь воспользуюсь вашим предложением! СПАСИБО!
S_Magdich
29.07.2011 14:38Комментарий: 1
S_Magdich
Как долго я это искал. Вообще МЕГА РЕСПЕКТ Автору. Спасибо.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!