наверх
Свободные IT публикации
быстро и доступно
логин:
пароль:

Организация обмена данными в 1С 8.x


Как организовать работу удаленных складов?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) 

	Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда 
		Если ЭлементДанных.Склад <> Склад Тогда 
			ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; 
		КонецЕсли; 
	КонецЕсли; 

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


Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) 

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

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


Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) 

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

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

Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) 

	Если НеВыгружатьОбъекты Тогда 

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

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

Как просмотреть объекты, для которых зарегистрированы изменения?

ЗаписьXML = Новый ЗаписьXML(); 
ЗаписьXML.УстановитьСтроку(); 
Узел = ПланыОбмена.НаСклады.НайтиПоКоду("С1"); 
ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); 
ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел); 

Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения); 
Пока Выборка.Следующий() Цикл 
	Данные = Выборка.Получить(); 
	Сообщить(Данные); 
КонецЦикла; 

ЗапСообщения.ПрерватьЗапись(); 

Стр = ЗаписьXML.Закрыть();

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

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

	Путь = "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.Прочитать(); 

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

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


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

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

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

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

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

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

Как принудительно зарегистрировать изменения объектов?

СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1"); 
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, Неопределено);


СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1"); 
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, 
							Метаданные.Справочники.Номенклатура); 


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