Битрикс: кассы, сбербанк, тип оплачиваемой продукции - Услуга

15 August 2019

Всем привет!

Небольшая вводная: есть проект, на котором нужно было организовать прием оплаты. Вот только продавались, на этом проекте, не как обычно, товары, а услуги, если быть конкретнее - курсы. Для данного проекта был заключен договор с Сбербанком, на предоставление эквайринговых услуг, установлена касса, установлен модуль эквайринга от Сбербанка.

В общем, все настроено, все работает, но есть одно но: при печати чека, для каждой позиции пишется, что это товар, а должно быть "Услуга". В настройках модуля это указано.

В процессе выяснения причин, было написано обращение в техподдержку Сбербанка, но помощи от них никакой не последовало. Была поднята тема на тостере (куда я в конце добавил решение проблемы)

Решающим шагом было общение с техподдержкой битрикса:

С версии 18.5.10 модуля интернет-магазин, в обработчике события OnSaleCheckPrepareData у товаров и доставки, в поле PAYMENT_OBJECT можно изменить тип предмета расчета
https://dev.1c-bitrix.ru/api_d7/bitrix/sale/events...
Возможные значения поля PAYMENT_OBJECT:
\Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_COMMODITY // товар
\Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_EXCISE // акциз
\Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_JOB // работа
\Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_SERVICE // услуга
\Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_PAYMENT // платеж

Последовав данной инструкции создал обработчик события:

public static function courseCheckPrepareDataHandler(array $a, string $type) : array{
if(!empty($a['PRODUCTS'])){
foreach($a['PRODUCTS'] as $key => $product){
$a['PRODUCTS'][$key]['PAYMENT_OBJECT'] = \Bitrix\Sale\Cashbox\Check::PAYMENT_OBJECT_SERVICE;
}
}
return $a;
}

После этого этого в чеке появляется нужная нам подпись!