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

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

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

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

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

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

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

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

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

    КонецФункции
```
---
```1c
    Процедура Выгрузка(Элемент)

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

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

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

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

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

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

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

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

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