При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Получить бронирования ресурсов по фильтру calendar.resource.booking.list», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.
Получить бронирования ресурсов по фильтру calendar.resource.booking.list
> Scope: calendar
>
> Кто может выполнять метод: любой пользователь
Метод получает бронирования ресурсов по фильтру.
Параметры метода
Названиетип | Описание |
|---|---|
filterobject | Поля фильтра |
Параметр filter
Названиетип | Описание |
|---|---|
resourceTypeIdListarray | Cписок идентификаторов ресурсов. Получить идентификаторы можно методом calendar.resource.list |
fromdate | Дата начала периода |
todate | Дата окончания периода |
resourceIdList*array | Список идентификаторов бронирований ресурсов из пользовательского поля типа resourcebooking у лидов или сделок в CRM.Получить идентификаторы можно: Узнать какие пользовательские поля имеют тип |
В методе calendar.resource.booking.list необходимо использовать только один из двух обязательных параметров: resourceTypeIdList или resourceIdList. Вместе эти параметры использовать нельзя.
Примеры кода
Пример 1. Оценить занятость ресурсов за период, например, для создания собственных представлений занятости или для использования в логике приложения.
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"resourceTypeIdList":[10852,10888,10873,10871,10853],"from":"2024-06-20","to":"2024-08-20"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/calendar.resource.booking.list- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"resourceTypeIdList":[10852,10888,10873,10871,10853],"from":"2024-06-20","to":"2024-08-20"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/calendar.resource.booking.list- JS
// callListMethod рекомендуется использовать, когда необходимо получить весь набор списочных данных и объём записей относительно невелик (до примерно 1000 элементов). Метод загружает все данные сразу, что может привести к высокой нагрузке на память при работе с большими объемами.
try {
const response = await $b24.callListMethod(
'calendar.resource.booking.list',
{
filter: {
resourceTypeIdList: [10852, 10888, 10873, 10871, 10853],
from: '2024-06-20',
to: '2024-08-20',
}
},
(progress) => { console.log('Progress:', progress) }
);
const items = response.getData() || [];
for (const entity of items) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}
// fetchListMethod предпочтителен при работе с крупными наборами данных. Метод реализует итеративную выборку с использованием генератора, что позволяет обрабатывать данные по частям и эффективно использовать память.
try {
const generator = $b24.fetchListMethod('calendar.resource.booking.list', {
filter: {
resourceTypeIdList: [10852, 10888, 10873, 10871, 10853],
from: '2024-06-20',
to: '2024-08-20',
}
}, 'ID');
for await (const page of generator) {
for (const entity of page) { console.log('Entity:', entity); }
}
} catch (error) {
console.error('Request failed', error);
}
// callMethod предоставляет ручной контроль над процессом постраничного получения данных через параметр start. Подходит для сценариев, где требуется точное управление пакетами запросов. Однако при больших объемах данных может быть менее эффективным по сравнению с fetchListMethod.
try {
const response = await $b24.callMethod('calendar.resource.booking.list', {
filter: {
resourceTypeIdList: [10852, 10888, 10873, 10871, 10853],
from: '2024-06-20',
to: '2024-08-20',
}
}, 0);
const result = response.getData().result || [];
for (const entity of result) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}- PHP
try {
$response = $b24Service
->core
->call(
'calendar.resource.booking.list',
[
'filter' => [
'resourceTypeIdList' => [10852, 10888, 10873, 10871, 10853],
'from' => '2024-06-20',
'to' => '2024-08-20',
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
// Нужная вам логика обработки данных
processData($result);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error fetching resource booking list: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'calendar.resource.booking.list',
{
filter: {
resourceTypeIdList: [10852, 10888, 10873, 10871, 10853],
from: '2024-06-20',
to: '2024-08-20',
}
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'calendar.resource.booking.list',
[
'filter' => [
'resourceTypeIdList' => [10852, 10888, 10873, 10871, 10853],
'from' => '2024-06-20',
'to' => '2024-08-20'
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Пример 2. Выбрать бронирования по их идентификаторам из пользовательских полей CRM сущности.
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"resourceIdList":[10,18,17]}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/calendar.resource.booking.list- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"resourceIdList":[10,18,17]},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/calendar.resource.booking.list- JS
// callListMethod рекомендуется использовать, когда необходимо получить весь набор списочных данных и объём записей относительно невелик (до примерно 1000 элементов). Метод загружает все данные сразу, что может привести к высокой нагрузке на память при работе с большими объемами.
try {
const response = await $b24.callListMethod(
'calendar.resource.booking.list',
{
filter: {
resourceIdList: [10, 18, 17]
}
},
(progress) => { console.log('Progress:', progress) }
)
const items = response.getData() || []
for (const entity of items) { console.log('Entity:', entity) }
} catch (error) {
console.error('Request failed', error)
}
// fetchListMethod предпочтителен при работе с крупными наборами данных. Метод реализует итеративную выборку с использованием генератора, что позволяет обрабатывать данные по частям и эффективно использовать память.
try {
const generator = $b24.fetchListMethod('calendar.resource.booking.list', {
filter: {
resourceIdList: [10, 18, 17]
}
}, 'ID')
for await (const page of generator) {
for (const entity of page) { console.log('Entity:', entity) }
}
} catch (error) {
console.error('Request failed', error)
}
// callMethod предоставляет ручной контроль над процессом постраничного получения данных через параметр start. Подходит для сценариев, где требуется точное управление пакетами запросов. Однако при больших объемах данных может быть менее эффективным по сравнению с fetchListMethod.
try {
const response = await $b24.callMethod('calendar.resource.booking.list', {
filter: {
resourceIdList: [10, 18, 17]
}
}, 0)
const result = response.getData().result || []
for (const entity of result) { console.log('Entity:', entity) }
} catch (error) {
console.error('Request failed', error)
}- PHP
try {
$response = $b24Service
->core
->call(
'calendar.resource.booking.list',
[
'filter' => [
'resourceIdList' => [10, 18, 17]
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
// Нужная вам логика обработки данных
processData($result);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error fetching resource booking list: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'calendar.resource.booking.list',
{
filter: {
resourceIdList: [10, 18, 17]
}
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'calendar.resource.booking.list',
[
'filter' => [
'resourceIdList' => [10, 18, 17]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Обработка ответа
HTTP-статус: 200
{
"result": [
{
"ID": "1408",
"PARENT_ID": "1408",
"DELETED": "N",
"CAL_TYPE": "resource",
"OWNER_ID": "0",
"NAME": "Бронирование",
"DATE_FROM": "20.12.2024 00:00:00",
"DATE_TO": "21.12.2024 00:00:00",
"TZ_FROM": "Europe/Riga",
"TZ_TO": "Europe/Riga",
"TZ_OFFSET_FROM": "7200",
"TZ_OFFSET_TO": "7200",
"DATE_FROM_TS_UTC": "1734652800",
"DATE_TO_TS_UTC": "1734739200",
"DT_SKIP_TIME": "Y",
"DT_LENGTH": 172800,
"EVENT_TYPE": "#resourcebooking#",
"CREATED_BY": "1",
"DATE_CREATE": "18.12.2024 13:55:35",
"TIMESTAMP_X": "18.12.2024 13:55:35",
"DESCRIPTION": "Услуга: some",
"IS_MEETING": false,
"MEETING_STATUS": "Y",
"MEETING_HOST": "0",
"VERSION": "1",
"SECTION_ID": "198",
"DATE_FROM_FORMATTED": "Fri Dec 20 2024",
"DATE_TO_FORMATTED": "Sat Dec 21 2024",
"SECT_ID": "198",
"RESOURCE_BOOKING_ID": "10"
},
{
"ID": "1409",
...
}
],
"time": {
"start": 1733318565.183275,
"finish": 1733318565.695058,
"duration": 0.5117831230163574,
"processing": 0.29406094551086426,
"date_start": "2024-12-04T13:22:45+00:00",
"date_finish": "2024-12-04T13:22:45+00:00"
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
resultarray | Массив объектов. Каждый объект описывает бронирование |
Объект бронирования {#booking}
Технически бронирование — это событие календаря. Метод получает набор полей, аналогичный полям события календаря. Некоторые поля остаются пустыми, так как они неактуальны для бронирования. Ниже перечислены только актуальные или заполненные поля.
Названиетип | Описание |
|---|---|
IDstring | Идентификатор бронирования |
PARENT_IDstring | Для объекта бронирования всегда равен полю ID |
DELETEDstring | Флаг показывает удалено ли бронирование. Возможные значения: — Y — бронирование удалено— N — бронирование не удалено |
CAL_TYPEstring | Тип календаря, в котором находится бронирование |
OWNER_IDstring | Для объекта бронирования всегда равно '0' |
NAMEstring | Название бронирования |
DATE_FROMdatetime | Дата начала бронирования |
DATE_TOdatetime | Дата окончания бронирования |
TZ_FROMstring | Таймзона даты начала бронирования |
TZ_TOstring | Таймзона даты окончания бронирования |
TZ_OFFSET_FROMstring | Смещение времени начала бронирования относительно UTC в секундах |
TZ_OFFSET_TOstring | Смещение времени окончания бронирования относительно UTC в секундах |
DATE_FROM_TS_UTCstring | Дата и время начала бронирования в UTC в формате timestamp |
DATE_TO_TS_UTCstring | Дата и время окончания бронирования в UTC в формате timestamp |
DT_SKIP_TIMEstring | Флаг показывает, длится ли бронирование целый день. Возможные значения: — Y — целый день— N — не целый день |
DT_LENGTHinteger | Длительность бронирования в секундах |
EVENT_TYPEstring | Тип бронирования |
CREATED_BYstring | Идентификатор пользователя, который создал бронирование |
DATE_CREATEdatetime | Дата создания бронирования |
TIMESTAMP_Xdatetime | Дата изменения бронирования |
DESCRIPTIONstring | Описание бронирования |
IS_MEETINGboolean | Для объекта бронирования всегда false |
MEETING_STATUSstring | Для объекта бронирования всегда 'Y' |
MEETING_HOSTstring | Для объекта бронирования всегда '0' |
VERSIONstring | Версия изменений бронирования |
SECTION_IDstring | Идентификатор ресурса, в котором расположено бронирование |
DATE_FROM_FORMATTEDstring | Форматированная дата начала бронирования |
DATE_TO_FORMATTEDstring | Форматированная дата окончания бронирования |
SECT_IDstring | Идентификатор ресурса, в котором расположено бронирование |
RESOURCE_BOOKING_IDinteger | Идентификатор бронирования |
Обработка ошибок
HTTP-статус: 400
{
"error": "",
"error_description": "Не задан обязательный параметр "filter['resourceTypeIdList']" для метода "calendar.resource.booking.list""
}Возможные коды ошибок
| Код | Сообщение об ошибке | Описание |
|---|---|---|
| Пустая строка | Доступ запрещен | Запрещен доступ к методу для внешних пользователей |
| Пустая строка | Не задан обязательный параметр «filter[‘resourceTypeIdList’]» для метода «calendar.resource.booking.list» | Не передан ни один из обязательных параметров: resourceTypeIdList или resourceIdList. |
- [](./index)
- [](./calendar-resource-add)
- [](./calendar-resource-update)
- [](./calendar-resource-list)
- [](./calendar-resource-delete)
💡 Экспертное мнение и рекомендации
Практические рекомендации:
- При написании кастомных компонентов для «Получить бронирования ресурсов по фильтру calendar.resource.booking.list» всегда разделяйте бизнес-логику и представление (шаблон).
- Используйте отладку SQL-запросов через конструкцию
$wpdb->last_queryили стандартный трекер Битрикса, чтобы контролировать нагрузку.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru