Имя: Пароль:
1C
1С v8
Ошибка при синхронизации мобильной версии с компьютерной
0 Antoha18rus
 
04.12.19
19:20
Вообщем, создал 2 ИС, одна мобильная, другая компьютерная, разница лишь в том что в компьютерной версии есть Web-сервис
Итак, в чем суть вопроса, при нажатии на синхронизацию вылезает такая ошибка:
{ОбщаяКоманда.ВыполнитьСинхронизацию.МодульКоманды(24)}:Ошибка при вызове метода контекста(Синхронизация):Ошибка вызова операции сервиса:{DataTransfer}:ОбменДанными:Синхронизация(): Ошибка SOAP сервера: Неизвестная ошибка.
{WebСервис.ОбменДанными.Модуль(12)}:Ошибка при вызове метода контекста(Начать Чтение)
по причине:
{WebСервис.ОбменДанными.Модуль(12)}:Ошибка при вызове метода контекста(Начать Чтение)
по причине:

по причине:
Номер сообщения меньше или равен номеру ранее принятого сообщения

Таки вот и собсна ошибка (я еще обучаюсь в 1С:Предприяте) если вы можете, то сразу ткните на ошибку, ото у меня пока аллергия на заумные фразочки

Вот код общей команды(мобильная ИС):

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    Если ВыполнитьСинхронизациюНаСервере() Тогда
        Сообщить("Синхронизация прошла успешно!");
    Иначе
        Сообщить("При синхронизации были ошибки!");
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ВыполнитьСинхронизациюНаСервере()
    Попытка
        ВСОпределение     = Новый WSОпределения("http://192.168.43.158/Lesprom/ws/ОбменДанными.1cws?wsdl";);
        ВСервис         = ВСОпределение.Сервисы.Получить("DataTransfer","ОбменДанными");
        ВТочкаВхода     = ВСервис.ТочкиПодключения.Получить("ОбменДаннымиSoap");
        ВОперация       = ВТочкаВхода.Интерфейс.Операции.Получить("Синхронизация");    
        
        Данные = Новый ХранилищеЗначения(ЗарегестрироватьВыгрузку(), Новый СжатиеДанных(9));
        
        ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить("Данные").Тип, Данные);
        
        ВСПрокси = Новый WSПрокси(ВСОпределение, "DataTransfer","ОбменДанными","ОбменДаннымиSoap") ;
        Ответ = ВСПрокси.Синхронизация(ДанныеXDTO);    
        ПринятьИзменениеПоПлану(Ответ.Получить());
        Возврат Истина
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции

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

    ЧтениеСообщения.ЗакончитьЧтение();    
КонецПроцедуры

Функция ЗарегестрироватьВыгрузку()
    ЗаписьХМЛ = Новый ЗаписьXML;
    ЗаписьХМЛ.УстановитьСтроку();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    
    Узел = ПланыОбмена.ОбменСМобильнымиУстройствами.НайтиПоКоду("ЦБ");
    
    ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Узел);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел,ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        ОбъектОбмена = ВыборкаИзменений.Получить();
        ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена);        
    КонецЦикла;
    
    ЗаписьСообщения.ЗакончитьЗапись();

    Возврат ЗаписьХМЛ.Закрыть();
КонецФункции


Вот код компьютерной ИС(Web-Сервис):


Функция Синхронизация(Данные)
    ОтветКлиенту = ЗарегестрироватьВыгрузку(Данные.Получить());
    Возврат Новый ХранилищеЗначения(ОтветКлиенту, Новый СжатиеДанных(9));
КонецФункции

Функция ЗарегестрироватьВыгрузку(СтрокаСообщения)
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
    
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
    
    Отправитель = ЧтениеСообщения.Отправитель;
    
    Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
        Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML);
        Если Не Данные = Неопределено Тогда
            
            Данные.ОбменДанными.Отправитель = Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            
            Данные.Записать();
            
        КонецЕсли;
    КонецЦикла;

    ЧтениеСообщения.ЗакончитьЧтение();  
    
    ЗаписьХМЛ = Новый ЗаписьXML;
    ЗаписьХМЛ.УстановитьСтроку();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    
    ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Отправитель);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Отправитель,ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        ОбъектОбмена = ВыборкаИзменений.Получить();
        ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена);        
    КонецЦикла;
    
    ЗаписьСообщения.ЗакончитьЗапись();

    Возврат ЗаписьХМЛ.Закрыть();
КонецФункции


УЖЕ СЛОМАЛ ГОЛОВУ, НЕ ПОНИМАЮ ЧТО НЕ ТАК, ПОМОГИТЕ :з
1 Cyberhawk
 
04.12.19
19:58
Рано тебе таким заниматься еще
2 Antoha18rus
 
05.12.19
11:46
куда мне деваться)) у меня практика такая
Кстати, еще если все это делать в 1 ИС (мобильная и компьютерная вместе, то все работает)
3 Borteg
 
05.12.19
11:48
(0) Номер сообщения меньше или равен номеру ранее принятого сообщения
4 Antoha18rus
 
26.02.20
20:55
//СохранитьвPDF
ТабДок.Защита=Истина;
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
ЗапуститьПриложение(ВремФайл);
5 palsergeich
 
26.02.20
21:28
(0) номера сообщений в пакете и плане обмена приведи впорядок
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.