Имя: Пароль:
1C
1С v8
Работа с веб сервисом
,
0 iQwerty
 
27.08.13
13:56
Добрый день, в общем даже не знаю как начать, но попробую, надеюсь смогу понятно изложить проблему.
Создаю мобильное приложение(МП). Далее нужна передача данных с МП в основную базу. Скачал кофигурацию 1с:Заказы, скачал дистрибутив платформы исполнения мобильных приложений для ПК, разобрался в ней. Только вот штука такая, он отправляет ДанныеОбмена веб сервису в виде ХранилищеЗначения, в котором ЗаписьXML.
(Функция СформироватьПакетОбмена(УзелОбмена) Экспорт
......
Возврат Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9));)
А сам веб сервис я не вижу, потому что он уже опубликован не мной, а значит и не вижу операцию, под именем ЗаписатьДанные
(ДанныеОбмена = ОбменМобильныеОбщее.СформироватьПакетОбмена(ЦентральныйУзелОбмена);
Прокси.ЗаписатьДанные(КодМобильногоКомпьютера, ДанныеОбмена);)
Создаю сам веб сервис, и хочу ему передать свои ДанныеОбмена, только понятия не имею как.
Наверное что то будет не понятно, переспрашивайте пожалуйста, очень нужна помощь. Спасибо
1 iQwerty
 
27.08.13
13:57
черт! ничего не понятно
2 iQwerty
 
27.08.13
14:00
то есть проблема как раз с операцией ЗаписатьДанные, что должно быть в ее модуле чтобы она создала например документ, на основание передачи ей параметра ДанныеОбмена
3 manyak
 
27.08.13
14:02
4 manyak
 
27.08.13
14:05
у тебя есть основная база,в ней делаешь свой вэб-сервис с нужными тебе функциями, публикуешь вюб-сервис. потом можешь с ним общаться из вне, читать и писать данные будешь запросами к веб-сервису.
5 iQwerty
 
27.08.13
14:10
(4) Да, это понятно, и с информацией, что на сайте написана тоже знаком, проблема в создании функции, то есть если бы я через веб сервисе создавал документ с двумя реквизитами номер и дата, то я бы просто написал создал на веб сервере функцию с двумя параметрами и использовал их для создания нового объекта. Но у меня много параметров, включая картинки, и вот в той конфе, которую я изучил веб сервису передают не по одному параметру, а просто XML запись, как один параметр в котором содержится вся структура документа, и вот проблема как эту   параметр-структуру использовать, чтобы на его основание создался документ
6 manyak
 
27.08.13
14:20
про ту конфу не вкурсе что ты изучаешь, но как вариант там на веб-сервисе прописана функция которая в качестве параметра получает набор записей в xml - и на основе его вносит изменения в данные. значит нужно посмотреть код этой функции в веб сервисе той конфы - как этот xml разбирается на что.
т.е. ты можешь сделать функцию с кучей параметров, а можешь содним параметром - в котором кучей все параметры будут лежать и парситься потом функцией веб-сервиса
7 manyak
 
27.08.13
14:21
прально понял тебя? :)
8 iQwerty
 
27.08.13
14:22
(6) вот все точно описал. "значит нужно посмотреть код этой функции в веб сервисе той конфы - как этот xml разбирается на что" не могу найти ее, а проблему очень верно описал, спасибо за понимание) Так вот найти не могу, может подскажите что нибудь
9 Serginio1
 
27.08.13
14:23
Добавь в пакетыXDTO своего вэб сервиса пакет http://v8.1c.ru/8.1/data/core

Функция должна возвращать тип ValueStorage (http://v8.1c.ru/8.1/data/core)

Значение=Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9)))
Возврат СериализаторXDTO.ЗаписатьXDTO(Значение)

v8: Ошибка при вызове web-сервиса 1C 8.3 (Внутренняя ошибка. Ошибка инициализации б)
10 iQwerty
 
27.08.13
14:23
(7) на все 100:) просто фантастика)
11 iQwerty
 
27.08.13
14:25
(9) попробую разобраться, но две первые ссылки из трех не найдены, можно ещё раз ссылочку на пакет
12 iQwerty
 
27.08.13
14:29
(9) а вы точно поняли проблему? она хорошо описана тут (6)
13 manyak
 
27.08.13
14:53
раз веб сервис не тобой поднят, значит нет доступа у тебя к нему и просмотру кода тела функций?  смысл работы с чужим серваком - ликбез?
14 iQwerty
 
27.08.13
14:55
(13) я свой же настраиваю
15 iQwerty
 
27.08.13
14:57
(13) не совсем понял (9) сообщение, мб там и есть решение
16 iQwerty
 
27.08.13
15:04
то есть мой параметр СериализаторXDTO.ЗаписатьXDTO(Значение), а как с помощью этого параметра создать документ в базе с помощью веб сервиса?
17 manyak
 
27.08.13
15:05
Прокси.ЗаписатьДанные(КодМобильногоКомпьютера, ДанныеОбмена)
ну остается как-то искать :) вот это "ЗаписатьДанные" и добраться до кода, другое наверно сложно еще что посоветовать, получается есть робящий сервис - но не можешь найи в нем код приема данных и записи их.
18 manyak
 
27.08.13
15:07
ну и если не получается добраться до кода, сделай свою функцию записи, в веб сервисе сделай новую функцию, передавай в нее параметры, а в ней по этим параметрам тупой 1с код по программному созданию документа и заполнению реквизитов.
19 iQwerty
 
27.08.13
15:12
(18) по параметру не выход, найти тоже не получилось.
Спасибо:)
20 iQwerty
 
27.08.13
15:14
вот как формируется ЗаписьXML, может быть на основании его как то получится выжить функцию?

Функция СформироватьПакетОбмена(УзелОбмена) Экспорт
    
    Запись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.Закрыть(), Новый СжатиеДанных(9));
    
КонецФункции
21 iQwerty
 
27.08.13
15:16
Процедура ЗаписатьДанные(ЗаписьXML, Данные) Экспорт
    
    // В данном случае, нет данных, которые требуют нестандартной обработки
    // Записываем данные с помощью стандартного метода
    ЗаписатьXML(ЗаписьXML, Данные);
    
КонецПроцедуры
22 iQwerty
 
27.08.13
15:25
попробовал
документ.создать();
документ.заполнить(параметр);
документ.записать();

ругается поле дата должно быть заполнено....(
23 Serginio1
 
27.08.13
16:50
Прокси.ЗаписатьДанные(КодМобильногоКомпьютера,ДанныеОбмена);)

ДанныеОбмена какой имеет тип?
24 Serginio1
 
27.08.13
16:59
В веб сервисах ты можешь оперировать либо простыми типами
Либо объектам XDTO

Можно хранилище передавать как строку
Значение=Новый ХранилищеЗначения(ЗаписьXML.Закрыть(), Новый СжатиеДанных(9)))

СтрокаДляПараметраФункцииВебСервиса = XMLСтрока(Значение);


В вэб сервисе преобразуем
Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML);