Как получить список поставщиков
Scope:
crmКто может выполнять метод: пользователи с правом просмотра контактов или компаний в CRM
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Поставщики — это контакты и компании CRM с признаком системной категории:
CATALOG_CONTRACTOR_CONTACT— для контакта,CATALOG_CONTRACTOR_COMPANY— для компании.
Чтобы получить список поставщиков, последовательно выполним два метода:
- crm.category.list — получим идентификатор категории для контакта или компании.
- crm.item.list — получим список поставщиков по фильтру.
1. Получим идентификатор категории поставщика
Используем метод crm.category.list с параметрами:
entityTypeId— идентификатор типа объекта CRM. Укажем3для контактов. Для компаний используйте4.filter[code]— фильтр по коду категории. УкажемCATALOG_CONTRACTOR_CONTACTдля контакта. Для компаний используйтеCATALOG_CONTRACTOR_COMPANY.
Как использовать примеры в документации
import { B24Hook } from '@bitrix24/b24jssdk'
const $b24 = B24Hook.fromWebhookUrl(process.env.B24_HOOK)
// B24_HOOK = 'https://your-domain.bitrix24.ru/rest/USER_ID/TOKEN/'
const result = await $b24.actions.v2.call.make({
method: 'crm.category.list',
params: {
entityTypeId: 3,
filter: {
code: 'CATALOG_CONTRACTOR_CONTACT'
}
}
});
console.log(result.getData().result);
require_once 'vendor/autoload.php';
use Bitrix24\SDK\Services\ServiceBuilderFactory;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('b24');
$logger->pushHandler(new StreamHandler('php://stdout'));
$serviceBuilder = (new ServiceBuilderFactory(new EventDispatcher(), $logger))
->initFromWebhook('https://your-domain.bitrix24.ru/rest/USER_ID/TOKEN/');
$result = $serviceBuilder->core->call(
'crm.category.list',
[
'entityTypeId' => 3,
'filter' => [
'code' => 'CATALOG_CONTRACTOR_CONTACT'
]
]
);
from b24pysdk import BitrixWebhook, Client
client = Client(
BitrixWebhook(
domain="your-domain.bitrix24.com",
webhook_token="user_id/webhook_key",
)
)
result = client.crm.category.list(
entity_type_id=3,
).response.result
categories = [
category
for category in result.get("categories", [])
if category.get("code") == "CATALOG_CONTRACTOR_CONTACT"
]
print(categories)
В результате получим идентификатор категории. В примере id:15. Идентификатор может отличаться на разных Битрикс24.
{
"result": {
"categories": [
{
"id": 15,
"name": "Контакты поставщика",
"entityTypeId": 3,
"isSystem": "Y",
"code": "CATALOG_CONTRACTOR_CONTACT"
}
]
}
}
2. Получим список поставщиков
Отфильтруем элементы методом crm.item.list с параметрами:
-
entityTypeId— идентификатор типа объекта CRM. Укажем3для контактов. Для компаний используйте4. -
select— список полей для вывода. Все доступные поля можно получить методом crm.item.fields. -
filter[categoryId]- идентификатор системной категории из шага 1. В примере15.
const result = await $b24.actions.v2.call.make({
method: 'crm.item.list',
params: {
entityTypeId: 3,
select: ['id', 'name', 'lastName', 'categoryId'],
filter: {
categoryId: 15
}
}
});
console.log(result.getData().result);
$result = $serviceBuilder->getCRMScope()->item()->list(
3,
[],
[
'categoryId' => 15
],
['id', 'name', 'lastName', 'categoryId']
);
result = client.crm.item.list(
entity_type_id=3,
select=["id", "name", "lastName", "categoryId"],
filter={
"categoryId": 15,
},
).response.result
В результате получим список контактов, которые являются поставщиками.
{
"result": {
"items": [
{
"id": 2185,
"name": "Он",
"lastName": null,
"categoryId": 15
},
{
"id": 2443,
"name": "Иван",
"lastName": "Иванов",
"categoryId": 15
}
]
},
"total": 2
}
Идентификаторы поставщиков, в примере id: 2185 и id: 2443, используйте в методе складского учета catalog.documentcontractor.add.
Пример кода
import { B24Hook } from '@bitrix24/b24jssdk'
const $b24 = B24Hook.fromWebhookUrl(process.env.B24_HOOK)
// B24_HOOK = 'https://your-domain.bitrix24.ru/rest/USER_ID/TOKEN/'
var entityTypeId = 3; // 3 - контакт; для компании укажите 4
var categoryCode = 'CATALOG_CONTRACTOR_CONTACT'; // для компании укажите CATALOG_CONTRACTOR_COMPANY
const resultCategory = await $b24.actions.v2.call.make({
method: 'crm.category.list',
params: {
entityTypeId: entityTypeId,
filter: { code: categoryCode }
}
});
if (!resultCategory.isSuccess) {
console.error(resultCategory.getErrorMessages().join('; '));
} else {
var categories = resultCategory.getData().result.categories || [];
if (!categories.length) {
console.error('Категория поставщиков не найдена');
} else {
var categoryId = categories[0].id;
const resultItems = await $b24.actions.v2.call.make({
method: 'crm.item.list',
params: {
entityTypeId: entityTypeId,
select: ['id', 'name', 'lastName', 'categoryId'],
filter: { categoryId: categoryId },
order: { ID: 'DESC' }
}
});
if (!resultItems.isSuccess) {
console.error(resultItems.getErrorMessages().join('; '));
} else {
console.log(resultItems.getData().result);
}
}
}
require_once 'vendor/autoload.php';
use Bitrix24\SDK\Services\ServiceBuilderFactory;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('b24');
$logger->pushHandler(new StreamHandler('php://stdout'));
$serviceBuilder = (new ServiceBuilderFactory(new EventDispatcher(), $logger))
->initFromWebhook('https://your-domain.bitrix24.ru/rest/USER_ID/TOKEN/');
$entityTypeId = 3; // 3 - контакт; для компании укажите 4
$categoryCode = 'CATALOG_CONTRACTOR_CONTACT'; // для компании укажите CATALOG_CONTRACTOR_COMPANY
try {
$resultCategory = $serviceBuilder->core->call(
'crm.category.list',
[
'entityTypeId' => $entityTypeId,
'filter' => [
'code' => $categoryCode
]
]
);
$categories = $resultCategory->getResponseData()->getResult()['categories'] ?? [];
if (empty($categories)) {
echo 'Категория поставщиков не найдена';
return;
}
$categoryId = $categories[0]['id'];
$resultItems = $serviceBuilder->getCRMScope()->item()->list(
$entityTypeId,
[
'ID' => 'DESC'
],
[
'categoryId' => $categoryId
],
['id', 'name', 'lastName', 'categoryId']
);
print_r($resultItems->getItems());
} catch (\Throwable $e) {
echo $e->getMessage();
}
from b24pysdk import BitrixWebhook, Client
from b24pysdk.errors import BitrixAPIError
client = Client(
BitrixWebhook(
domain="your-domain.bitrix24.com",
webhook_token="user_id/webhook_key",
)
)
entity_type_id = 3
category_code = (
"CATALOG_CONTRACTOR_CONTACT"
if entity_type_id == 3
else "CATALOG_CONTRACTOR_COMPANY"
)
try:
categories_response = client.crm.category.list(
entity_type_id=entity_type_id,
).response.result.get("categories", [])
categories = [
category
for category in categories_response
if category.get("code") == category_code
]
except BitrixAPIError as error:
print(error)
else:
if not categories:
print("Категория поставщиков не найдена")
else:
try:
items_result = client.crm.item.list(
entity_type_id=entity_type_id,
select=["id", "name", "lastName", "categoryId"],
filter={"categoryId": categories[0]["id"]},
order={"ID": "DESC"},
).response.result
except BitrixAPIError as error:
print(error)
else:
print(items_result)