Имя: Пароль:
1C
1С v8
Неизвестный получатель при обмене данными
0 Ilqarupup
 
21.07.17
10:20
Добрый день! Пытаюсь наладить обмен между пк и моб приложением по книге Рыбалки Mobile 1C!. Текст взял с диска, выдает ошибку "Неизвестный получатель", вот код, скорее всего запутался в отправителях и получателях, Центральный узел он как будто не находит. Пока пытаюсь делать обмен на пк, хотя при попытке на смартфоне дает такую же ошибку.


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
      ОбработкаКомандыСервер();
    
КонецПроцедуры

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

//&НаСервере
//Процедура ОбработкаКомандыСервер()
//    Адрес = "http://192.168.1.115/money/ws/ws1.1cws?wsdl";;
//    Определения = Новый WSОпределения(Адрес);
//    URI = "http://localhost/ws1";;
//    Прокси = Новый WSПрокси(Определения, URI, "WebОбмен", "WebОбменSoap");
//    
//    СисИнфо = Новый СистемнаяИнформация;
//    КодМобильногоКомпьютера = Строка(СисИнфо.ИдентификаторКлиента);
//    
//    //1. Инициализация (если нужно)
//    ЦентральныйУзелОбмена = ПланыОбмена.Мобильные.ЭтотУзел();
//    //Если НЕ ЗначениеЗаполнено(Узел.Код)
//    //    ИЛИ 0.Код <> КодМобильногоКомпьютера Тогда
//    //    //ОбъектУзла = Узел.ПолучитьОбъект();
//    //    //ОбъектУзла.Код = КодМобильногоКомпьютера;
//    //    //ОбъектУзла.Наименование = КодМобильногоКомпьютера;
//    //    //ОбъектУзла.Записать();
//    //КонецЕсли;
//    
//    МобильныйУзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду("001");
//    Если ЦентральныйУзелОбмена.Пустая() Тогда
//        НовыйУзел = ПланыОбмена.Мобильные.СоздатьУзел();
//        НовыйУзел.Код="001";
//        НовыйУзел.Наименование="Центральный";
//        НовыйУзел.ЭтотУзел = Истина;
//        НовыйУзел.Записать();
//        ЦентральныйУзелОбмена = НовыйУзел.Ссылка;
//    КонецЕсли;
//    
//    
//    //2. Обмен с центральной базой
//    ДанныеОбмена = Прокси.ВыполнитьОбмен(КодМобильногоКомпьютера, СформироватьПакетОбмена(МобильныйУзелОбмена));    
//    
//    
//    //3. Обработка данных, полученных из центральной базы
//    ЧтениеXML = Новый ЧтениеXML;
//    ЧтениеXML.УстановитьСтроку(ДанныеОбмена.Получить());
//    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
//    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
//    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
//    НачатьТранзакцию();
//    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
//        Данные = ПрочитатьXML(ЧтениеXML);
//        Если НЕ Данные = Неопределено Тогда
//            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
//            Данные.ОбменДанными.Загрузка = Истина;
//            Данные.Записать();
//        КонецЕсли;
//    КонецЦикла;
//    ЗафиксироватьТранзакцию();
//    ЧтениеСообщения.ЗакончитьЧтение();
//    ЧтениеXML.Закрыть();
//    
//КонецПроцедуры

Процедура ЗарегистрироватьИзмененияДанных(УзелОбмена) Экспорт
    СоставПланаОбмена = УзелОбмена.Метаданные().Состав;
    Для Каждого ЭлементСоставаПланаОбмена Из СоставПланаОбмена Цикл
        ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена,ЭлементСоставаПланаОбмена.Метаданные);
    КонецЦикла;
КонецПроцедуры



//Функция ВыполнитьОбмен(КодУстройства, ДанныеУстройства)
//    УстановитьПривилегированныйРежим(Истина);
//    
//    ////1. Инициализация (если нужно)
//    //УзелОбмена = ПланыОбмена.Мобильные.ЭтотУзел().ПолучитьОбъект();
//    //Если НЕ ЗначениеЗаполнено(УзелОбмена.Код) Тогда
//    //    УзелОбмена.Код="001";
//    //    УзелОбмена.Наименование="Центральный";
//    //    УзелОбмена.Записать();
//    //КонецЕсли;
//    //
//    //УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду("002");
//    //Если УзелОбмена.Пустая() Тогда
//    //    НовыйУзел = ПланыОбмена.Мобильные.СоздатьУзел();
//    //    НовыйУзел.Код = КодУстройства;
//    //    НовыйУзел.Наименование = КодУстройства;
//    //    НовыйУзел.Записать();
//    //    ЗарегистрироватьИзмененияДанных(НовыйУзел.Ссылка);
//    //    УзелОбмена = НовыйУзел.Ссылка;
//    //КонецЕсли;
//    
//    
//    
//    //
//    ////2. Получение данных из мобильного устройства
//    //УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду(КодУстройства);
//    //
//    ЧтениеXML = Новый ЧтениеXML;
//    ЧтениеXML.УстановитьСтроку(ДанныеУстройства);
//  
//    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
//    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
//    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
//    НачатьТранзакцию();
//    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
//        Данные = ПрочитатьXML(ЧтениеXML);
//        Если НЕ Данные = Неопределено Тогда
//            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
//            Данные.ОбменДанными.Загрузка = Истина;
//            Данные.Записать();
//        КонецЕсли;
//    КонецЦикла;
//    ЗафиксироватьТранзакцию();
//    ЧтениеСообщения.ЗакончитьЧтение();
//    ЧтениеXML.Закрыть();
//    
//    
//    //3. Выгрузка данных в мобильное устройство
//    УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду(КодУстройства);
//    ЗаписьXML = Новый ЗаписьXML;
//    ЗаписьXML.УстановитьСтроку("UTF-8");
//    ЗаписьXML.ЗаписатьОбъявлениеXML();
//    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
//    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);                    
//    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
//    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8",  "http://v8.1c.ru/data";);
//    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
//    Пока ВыборкаИзменений.Следующий() Цикл
//        Данные = ВыборкаИзменений.Получить();
//        ЗаписатьXML(ЗаписьXML, Данные);// Записываем данные в сообщение
//    КонецЦикла;
//    ЗаписьСообщения.ЗакончитьЗапись();
//    
//    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
//    
//КонецФункции//ВыполнитьОбмен

Функция ВыполнитьОбмен(КодУстройства, ДанныеУстройства)
    УстановитьПривилегированныйРежим(Истина);
    
    //1. Инициализация (если нужно)
    УзелОбмена = ПланыОбмена.Мобильные.ЭтотУзел().ПолучитьОбъект();
    Если НЕ ЗначениеЗаполнено(УзелОбмена.Код) Тогда
        УзелОбмена.Код="001";
        УзелОбмена.Наименование="Центральный";
        УзелОбмена.Записать();
    КонецЕсли;
    
    УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду(КодУстройства);
    Если УзелОбмена.Пустая() Тогда
        НовыйУзел = ПланыОбмена.Мобильные.СоздатьУзел();
        НовыйУзел.Код = КодУстройства;
        НовыйУзел.Наименование = КодУстройства;
        НовыйУзел.Записать();
        ЗарегистрироватьИзмененияДанных(НовыйУзел.Ссылка);
        УзелОбмена = НовыйУзел.Ссылка;
    КонецЕсли;
    
    
    //2. Получение данных из мобильного устройства
    УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду(КодУстройства);
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ДанныеУстройства.Получить());
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
    НачатьТранзакцию();
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        Данные = ПрочитатьXML(ЧтениеXML);
        Если НЕ Данные = Неопределено Тогда
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
        КонецЕсли;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
    
    
    //3. Выгрузка данных в мобильное устройство
    УзелОбмена = ПланыОбмена.Мобильные.НайтиПоКоду(КодУстройства);
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);                    
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8",  "http://v8.1c.ru/data";);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        Данные = ВыборкаИзменений.Получить();
        ЗаписатьXML(ЗаписьXML, Данные);// Записываем данные в сообщение
    КонецЦикла;
    ЗаписьСообщения.ЗакончитьЗапись();
    
    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
    
КонецФункции//ВыполнитьОбмен


Функция СформироватьПакетОбмена(УзелОбмена) Экспорт
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);                    
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
    ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8",  "http://v8.1c.ru/data";);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        Данные = ВыборкаИзменений.Получить();
        ЗаписатьXML(ЗаписьXML, Данные);// Записываем данные в сообщение
    КонецЦикла;
    ЗаписьСообщения.ЗакончитьЗапись();;
    Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));
КонецФункции


мой хмл


<?xml version="1.0" encoding="UTF-8"?>
<v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages">;
    <v8msg:Header>
        <v8msg:ExchangePlan>Мобильные</v8msg:ExchangePlan>
        <v8msg:To>001</v8msg:To>
        <v8msg:From>6fdb3fa6-</v8msg:From>
        <v8msg:MessageNo>8</v8msg:MessageNo>
        <v8msg:ReceivedNo>0</v8msg:ReceivedNo>
    </v8msg:Header>
    <v8msg:Body xmlns:v8="http://v8.1c.ru/data"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
        <AccumulationRegisterRecordSet.Кошельки>
            <Filter>
                <Recorder xsi:type="DocumentRef.Доход">3be5fd81-6dd7-11e7-83e1-701ce7f24bbb</Recorder>
            </Filter>
            <Records>
                <Record>
                    <Recorder xsi:type="DocumentRef.Доход">3be5fd81-6dd7-11e7-83e1-701ce7f24bbb</Recorder>
                    <Period>2017-07-21T09:46:46</Period>
                    <MovementType>Receipt</MovementType>
                    <Active>true</Active>
                    <Кошелек>cfdb4db7-6d09-11e7-bd34-701ce7f24bbb</Кошелек>
                    <Сумма>45</Сумма>
                    <Статья>cfdb4db6-6d09-11e7-bd34-701ce7f24bbb</Статья>
                </Record>
            </Records>
        </AccumulationRegisterRecordSet.Кошельки>
        <DocumentObject.Доход>
            <Ref>3be5fd81-6dd7-11e7-83e1-701ce7f24bbb</Ref>
            <DeletionMark>false</DeletionMark>
            <Date>2017-07-21T09:46:46</Date>
            <Number>000000004</Number>
            <Posted>true</Posted>
            <Кошелек>cfdb4db7-6d09-11e7-bd34-701ce7f24bbb</Кошелек>
            <Статья>cfdb4db6-6d09-11e7-bd34-701ce7f24bbb</Статья>
            <Сумма>45</Сумма>
            <Комментарий/>
        </DocumentObject.Доход>
    </v8msg:Body>
</v8msg:Message>

мои узлы, с 6 начинается пк, 0 по моему смартфон

http://imgur.com/a/x29MM
1 Ilqarupup
 
21.07.17
10:23
в исходниках было Прокси.ВыполнитьОбмен , но я вынес сюда, т.к. в вебсервисе отладка не идет. Если писать Прокси.ВыполнитьОбмен то дает ту же ошибку, так что, это сути не меняет
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн