1с ошибка загрузки компоненты odata

1C
1С v8
Ошибка загрузки компоненты odata
0

Lenny

25.10.17

11:44

Коллеги, подскажите, появляется такая ошибка, база файловая, платформа 8.3.10.2580, конфигурация «Комплексная автоматизация 2.0». С чем может быть связано?

1

asady

25.10.17

11:54

(0) у всех или только у некоторого юзера

2

Lenny

25.10.17

11:57

У всех, можно запустить только из конфигуратора

3

asady

25.10.17

11:58

(0) а эта компонента ва м реально нужна — работаете через рест?

4

Lenny

25.10.17

12:00

(3) Нет, даже не знаю что это такое, не могу понять откуда такая ошибка.

5

asady

25.10.17

12:07

(0) посмотри в конфигураторе

Администрирование»->»Публикация на веб-сервере…». галочка стоит на odata

6

Lenny

25.10.17

12:19

(5) Система пишет что не установлены модули расширения веб-сервера и окно с настройками не показывает.

7

Мимохожий Однако

25.10.17

12:20

Попробуй переустановить платформу на последнюю со всеми нужными модулями.

8

h-sp

25.10.17

12:27

(6) установи модули расширения вебсервера тогда

Независимо от того, куда вы едете — это в гору и против ветра!

Коллеги, подскажите, появляется такая ошибка, база файловая, платформа 8.3.10.2580, конфигурация «Комплексная автоматизация 2.0». С чем может быть связано?

у всех или только у некоторого юзера

У всех, можно запустить только из конфигуратора

а эта компонента ва м реально нужна — работаете через рест?

Нет, даже не знаю что это такое, не могу понять откуда такая ошибка.

посмотри в конфигураторе Администрирование»->»Публикация на веб-сервере…». галочка стоит на odata

Система пишет что не установлены модули расширения веб-сервера и окно с настройками не показывает.

Попробуй переустановить платформу на последнюю со всеми нужными модулями.

установи модули расширения вебсервера тогда

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Для чего нужен доступ в базу 1С через REST-интерфейс по протокол oData? Как его организовать? Как не будучи гуру в JavaScript и .NET получить быстрый визуальный доступ к данным базы 1С? Попробую дать ответ на эти вопросы и прокомментирую некоторые нюансы, с которыми я столкнулся.

Почему это важно

Давайте на минутку представим, что у нас есть информационные базы на платформе «1С:Предприятие 8», с данными которой нам нужно регулярно работать. Но, к сожалению, у нас нет возможности вносить какие-либо свои правки в их конфигурацию. Возможно это базовые конфигурации (при наличии полноценной платформы); или бесплатная «1С:УНФ для Украины. Микро»; или из-за преимуществ автоматического обновления не хотим снимать поддержку; или обслуживающая компания назвала стоимость своих услуг, которая не получила одобрения у руководства, а собственного «программиста 1С» нет…

И вот в таких условиях вам ставят задачу по интеграции этой базы и некоторой внешней системы. Что делать и какие у нас есть варианты? Возможно в комментариях меня дополнять, но я пока вижу ровно 5 путей:

  1. Доступ в базу через семейство COM-объектов (V83.ComConnector и более ранние). Ограничение: платформа должна быть установлена на Windows.
  2. Непосредственный доступ в таблицы базы данных. Вот пример для СУБД. Вот пример для файловой базы. Ограничение: запрет непосредственного доступа к данным в лицензионном соглашении; нестабильность полученного доступа; изменение данных может привести к нарушению логической целостности базы.
  3. Начиная с версии платформы 8.3.5 появилась возможность предоставить доступ к данным через автоматический REST-интерфейс на основе протокола OData v.3.0. Ограничение: необходимо установить веб-сервер и модуль расширения веб-сервера из поставки платформы.
  4. Начиная с версии платформы 8.3.6 появился механизм расширений, который позволяет «пристегнуть» новую функциональность без внесения изменений в основную конфигурацию. В числе новой функциональности есть интересные нам WEB- и HTTP-сервисы. Начиная с версии платформы 8.3.11 стала доступной возможность расширения структуры таблиц  базы данных (добавление новых реквизитов для хранения служебных данных в целях интеграции). Ограничение: необходимо наличие программиста, который разработает расширение и будет следить за его работоспособностью при обновлениях; для сервисов необходимо установить веб-сервер и модуль расширения веб-сервера из поставки платформы.
  5. Можно отказаться от «мгновенного доступа» и тогда можем использовать запуск внешних обработок с помощью параметра командной строки /Execute. В таком сценарии можно сделать регулярный запуск по расписанию некоторой обработки, которая будет проверять внешний ресурс на наличие инструкций к выполнению и помещать туда результаты своей работы. Так же можно самостоятельно запускать клиентское приложение 1С на отработку своих команд, если есть доступ к ОС, в которой находится база. Ограничение: необходимо наличие программиста, который создаст обработку; наличие временного лага в реакции системы на значение промежутка между запусками в планировщике или на время старта клиентского приложения.

Таким образом среди 5 вариантов самым быстрым и самым легким для администратора способом является автоматический доступ через протокол oData. Этот же вариант является кроссплатформенным.

А еще вариант с протоколом oData менее затратен с точки зрения разработки связки с базой 1С. Дело в том, что компания Microsoft усиленно его продвигает. Помимо выпуска OData SDK для разработки под .NET, AJAX, PHP, Java, JavaScript, WebOS и Objective-C, эта компания внедрила данный протокол в свои популярные продукты: Excel, PowerPoint, SharePoint, MsSQL и других. Таким образом вам не нужно создавать свою версию CommerceML и заниматься разбором XML и JSON текстов как на вашей стороне так и на стороне базы 1С, как если бы вы реализовывали свои собственные WEB- и HTTP-сервисы. При использовании OData у вас уже сразу будут готовые библиотеки для получения или модификации данных для применения в вашей внешней системе, в то время как на стороне базы 1С все будет происходит автоматически.

Для тех, кто заинтересовался темой, прошу перейти на официальный сайт протокола — www.odata.org. Еще раз обращаю внимание, что не смотря на то, что актуальная версия протокола уже 4.0 и она была стандартизирована консорциумом OASIS еще 17 марта 2014 года, но в платформе «1С:Предприятие 8» по прежнему используется протокол более ранней версии 3.0. Кстати, не забудьте заглянуть в раздел экосистемы протокола и полюбоваться на упоминание нашей 1C:Enterprise, которая идет первой в списке :))


Необходимые настройки

Как я уже упоминал, у вас должен быть веб-сервер. Начиная с версии 8.4 в составе серверной части платформы уже будет свой собственный веб-сервер, но пока нам нужно пользоваться сторонними — IIS или Apache. Как все настроить хорошо описано в желтой книжечке для администратора. Но если вы любите картинки и чужой опыт, то вот надергал в поиске: пошаговая инструкция по установке Apache на Windows, установка Apache на Linux и конечно же IIS для чайников 🙂 За полноту и актуальность предоставленных данных в указанных статьях не ручаюсь и вообще не знаком с авторами. Если возникнут проблемы, то читайте Руководство Администратора от вашей версии платформы — там есть все, что вам пригодится. 

После того, как у вас уже установлен веб-сервер и он уже не падает при запуске из-за проблем с расширением доступа к 1С (давайте угадаю — вы поставили 32-разрядный Apache и 64-разрядную платформу), осталось совсем чуть-чуть. В конфигураторе заходим в меню «Администрирование» и нажимаем на команду «Публикация на веб-сервере…». В появившемся окошке необходимо указать следующие важные моменты:

  • Название вашей базы в поле «Имя», по которой веб-сервер будет предоставлять к ней доступ (если не хотите проблем, то не пишите на кириллице);
  • Укажите веб-сервер, который установлен на данном компьютере (если у вас установлено целых два веб-сервера, то в выпадающем списке будет выбор);
  • Путь к каталогу публикации, к которому должен быть доступ у вашего выбранного веб-сервера;
  • И самое главное — галочка «Публиковать стандартный интерфейс OData»!

скриншот публикации

После нажатия на кнопку «Опубликовать» по указанному в настройке пути будет создан файл default.vrd (XML-файл, который содержит данные, которые вы сделали в настройках публикации), а в конфиге веб-сервера будет добавлена запись о вашей публикации с тем именем, что вы указали. После публикации веб-сервер стоит перегрузить.

Несколько замечаний по выполнению публикации. Если у вас к публикации несколько баз, то для каждой из них должен быть свой каталог. Сразу подумайте о пользователе, которым собираетесь получать доступ к базе — у него должны быть нужные роли и имя латинскими буквами без спецсимволов (если вам в будущем охота воевать с кодировками, то можете сделать имя на русском с пробелами). Если вы работаете на Windows и у вас включен UAC, то перед публикацией конфигуратор следуют запускать от имени администратора. Если вы работаете на Linux — держитесь, мы в вас верим! 🙂

Вот как выглядит рабочий default.vrd с публикацией интерфейса OData:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/DemoTrdBase"
ib="File=&quot;D:WORKBaseDemoTrdBase&quot;;"
enable="false">
<standardOdata enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</point>

Как видно из файла публикации — веб-серверу абсолютно все равно, где физически находится информационная база, путь к ней прописывается точно так же, как вы его прописываете в списке баз начального окна. Главное, что бы на одном компьютере с веб-сервером было установлено расширение доступа и местонахождение базы было по сети физически доступно для службы веб-сервера с правами на изменение. Так же возможны проблемы с получением лицензии и нужно будет покопаться в файле nethasp.ini, но это все стандартные процедуры и для обычной установки платформы.

После того, как вы выполнили публикацию и перезапустили сервер, можем проверить результаты в браузере. Для этого нужно указать имя веб-сервера, далее имя базы из публикации, далее путь /odata/standard.odata/ . У вас должны запросить пароль и вы увидите, что-то похожее на это:

браузер

Что бы продемонстрировать возможности рассматриваемой в статье технологии, я взял конфигурацию «»Управление торговлей (базовая)», редакция 10.3″, в которой установлен режим совместимости «Версия 8.2.13» и потому все метаданные через REST-интерфейс доступны сразу, а вызов функции УстановитьСоставСтандартногоИнтерфейсаOData() для управления доступностью состава запрещен.

Если  же у вас имеется доработанная торговля 10.3, которой вы установили режим совместимости «Версия 8.3.5» или выше, или если у вас есть более современные конфигурации, то все метаданные по умолчанию будут скрыты и вам нужно будет воспользоваться специальной обработкой для указания видимости требуемых данных. Что бы не тратить время на создание своей обработки, можете воспользоваться моей работой, которая годится как для обычного так и для управляемого интерфейсов (см. вложения).

обработка состава


А что же дальше?

Думаю, что можно вас поздравить — у вас все настроено и работает! Какие же следующие шаги? Все зависит от того, зачем вам нужно было организовывать доступ к базе — для обмена информацией с корпоративным сайтом, для работы мобильного приложения, для связки с корпоративным ПО…

Если требуется сделать на сайте что-то типа кабинета пользователя с предоставлением истории взаиморасчетов, действующих цен с учетом персональных скидок, ввода заказа и прочими плюшками, то к нашим услугам есть несколько готовых библиотек на официальном сайте. Есть даже целый фреймворк OpenUI5 от компании SAP, который на базе данных получаемых по протоколу OData позволяет создать полноценное бизнес-приложение. В общем, раздолье для грамотного JS-программиста.

 Предостережение о «велосипедах»

Допустим, что мы не грамотные JS-программисты, но какой-то списочек повесить на сайт хотим. Я открыл статью с перечнем самых популярных на сегодняшний день библиотек создания таблиц и нашел в нем простенькую библиотечку jsGrid как раз для нашего случая. Изучаем их сайт, берем пример их кода по использованию OData и вставляем туда путь к нашим данным.

Что бы совсем быть ленивым и ничего не программировать для нашего примера, мне нужно запросить полноценную табличку без необходимости по ссылкам догружать строковые представления. В типовой УТ10.3 на этот счет выбор не очень богатый и потому я возьму справочник Контрагенты.

Теперь самое интересное. А как же сформировать строку запроса на чтение нужных нам данных? Это просто! Смотрим по нашему пути к корню OData (для меня это http://localhost/DemoTrdBase/odata/standard.odata/) как правильно называется этот справочник — Catalog_Контрагенты. Далее открыв в новом окне адрес http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты мы увидим содержимое всего справочника в формате XML. Но для нашего примера нужен JSON и потому к строке нужно добавить параметр: $format=json — получится http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты?$format=json. Так, группы нам не интересны и давайте их уберем с помощью параметра фильтрации: $filter=IsFolder eq false — получится http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты?$format=json&$filter=IsFolder eq false. Блок параметров, как вы уже заметили начинается символом «?», а сами параметры между собой соединяются символом «&». Полный список доступных параметров и функций смотрите в документации по платформе.

Полученный файл положим в каталог, который настроен корневым в вашем веб-сервере. Это необходимо, что бы «домены» странички и запрашиваемых данных совпадали, иначе получите бесконечный индикатор обновления и ошибку в логах: «No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘null’ is therefore not allowed access. The response had HTTP status code 401.«

Буквально несколько минут затраченного времени и у нас уже приличная табличка, которая даже автоматически размечена на странички. Немного неуклюже смотрится только запрос аутентификации и, что бы не вводить каждый раз логин и пароль, я их прописал сразу в строке доступа. Конечный файлик получился довольно простой и каждый сможет его с легкостью повторить, но на всякий случай я его тоже размещу во вложения.


А совсем без программирования?

Сайты, мобильные приложения, шина сообщений и прочие слова для любого айтишника звучат круто, но не находят отклика в сердцах высоких начальников. Их главный рабочий инструмент Excel, к которому они пылают иррациональной любовью даже при наличии мощной подсистемы отчетности из их баз 1С. И в этот момент мы вспоминаем, что именно компания Microsoft придумала стандарт OData и внедрила его в свои программы начиная с Office 2010. В офисных программах мы можем как просто просматривать таблицы с данными, так и воспользоваться механизмами запросов для получения более интересной информации за один раз без необходимости соединять таблицы с разных листов.

К примеру, нас интересуют должники. В УТ10 мы их можем получить из виртуальной таблицы остатков регистра накопления ВзаиморасчетыСКонтрагентами, наложив фильтр что бы сумма долга была больше нуля (иначе это авансы). Задавать дату не буду, так как меня интересуют актуальные данные. Для моей базы это будет следующая ссылка: http://localhost/DemoTrdBase/odata/standard.odata/AccumulationRegister_ВзаиморасчетыСКонтрагентами/Balance?$filter=СуммаУпрBalance gt 0

Просмотрев результат, мы можем заметить, что у нас нет представлений для контрагентов, а только ключи для таблицы справочника контрагентов. Следовательно будем запрашивать и эти вспомогательные данные. Для этого воспользуемся ссылкой без фильтров:  http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты

А теперь простая последовательность шагов:

  1. Открываем Excel (у меня версия 2023; если у вас 2010 или 2013, то меню может немного отличаться)
  2. Переходим по навигационному пути: «Данные» / «Создать запрос» / «Из других источников» / «Из канала ODATA».
  3. Указываем нашу ссылку на регистр взаиморасчетов
  4. На форме авторизации выберем третий вариант «Базовый» и укажем логин/пароль. Нажимаем «Подключение».
  5. В открывшемся окне редактора запроса вместо имени «Запрос1» дадим что-то более для нас интересное — «Взаиморасчеты»
  6. В центре окна редактора запроса видим колонку «Список», где в каждой строке слово «Record». Мы можем или воспользоваться контекстной командой «В таблицу» или нажать соответствующую кнопку в меню «Преобразование» редактора. На возникший вопрос ответьте «Ок».
  7. Теперь колонка называется «Column1» и рядом с ней появилась кнопочка со стрелками в разные стороны. Нажмите на нее. С сервера подтянется описание существующих колонок. Снимите все галочки и оставьте их только на колонках «Контрагент_Key» и «СуммаУпрBalance». Нажмите на «Ок» и появится таблица из двух выбранных колонок с нужными нам данными.
  8. За пределами нашего внимания остались такие измерения как организация, договор и сделка, но они все равно были запрошены. В результате у нас сейчас есть строки контрагентов с разными суммами. Их можно свернуть с помощью группировки. Для этого или из меню или из контекста вызывайте команду «Группировать по». В группировочных полях оставьте только контрагента, а поле с суммой удалите. Назовите новую колонку «Долг», в операции выберите «Сумма», а в столбце укажите поле нашей суммы. Нажмите на «Ок» и в результате получим немного меньше записей.
  9. Теперь нам нужно расшифровать контрагентов. Для этого в левой панели «Запросы», где уже есть текущий запрос «Взаиморасчеты», вызовите контекстное меню и выберите «Новый запрос» / «Другие источники» / «Канал ODATA». В появившемся окошке укажем путь к справочнику контрагентов. Далее снова указываем логин/пароль авторизации, в предпросмотре нажимаем «Ок» и зададим новому запросу имя «Контрагенты».
  10. Вернемся к запросу «Взаиморасчеты» (клик по названию на панели запросов).
  11. Теперь выполняем соединение наших двух запросов. Для этого в основном меню редактора вызовите команду «Комбинировать» / «Объединить запросы». В окне конструктора объединения будет наша таблица взаиморасчетов. В центре в выпадающем окне выберите запрос «Контрагенты». Вид соединения остается тот, который по умолчанию (левое внешнее). Далее кликами выбираем колонки для условия объединения. Соглашаемся со всем что нам далее предлагают. 
  12. После объединения мы получили новую колонку «Контрагенты» со знакомой кнопкой с разнонаправленными стрелочками. Кликаем по этой кнопке и выбираем интересующие нас колонки. Для интереса выберем «НаименованиеПолное» и «Parent» (группа). Колонка «Parent» так же предлагает нам раскрыться — выберем в ней поле «Description» (обычное наименование справочника).
  13. Сделаем красиво. Первую колонку с ключем контрагента можем удалить. Колонку группы так и назовем «Группа», колонке с именем контрагента дадим название «Контрагенты», а колонку долга перекинем в конец получаемой таблицы.
  14. Теперь можем нажать на главную кнопку редактора — «Закрыть и загрузить».
  15. Далее можно использовать загруженную таблицу как данные для сводной таблицы или сводной диаграммы. Или при создании этих новых объектов указываем в качестве источника данных наш запрос «Взаиморасчеты».

скриншот из Excel

Но, как говорится, лучше один раз увидеть, чем сто раз услышать. Я постарался записать эту же последовательность действий на видео. И сразу предупреждаю, что у вас при повторе будет немного не так — будет запрошена авторизация, о чем я выше упомянул. Просто на момент записи видео, Excel уже запомнил мои логин и пароль.


Итоги

Надеюсь, что моя статья была полезной. Я сообщил о существовании и преимуществах новой технологии платформы. Так же подробно разъяснил настройку доступа в информационную базу по протоколу OData и привел несколько примеров практического использования.

Что бы не было предубеждений, что применять доступ по OData можно исключительно для управляемого интерфейса на последних версиях платформы, я в качестве учебного примера выбрал демо-базу конфигурации «Управление торговлей (базовая), ред 10.3» в режиме совместимости 8.2. Даже на базе данных такой конфигурации, всего несколькими кликами мышки можно получить в книге Excel актуальные данные по долгам и точно так же просто можно было бы получить актуальные остатки на складах, данные по продажам и прочую полезную информацию. 

P.S. Продолжение данной статьи, в котором рассмотрены операции создания и изменения данных, опубликовано по адресу infostart.ru/public/719982

Работаю с REST API OData в 1С. С созданием/получением объектов проблем нет.
Но столкнулся с проблемой при добавлении/получении файлов через этот интерфейс.
Создаю объект в «Catalog_ДоговорыКонтрагентовПрисоединенныеФайлы» — создается объект без проблем.
Если посмотреть в $metadata — у объекта есть следующие параметры:

...
<Property Name="Расширение" Type="Edm.String" Nullable="true" />
<Property Name="ТекстХранилище_Base64Data" Type="Edm.Binary" Nullable="true" />
<Property Name="ФайлХранилище_Base64Data" Type="Edm.Binary" Nullable="true" />
<Property Name="ТекстХранилище" Type="Edm.Stream" Nullable="true" />
<Property Name="ФайлХранилище" Type="Edm.Stream" Nullable="true" />
...

Значит, на сколько я понимаю, содержимое файла нужно отправлять через эти параметры.
Пробовал передавать содержимое файла в каждом из этих параметров и в base64 и просто — ничего не получается.
В 1С в присоединенных файлах договора файл отображается, но при попытке открыть его выдает ошибку, что «Файл не найден в хранилище файлов».
Также не удается получить содержимое файла (созданного в этом же справочнике через 1С) через REST.
Пытался запрашивать:
Catalog_ДоговорыКонтрагентовПрисоединенныеФайлы(guid’GUID’)/ТекстХранилище
Catalog_ДоговорыКонтрагентовПрисоединенныеФайлы(guid’GUID’)/ФайлХранилище
Ничего не возвращает.

Может кто-то работал с файлами через OData, и, в частности, с REST API 1C, подскажите как это сделать?

upd
Разобрался как добавить/получить файл через OData.
При создании записи в справочнике в параметре «ФайлХранилище_Type» указываем mime-type файл (например image/jpeg), в «ФайлХранилище_Base64Data» пихаем содержимое файла, закодированное в base64.
После этого через OData можно получить файл двумя способами:
1. …/Catalog_ДоговорыКонтрагентовПрисоединенныеФайлы(guid’GUID’)/ФайлХранилище — возвращает сам файл
2. …/Catalog_ДоговорыКонтрагентовПрисоединенныеФайлы(guid’GUID’)/ФайлХранилище_Base64Data/$value — возвращает содержимое файла, кодированное в base64
Но! При этом все равно этот файл не открывается через 1С, и выдает прежнюю ошибку, равно как и добавленные через 1С файлы не удается получить через OData — в «ФайлХранилище_Base64Data» просто пусто!

24.08.2015

Реализовано в версии 8.3.8.1652.

В REST интерфейсе прикладных решений, о котором мы рассказывали раньше, мы реализовали не все, а только основные возможности протокола OData. Они позволяют получать доступ к внутренним объектам 1С:Предприятия с помощью URL-запросов. Однако опыт использования REST интерфейса показал, что для быстрой и гибкой интеграции этих возможностей не всегда хватает.

Поэтому мы расширили поддержку стандартных возможностей протокола OData, а также реализовали некоторые функции, которых нет в протоколе, но они используются 1С:Предприятием. Кроме этого мы добавили пару возможностей, которые, судя по вашим сообщениям, являются наиболее востребованными. Это отбор по полям составного типа, и отбор по реквизитам табличных частей.

Отбор по ссылочному значению реквизита составного типа

Ранее в REST интерфейсе уже была возможность отбирать по значениям ссылочных полей. Например, в следующем примере будут получены записи регистра, относящиеся к валюте с уникальным идентификатором 7f4b5034-0331-11e3-b914-5404a6a68c42.

GET /OData_Test_Infobase/odata/standard.odata/InformationRegister_КурсыВалют?$filter=Валюта eq guid'7f4b5034-0331-11e3-b914-5404a6a68c42'

Однако если поле, по которому осуществляется отбор (Валюта), имело составной тип, то такое условие уже не работало. И возможности отбирать по таким полям не существовало.

Теперь мы такую возможность добавили. Например, регистр сведений Характеристики содержит измерение Объект. Это измерение имеет составной тип, включающий ссылку на справочник Товары. Тогда следующий пример вернёт только те записи регистра, которые относятся к товару, имеющему guid равный 0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7.

GET /OData_Test_Infobase/odata/standard.odata/InformationRegister_Характеристики?$filter=Объект eq cast(guid'0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7', 'Catalog_Товары')

В этом примере используется новая функция cast, о которой мы расскажем далее.

Новые опции запросов

В REST интерфейсе был реализован ограниченный набор опций: $format, $metada, $filter и $select. Теперь мы добавили к ним ещё несколько полезных опций, которые должны облегчить решение задач интеграции.

$orderby
Указывает порядок, в котором будут получены записи. Следующий пример возвращает список товаров в порядке возрастания наименования.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$orderby=Наименование asc

$skip
Отбрасывает первую часть результата запроса. Следующий пример возвращает список товаров, начиная с третьей позиции.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$orderby=Наименование asc&$skip=2  

Эту опцию, совместно с опцией $top, вы можете использовать для постраничного вывода результатов. Следующий пример возвращает список товаров с 3 по 13 позиции.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$orderby=Наименование asc&$skip=2?$top=11  

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

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$inlinecount=allpages

Результат такого запроса в формате JSON будет выглядеть следующим образом:

{
"odata.metadata": "http://localhost/OData_Test_Infobase/odata/standard.odata/$metadata#Catalog_Товары ", 
"odata.count": "19",
"value": [{...}, ..., {...}]
} 

$count
Возвращает только количество элементов, содержащихся в результате запроса. Следующий пример возвращает количество товаров.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$count  

Новые функции, которые вы можете использовать в опциях $filter и $orderby

При отборе и при сортировке результатов вы можете использовать теперь новые функции, предусмотренные стандартом OData. Но кроме этого мы добавили ещё несколько удобных функций, стандартом не предусмотренных, но давно используемых в 1С:Предприятии.

Функции, предусмотренные стандартом OData

substring
Возвращает подстроку от значения поля. Подстрока начинается с указанной позиции, и имеет указанную длину. Например, если в информационной базе артикул товара формируется по принципу <буквы>-<цифры>, то следующий запрос возвращает те товары, у которых буквенная часть артикула содержит два символа (ОБ-00055, ПС-0002 и т.д.).

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$filter=substring(Артикул, 2, 1) eq '-'  

substringof
Определяет, содержится ли указанная подстрока в значении поля. Следующий запрос возвращает те товары, у которых в артикуле содержится подстрока ПРД.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$filter=substringof('ПРД', Артикул)  

startswith, endswith
Определяет, начинается ли (заканчивается ли) значение поля с указанной подстроки. Следующий пример возвращает товары, артикул которых начинается с VEKO.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$filter=startswith(Артикул, 'VEKO')

concat
Объединяет две строки в одну. Следующий пример возвращает контрагентов, для связи с которыми используется телефонный номер +7(999)456-87-68.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Контрагенты?$filter=substringof('+7(999)456-87-68', concat(Телефон, Факс))  

year, month, day, hour, minute, second
Возвращает год (номер месяца, день, количество часов, минут, секунд) от значения поля. Следующий пример возвращает все документы оплаты за 2015 год.

GET /OData_Test_Infobase/odata/standard.odata/Document_Оплата?$filter=year(Дата) eq 2015  

isof
Определяет, имеет ли значение поля указанный тип. Например, в справочнике Товары указано, что поле Артикул используется только для элементов. Тогда следующий пример вернёт только элементы справочника, без групп. Потому что для групп значение этого поля имеет тип NULL.

GET /OData_Test_Infobase/odata/standard.odata/Catalog_Товары?$filter=isof(Артикул, 'String')  

cast
Приводит значение к указанному типу. Может использоваться при отборе по полям составного типа. В следующем примере эта функция создаёт значение ссылки на справочник Товары, которая имеет указанный уникальный идентификатор.

GET /OData_Test_Infobase/odata/standard.odata/InformationRegister_Характеристики?$filter=Объект eq cast(guid'0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7', 'Catalog_Товары')

round
Округляет значение до ближайшего целого числа.

Функции, специфичные для 1С:Предприятия (не предусмотренные стандартом OData)

  • like — аналог оператора ПОДОБНО языка запросов;
  • datedifference — аналог функции РАЗНОСТЬДАТ языка запросов;
  • dateadd — аналог функции ДОБАВИТЬКДАТЕ языка запросов;
  • quarter — аналог функции КВАРТАЛ языка запросов;
  • dayofweek, dayofyear — аналоги функций ДЕНЬНЕДЕЛИ и ДЕНЬГОДА языка запросов.

Отбор по значениям реквизитов табличных частей

Для того чтобы реализовать возможность отбора по реквизитам табличных частей, мы добавили два новых оператора: any и all. Они применяют логическое выражение к каждой строке табличной части и возвращают значение Истина, если хотя бы для одной строки (any) (для всех строк (all)) это логическое выражение верно. Следующий пример возвращает все документы продажи, в которых есть товары с ценой больше 10000.

GET /OData_Test_Infobase/odata/standard.odata/Document_РасходТовара?$filter=Товары/any(d: d/Цена gt 10000)  

Небольшое пояснение по синтаксису. Оператор any предваряется именем табличной части (Товары), и отделяется от неё слешем. В скобках указывается имя переменной (d), которая будет использована в логическом выражении, и которая указывает на табличную часть. После имени переменной следует двоеточие. Затем указывается логическое выражение (d/Цена gt 10000), которое должно проверяться. 

Теги:
OData 
веб-сервисы 
8.3.8 

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с ошибка доступа к файлу планировщика регламентных заданий
  • 1с ошибка доступа к файлу внешняя обработка
  • 1с внутренняя ошибка подсистемы контроля несогласованных изменений
  • 1с внутренняя ошибка динамического списка
  • 1с ошибка 53100

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: