Добавление сделки (лида, счета, компреда) с товарами, с применением скидок и налогов
Описание
Примеры создания различных сущностей с одновременным добавленем товаров к ним. Добавляемый товар берётся из Битрикс24 с ценой больше нуля. Все примеры добавляют товар в максимально возможном количестве вариаций, около каждой вариации есть мини комментарий с описанием какими дополнительными условиями будет отображаться товар.
Внимание! Для использования примера настройте работу класса CRest и подключите файл crest.php в файлах, где используется данный класс. Подробнее.
Прикрепление товаров к сделке
<? $resultProduct = CRest::call( 'crm.product.list', [ 'filter' => [ '>PRICE' => 0, ] ] ); if (empty($resultProduct['result'])) { echo 'product error, create product in b24'; exit; } else { $arProduct = $resultProduct['result'][0]; } //Deal product $resultDeal = CRest::call( 'crm.deal.add', [ 'fields' => [ 'TITLE' => 'Example', ] ] ); if ($ID = $resultDeal['result']) { $result = CRest::call( 'crm.deal.productrows.set', [ 'id' => $ID, 'rows' => [ [//product with auto calc tax 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'N', 'QUANTITY' => 1 ], [//product with tax include 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'Y', 'QUANTITY' => 1 ], [//product with discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with a real discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'] - 100, 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], [//product with real discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'] - ($arProduct['PRICE'] * 0.1), 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], ] ] ); } else { echo 'error create deal'; exit; } ?>
Прикрепление товаров к лиду
<? $resultProduct = CRest::call( 'crm.product.list', [ 'filter' => [ '>PRICE' => 0, ] ] ); if (empty($resultProduct['result'])) { echo 'product error, create product in b24'; exit; } else { $arProduct = $resultProduct['result'][0]; } //Lead product $resultLead = CRest::call( 'crm.lead.add', [ 'fields' => [ 'TITLE' => 'Example', ] ] ); if ($ID = $resultLead['result']) { $result = CRest::call( 'crm.lead.productrows.set', [ 'id' => $ID, 'rows' => [ [//product with auto calc tax 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'N', 'QUANTITY' => 1 ], [//product with tax include 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'Y', 'QUANTITY' => 1 ], [//product with discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with a real discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'] - 100, 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], [//product with real discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'] - ($arProduct['PRICE'] * 0.1), 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], ] ] ); } else { echo 'error create lead'; exit; } ?>
Создание счёта с товарами
<? $resultProduct = CRest::call( 'crm.product.list', [ 'filter' => [ '>PRICE' => 0, ] ] ); if (empty($resultProduct['result'])) { echo 'product error, create product in b24'; exit; } else { $arProduct = $resultProduct['result'][0]; } $resultCompany = CRest::call( 'crm.company.add', [ 'fields' => [ 'TITLE' => 'Example', ] ] ); if ($iCompanyID = $resultCompany['result']) { $resultInvoice = CRest::call( 'crm.invoice.add', [ 'fields' => [ 'ORDER_TOPIC' => 'Invoice by company with product', 'UF_COMPANY_ID' => $iCompanyID, 'PERSON_TYPE_ID' => 1,//1 is company in CRest::call('crm.persontype.list') 'PAY_SYSTEM_ID' => 20,//some in CRest::call('sale.paysystem.list') 'STATUS_ID' => 'N', 'DATE_INSERT' => date(DATE_ATOM), 'DATE_BILL' => date(DATE_ATOM), 'DATE_PAY_BEFORE' => date(DATE_ATOM, time() + 3600 * 24 * 20),//20 day pay 'PRODUCT_ROWS' => [ [//product with tax 'PRODUCT_ID' => $arProduct['ID'], 'PRODUCT_NAME' => $arProduct['NAME'], 'PRICE' => $arProduct['PRICE'] + ($arProduct['PRICE'] * 0.15), 'VAT_RATE' => 0.15, 'QUANTITY' => 1 ], [//product with discount sum, percent not supported 'PRODUCT_ID' => $arProduct['ID'], 'PRODUCT_NAME' => $arProduct['NAME'], 'PRICE' => $arProduct['PRICE'], 'DISCOUNT_PRICE' => 100, 'QUANTITY' => 1 ], [//product with real discount sum, percent not supported 'PRODUCT_ID' => $arProduct['ID'], 'PRODUCT_NAME' => $arProduct['NAME'], 'PRICE' => $arProduct['PRICE'] - 100, 'DISCOUNT_PRICE' => 100, 'QUANTITY' => 1 ], ], ] ] ); } ?>
Прикрепление товаров к компред
<? $resultProduct = CRest::call( 'crm.product.list', [ 'filter' => [ '>PRICE' => 0, ] ] ); if (empty($resultProduct['result'])) { echo 'product error, create product in b24'; exit; } else { $arProduct = $resultProduct['result'][0]; } $resultCompany = CRest::call( 'crm.company.add', [ 'fields' => [ 'TITLE' => 'Example', ] ] ); if ($iCompanyID = $resultCompany['result']) { $resultQuote = CRest::call( 'crm.quote.add', [ 'fields' => [ "TITLE" => "Quote by company with product", "OPENED" => "Y", "ASSIGNED_BY_ID" => 1, "CURRENCY_ID" => "USD", "BEGINDATE" => date(DATE_ATOM), "CLOSEDATE" => date(DATE_ATOM, time() + 3600 * 24 * 20),//20 day 'COMPANY_ID' => $iCompanyID, 'STATUS_ID' => 'N', ] ] ); if ($ID = $resultQuote['result']) { $result = CRest::call( 'crm.quote.productrows.set', [ 'id' => $ID, 'rows' => [ [//product with auto calc tax 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'N', 'QUANTITY' => 1 ], [//product with tax include 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'TAX_RATE' => 15, 'TAX_INCLUDED' => 'Y', 'QUANTITY' => 1 ], [//product with discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'], 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with a real discount 'PRODUCT_ID' => $arProduct['ID'], 'PRICE' => $arProduct['PRICE'] - 100, 'DISCOUNT_SUM' => 100, 'DISCOUNT_TYPE_ID' => 1,//is sum discount type 'QUANTITY' => 1 ], [//product with discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'], 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], [//product with real discount percent 'PRODUCT_ID' => $arProduct['ID'], 'PRICE_EXCLUSIVE' => $arProduct['PRICE'] - ($arProduct['PRICE'] * 0.1), 'DISCOUNT_RATE' => 10, 'DISCOUNT_TYPE_ID' => 2,//is percent discount type 'QUANTITY' => 1 ], ] ] ); } else { echo 'Error create quote'; } } else { echo 'Error create company'; } ?>
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
В дальнейшей работе с товарами REST API Битрикс24 возвращает полезные параметры цены товарных позиций:
PRICE_EXCLUSIVE — цена без налога со скидкой PRICE_NETTO — цена без налога и без скидки PRICE_BRUTTO — цена с налогом без скидки PRICE — итоговая цена позиции с налогом и со скидкой Прикрепляя товары к сделке \ лиду описанными выше способами, хоть и, действительно, параметр итоговой цены PRICE можно не указывать (в интерфейсе он рассчитается автоматически), тем не менее, в дальнейшей работе с товарами по REST вам будут возвращать его значение, равное 0. Поэтому лучше его, всё-таки, указывать:
| ||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.