Как получить список поставщиков

Scope: crm

Кто может выполнять метод: пользователи с правом просмотра контактов или компаний в CRM

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Поставщики — это контакты и компании CRM с признаком системной категории:

  • CATALOG_CONTRACTOR_CONTACT — для контакта,
  • CATALOG_CONTRACTOR_COMPANY — для компании.

Чтобы получить список поставщиков, последовательно выполним два метода:

  1. crm.category.list — получим идентификатор категории для контакта или компании.
  2. crm.item.list — получим список поставщиков по фильтру.

1. Получим идентификатор категории поставщика

Используем метод crm.category.list с параметрами:

  • entityTypeId — идентификатор типа объекта CRM. Укажем 3 для контактов. Для компаний используйте 4.
  • filter[code] — фильтр по коду категории. Укажем CATALOG_CONTRACTOR_CONTACT для контакта. Для компаний используйте CATALOG_CONTRACTOR_COMPANY.

Как использовать примеры в документации

BX24.callMethod(
            'crm.category.list',
            {
                entityTypeId: 3,
                filter: {
                    code: 'CATALOG_CONTRACTOR_CONTACT'
                }
            },
            function(result) {
                console.log(result.data());
            }
        );
        
require_once('crest.php');
        
        $result = CRest::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.

BX24.callMethod(
            'crm.item.list',
            {
                entityTypeId: 3,
                select: ['id', 'name', 'lastName', 'categoryId'],
                filter: {
                    categoryId: 15
                }
            },
            function(result) {
                console.log(result.data());
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'crm.item.list',
            [
                'entityTypeId' => 3,
                'select' => ['id', 'name', 'lastName', 'categoryId'],
                'filter' => [
                    'categoryId' => 15
                ]
            ]
        );
        
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.

Пример кода

var entityTypeId = 3; // 3 - контакт; для компании укажите 4
        var categoryCode = 'CATALOG_CONTRACTOR_CONTACT'; // для компании укажите CATALOG_CONTRACTOR_COMPANY
        
        BX24.callMethod(
            'crm.category.list',
            {
                entityTypeId: entityTypeId,
                filter: { code: categoryCode }
            },
            function(resultCategory) {
                if (resultCategory.error()) {
                    console.error(resultCategory.error() + ': ' + resultCategory.error_description());
                    return;
                }
        
                var categories = resultCategory.data().categories || [];
                if (!categories.length) {
                    console.error('Категория поставщиков не найдена');
                    return;
                }
        
                var categoryId = categories[0].id;
        
                BX24.callMethod(
                    'crm.item.list',
                    {
                        entityTypeId: entityTypeId,
                        select: ['id', 'name', 'lastName', 'categoryId'],
                        filter: { categoryId: categoryId },
                        order: { ID: 'DESC' }
                    },
                    function(resultItems) {
                        if (resultItems.error()) {
                            console.error(resultItems.error() + ': ' + resultItems.error_description());
                        } else {
                            console.log(resultItems.data());
                        }
                    }
                );
            }
        );
        
require_once('crest.php');
        
        $entityTypeId = 3; // 3 - контакт; для компании укажите 4
        $categoryCode = 'CATALOG_CONTRACTOR_CONTACT'; // для компании укажите CATALOG_CONTRACTOR_COMPANY
        
        $resultCategory = CRest::call(
            'crm.category.list',
            [
                'entityTypeId' => $entityTypeId,
                'filter' => [
                    'code' => $categoryCode
                ]
            ]
        );
        
        if (!empty($resultCategory['error_description'])) {
            echo $resultCategory['error_description'];
            return;
        }
        
        $categories = $resultCategory['result']['categories'] ?? [];
        if (empty($categories)) {
            echo 'Категория поставщиков не найдена';
            return;
        }
        
        $categoryId = $categories[0]['id'];
        
        $resultItems = CRest::call(
            'crm.item.list',
            [
                'entityTypeId' => $entityTypeId,
                'select' => ['id', 'name', 'lastName', 'categoryId'],
                'filter' => [
                    'categoryId' => $categoryId
                ],
                'order' => [
                    'ID' => 'DESC'
                ]
            ]
        );
        
        if (!empty($resultItems['error_description'])) {
            echo $resultItems['error_description'];
        } else {
            print_r($resultItems['result']);
        }
        
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)