BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 07 июл 2025, 00:29

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Изменение статуса договора из 1с
СообщениеДобавлено: 04 июн 2014, 09:38 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Есть задача менять статус договора из 1с (Bgbilling v 6.0).
Статусы договоров меняются через WSDL.
Пробую реализовать на 1с 8.3 но возникла проблема.
Добавил в объекты Ws-ссылку:
http://127.0.0.1:8080/bgbilling/execute ... rvice?wsdl

Изображение

И пробую выполнить запрос таким образом:
Код:
   ПространствоИмен = "http://service.common.status.contract.kernel.bgbilling.bitel.ru/";
   Прокси           = WsСсылки.BgStatus.СоздатьWSПрокси(ПространствоИмен, "ContractStatusMonitorService", "ContractStatusMonitorService" );
   ТипWSПараметра   = Прокси.ФабрикаXDTO.Пакеты.Получить(ПространствоИмен).Получить("changeContractStatus");
   WSПараметр       = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
   
   ТипИнт    = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "int");
   ТипСтрока = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string");
   ТипДата   = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime");   
   
   ЗначениеСИД      = Прокси.ФабрикаXDTO.Создать(ТипИНТ, 45700);
   ЗначениеСтатус  = Прокси.ФабрикаXDTO.Создать(ТипИНТ, 3);
   ЗначениеДата1    = Прокси.ФабрикаXDTO.Создать(ТипДата, "2014-06-04T00:00:00+11:00");
   ЗначениеДата2   = Прокси.ФабрикаXDTO.Создать(ТипДата, "2014-06-08T00:00:00+11:00");
   ЗначениеКоммент = Прокси.ФабрикаXDTO.Создать(ТипСтрока, "hello");

   WSПараметр.cid.Добавить(ЗначениеСИД);
   WSПараметр.statusId   = ЗначениеСтатус;
   WSПараметр.dateFrom   = ЗначениеДата1;
   WSПараметр.dateTo   = ЗначениеДата2;
   WSПараметр.comment    = ЗначениеКоммент ;

   
   Прокси.Пользователь = "user";                                           
   Прокси.Пароль = "123";

   Прокси.changeContractStatus(WSПараметр);


Но при выполнеии возникает ошибка:
Код:
{Обработка.Обработка1.Форма.Форма.Форма(62)}: Ошибка при вызове метода контекста (changeContractStatus)
   Прокси.changeContractStatus(WSПараметр);
по причине:
Ошибка вызова операции сервиса:  {http://service.common.status.contract.kernel.bgbilling.bitel.ru/}:ContractStatusMonitorService:changeContractStatus()
по причине:
Ошибка SOAP сервера:  Ошибка параметров запроса.

Не могу разобраться, что неверно в параметрах запроса или я вообще неверным путем иду, сталкивался кто с подобной проблемой ?


Вложения:
WS.jpg
WS.jpg [ 64.91 КБ | Просмотров: 4969 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 10:56 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Это штатное сообщение нашего сервера, когда ему не хватает каких-то данных. В данном случае там стоит такая проверка

Код:

   @Override
   public void changeContractStatus( int[] cids, int statusId, Date dateFrom, Date dateTo, String comment )
       throws BGException
   {
                if ( cids.length <= 0 || statusId < 0 || dateFrom == null )
      {
         throw new BGIllegalArgumentException(); //ошибка параметров запроса
      }
                ....


Он читает либо cids пустой, либо statusId меньше нуля либо dateFrom равно null.

Я не разбираюсь в 1с , но первый cids должен быть массивом, у вас это как-то отдельно указывается ? Хорошо посмотреть какая xml уходит от 1с на сервер.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 11:42 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Я как раз и думаю что ошибка в параметре cid, он в отличии от остальных параметров передается как СписокXDTO, а не просто значением и в дебаге 1с я не вижу передаваемого значения, там какая-то муть. Но если смотреть в журнале запросов то вижу, что на сервер приходит следующее
Код:
#text =>
   
cid => 45700
#text =>
   
statusId => 3
#text =>
   
dateFrom => 2014-06-04T00:00:00
#text =>
   
dateTo => 2014-06-08T00:00:00
#text =>
   
comment => hello
#text =>


Т.е. данные до сервера доходят. Но если смотреть рабочий запрос по смене группы то вывод несколько иной:
Код:
#text =>
   
contractId => <contractId xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">45700</contractId>
#text =>
   
contractGroupId => <contractGroupId xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">3</contractGroupId>
#text =>

, правда в запросе на смену группы все проще т.к. в методе contractGroupAdd порта ContractService передаются два раздельных параметра, а при смене статуса все записывается в один.
Как посмотреть отправляемый xml я, к сожалению, не знаю. C web сервисами столкнулся недавно, так что могу неправильно что-то понимать/реализовывать в 1с механизмах XDTO, надеялся что есть люди с опытом создания подобного в 1с.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 12:01 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
В 6.0 при нормальном запросе из клиента я вижу такое в журнале запросов:
Код:
cid => 355141
statusId => 6
dateFrom => 2014-06-04T00:00:00+06:00
comment => <comment xmlns=""/>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 12:09 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
При запросе из php такой же вывод, вероятно ошибка в неправильном определении типа передаваемого параметра если он является массивом, поэтому массив неправильно обрабатывается и биллинг не видит данные так как должен, буду углубляться в доки по 1с.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 12:10 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SeGa писал(а):
Я как раз и думаю что ошибка в параметре cid, он в отличии от остальных параметров передается как СписокXDTO


Я не понял чем он у вас отличается от поля статус
Код:
ЗначениеСИД      = Прокси.ФабрикаXDTO.Создать(ТипИНТ, 45700);
   ЗначениеСтатус  = Прокси.ФабрикаXDTO.Создать(ТипИНТ, 3);


Вроде оба одинаково создаются как int-вое значение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2014, 12:24 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Возможно вот это у вас неправильно
Код:
   ТипИнт    = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "int");


Там не тип int. На вскидку нашел что для массива String-ов, например, используют такую конструкцию :
Код:
ТипМассив = Фабрика.Тип("http://tempuri.org/", "ArrayOfString");


http://www.forum.mista.ru/topic.php?id=637402

Может для массива int тоже надо как-то отдельно указывать. Это мои предположения, 1с не изучал.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 июн 2014, 06:35 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
stark писал(а):
Там не тип int.

Изображение

Тип "changeContractStatus" пространства имен "http://service.common.status.contract.kernel.bgbilling.bitel.ru/"
Смотрю как 1с воспринимает структуру в пакете XDTO

Изображение

Тип "int" с неограниченным количеством элементов пространства имен "http://www.w3.org/2001/XMLSchema"
"statusId" - int (http://www.w3.org/2001/XMLSchema)
dateFrom - dateTime (http://www.w3.org/2001/XMLSchema)
dateTo - dateTime (http://www.w3.org/2001/XMLSchema)
comment - string (http://www.w3.org/2001/XMLSchema)

Соответственно я присваиваю переменной "ЗначениеСИД" тип "Int" и так как в дебаггере вижу, что присвоить значение напрямую не могу, так как "WSПараметр.cid" имеет тип "СписокXDTO", то использую метод Добавить в отличии от остальных параметов. Т.е. в итоге туда передается массив Int.
Цитата:
На вскидку нашел что для массива String-ов, например, используют такую конструкцию :

Пробовал и с другими базовыми типами типами из http://www.w3.org/2001/XMLSchema не заработало ни с какими.
По найденной Вами ссылке код у меня не выполняется, не получается создать фабрику с таким типом.


Вложения:
cid_type.jpg
cid_type.jpg [ 91.65 КБ | Просмотров: 4929 ]
param_type.jpg
param_type.jpg [ 65.41 КБ | Просмотров: 4929 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.041s | 34 Queries | GZIP : On ]