WEB-сервис.Процедура - Метод объекта не обнаружен (Процедура)

1. Denium79 14 09.04.20 18:30 Сейчас в теме
Интеграция ДО и ERP по заявкам на оплату.

Нужно напечатать карту процесса согласования из ERP. Увидел описание варианта тут: https://infostart.ru/public/541608/

Как описано не работает, немного допилил, соединение с ДО есть, табдок на той стороне тоже заработал. Осталась одна загвоздка - никак не могу вызвать функцию на той стороне.

Метод объекта не обнаружен (get_sheet) при обращении WSПрокси.get_sheet(uid)

Интуитивно догадываюсь, что дело возможно в пространстве имен, но сделать правильно не умею. Прошу помощи.
Вознаграждение за ответ
Показать полностью
Найденные решения
31. Denium79 14 11.04.20 10:00 Сейчас в теме
Резюмирую:

Вебсервис работает отлично, если правильно создать и правильно заполнить строку подключения. Оптимально использовать там, где необходима авторизация каждого пользователя.

Вот пример функции подключения:

Функция ПолучитьДанныеС1СДокументооборот(uid)
	
	АдресДО = Константы.АдресВебСервиса1СДокументооборот.Получить();
	АдресСервиса = "/ws/WSDOCMK.1cws?wsdl";
	АдресWDSL = АдресДО + АдресСервиса;    
	ИмяПользователя = ПараметрыСеанса.ИнтеграцияС1СДокументооборотИмяПользователя;
	ПарольПользователя = ПараметрыСеанса.ИнтеграцияС1СДокументооборотПароль;
	
	Попытка
		WSПрокси = ОбщегоНазначения.WSПрокси(АдресWDSL,"http://192.168.5.200/DocMK/ws/WSDOCMK","WSDOCMK",,ИмяПользователя,ПарольПользователя);    
	Исключение
		Сообщить ("Не удалось подключиться к 1С Документооборот");
		Возврат Неопределено;
	КонецПопытки;    
	
	
	ДвоичныеДанные = WSПрокси.GETDATA(UID);
	
	Возврат ДвоичныеДанные;
Показать



HTTP сервер - простая настройка, но проблемы с авторизацией. Мне пришлось сделать авторизацию на вебсервере по умолчанию (в файле vrd), только тогда заработала. Удобно использовать, если нет необходимости разделять пользователей.

Этот вариант мне не подошел, т.к. интеграция работает по сопоставлению пользователей КА2 и ДО, ввод авторизации по умолчанию ломает идентификацию пользователей ДО в КА2.
Если бы не получилось разобраться с WS, то вариантом работы остался бы HTTP, но пришлось бы сделать 2 публикации - одну для интеграции, другую для получения данных

Пример файла соединения для HTTP:

&НаСервере
Функция ПолучитьДанныеС1СДокументооборот(uid)
       
    АдресСервиса = "/DocMK/hs/ObmenKA/";
	АдресHTTP = АдресСервиса + uid;
	
	Запрос = Новый HTTPЗапрос;
	Запрос.АдресРесурса = АдресHTTP;
    
Соединение = Новый HTTPСоединение("192.168.5.200");
Ответ = Соединение.Получить(Запрос);



ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();

Возврат ДД;
	
КонецФункции
Показать



Парни, огромное спасибо за помощь!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 09.04.20 22:31 Сейчас в теме
(1) скрины бы скинул. И базу переопубликовал?
3. nomad_irk 72 09.04.20 22:56 Сейчас в теме
(1)Функция-то get_sheet(uid) в модуле WS определена? База после добавления функции была переопубликована?
4. Denium79 14 10.04.20 06:09 Сейчас в теме
Вот скрины сервиса, файла и кода вызова
Прикрепленные файлы:
6. nomad_irk 72 10.04.20 08:46 Сейчас в теме
(4)WSПрокси вызывается с указанием всех параметров. 3-ий параметр как правило равен 2-ому + постфикс "SOAP", т.е. в вашем случае "approvalsheetSOAP".
Далее, эта функция среди прочего должна быть описана в XML, который вам возвращает WS в браузере.
7. Denium79 14 10.04.20 09:16 Сейчас в теме
(6) Параметр укажу, а XML руками править нужно? если да, то как?
9. nomad_irk 72 10.04.20 09:19 Сейчас в теме
(7)Файл править руками не нужно, но нужно переопубликовывать базу после добавления/изменения "структуры" функций WS.
Для отладки всего этого добра воспользуйтесь SoapUI.
12. Denium79 14 10.04.20 09:34 Сейчас в теме
(9)Базу переопубликовал, строку вызова изменил, все равно не заработала.
Как правильно добавить/изменить "структуру" WS не понял. Вот мой файл xml. По нему можно понять что не так?

Может ли влиять,что я в пространство URI ставлю http://v8.1c.ru/8.1/data/core, если да, то что правильно поставить?
Прикрепленные файлы:
approvalsheet.xml
13. nomad_irk 72 10.04.20 10:00 Сейчас в теме
(12) в *.XML все так. То что устанавливаете пространство имен - без разницы, главное, чтобы по этому пространству имен не находился другой XDTO пакет.
Влиять может то, что вы тип возвращаемого значения устанавливаете http://v8.1c.ru/8.1/data/core, хотя по факту у вас там либо BASE64 будет, либо вообще строка.
15. Denium79 14 10.04.20 10:22 Сейчас в теме
(9)Ест
(13)
(13)Понятно. Т.е. будут проблемы с возвращаемым значением. Ну это можно исправить, т.к. я там тыкал уже подряд все пробовал.
На текущий момент я не могу даже вызвать функцию, хотя соединение есть. Если в XML порядок, то из за чего тогда не вызывается get_sheet(uid)? Что еще можно попробовать?

Вот строка вызова WS какая получается:

ОбщегоНазначения.WSПрокси("http://192.168.5.200/DocMK/ws/approvalsheet.1cws?wsdl","http://192.168.5.200/DocMK","approvalsheet",,"МДЛ","123123")

Пробовал вместо пустого параметра написать approvalsheetSOAP почему то не подключилась, с пустым соединяет.
В документации пишут:
ИмяТочкиПодключения - Строка - (необязательный) если не задано, образуется как <ИмяСервиса>Soap.
17. nomad_irk 72 10.04.20 10:40 Сейчас в теме
(15)web сервер перезапускался после перепубликации базы?
возьмите уже SoapUI - быстрее все пойдет.
18. Denium79 14 10.04.20 11:04 Сейчас в теме
(17)Я никогда не работал с SoapUI, поэтому вряд ли будет проще.

Установил, пытаюсь подключиться к http://192.168.5.200/DocMK/ws/approvalsheet.1cws?wsdl

Программа запрашивает логин с паролем. Пробовал по разному, все время выдает:

Error loading [http://192.168.5.200/DocMK/ws/approvalsheet.1cws?wsdl]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected end of file after nul
19. nomad_irk 72 10.04.20 11:11 Сейчас в теме
(18)Логин и пароль должны содержать только латинские символы.
20. Denium79 14 10.04.20 11:29 Сейчас в теме
(19)Вот подключился. Что тут можно проверить?
Прикрепленные файлы:
21. nomad_irk 72 10.04.20 12:18 Сейчас в теме
(20)как работает функция get_sheet(). При двойном клике мышой на неё и установке входного параметра, в правом окне должен быть ответ.
22. Denium79 14 10.04.20 12:37 Сейчас в теме
(21)Когда прописал лог и пароль в окне во вложении, то ответ получил
Прикрепленные файлы:
25. nomad_irk 72 10.04.20 13:06 Сейчас в теме
(22)WS работает и возвращает нечто, похожее на BASE64.
23. Denium79 14 10.04.20 12:53 Сейчас в теме
(19)Может быть это поможет разобраться?
Вот что у меня внутри WSПрокси
Прикрепленные файлы:
24. nomad_irk 72 10.04.20 13:05 Сейчас в теме
(23)Проверьте, что внутри Определение и ТочкаПодключения.
26. Denium79 14 10.04.20 21:01 Сейчас в теме
(24)Раскрыл.
Упоминание о get_sheet нашел только внутри WSПрокси.ТочкаПодключения.Интерфейс.Операции внутри. Но как обратиться к нему не понимаю
Прикрепленные файлы:
27. nomad_irk 72 10.04.20 21:30 Сейчас в теме
(26)Такое ощущение, что у вас публикация базы как-то не полностью что ли.
Вы публикацию выполняете, запуская конфигуратор от администратора? наличие административных прав - не достаточно.
28. Denium79 14 11.04.20 07:04 Сейчас в теме
(27)Да конечно, так и делаю. Уже не первый раз вебсервер публикую. Попробую ещё подробнее сравнить с какими нибудь другими WS или попробую сделать новый сервис.

Понять бы что правильно ставить в полях "Пакеты XDTO" и "URI Пространство имен"
29. nomad_irk 72 11.04.20 09:26 Сейчас в теме +1 $m
(28)пакеты xdto можно вообще ничего не ставить, а в URI - любое уникальное значение, по которому будет определяться wsопределение для подключения к wsпрокси.
30. Denium79 14 11.04.20 09:46 Сейчас в теме
(29) Сделал новый web сервис и все заработало. Подозреваю как раз из за пространства имен. В этот раз я поставил туда вебсервер/ws/названиесервиса
Видимо именно там и ищет операции программа.
Большое спасибо за помощь
5. platonov.e 158 10.04.20 08:19 Сейчас в теме
http сервис ведь проще...
8. Denium79 14 10.04.20 09:18 Сейчас в теме
(5) Возможно, я не работал ранее ни с тем ни с другим, поэтому все методом тыка. Задачу как то нужно решать. Поэтому нашел пример решения и пытаюсь действовать по нему.
Если научите как можно проще, буду благодарен
10. platonov.e 158 10.04.20 09:21 Сейчас в теме
(8) А какой контекст задачи? Просто в http не нужно описывать все эти переменные и параметры и переопубликовывать сервис(ну в некоторых случаях конечно нужно).
11. Denium79 14 10.04.20 09:28 Сейчас в теме
(10)Задача следующая:

Есть КА2 - Комплексная автоматизация
Есть ДО - документооборот
Между ними интеграция. В КА2 делаются заявки и согласовываются механизмами ДО.

Я из КА2 передаю в ДО текстовый уид документа. ДО ищет этот документ, заполняет ТабДок и в двоичном виде возвращает в КА2. Там я её открываю и печатаю.

Подробно описано тут https://infostart.ru/public/541608/ в 62 посте. Вот по нему и пытаюсь настроить
14. platonov.e 158 10.04.20 10:03 Сейчас в теме +1 $m
(11) Вот здесь ковыряете как сделать http сервис
https://infostart.ru/public/516810/

Делается все довольно просто.
Потом из базы источника обращаетесь к http сервису базы приемника, получаете там двоичные данные, а в базе источника обрабатываете их. Сейчас попробовал передать ДД из одной базы в другую, все удачно получилось.

База ИСТОЧНИК

Запрос = Новый HTTPЗапрос;
Запрос.АдресРесурса = "/telegram_chanel/hs/tg_webhook";
	
Соединение = Новый HTTPСоединение("192.168.1.5");
Ответ = Соединение.Получить(Запрос);
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();
	
ДД.Записать("C:\Users\Odmin\Desktop\Новая папка (3)\out\ex_http.txt");


База приемник:
Ответ = Новый HTTPСервисОтвет(200);
ДД = Новый ДвоичныеДанные("C:\Users\Odmin\Desktop\Новая папка (3)\in\ex_http.txt");
Ответ.УстановитьТелоИзДвоичныхДанных(ДД);
Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
Возврат Ответ;


Хз воспроизведется ли здесь гифка
Прикрепленные файлы:
16. Denium79 14 10.04.20 10:24 Сейчас в теме
(14)Да воспроизводится. Попробую разобраться В идеале и тем и этим способом бы получилось. Было бы супер
31. Denium79 14 11.04.20 10:00 Сейчас в теме
Резюмирую:

Вебсервис работает отлично, если правильно создать и правильно заполнить строку подключения. Оптимально использовать там, где необходима авторизация каждого пользователя.

Вот пример функции подключения:

Функция ПолучитьДанныеС1СДокументооборот(uid)
	
	АдресДО = Константы.АдресВебСервиса1СДокументооборот.Получить();
	АдресСервиса = "/ws/WSDOCMK.1cws?wsdl";
	АдресWDSL = АдресДО + АдресСервиса;    
	ИмяПользователя = ПараметрыСеанса.ИнтеграцияС1СДокументооборотИмяПользователя;
	ПарольПользователя = ПараметрыСеанса.ИнтеграцияС1СДокументооборотПароль;
	
	Попытка
		WSПрокси = ОбщегоНазначения.WSПрокси(АдресWDSL,"http://192.168.5.200/DocMK/ws/WSDOCMK","WSDOCMK",,ИмяПользователя,ПарольПользователя);    
	Исключение
		Сообщить ("Не удалось подключиться к 1С Документооборот");
		Возврат Неопределено;
	КонецПопытки;    
	
	
	ДвоичныеДанные = WSПрокси.GETDATA(UID);
	
	Возврат ДвоичныеДанные;
Показать



HTTP сервер - простая настройка, но проблемы с авторизацией. Мне пришлось сделать авторизацию на вебсервере по умолчанию (в файле vrd), только тогда заработала. Удобно использовать, если нет необходимости разделять пользователей.

Этот вариант мне не подошел, т.к. интеграция работает по сопоставлению пользователей КА2 и ДО, ввод авторизации по умолчанию ломает идентификацию пользователей ДО в КА2.
Если бы не получилось разобраться с WS, то вариантом работы остался бы HTTP, но пришлось бы сделать 2 публикации - одну для интеграции, другую для получения данных

Пример файла соединения для HTTP:

&НаСервере
Функция ПолучитьДанныеС1СДокументооборот(uid)
       
    АдресСервиса = "/DocMK/hs/ObmenKA/";
	АдресHTTP = АдресСервиса + uid;
	
	Запрос = Новый HTTPЗапрос;
	Запрос.АдресРесурса = АдресHTTP;
    
Соединение = Новый HTTPСоединение("192.168.5.200");
Ответ = Соединение.Получить(Запрос);



ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();

Возврат ДД;
	
КонецФункции
Показать



Парни, огромное спасибо за помощь!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот