Блог Горошко Андрея Bitrix24,PHP Сохранить товарную позицию объекта CRM crm.item.productrow.set

Сохранить товарную позицию объекта CRM crm.item.productrow.set

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Сохранить товарную позицию объекта CRM crm.item.productrow.set», проанализируем лучшие практики и покажем, как правильно использовать crm.item.productrow.set в реальных задачах.

Сохранить товарную позицию объекта CRM crm.item.productrow.set

> Scope: crm
>
> Кто может выполнять метод: требуется право на изменение объекта CRM, товарная позиция которого устанавливается

Метод сохраняет товарную позицию объекта CRM. Обратите внимание, что метод перезапишет все уже существующие товарные позиции, привязанные к объекту. Таким образом, метод заменяет уже существующие товарные позиции на те, что были присланы.

Параметры метода

Название
тип
Описание
ownerId
integer
Идентификатор объекта CRM
ownerType
string
Идентификатор типа объекта CRM. Передавайте Краткий символьный код типа
productRows*
object[]
Массив объектов с информацией о товарных позициях, которые нужно сохранить в объекте

Параметр productRows

Название
тип
Описание
productId
catalog_product.id
Идентификатор товара из каталога
productName
string
Название товара в товарной позиции.
Если не передано и передано значение productId, то используется название товара из каталога товаров
price
double
Цена за единицу товарной позиции с учетом скидок и налогов
quantity
double
Количество товара.
По умолчанию — 1
discountTypeId
integer
Тип скидки.
Возможные значения:
— 1 — абсолютное значение
— 2 — процентное значение
По умолчанию — 2
discountRate
double
Значение скидки в процентах (если используется тип скидки с процентным значением)
discountSum
double
Абсолютное значение скидки (если используется тип скидки с абсолютным значением)
taxRate
double
Ставка налога в процентах
taxIncluded
string
Индикатор того, включен ли налог в стоимость.
Возможные значения:
— Y – налог включен
— N – налог не включен
По умолчанию — N
measureCode
catalog_measure.code
Код единицы измерения.
Если не передано и передано значение productId, то используется единица измерения из каталога товаров
sort
integer
Сортировка

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"ownerType":"D","ownerId":13143,"productRows":[{"productId":9621,"price":99999.99,"quantity":1,"sort":10},{"productId":9623,"price":15900,"quantity":2,"sort":10}]}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.productrow.set
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"ownerType":"D","ownerId":13143,"productRows":[{"productId":9621,"price":99999.99,"quantity":1,"sort":10},{"productId":9623,"price":15900,"quantity":2,"sort":10}],"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/crm.item.productrow.set
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		'crm.item.productrow.set', {
    			ownerType: 'D',
    			ownerId: 13143,
    			productRows: [{
    					productId: 9621,
    					price: 99999.99,
    					quantity: 1,
    					sort: 10,
    				},
    				{
    					productId: 9623,
    					price: 15900.00,
    					quantity: 2,
    					sort: 10,
    				},
    
    			],
    		}
    	);
    	
    	const result = response.getData().result;
    	console.log(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'crm.item.productrow.set',
                [
                    'ownerType'   => 'D',
                    'ownerId'     => 13143,
                    'productRows' => [
                        [
                            'productId' => 9621,
                            'price'     => 99999.99,
                            'quantity'  => 1,
                            'sort'      => 10,
                        ],
                        [
                            'productId' => 9623,
                            'price'     => 15900.00,
                            'quantity'  => 2,
                            'sort'      => 10,
                        ],
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error setting product rows: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        'crm.item.productrow.set', {
            ownerType: 'D',
            ownerId: 13143,
            productRows: [{
                    productId: 9621,
                    price: 99999.99,
                    quantity: 1,
                    sort: 10,
                },
                {
                    productId: 9623,
                    price: 15900.00,
                    quantity: 2,
                    sort: 10,
                },

            ],
        },
        function(result) {
            if (result.error()) {
                console.error(result.error());
            } else {
                console.log(result.data());
            }
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'crm.item.productrow.set',
        [
            'ownerType' => 'D',
            'ownerId' => 13143,
            'productRows' => [
                [
                    'productId' => 9621,
                    'price' => 99999.99,
                    'quantity' => 1,
                    'sort' => 10,
                ],
                [
                    'productId' => 9623,
                    'price' => 15900.00,
                    'quantity' => 2,
                    'sort' => 10,
                ]
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Ответ в случае успеха

HTTP-статус: 200

{
   "result":{
      "productRows":[
         {
            "id":17654,
            "ownerId":13143,
            "ownerType":"D",
            "productId":9621,
            "productName":"iphone 14",
            "price":99999.99,
            "priceAccount":99999.99,
            "priceExclusive":99999.99,
            "priceNetto":99999.99,
            "priceBrutto":99999.99,
            "quantity":1,
            "discountTypeId":2,
            "discountRate":0,
            "discountSum":0,
            "taxRate":null,
            "taxIncluded":"N",
            "customized":"Y",
            "measureCode":796,
            "measureName":"шт",
            "sort":10,
            "xmlId":"",
            "type":4
         },
         {
            "id":17655,
            "ownerId":13143,
            "ownerType":"D",
            "productId":9623,
            "productName":"iphone 10xs",
            "price":15900,
            "priceAccount":15900,
            "priceExclusive":15900,
            "priceNetto":15900,
            "priceBrutto":15900,
            "quantity":2,
            "discountTypeId":2,
            "discountRate":0,
            "discountSum":0,
            "taxRate":null,
            "taxIncluded":"N",
            "customized":"Y",
            "measureCode":796,
            "measureName":"шт",
            "sort":10,
            "xmlId":"",
            "type":4
         }
      ]
   },
   "time":{
      "start":1716895718.887229,
      "finish":1716895719.316293,
      "duration":0.4290640354156494,
      "processing":0.20114707946777344,
      "date_start":"2024-05-28T14:28:38+03:00",
      "date_finish":"2024-05-28T14:28:39+03:00"
   }
}

Возвращаемые данные

Название
тип
Описание
result
object
Корневой элемент ответа
productRow
crm_item_product_row[]
Массив объектов, содержащий информацию о всех товарных позициях объекта CRM
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
   "error":"OWNER_NOT_FOUND",
   "error_description":"Owner was not found"
}

Возможные коды ошибок

КодОписание
ENTITY_TYPE_NOT_SUPPORTEDРабота с данным типом объектов не поддерживается
ACCESS_DENIEDДоступ запрещен
OWNER_NOT_FOUNDПереданный объект CRM не найден
100Не переданы обязательные параметры
0Другие ошибки (например, фатальные ошибки)
  • [](./index)
  • [](./crm-item-productrow-add)
  • [](./crm-item-productrow-fields)
  • [](./crm-item-productrow-get)
  • [](./crm-item-productrow-update)
  • [](./crm-item-productrow-get-available-for-payment)
  • [](./crm-item-productrow-list)
  • [](./crm-item-productrow-delete)

💡 Экспертное мнение и рекомендации

Ключевые выводы по теме «Сохранить товарную позицию объекта CRM crm.item.productrow.set»:

Использование современных стандартов D7 при работе с crm.item.productrow.set позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Пункт редактирования блока LANDING_BLOCKПункт редактирования блока LANDING_BLOCK

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Пункт редактирования блока LANDING_BLOCK», проанализируем лучшие практики и

Добавить единицу измерения crm.measure.addДобавить единицу измерения crm.measure.add

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Добавить единицу измерения crm.measure.add». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции. Добавить

Получить доступные поля заказов из источников sale.tradeBinding.getFieldsПолучить доступные поля заказов из источников sale.tradeBinding.getFields

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Получить доступные поля заказов из источников sale.tradeBinding.getFields», разберем