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

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, а само значение свойства должно игнорироваться.
Пример представления реквизита составного типа:
<d:РеквизитСоставной/>
<d:РеквизитСоставной_Type>StandardODATA.Undefined</d:РеквизитСоставной_Type>
**Base64Data**
Данный суффикс используется при указании имени свойства, содержащего данные, расположенные в реквизите типа ХранилищеЗначения, в виде строки Base64. Так, если в объекте конфигурации есть реквизит Файл, который имеет тип ХранилищеЗначения, то в документе, который возвращает стандартный интерфейс OData, этому полю будет соответствовать два свойства:
*	Файл_Type – содержит наименование типа данных, хранимых реквизитом;
*	Файл_Base64Data – содержит строку Base64, содержащую сами данные.
 
**Коды ошибок**
В случае ошибочной ситуации возвращается ответ с HTTP-статусом 4XX или 5XX. Статус 4XX информирует об ошибках на стороне клиентского приложения, статус 5XX информирует об ошибке на стороне сервера.

*Пример:* 
настраиваем новый тип для загрузки вложенного файла из Сотрудников в 1С. При загрузке выдает ошибку 404:
![Рисунок 1 Error 404](./media/Error 404.PNG) <br>

502 Timeout

В случае статуса 4XX сервер пытается уточнить причину ошибки и может передать клиентскому приложению дополнительный внутренний код ошибки и информационное сообщение (в виде xml-документа) в теле ответа. Пример:
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <m:code>9</m:code>
    <m:message>Экземпляр сущности "НакладнаяОтгрузки" не найден по переданному ключу.</m:message>
</m:error>
Далее перечислены внутренние коды ошибок с описанием причины появления:
Код | Описание
----|---------
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 | Вызов нереализованной функции.
 
Указание неверного количества аргументов функции.
 
Попытка передачи аргумента неверного типа.
 
Указание нереализованной лямбда-функции.
