8.х Платформа 8.3.8 поддержка протокола OData

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Andris_1c-pro, 17 авг 2016.

  1. TopicStarter Overlay
    Andris_1c-pro
    Offline

    Andris_1c-pro Новичок в 1С

    Регистрация:
    12 сен 2014
    Сообщения:
    45
    Симпатии:
    8
    Баллы:
    4
    Добрый день!

    В связи с расширением поддержки протокола OData (новость тут http://v8.1c.ru/o7/201508odata/index.htm и тут http://its.1c.ru/db/v838doc#bookmark:dev:TI000001774) решил разобраться, как оно всё работает.
    (Конфигурация тестовая, самописная, версия платформы: 8.3.8.1964)

    Задача заключается в следующем: нужно получить товары и/или их количество через OData в json-формате с применением фильтра поиска.

    На справочник товары наложены ограничения на чтение в конфигураторе через "ограничение доступа к данным", поэтому в get-запросе необходимо установить параметр: allowedOnly=true
    тут всё работает, запрос получился таким:
    http://localhost/odata/standard.odata/Catalog_Товары?allowedOnly=true&$format=json

    далее, добавляю фильтр (поиска товара по наименованию или артикулу): &$filter=substringof('стол',concat(Description,Артикул))

    итоговый запрос получился таким:
    http://localhost/odata/standard.oda...bstringof('стол',concat(Description,Артикул))

    он (запрос) тоже работает, 1С "отвечает" вполне вменяемым json'ом со вхождениями в наименование или артикул поисковой строки 'стол'.


    А вот дальше, начинаются "непонятки": необходимо узнать количество полученных товаров.

    В документации сказано, что для получения количества можно использовать 2 параметра:
    $count - при успешном запросе на выходе получаем количество
    $inlinecount=allpages - возвращает искомые товары и их количество, также на ИТС сказано: "Допускается совместное использование параметров $filter и $inlinecount. http://its.1c.ru/db/v838doc#bookmark:dev:TI000001775"

    пробую добавить этот параметр:
    http://localhost/odata/standard.oda...stringof('стол',concat(Description,Артикул))&
    $inlinecount=allpages

    получаю такую ошибку:
    {
    "odata.error": {
    "code": "-1",
    "message": {
    "lang": "ru",
    "value": "{(1, 30)}: Ключевое слово РАЗРЕШЕННЫЕ доступно только у первого запроса\nSELECT COUNT(*) FROM (SELECT <<?>>ALLOWED * FROM Catalog.Товары"
    }
    }
    }

    судя по ошибке, в 1С "коряво" строится запрос, пробую убрать "allowedOnly=true", получаю другую ошибку:

    {
    "odata.error": {
    "code": "20",
    "message": {
    "lang": "ru",
    "value": "Доступ запрещен"
    }
    }
    }

    Так как же можно получить количество разрешенных для чтения товаров с использованием фильтра через протокол OData?
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.570
    Симпатии:
    717
    Баллы:
    204
    ИМХО писать в тех сапопрт 1С о том, что метод работает криво, т.к. формируются вложенные запросы.
Похожие темы
  1. Siddy
    Ответов:
    8
    Просмотров:
    7.007
  2. gamser
    Ответов:
    8
    Просмотров:
    881
  3. Костег
    Ответов:
    4
    Просмотров:
    441
  4. OlgaOsipova
    Ответов:
    1
    Просмотров:
    219
  5. LordMaverick
    Ответов:
    0
    Просмотров:
    227
Загрузка...

Поделиться этой страницей