Перейти к содержанию

Получение данных#

OData предоставляет запрашиваемые данные в виде JSON или XML документа (смотря, что мы указали в параметре запроса $format). Рассмотрим таблицу соответствия типов «1С Предприятия» и OData:

Тип «1С Предприятия» Тип свойства OData
Строка Edm.String
Дата Edm.DateTime
Число (целое) Edm.Int16, Edm.Int32, Edm.Int64
Число (дробное) Edm.Double
Булево Edm.Boolean
Ссылка Edm.Guid
Перечисление Edm.String
Хранилище значения Состоит из трех свойств*:
1. Навигационное свойство;
2. <Имя свойства>_Base64Data;
3. <Имя свойства>_Type.
Ссылочный тип Два свойства:
1. Собственно значение ссылки на объект типа Edm.Guid;
2. Навигационное свойство.
Составные типы Два свойства типа Edm.String:
1. Значение фактического типа, выраженное в виде строки;
2. Имя фактического типа.

В таблице символ * означает, что: * С помощью навигационного свойства можно получить данные, хранящиеся в реквизите: o Для типа Картинка – будет получена собственно картинка с соответствующим значением HTTP-заголовка content-type; o Для типа ДвоичныеДанные – будет получен байтовый поток; o Для остальных типов – XDTO-сериализованное значение хранимых данных. * Свойство <Имя свойства>_Base64Data хранит данные, которые могут быть получены с помощью навигационного свойства, только закодированные в Base64. Редактировать данные реквизита типа ХранилищеЗначения можно только с помощью этого свойства. * Свойство <Имя свойства>_Type описывает тип данных, хранимых в реквизите. Может принимать одно и трех значений: o application/octet-stream – двоичные данные; o application/xml+xdto – XDTO-сериализованный объект; o значение HTTP-заголовка content-type, соответствующего картинке, хранящейся в реквизите, например, image/jpeg для картинки формата JPEG. Остальные типы не поддерживаются, и при попытке их чтения будет сгенерирована ошибка c кодом 501. Имена свойств могут оканчиваться на различные суффиксы, а именно: * Key; * Type; * Base64Data.

Теперь рассмотрим подробнее данные суффиксы: Key Данный суффикс содержит значение ключа ссылки (GUID) реквизита объекта или независимого регистра сведений без измерений. Для установки отбора по имени реквизита можно использовать данный суффикс, а именно: для установки отбора по ссылочному полю Номенклатура, условие будет выглядеть следующим образом: Номенклатура Key=guid'value'. При этом свойство Номенклатура будет содержать представление номенклатуры с указанным значением ссылки. Type Данный суффикс используется для описания реквизита составного типа. Так, если в данных есть поле составного типа Номенклатура, то в документе, который возвращает стандартный интерфейс OData, этому полю будет соответствовать два свойства: * Номенклатура _Type – будет содержать описание типа значения реквизита в виде строки (тип Edm.String, диспетчеризационное свойство); * Номенклатура – будет содержать значение реквизита (соответствующего типа). Перечень допустимых типов, которые могут быть использованы в поле с таким суффиксом, определяется схемой сервиса, который можно получить при запросе полного описания стандартного интерфейса OData. Таким образом, при необходимости установить тип Документ.РасходнаяНакладная, в элемент с суффиксом _Type должно быть записано значение StandardODATA.Document РасходнаяНакладная. Если значение реквизита составного типа в информационной базе «1С:Предприятия» имеет значение Неопределенно, то диспетчеризационное свойство будет иметь значение StandardODATA.Undefined, а само значение свойства должно игнорироваться. Пример представления реквизита составного типа: StandardODATA.Undefined Base64Data Данный суффикс используется при указании имени свойства, содержащего данные, расположенные в реквизите типа ХранилищеЗначения, в виде строки Base64. Так, если в объекте конфигурации есть реквизит Файл, который имеет тип ХранилищеЗначения, то в документе, который возвращает стандартный интерфейс OData, этому полю будет соответствовать два свойства: * Файл_Type – содержит наименование типа данных, хранимых реквизитом; * Файл_Base64Data – содержит строку Base64, содержащую сами данные.

Коды ошибок В случае ошибочной ситуации возвращается ответ с HTTP-статусом 4XX или 5XX. Статус 4XX информирует об ошибках на стороне клиентского приложения, статус 5XX информирует об ошибке на стороне сервера.

Пример: настраиваем новый тип для загрузки вложенного файла из Сотрудников в 1С. При загрузке выдает ошибку 404: Рисунок 1 Error 404

502 Timeout

В случае статуса 4XX сервер пытается уточнить причину ошибки и может передать клиентскому приложению дополнительный внутренний код ошибки и информационное сообщение (в виде xml-документа) в теле ответа. Пример: 9 Экземпляр сущности "НакладнаяОтгрузки" не найден по переданному ключу. Далее перечислены внутренние коды ошибок с описанием причины появления: Код | Описание ----|--------- 0 | Возможность не поддерживается 1 | Не удалось разобрать строку 2 | Неверный формат запроса 3 | Запрошенный тип представления не поддерживается 4 | Неверное значение свойства 5 | Отсутствует обязательное значение свойства 6 | Неверный URL 7 | Не хватает элемента ключа сущности 8 | Тип сущности не найден 9 | Экземпляр сущности не найден 10 | Запрошенное свойство не найдено 11 | Метод не найден 12 | Отсутствует обязательный аргумент метода 13 | Создание строк табличных частей напрямую не поддерживается 14 | Ошибка разбора опций запроса 15 | Сущность с таким ключом уже существует 16 | Не удалось присвоить свойство 17 | Объект не поддерживает режим загрузки данных 18 | Ошибка инициализации интерфейса OData: в объекте есть свойства с одинаковыми именами 19 | Использованный HTTP-метод запрещен в данном контексте 20 | Ошибка прав доступа. Может возникать: * Когда у пользователя нет прав на запрошенное действие над данным объектом; * Когда в выборку попадает объект, недоступный в связи с ограничением доступа к данным и параметр allowedOnly не используется. 21 | Вызов нереализованной функции.

Указание неверного количества аргументов функции.

Попытка передачи аргумента неверного типа.

Указание нереализованной лямбда-функции.