Правила получения доступа к ресурсам#
Прежде чем мы начнём формирование строки доступа к ресурсу, нам необходимо знать, как обозначаются объекты «1С Предприятие» в строке доступа.
Объект конфигурации | Префикс имени в URL |
---|---|
Справочник | Catalog |
Документ | Document |
Регистр сведений | InformationRegister |
Важно помнить, что доступ к тем или иным объектам конфигурации ограничивается ролями, которые указаны у пользователя 1С, под которым мы подключились к базе.
Теперь, когда мы знаем, как обозначаются объекты «1С Предприятие» в URL можем разобрать сам URL.
Схема URL
<Префикс имени ресурса><Имя объекта конфигурации><Суффикс имени>
, где:
Префикс имени ресурса – указываем в соответствии с таблицей сопоставления объектов «1С Предприятия» и их представление в OData. Используется только латиница.
Имя объекта конфигурации – указываем имя объекта, так как оно указано в конфигурации (поле «Имя»). Если имя указано кириллицей, то в URL также указываем в кириллице.
Суффикс имени – указываем дополнительное описание имени объекта. Применяется для обозначения:
* табличной части объекта;
* имя виртуальной таблицы регистра;
* RowType – строка табличной части;
* RecordType – запись регистра.
Например:
1. доступ к справочнику «Организации» - Catalog_Организации;
2. доступ к табличной части «Контактная информация» справочника «Физические лица» - Catalog_ФизическиеЛица_КонтактнаяИнформация;
3. доступ к таблице кадровых передвижений сотрудников - InformationRegister_КадроваяИсторияСотрудников.
Установка отборов по ресурсам
Для формирования выборок необходимы настройки отбора данных, рассмотрим какие отборы, мы можем указать в строке (URL).
Можно выделить следующие отборы:
* $filter;
* $top;
* $allowedOnly;
* $skip;
* $count;
* $inlinecount;
* $orderby.
*
Теперь рассмотрим каждый из них:
$filter
Для установки фильтров используется специальный язык, при помощи которого мы описываем применяемые фильтры в строке доступа к ресурсу.
Мы будем использовать следующие операции:
* логические:
Описание | Имя | Пример
---------|-----|-------
Равно | eq | /Catalog_ФизическиеЛица?$filter=Имя eq ‘Иванов’
Catalog_ФизическиеЛица?$filter=Ref_Key eq guid'b1dbe18e-87b5-11e9-80f1-00505681a2de'
Не равно | ne | /Catalog_Контрагенты?$filter=Имя ne ‘Иванов’
Больше | gt | /Document_Отпуск?$filter=Date gt datetime'2022-11-26T00:00:00'
Больше или равно | ge | /Document_Отпуск?$filter=Date ge datetime'2022-11-26T00:00:00'
Меньше | lt | /Document_Отпуск?$filter=Date lt datetime'2022-11-26T00:00:00'
Меньше или равно | le | /Document_Отпуск?$filter=Date le datetime'2022-11-26T00:00:00'
Логическое «ИЛИ» | or | /Catalog_Контрагенты?$filter=Покупатель eq true or Прочее eq true Логическое «И» | end | /Catalog_Контрагенты?$filter=Покупатель eq true end Кредит gt 100 Отрицание | not | /Catalog_Контрагенты?$filter=not | (Покупатель eq true)
примеры обращение к табличной части сущности:
Document_Отпуск?$filter=ДополнительныеОтпуска/ВидОтпуска_Key eq guid'cf447156-eb49-11e8-5f86-005056ab6485' and Date gt datetime'2022-07-01T00:00:00'
Catalog_ФизическиеЛица?$filter=КонтактнаяИнформация/Тип eq 'АдресЭлектроннойПочты'
Catalog_ФизическиеЛица?$filter=like(КонтактнаяИнформация/Представление, ‘%zub.ru%’)
Catalog_ФизическиеЛица?$filter=КонтактнаяИнформация/Тип eq 'АдресЭлектроннойПочты'
Данные операции можно комбинировать между собой создавая сложные фильтры, главное не забывать о приоритетности, т.к. она играет очень важную роль. Давайте рассмотрим порядок приоритетности операций в убывания:
Операция | Описание |
---|---|
() | повышение приоритета операции |
/ | навигация |
- | арифметическое отрицание |
not | логическое отрицание |
mul | умножение |
div | деление |
add | сложение |
sub | вычетание |
gt | больше |
ge | больше или равно |
lt | меньше |
le | меньше или равно |
eq | равно |
ne | не равно |
and | логическое «И» |
or | логическое «ИЛИ» |
?$filter=ДополнительныеОтпуска/ВидОтпуска_Key eq guid'800894d6-efc8-11e8-5f86-005056ab6485' and Date gt datetime'2022-11-01T00:00:00'
Также мы можем применять функции для вычисления промежуточных данных:
- строковые функции:
Функция | Описание | Пример |
---|---|---|
substringof(Str1, Str2) | Возвращает true в том случае, если Str1 является подстрокой Str2. | /Catalog_Товары?$filter=substringof('Красный Октябрь', Производитель) eq true |
endswith(Str1, Str2) | Возвращает true в том случае, если Str1 заканчивается на Str2. | /Catalog_Товары?$filter=endswith(Производитель, 'ООО') eq true |
startswith(Str1, Str2) | Возвращает true в том случае, если Str1 начинается на Str2. | /Catalog_Товары?$filter=startswith(Производитель, 'ООО') eq true |
substring(Str, Int1) substring(Str, Int1, Int2) | Возвращает подстроку из Str1. В варианте с двумя параметрами возвращается строка с позиции Int и до конца строки. В варианте с тремя параметрами возвращается подстрока, начиная с позиции Int1 и длиной Int2. | /Catalog_Поставщики?$filter=substring(ИНН, 1, 2) eq '77' |
concat(Str1, Str2) | Возвращает строку, являющуюся результатом конкатенации Str1 и Str2. | /Catalog_Поставщик?$filter=concat(concat(Город, ', '), Страна) eq 'Москва, Россия' |
like(Str, Template) | Возвращает true, если значение Str1 удовлетворяет шаблону Template. Синтаксис шаблона аналогичен функции ПОДОБНО() языка запросов. | /Catalog_Товары?$filter= like(Наименование, ‘[^к]%’) |
- функции для работы с датами:
Функция | Описание | Пример |
---|---|---|
year(DateTime) | Возвращает год из значения типа Edm.DateTime или Edm.DateTimeOffset. | /Catalog_Товары?$filter=year(Произведен) eq 2013 |
quarter(DateTime) | Номер квартала года, в котором находится указанное значение типа Edm.DateTime. | /Catalog_Товары?$filter=quarter(ДатаПроизводства) eq 1 |
month(DateTime) | Возвращает месяц из значения типа Edm.DateTime или Edm.DateTimeOffset. | /Catalog_Товары?$filter=month(Произведен) eq 12 |
Имеется возможность выполнять отбор сущностей при помощи проверки на равенство поля составного типа и ссылки. Для этого следует использовать функцию cast(). Пример:
$filter=Файл eq cast(guid'8b99d633-0ccb-11ed-80cd-00505681789e','Catalog_ОтпускПоУходуЗаРебенкомПрисоединенныеФайлы')
В данном примере у используемой сущности Catalog_ОтпускПоУходуЗаРебенкомПрисоединенныеФайлы имеет реквизит составного типа Файл. Запрос будет отбирать все записи сущности, у которой данный реквизит заполнен ссылкой на Catalog_ОтпускПоУходуЗаРебенкомПрисоединенныеФайлы с указанным уникальным идентификатором (8b99d633-0ccb-11ed-80cd-00505681789e).
Если требуется выполнить отбор по реквизиту типа УникальныйИдентификатор, то это выполняется с помощью простой операции сравнения.
Пример:
$filter=ИмяРеквизита eq guid'8b99d633-0ccb-11ed-80cd-00505681789e'
При необходимости выполнить отбор по элементу коллекции, необходимо использовать лямбда-функции. В качестве аргументов лямбда-функции высутпает имя лямбда-переменной, за которой следует символ двоеточия и логическое выражение, которое использует лямбда-переменную для указания на свойства элемента коллекции.
Система поддерживает использование следующих лямбда-функций:
-
any – применяет логическое выражение к каждому элементу коллекции и возвращает значение true, если хоть один элемент коллекции удовлетворяет этому условию. Лямбда-функция any без аргументов возвращает true, если коллекция не пуста. Пример: http://host/base/odata/standard.odata/Document_Продажи?$filter=Товары/any(d: d/Цена gt 10000)
В приведенном примере формируется список документов Продажи, у которых есть табличная часть Товары, в которой есть реквизит Цена. При этом Цена должна быть больше, чем 10000. В результирующий список попадут документы, в состав которых входит хотя бы одна строка, удовлетворяющая условию. -
all – применяет логическое выражение к каждому элементу коллекции и возвращает значение true, если все элементы коллекции ему удовлетворяет. Пример:
http://host/base/odata/standard.odata/Document_Продажи?$filter=Товары/all(d: d/Цена lt 10000) В приведенном примере формируется список документов Продажи, у которых есть табличная часть Товары, в которой есть реквизит Цена. При этом Цена должна быть меньше, чем 10000. В результирующий список попадут документы, в составе которых все строки удовлетворяют заданному условию.
Не поддерживаются следующие стандартные функции: lenght, indexof, replace, tolower, toupper, trim, years, days, hours, seconds, floor, ceiling. -
$top
Имеется возможность ограничить количество записей, возвращаемых при обращении к ресурсу. Для этого используется параметр $top. Пример:
http://host/odata/standard.odata/Document_Отпуск$filter=Date gt datetime'2022-05-01T00:00:00'&$top=10
?$format=json