Имя: Пароль:
1C
1С v8
Ошибка веб-сервиса в мобильной платформе
0 pessok
 
13.07.16
17:41
Всем привет, коллеги! Платформа 8.3.8.1747. Натолкнулся тут на интересное. Вообще с мобильной платформой познакомился буквально вчера, вот изучаю.
Итак, есть мобильная конфа, соединяется через ws с головной базой, получает данные, потом отдает измененные. В головной базе сделан веб-сервис с двумя командами: одна отдает, вторая записывает в базу. В мобильном приложении кроме одной обработки представления данных больше никаких метаданных нет (по крайней мере пока).

Считывается из головной базы все прекрасно, а вот при записи вот такая ошибка



{Обработка.СписокЗаказовКлиентов.Форма.Форма.Форма(157)}: Error calling context method (ApplyOrdersInfo)
, reason:
Web service call error. Service operation call error: {raybtOrders}:pessokRemoteDriversExchange:ApplyOrdersInfo()
, reason:
Web service call error. Unknown error. Internet error:  java.io.EOFException
, reason:
Internet error:  java.io.EOFException



Если запустить мобильное приложение в тонком клиенте - все отрабатывает ожидаемо.

Код обработки в мобильном приложении:


&НаСервере
Процедура ПринятьОплатуНаСервере()
    
    Прокси = WSСсылки.ПолучениеДанныхПоСпискуЗаказов.СоздатьWSПрокси("Orders", "pessokRemoteDriversExchange", "pessokRemoteDriversExchangeSoap");
    Прокси.Пользователь = "mobile";
    Прокси.Пароль = "1";
    
    ПространствоИмен = "DriverApplying";
    
    ДатаУстановки = ПреобразоватьДату(ДатаОтбора);
    ТаблицаДанныхXDTO = РаботаСXDTO.СоздатьКоллекциюXDTO(Прокси, ПространствоИмен, "Свойства", ПространствоИмен, "СтрокаУстановки", "СтрокиУстановки", ТоварыЗаказа.Выгрузить());
    
    Попытка
        
        РезультатОбмена = Прокси.ApplyOrdersInfo(ДатаУстановки, ТаблицаДанныхXDTO);
        
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
        
    КонецПопытки;
    
    Если РезультатОбмена Тогда
        ОбновитьДанные();
        Сообщить("Синхронизация выполнена!");
    Иначе
        Сообщить("Ошибка синхронизации!");
    КонецЕсли;
    
КонецПроцедуры

Функция СоздатьКоллекциюXDTO(WSПрокси, ПространствоИменКоллекции, ИмяКоллекции, ПространствоИменДанныхКоллекции, ИмяДанныхКоллекции, ИмяСтрокиДанныхКоллекции, ИсходнаяТаблица, СтруктураСоответствий = Неопределено) Экспорт
    
    ТипXDTOСвойства             = WSПрокси.ФабрикаXDTO.Тип(ПространствоИменКоллекции, ИмяКоллекции);
    XDTOСвойства                 = WSПрокси.ФабрикаXDTO.Создать(ТипXDTOСвойства);
    ТипXDTOРезультатОперации     = WSПрокси.ФабрикаXDTO.Тип(ПространствоИменДанныхКоллекции, ИмяДанныхКоллекции);
    
    
    КолонкиИсходнойТаблицы = ИсходнаяТаблица.Колонки;
    
    Для Каждого ТекСтрИсходнойТаблицы Из ИсходнаяТаблица Цикл
        
        XDTOПозиции = WSПрокси.ФабрикаXDTO.Создать(ТипXDTOРезультатОперации);
        
        Для Каждого Колонка Из КолонкиИсходнойТаблицы Цикл
            
            ИмяКолонки = Колонка.Имя;
            
            Если XDTOПозиции.Свойства().Получить(ИмяКолонки) = Неопределено Тогда
                Продолжить;
            КонецЕсли;    
            
            ЗначениеКолонки = ТекСтрИсходнойТаблицы[ИмяКолонки];
            
            Если ТипЗнч(ЗначениеКолонки) = Тип("Булево") Тогда
                
                Если ЗначениеКолонки Тогда
                    ЗначениеКолонки = 1;
                Иначе
                    ЗначениеКолонки = 0;
                КонецЕсли;
                
            КонецЕсли;
            
            XDTOПозиции[ИмяКолонки] = ЗначениеКолонки;
            
        КонецЦикла;
                
        Если СтруктураСоответствий <> Неопределено Тогда
            
            Для Каждого ЗаписьСтруктуры Из СтруктураСоответствий Цикл
                
                XDTOПозиции[ЗаписьСтруктуры.Значение] = ТекСтрИсходнойТаблицы[ЗаписьСтруктуры.Ключ];    
                
            КонецЦикла;
            
        КонецЕсли;
        
        XDTOСвойства[ИмяСтрокиДанныхКоллекции].Добавить(XDTOПозиции);

    КонецЦикла;

    Возврат XDTOСвойства;




Код веб-сервиса в головной базе:



ДанныеУстановки = ApplyingInfo.СтрокиУстановки;
    
    КвалификаторЧисла = Новый КвалификаторыЧисла(10);
    КвалификаторСтроки = Новый КвалификаторыСтроки(100);
    МассивТиповЧисло = Новый Массив;
    МассивТиповЧисло.Добавить(Тип("Число"));
    МассивТиповСтрока = Новый Массив;
    МассивТиповСтрока.Добавить(Тип("Строка"));
    
    ОписаниеТиповЧ = Новый ОписаниеТипов(МассивТиповЧисло, , , КвалификаторЧисла);
    ОписаниеТиповС = Новый ОписаниеТипов(МассивТиповСтрока, , , , КвалификаторСтроки);

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

//тут обработка данных, выбираем то, что надо, обрабатываем ошибки

    Если Результат Тогда
        ЗафиксироватьТранзакцию();
        Возврат Истина;
    Иначе
        ОтменитьТранзакцию();
        Возврат Ложь;
    КонецЕсли;





Куда ковырнуть? Умом то я понимаю, что "Unknown error", но мало ли кто сталкивался...
1 pessok
 
13.07.16
17:57
Эм, беда оказалась в genymotion, на живом телефоне все ОК. Всем спасибо за внимание :)