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

Правила получения доступа к ресурсам#

Прежде чем мы начнём формирование строки доступа к ресурсу, нам необходимо знать, как обозначаются объекты «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