Имя: Пароль:
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
в исходниках было Прокси.ВыполнитьОбмен , но я вынес сюда, т.к. в вебсервисе отладка не идет. Если писать Прокси.ВыполнитьОбмен то дает ту же ошибку, так что, это сути не меняет