Перейти к содержимому

Заказ для юрлица - тип плательщика, реквизиты, счёт

Настраиваем продажу организациям: второй тип плательщика, поля реквизитов, оплата по счёту, печать документов и отбор таких заказов в отчётах.

Что нужно знать заранее

Тип плательщика - это набор полей и доступных способов оплаты. Для продажи организациям заводят отдельный тип, а не добавляют реквизиты в поля обычного покупателя.

Свойства заказа привязаны к конкретному типу плательщика, а не к заказу вообще. Одно и то же поле можно показать обоим типам, но обязательность и порядок у них настраиваются отдельно.

Способы оплаты тоже привязаны к типу плательщика и настраиваются для него отдельно. Карта остаётся у физического лица, а организация видит оплату по счёту и получает документы для бухгалтерии.

Шаги

  1. Завести отдельный тип плательщика для организаций и включить его на нужной витрине.
  2. Описать поля реквизитов свойствами этого типа плательщика и отметить обязательные из них.
  3. Включить для этого типа оплату по счёту и отключить лишние способы.
  4. Настроить печать счёта и остальных документов прямо из карточки этого заказа.
  5. Научиться отбирать заказы организаций в отчётах и в выгрузках для бухгалтерии заказчика.

Решение

Смотрим типы плательщика:

\Bitrix\Main\Loader::includeModule('sale');
foreach (\Bitrix\Sale\Internals\PersonTypeTable::getList(['select' => ['ID', 'NAME',
'ACTIVE', 'LID']])->fetchAll() as $type) {
printf("%d %s активен=%s сайт=%s\n", $type['ID'], $type['NAME'],
$type['ACTIVE'], $type['LID']);
}

Два типа плательщика по умолчанию есть почти всегда. Проверять стоит не наличие, а активность и привязку к нужной витрине: на мультисайте типы часто заводят заново.

Описываем поля реквизитов:

\Bitrix\Sale\Internals\OrderPropsTable::add([
'PERSON_TYPE_ID' => $companyTypeId,
'NAME' => 'ИНН', 'CODE' => 'INN', 'TYPE' => 'STRING',
'REQUIRED' => 'Y', 'SORT' => 100, 'IS_PROFILE_NAME' => 'N',
]);
// поля реквизитов принадлежат типу плательщика, а не заказу вообще

Обязательность реквизитов задают на стороне сайта, а не в учётной системе. Учётная система примет заказ и без них, но бухгалтерия вернёт его обратно, и разбирать это будет менеджер, а не программа.

Создаём заказ юрлица из кода:

$order = \Bitrix\Sale\Order::create(SITE_ID, $userId);
$order->setPersonTypeId($companyTypeId);
$props = $order->getPropertyCollection();
$props->getItemByOrderPropertyCode('INN')->setValue('7701234567');
$props->getItemByOrderPropertyCode('COMPANY')->setValue('ООО «Пример»');
$order->save(); // значения реквизитов сохраняются вместе с заказом одной операцией

Тип плательщика задают до заполнения свойств. Иначе коллекция свойств собирается для прежнего типа, и значения реквизитов просто некуда положить.

Отбираем заказы организаций:

$rs = \Bitrix\Sale\Internals\OrderTable::getList(['filter' => [
'=PERSON_TYPE_ID' => $companyTypeId, '>=DATE_INSERT' => $from],
'select' => ['ID', 'ACCOUNT_NUMBER', 'PRICE', 'PAYED']]);
print_r($rs->fetchAll()); // тот же отбор годится для отчётов и выгрузок

Готовим печать документов:

// счёт печатают штатной формой из карточки заказа
// шаблон штатного обработчика лежит в /bitrix/modules/sale/handlers/paysystem/
// свой шаблон кладут выше по приоритету и ядро не правят:
printf("свой обработчик: %s\n", '/local/php_interface/include/sale_payment/');
// порядок поиска: свой каталог проекта, затем local, затем системный модуль

Типичные проблемы

На витрине нет выбора между частным лицом и организацией.

Второй тип плательщика выключен или не привязан к текущей витрине сайта. Активность типа и его привязку к сайту проверяют в настройках магазина.

Поля реквизитов не появляются на оформлении.

Свойства заведены для другого типа плательщика или им не задана группа. Свойства привязывают именно к типу плательщика организаций и проверяют их порядок.

Организация видит оплату картой физического лица.

Платёжная система не ограничена по типу плательщика и показывается сразу всем. Способы оплаты привязывают к типам плательщика и проверяют оба сценария покупки.

В счёте пустые реквизиты покупателя.

Реквизиты не были обязательными, и покупатель спокойно прошёл оформление без них. Обязательность полей задают на стороне сайта, а не надеются на внимательность.

Заказы юрлиц невозможно отделить в отчёте.

Отчёт строится по статусам и суммам заказов без учёта типа плательщика. Тип плательщика добавляют и в отбор отчёта, и в выгрузку для бухгалтерии.

Частые вопросы

Зачем отдельный тип плательщика?

Он задаёт свой набор полей и свои способы оплаты. Иначе частному лицу придётся видеть поля с реквизитами организации.

Где хранятся реквизиты организации?

В свойствах заказа этого типа плательщика и в профиле покупателя. Профиль позволяет не вводить их заново при следующем заказе.

Как сделать оплату по счёту?

Отдельной платёжной системой, привязанной к типу плательщика организаций. Счёт печатается из карточки заказа и отправляется покупателю письмом.

Нужен ли НДС в таких заказах?

Если магазин работает с налогом - да, и его настраивают в каталоге. Сумма налога попадает и в документы, и в обмен с учётной системой.

Можно ли одному пользователю оформлять оба типа?

Да, тип выбирается при оформлении, а профилей у покупателя бывает несколько. Это обычный сценарий для сотрудника, который покупает и себе, и организации.

Смежное

Первоисточник