Нажмите на [+], чтобы раскрыть детальное описание массива
|
---|
[ 'ORDER' => {Bitrix\Sale\Order}, // объект заказа, к которому привязан чек 'PAYMENTS' => [ // массив оплат [ 'ENTITY' => {Bitrix\Sale\Payment}, // объект оплаты 'IS_CASH' => "N", // тип документа оплаты: наличные/безналичные (оставлен для совместимости). // Правильнее опираться на поле с ключом TYPE 'TYPE' => "cashless", // тип документа оплаты: принимает одно из значений: cash (наличные), //cashless (безналичные), advance (аванс), credit (кредит) 'SUM' => 1400, // сумма документа оплаты ] ], 'PRODUCTS' => [ // список товарных позиций [ 'ENTITY' => {Bitrix\Sale\BasketItem}, // объект элемента корзин 'PRODUCT_ID' => "176", // ID продукта 'NAME' => "Футболка Женский Соблазн", // название 'BASE_PRICE' => 849, // цена без учета скидок и наценок за единицу 'PRICE' => 1099, // цена с учетом скидок и наценок за единицу 'SUM' => 1099, // общая цена с учетом количества 'QUANTITY' => 1, // количество 'VAT' => 0, // ID налоговой ставки 'DISCOUNT' => [ // информация о скидках 'PRICE' => -250, // величина скидки (отрицательное значение – наценка, // положительная – скидка) 'TYPE' => "C", // тип скидки: С-абсолютная ], 'PAYMENT_OBJECT' => \Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_COMMODITY //тип предмета расчета* ] ], 'DELIVERY' => [ // список отгрузок [ 'ENTITY' => {Bitrix\Sale\Shipment}, // объект отгрузки 'NAME' => "Доставка", // название 'BASE_PRICE' => 301, // цена без учета скидок и наценок за единицу 'PRICE' => 301, // цена с учетом скидок и наценок за единицу 'SUM' => 301, // общая цена с учетом количества 'QUANTITY' => 1, // количество (всегда равняется 1) 'VAT' => 1, // ID налоговой ставки 'PAYMENT_OBJECT' => \Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_SERVICE //тип предмета расчета* ] ], 'BUYER' => [ // информация о покупателе 'EMAIL' => "admin-aladin@aladin.loc", // email 'PHONE' => "90979648725", // телефон ], 'TOTAL_SUM' => 1400 // общая сумма чека ]* – ключ PAYMENT_OBJECT доступен с версии 18.5.10, его возможные значения:
|
События работы с кассами и чеками
Метод | Описание | С версии |
---|---|---|
OnSaleCheckPrepareData | Событие позволяет поменять какие-либо данные в чеке: поменять название товара, убрать товары с 0 стоимостью и т.д. На вход передается 2 параметра:
// удаление доставки с 0 стоимостью AddEventHandler("sale", "OnSaleCheckPrepareData", "CheckProductPrint"); function CheckProductPrint($a, $type) { if ($a['DELIVERY']['SUM'] == 0) unset($a['DELIVERY']); return $a; } | |
OnGetCustomCashboxHandlers | Событие срабатывает на момент формирования списка обработчиков касс. Позволяет добавить свой обработчик кассы.
// добавление своего обработчика кассы AddEventHandler("sale", "OnGetCustomCashboxHandlers", "GetCustomCashboxHandlers"); function GetCustomCashboxHandlers() { $data = array('\Bitrix\Sale\Cashbox\cashboxnew' => '/bitrix/php_interface/include/cashboxnew.php'); $event = new Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $data); return $event; } | |
OnGetCustomCheckList | Событие срабатывает на момент формирования списка поддерживаемых чеков. Позволяет добавить свой тип чека.
// добавление своего типа чека AddEventHandler("sale", "OnGetCustomCheckList", "GetCustomCheckList"); function GetCustomCheckList() { $data = array('\Bitrix\Sale\Cashbox\SellExCheck' => '/bitrix/php_interface/include/sellexcheck.php'); $event = new Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $data); return $event; } | |
OnPrintableCheckSend | Событие позволяет переопределить стандартный механизм отправки уведомления о печати чека. На вход передается 2 параметра: объект оплаты, по которой печатается чек и объект чека, который будет напечатан.
// переопределение стандартного механизма печати чека AddEventHandler("sale", "OnPrintableCheckSend", "PrintableCheckSend"); function PrintableCheckSend() { /* Отправка чека по СМС */ $event = new Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS); return $event; } | |
onSaleCashboxRestrictionsClassNamesBuildList | Событие позволяет добавлять свои ограничения в кассы.
onSaleCashboxRestrictionsClassNamesBuildList // добавление своего типа чека AddEventHandler("sale", "onSaleCashboxRestrictionsClassNamesBuildList", "GetSaleCashboxRestrictionsClassNamesBuildList"); function GetSaleCashboxRestrictionsClassNamesBuildList() { $data = array( '\Bitrix\Sale\Cashbox\Restrictions\Site' => '/bitrix/php_interface/include/site.php' ); $event = new Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $data); return $event; } | |
OnCheckCollateDocuments | Событие предназначено для реализации собственной логики генерации чеков в автоматическом режиме.
Рассмотрим на примере: при сумме заказа больше 10000 вносится предоплата. Оплата оставшейся суммы происходит после проверки заказа менеджером. У этого заказа будет несколько оплат. Итак, для первой оплаты необходимо печатать чек аванса, а для второй – полная оплата с учетом аванса. В упрощенном виде это будет выглядеть так: AddEventHandler("sale", "OnCheckCollateDocuments", "OnCheckCollateDocuments"); function OnCheckCollateDocuments($entities) { foreach ($entities as $entity) { if ($entity instanceof \Bitrix\Sale\Payment) { $order = $entity->getCollection()->getOrder(); if ($order->isPaid()) { $related = []; foreach ($entity->getCollection() as $payment) { if ($payment->getId() != $entity->getId()) { $related[\Bitrix\Sale\Cashbox\Check::PAYMENT_TYPE_ADVANCE][] = $payment; } } foreach ($order->getShipmentCollection() as $shipment) { if (!$shipment->isSystem()) { $related[\Bitrix\Sale\Cashbox\Check::SHIPMENT_TYPE_NONE][] = $shipment; } } return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, [ [ 'TYPE' => 'sell', 'ENTITIES' => [$entity], 'RELATED_ENTITIES' => $related ] ] ); } else { if ($entity->isPaid() && !$order->isPaid()) { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, [ [ 'TYPE' => 'advancepayment', 'ENTITIES' => [$entity], 'RELATED_ENTITIES' => [] ] ] ); } } } } } |
Александр Карпов
|
||||
В PAYMENTS может не быть объекта оплаты, например вместо
| ||||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.