Имя: Пароль:
1C
1С v8
обмен с помощью web-сервисов
0 Pe3HuK
 
28.12.15
01:41
Есть код:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОбработкаКомандыСервер()
КонецПроцедуры

&НаСервере
Процедура ОбработкаКомандыСервер()
    Адрес = "http://193.17.213.186/pex/ws/Obmen/?wsdl";;
    Определения = Новый WSОпределения(Адрес);
    URI = "Obmen";
    Прокси = Новый WSПрокси(Определения, URI, "Obmen", "ObmenSoap");
    
    СисИнфо = Новый СистемнаяИнформация;
    КодМобильногоКомпьютера = Строка(СисИнфо.ИдентификаторКлиента);
    
    Узел = ПланыОбмена.OrderDocument.ЭтотУзел();
    Если НЕ ЗначениеЗаполнено(Узел.Код)
        ИЛИ Узел.Код <> КодМобильногоКомпьютера Тогда
        ОбъектУзла = Узел.ПолучитьОбъект();
        ОбъектУзла.Код = КодМобильногоКомпьютера;
        ОбъектУзла.Наименование = КодМобильногоКомпьютера;
        ОбъектУзла.Записать();
    КонецЕсли;
    
    ЦентральныйУзелОбмена = ПланыОбмена.OrderDocument.НайтиПоКоду("1");
    Если ЦентральныйУзелОбмена.Пустая() Тогда
        НовыйУзел = ПланыОбмена.OrderDocument.СоздатьУзел();
        НовыйУзел.Код = "1";
        НовыйУзел.Наименование = "OrderDoc";
        ЦентральныйУзелОбмена = НовыйУзел.Ссылка;
    КонецЕсли;
    
    ДанныеОбмена = Прокси.ВыполнитьОбмен(КодМобильногоКомпьютера, СформироватьПакетОбмена(ЦентральныйУзелОбмена));
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ДанныеОбмена.Получить());
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
    НачатьТранзакцию();
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        Данные = ПрочитатьXML(ЧтениеXML);
        Если НЕ Данные = Неопределено Тогда
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
        КонецЕсли;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
КонецПроцедуры

Функция СформироватьПакетОбмена(УзелОбмена) Экспорт
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http//http://www.w3.org/2001/XMLSchema-instance";);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data";);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        Данные = ВыборкаИзменений.Получить();
        ЗаписатьXML(ЗаписьXML, Данные);
    КонецЦикла;
    ЗаписьСообщения.ЗакончитьЗапись();
    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
КонецФункции
Ругается вот здесь
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
по причине: Неизвестный получатель, в чем может быть проблема?
1 Чайник Рассела
 
28.12.15
02:08
так сложно в отладчике посмотреть что у тебя в узле обмена?
2 Pe3HuK
 
28.12.15
17:44
&НаСервере
Процедура ОбработкаКомандыСервер()
    Адрес = "http://193.17.213.186/pex/ws/Obmen/?wsdl";;
    Определения = Новый WSОпределения(Адрес);
    URI = "Obmen";
    Прокси = Новый WSПрокси(Определения, URI, "Obmen", "ObmenSoap");
    
    СисИнфо = Новый СистемнаяИнформация;
    КодМобильногоКомпьютера = Строка(СисИнфо.ИдентификаторКлиента);
    
    Узел = ПланыОбмена.OrderDocument.ЭтотУзел();
    Если НЕ ЗначениеЗаполнено(Узел.Код)
        ИЛИ Узел.Код <> КодМобильногоКомпьютера Тогда
        ОбъектУзла = Узел.ПолучитьОбъект();
        ОбъектУзла.Код = КодМобильногоКомпьютера;
        ОбъектУзла.Наименование = КодМобильногоКомпьютера;
        ОбъектУзла.Записать();
    КонецЕсли;
    
    ЦентральныйУзелОбмена = ПланыОбмена.OrderDocument.НайтиПоКоду("001");
    Если ЦентральныйУзелОбмена.Пустая() Тогда
        НовыйУзел = ПланыОбмена.OrderDocument.СоздатьУзел();
        НовыйУзел.Код = "001";
        НовыйУзел.Наименование = "OrderDoc";
        ЦентральныйУзелОбмена = НовыйУзел.Ссылка;
    КонецЕсли;
    
    ДанныеОбмена = Прокси.ВыполнитьОбмен(КодМобильногоКомпьютера, СформироватьПакетОбмена(ЦентральныйУзелОбмена));
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ДанныеОбмена.Получить());
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
    НачатьТранзакцию();
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        Данные = ПрочитатьXML(ЧтениеXML);
        Если НЕ Данные = Неопределено Тогда
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
        КонецЕсли;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
КонецПроцедуры