Заказ для юрлица - тип плательщика, реквизиты, счёт
Настраиваем продажу организациям: второй тип плательщика, поля реквизитов, оплата по счёту, печать документов и отбор таких заказов в отчётах.
Что нужно знать заранее
Тип плательщика - это набор полей и доступных способов оплаты. Для продажи организациям заводят отдельный тип, а не добавляют реквизиты в поля обычного покупателя.
Свойства заказа привязаны к конкретному типу плательщика, а не к заказу вообще. Одно и то же поле можно показать обоим типам, но обязательность и порядок у них настраиваются отдельно.
Способы оплаты тоже привязаны к типу плательщика и настраиваются для него отдельно. Карта остаётся у физического лица, а организация видит оплату по счёту и получает документы для бухгалтерии.
Шаги
- Завести отдельный тип плательщика для организаций и включить его на нужной витрине.
- Описать поля реквизитов свойствами этого типа плательщика и отметить обязательные из них.
- Включить для этого типа оплату по счёту и отключить лишние способы.
- Настроить печать счёта и остальных документов прямо из карточки этого заказа.
- Научиться отбирать заказы организаций в отчётах и в выгрузках для бухгалтерии заказчика.
Решение
Смотрим типы плательщика:
\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, затем системный модульТипичные проблемы
На витрине нет выбора между частным лицом и организацией.
Второй тип плательщика выключен или не привязан к текущей витрине сайта. Активность типа и его привязку к сайту проверяют в настройках магазина.
Поля реквизитов не появляются на оформлении.
Свойства заведены для другого типа плательщика или им не задана группа. Свойства привязывают именно к типу плательщика организаций и проверяют их порядок.
Организация видит оплату картой физического лица.
Платёжная система не ограничена по типу плательщика и показывается сразу всем. Способы оплаты привязывают к типам плательщика и проверяют оба сценария покупки.
В счёте пустые реквизиты покупателя.
Реквизиты не были обязательными, и покупатель спокойно прошёл оформление без них. Обязательность полей задают на стороне сайта, а не надеются на внимательность.
Заказы юрлиц невозможно отделить в отчёте.
Отчёт строится по статусам и суммам заказов без учёта типа плательщика. Тип плательщика добавляют и в отбор отчёта, и в выгрузку для бухгалтерии.
Частые вопросы
Зачем отдельный тип плательщика?
Он задаёт свой набор полей и свои способы оплаты. Иначе частному лицу придётся видеть поля с реквизитами организации.
Где хранятся реквизиты организации?
В свойствах заказа этого типа плательщика и в профиле покупателя. Профиль позволяет не вводить их заново при следующем заказе.
Как сделать оплату по счёту?
Отдельной платёжной системой, привязанной к типу плательщика организаций. Счёт печатается из карточки заказа и отправляется покупателю письмом.
Нужен ли НДС в таких заказах?
Если магазин работает с налогом - да, и его настраивают в каталоге. Сумма налога попадает и в документы, и в обмен с учётной системой.
Можно ли одному пользователю оформлять оба типа?
Да, тип выбирается при оформлении, а профилей у покупателя бывает несколько. Это обычный сценарий для сотрудника, который покупает и себе, и организации.
Смежное
- Оформление заказа - оглавление подтемы
- Своё поле в оформлении заказа: свойство, группа, свой тип - как устроены свойства заказа
- Оформление заказа: настройка компонента и правка шаблона - сам шаг оформления
- Свойства заказа: чтение, запись и фильтрация по значению - чтение реквизитов из кода
- Печатная форма и PDF: шаблон печати, генерация файла, отдача - печать счёта и накладной
- НДС в каталоге и заказах: ставки, цена с налогом и доставка - налог в документах организации
- Дилерский доступ: свои цены, свой каталог, документы - оптовые условия для организаций
- Каталог и продажи - устройство продаж целиком
- Профиль покупателя - где реквизиты организации живут между заказами