Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:47

1С & SOAP: Ошибка при получении данных

Автор kolesnikov, 28 ноя 2016, 12:51

0 Пользователей и 1 гость просматривают эту тему.

kolesnikov

Добрый день.
В связи с тем что 1с-программистов, работающих с веб-сервисами, нет, пришлось самому попробовать взяться за некую авантюру (с 1с, к сожалению, дел имел мало)
Дело в том, что у нас на предприятии есть информационная система(бд MSSQL),с поднятым на той стороне веб-сервисом, принимающим и отдающим штатную структуру, приказы по кадрам,список сотрудников и т.п.
Есть потребность эти данные из 1С туда перегружать.
[
Для начала хотел попробовать авторизоваться на сервере методом Login(String UserName, String Password), потом получить штатную структуру GetStaffTree(AuthHeader authHeader) и перенести ее в форму 1С. Токен authHeader получается при авторизации
Сложность возникла после авторизации на сервисе

Описание метода Login
POST /ImportStaff.asmx HTTP/1.1
Host: ip
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://.../Login"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Login xmlns="http:/.../">
      <Username>string</Username>
      <Password>string</Password>
    </Login>
  </soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoginResponse xmlns="http://.../">
      <LoginResult>string</LoginResult>
    </LoginResponse>
  </soap:Body>
</soap:Envelope>


метод GetStaffTree:
POST /ImportStaff.asmx HTTP/1.1
Host: ip
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://.../GetStaffTree"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetStaffTree xmlns="http://...">
      <authHeader>
        <AuthenticatedToken>string</AuthenticatedToken>
      </authHeader>
    </GetStaffTree>
  </soap:Body>
</soap:Envelope>

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetStaffTreeResponse xmlns="http://.../">
      <GetStaffTreeResult>
        <StaffTree>
          <StaffTreeID>int</StaffTreeID>
          <Name>string</Name>
          <ShortName>string</ShortName>
          <Code>string</Code>
          <IsDirectory>short</IsDirectory>
          <ParentName>string</ParentName>
          <ParentCode>string</ParentCode>
          <ParentShortName>string</ParentShortName>
        </StaffTree>
        <StaffTree>
          <StaffTreeID>int</StaffTreeID>
          <Name>string</Name>
          <ShortName>string</ShortName>
          <Code>string</Code>
          <IsDirectory>short</IsDirectory>
          <ParentName>string</ParentName>
          <ParentCode>string</ParentCode>
          <ParentShortName>string</ParentShortName>
        </StaffTree>
      </GetStaffTreeResult>
    </GetStaffTreeResponse>
  </soap:Body>
</soap:Envelope>


В 1С авторизовался:

Прокси = WSСсылки.WSCсылка1.СоздатьWSПрокси("http://...", "ImportStaff", "ImportStaffSoap");
Авторизация = Прокси.Login("Username","Password");


На форму выносил Поле, отображал там результат авторизации - успешно отображает токен.
далее использовал метод GetStaffTree
Данные = Прокси.GetStaffTree(Авторизация);

Результат - ошибка несоответствия типов:
  Ошибка при вызове метода контекста (GetStaffTree)
Данные = Прокси.GetStaffTree(Авторизация);
по причине:
Несоответствие типов (параметр номер '1')


Судя по всему проблема в том, что токен получился строковый, а тип, который ждет метод GetSTaffTree, должен быть authHeader



Подскажите пожалуйста можно ли как-то выпутаться из этой ситуации и отобразить полученные данные в размещенной таблице на форме? Как корректно оперировать токеном?

версия: 8.2.15.319

sertak

Я так понимаю, входящий параметр должен представлять из себя некую структуру (возможно, объект ЗаписьXML) со строковым реквизитом AuthenticatedToken.

kolesnikov

с токеном разобраться получилость, прописав отдельно тип AuthHeader через Фабрика.Создать

возник небольшой нюанс.
в передаваемой структуре
        <StaffTree>
          <StaffTreeID>int</StaffTreeID>
          <Name>string</Name>
          <ShortName>string</ShortName>
          <Code>string</Code>
          <IsDirectory>short</IsDirectory>
          <ParentName>string</ParentName>
          <ParentCode>string</ParentCode>
          <ParentShortName>string</ParentShortName>
        </StaffTree>

Есть параметр IsDirectory типа short.
http://clip2net.com/s/3EWSXxm
В базе,с которой дергаются данные, имеет значения 0-1-2

В реквизите столбца таблицы я выставил тип данных "Число".
В итоге числа 1-2 отображаются, 0 нет.

Из описания к методу:
IsDirectory
Тип данных: Целое число
Описание:
Тип записи
0 – должность
1 – подразделение
2 – вид должности

со строчными данными проблем нет.
short нужно отдельно прописывать через ФабриXDTO.Тип?

заполнение таблицы сейчас происходит следующим образом:

Для Каждого Элемент из Тип_ArrayOfStaffTree.StaffTree Цикл
НоваяСтрока = ШтатнаяСтруктура.Добавить();
НоваяСтрока.Код = Элемент.Code;
НоваяСтрока.Название = Элемент.Name;
НоваяСтрока.НазваниеКоротко = Элемент.ShortName;
НоваяСтрока.Тип = Элемент.IsDirectory;
НоваяСтрока.КодРодителя = Элемент.ParentCode;
НоваяСтрока.НазваниеРодителя = Элемент.ParentName;
НоваяСтрока.НазваниеРодителяКоротко = Элемент.ParentShortName;
КонецЦикла;


отбой. сделал через свойства поля представления нуля

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск