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

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

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