Модуль Интернет-магазин sale использует заказ как центральный объект продажи. Заказ объединяет корзину, свойства покупателя, оплаты, отгрузки, скидки, купоны, статусы и историю изменений.
Совет
Перед изучением схемы заказа прочитайте Введение и базовые концепции. Для задач с товарами, ценами и остатками используйте статью Схема работы торгового каталога и основные объекты.
Основные блоки:
API модуля
Для изменения заказа используйте объектную модель. Для отчетов и списков подходят ORM-классы. Сервисы модуля возвращают настройки платежных систем, служб доставки и касс.
Подробнее об API модуля читайте в статье Как выбрать API интернет-магазина.
Основные пространства имен модуля
Для работы с заказом используйте классы из пространства имен Bitrix\Sale. Они образуют объектную модель заказа и связанных коллекций.
use Bitrix\Sale\Order; // Заказ
use Bitrix\Sale\Basket; // Корзина
use Bitrix\Sale\BasketItem; // Позиция корзины
use Bitrix\Sale\Fuser; // Покупатель корзины
use Bitrix\Sale\PropertyValueCollection; // Значения свойств заказа
use Bitrix\Sale\PaymentCollection; // Коллекция оплат
use Bitrix\Sale\Payment; // Оплата
use Bitrix\Sale\ShipmentCollection; // Коллекция отгрузок
use Bitrix\Sale\Shipment; // Отгрузка
use Bitrix\Sale\Discount; // Расчет правил работы с корзиной
Для чтения табличных данных используйте ORM-классы из пространства имен Bitrix\Sale\Internals.
use Bitrix\Sale\Internals\OrderTable; // Заказы
use Bitrix\Sale\Internals\BasketTable; // Позиции корзины и заказа
use Bitrix\Sale\Internals\PaymentTable; // Оплаты
use Bitrix\Sale\Internals\PayableItemTable; // Привязка оплаты к позициям или отгрузкам
use Bitrix\Sale\Internals\ShipmentTable; // Отгрузки
use Bitrix\Sale\Internals\ShipmentItemTable; // Позиции отгрузок
use Bitrix\Sale\Internals\OrderPropsTable; // Настройки свойств заказа
use Bitrix\Sale\Internals\OrderPropsValueTable; // Значения свойств заказа
use Bitrix\Sale\Internals\OrderDiscountTable; // Сохраненные скидки заказа
use Bitrix\Sale\Internals\OrderCouponsTable; // Купоны заказа
use Bitrix\Sale\Internals\OrderRulesTable; // Результаты применения правил скидок
Отдельные подсистемы модуля находятся в собственных пространствах имен.
|
|| Пространство имен | Что содержит ||
|| Bitrix\Sale\PaySystem | Платежные системы, обработчики оплат и результаты работы платежных систем ||
|| Bitrix\Sale\Delivery\Services | Службы доставки и менеджер служб доставки ||
|| Bitrix\Sale\Cashbox | Онлайн-кассы, чеки и менеджеры фискальных документов ||
|| Bitrix\Sale\Reservation | Сервисы резервирования и расчета доступного количества ||
|| Bitrix\Sale\Helpers | Служебные помощники модуля, в том числе очистка устаревших резервов ||
|#
Основная схема заказа
Корзина существует до оформления заказа. После создания заказа корзина становится частью заказа, а остальные данные добавляются через коллекции заказа.
```plain text Basket -> BasketItem
Order -> Basket -> PropertyValueCollection -> PaymentCollection -> Payment -> ShipmentCollection -> Shipment -> Discount
Объект `Order` хранит идентификатор сайта, покупателя, тип плательщика, валюту, статус, сумму и связи с дочерними объектами. Коллекции не нужно создавать отдельно от заказа: заказ загружает или создает их через свои методы.
#|
|| **Объект** | **Роль в модели заказа** ||
|| `Bitrix\Sale\Order` | Объединяет корзину, свойства, оплаты, отгрузки, скидки, статусы и историю продажи ||
|| `Bitrix\Sale\Basket` | Хранит позиции покупателя до оформления и передает их в заказ через `Order::setBasket()` ||
|| `Bitrix\Sale\BasketItem` | Хранит одну позицию корзины: товар, торговое предложение или услугу, количество, цену, валюту и данные поставщика ||
|| `Bitrix\Sale\PropertyValueCollection` | Хранит значения свойств заказа для выбранного типа плательщика ||
|| `Bitrix\Sale\PaymentCollection` | Хранит оплаты заказа и создает объекты оплаты `Payment` ||
|| `Bitrix\Sale\Payment` | Хранит сумму оплаты, валюту, платежную систему и состояние оплаты ||
|| `Bitrix\Sale\ShipmentCollection` | Хранит отгрузки заказа и создает объекты `Shipment` ||
|| `Bitrix\Sale\Shipment` | Хранит службу доставки, стоимость доставки, состав доставляемых позиций и состояние отгрузки ||
|| `Bitrix\Sale\Discount` | Рассчитывает правила работы с корзиной, скидки и купоны для корзины или заказа ||
|#
## Жизненный цикл заказа
Типовой сценарий начинается с корзины и заканчивается сохранением заказа.
1. Создайте или загрузите корзину через `Basket`.
2. Добавьте в корзину товары и торговые предложения как позиции `BasketItem`.
3. Создайте заказ методом `Order::create()` и передайте в него корзину методом `Order::setBasket()`.
4. Задайте в заказе тип плательщика. От типа плательщика зависят свойства заказа, доступные платежные системы и службы доставки.
5. Заполните значения свойств через `PropertyValueCollection`.
6. Создайте отгрузки через `ShipmentCollection`, выберите службу доставки и рассчитайте ее стоимость. Позиции отгрузки связывают отгрузку с позициями корзины.
7. Создайте оплату через `PaymentCollection`, установите текущую сумму заказа и выберите платежную систему с учетом ограничений.
8. Выполните финальный расчет через `Order::doFinalAction(true)`, чтобы применить скидки, обновить налоги и итоговые суммы.
9. Запишите итоговую сумму заказа в оплату и повторно проверьте доступность выбранных служб доставки и платежных систем.
10. Сохраните заказ через `Order::save()`.
Такой двухэтапный порядок нужен, когда ограничения сервисов зависят от состава и суммы заказа. До финального расчета код отсеивает заведомо недоступные варианты. После расчета он синхронизирует сумму оплаты и проверяет выбранные сервисы по итоговому состоянию заказа. Если сценарий не создает оплату или пользовательскую отгрузку при первом сохранении, пропустите соответствующие шаги.
При сохранении заказ:
- проверяет данные,
- вызывает события до и после сохранения,
- сохраняет дочерние объекты и скидки,
- обновляет историю,
- обрабатывает отложенные события.
В реализации `Order::save()` также вызывается провайдер каталога, который обрабатывает товарные данные заказа.
## Коллекции внутри заказа
Коллекции описывают внутреннюю структуру заказа. Заказ хранит ссылки на корзину, свойства, оплаты и отгрузки и управляет их изменениями как единым набором данных. При пересчете и сохранении заказ учитывает добавленные, измененные и удаленные элементы коллекций.
#|
|| **Метод заказа** | **Что возвращает** | **Назначение** ||
|| `Order::getBasket()` | `Bitrix\Sale\Basket` | Получает корзину, связанную с заказом ||
|| `Order::setBasket()` | `Bitrix\Sale\Result` | Передает подготовленную корзину в новый несохраненный заказ
В сохраненном заказе изменение корзины требует проверки отгрузок, оплат, скидок и итоговой суммы ||
|| `Order::getPropertyCollection()` | `Bitrix\Sale\PropertyValueCollection` | Возвращает свойства заказа для чтения или заполнения ||
|| `Order::getPaymentCollection()` | `Bitrix\Sale\PaymentCollection` | Возвращает коллекцию для создания, чтения или изменения оплат заказа ||
|| `Order::getShipmentCollection()` | `Bitrix\Sale\ShipmentCollection` | Возвращает коллекцию для создания, чтения или изменения отгрузок заказа ||
|#
Оплата и отгрузка относятся к заказу. Не создавайте их как независимые записи в таблицах при оформлении покупки через объекты заказа.
## Связь с ORM-классами
Объектная модель использует таблицы модуля как слой хранения. С ними работают ORM-классы в пространстве имен `Bitrix\Sale\Internals`.
#|
|| **Объект заказа** | **Основной ORM-класс** | **Что хранит** ||
|| `Basket`, `BasketItem` | `Bitrix\Sale\Internals\BasketTable` | Позиции корзины и заказа ||
|| `Order` | `Bitrix\Sale\Internals\OrderTable` | Основные поля заказа: сайт, покупатель, тип плательщика, статус, суммы и служебные признаки ||
|| `Payment` | `Bitrix\Sale\Internals\PaymentTable` | Оплаты заказа ||
|| `Shipment` | `Bitrix\Sale\Internals\ShipmentTable` | Отгрузки заказа ||
|| `Property` | `Bitrix\Sale\Internals\OrderPropsTable` | Настройки свойств заказа ||
|| `PropertyValue` | `Bitrix\Sale\Internals\OrderPropsValueTable` | Значения свойств конкретного заказа ||
|#
Используйте ORM-классы для быстрых выборок заказов, оплат, отгрузок и настроек свойств. Например, отчет может читать `OrderTable` и `PaymentTable`, не создавая полный объект заказа.
Для изменения заказа используйте объектную модель. Если изменить только `OrderTable`, система не узнает о связанных изменениях в корзине, оплатах, отгрузках, скидках и истории.
## Карты ORM-классов
Каждый ORM-класс содержит метод `getMap()`. Он возвращает описание структуры таблицы: поля, типы полей, связи с другими объектами, значения по умолчанию, валидаторы и модификаторы данных.
ORM использует карту, чтобы:
- строить SQL-запросы,
- преобразовывать данные между PHP и базой данных,
- проверять типы и обязательность полей,
- применять значения по умолчанию,
- подключать связи с другими таблицами.
ORM-классы модуля `sale` описывают карты в двух форматах. Часть классов описывает поля как массивы с ключами `data_type`, `required`, `values`, `validation`. Часть классов использует объекты полей, например `IntegerField`, `StringField`, `BooleanField`, `EnumField`, `FloatField`, `DatetimeField` и `ReferenceField`.
**Пример.** Фрагмент карты класса `OrderTable`:
```php
return [
new \Bitrix\Main\Entity\IntegerField(
'USER_ID',
[
'required' => true,
]
),
new \Bitrix\Main\Entity\BooleanField(
'PAYED',
[
'values' => ['N', 'Y'],
'default_value' => 'N',
]
),
new \Bitrix\Main\Entity\ReferenceField(
'PAYMENT',
'Bitrix\Sale\Internals\Payment',
[
'=ref.ORDER_ID' => 'this.ID',
]
),
];
В карте есть разные типы элементов.
|
|| Тип элемента карты | Что означает | Пример ||
|| Поле хранения | Колонка таблицы, которую ORM читает или сохраняет | ID, USER_ID, PRICE, CURRENCY ||
|| Вычисляемое поле | Значение, которое ORM вычисляет в SQL-запросе. Оно не является отдельной колонкой хранения | DATE_INSERT_SHORT, PRODUCTS_QUANT, DISCOUNT_ALL ||
|| Связь | Описание связи с другой таблицей или объектом ORM | USER, BASKET, PAYMENT, SHIPMENT, PROPERTY ||
|#
В разделах ниже описаны основные поля хранения. Кроме них, карты ORM содержат вычисляемые поля и связи для выборок: пользователей, статусов, корзины, оплат, отгрузок, свойств, скидок и купонов.
Схема связей ORM-классов
Объект заказа сохраняется в несколько связанных таблиц. Связи строятся от OrderTable: корзина, оплаты, отгрузки, свойства и результаты скидок ссылаются на заказ по ORDER_ID или через связанные идентификаторы.
```plain text OrderTable -> BasketTable ORDER_ID = OrderTable.ID
-> PaymentTable ORDER_ID = OrderTable.ID -> PayableItemTable PAYMENT_ID = PaymentTable.ID ENTITY_TYPE = BASKET_ITEM или SHIPMENT
-> ShipmentTable ORDER_ID = OrderTable.ID -> ShipmentItemTable ORDER_DELIVERY_ID = ShipmentTable.ID BASKET_ID = BasketTable.ID
-> OrderPropsValueTable ORDER_ID = OrderTable.ID ORDER_PROPS_ID = OrderPropsTable.ID
-> OrderCouponsTable ORDER_ID = OrderTable.ID ORDER_DISCOUNT_ID = OrderDiscountTable.ID
-> OrderDiscountDataTable ORDER_ID = OrderTable.ID
-> OrderRulesTable ORDER_ID = OrderTable.ID ORDER_DISCOUNT_ID = OrderDiscountTable.ID
-> OrderRulesDescrTable ORDER_ID = OrderTable.ID ORDER_DISCOUNT_ID = OrderDiscountTable.ID RULE_ID = OrderRulesTable.ID
OrderDiscountTable ID используется как ORDER_DISCOUNT_ID в связанных таблицах ```
Настройки свойств, статусов, платежных систем и служб доставки хранятся отдельно от заказа. Заказ и его дочерние объекты ссылаются на эти настройки по идентификаторам: PERSON_TYPE_ID, STATUS_ID, PAY_SYSTEM_ID, DELIVERY_ID, ORDER_PROPS_ID.
Заказ нельзя корректно изменить одной записью через OrderTable. При сохранении вместе с ним обновляются корзина, оплаты, отгрузки, свойства, скидки, купоны, история и служебные признаки.
Основные поля ORM-классов
Данные заказа распределены между несколькими ORM-классами.
Примечание
В таблицах обязательные поля отмечены *. Поля-связи ORM и вычисляемые поля используются для выборок, но не являются отдельными колонками хранения.
Заказ
Класс Bitrix\Sale\Internals\OrderTable хранит основные поля заказа: покупателя, сайт, тип плательщика, статус, суммы, признаки оплаты, доставки, отмены и служебные данные обмена.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор заказа. Первичный ключ записи ||
|| LID | string | Идентификатор сайта, на котором создан заказ ||
|| ACCOUNT_NUMBER | string(100) | Номер заказа для отображения и поиска. Может отличаться от числового ID ||
|| TRACKING_NUMBER | string | Трек-номер заказа, если он хранится на уровне заказа. В объектной модели трекинг относится к отгрузке ||
|| PAY_SYSTEM_ID | int | Идентификатор платежной системы на уровне заказа. Поле сохраняют для совместимости. В объектной модели оплаты хранятся в PaymentTable ||
|| DELIVERY_ID | int | Идентификатор службы доставки на уровне заказа. Поле сохраняют для совместимости. В объектной модели отгрузки хранятся в ShipmentTable ||
|| PERSON_TYPE_ID | string | Идентификатор типа плательщика. Тип плательщика определяет свойства заказа, доступные платежные системы и службы доставки ||
|| USER_ID* | int | Идентификатор пользователя, для которого создан заказ ||
|| DATE_INSERT | datetime | Дата и время создания заказа ||
|| DATE_UPDATE | datetime | Дата и время последнего изменения заказа ||
|| STATUS_ID | string | Идентификатор статуса заказа. Связан со статусами модуля sale ||
|| DATE_STATUS | datetime | Дата и время последнего изменения статуса заказа ||
|| EMP_STATUS_ID | int | Идентификатор пользователя, который изменил статус заказа ||
|| PAYED | bool | Флаг полной оплаты заказа. Возможные значения:
Y— заказ оплачен,N— заказ не оплачен.
Значение по умолчанию — N ||
|| IS_SYNC_B24 | bool | Служебный флаг синхронизации с Битрикс24. Возможные значения:
Y— синхронизация включена,N— синхронизация не включена.
Значение по умолчанию — N ||
|| DATE_PAYED | datetime | Дата и время оплаты заказа ||
|| EMP_PAYED_ID | int | Идентификатор пользователя, который установил оплату заказа ||
|| DEDUCTED | bool | Флаг отгрузки или списания товаров по заказу. Возможные значения:
Y— товары отгружены или списаны,N— товары не отгружены или не списаны.
Значение по умолчанию — N ||
|| DATE_DEDUCTED | datetime | Дата и время изменения флага DEDUCTED ||
|| EMP_DEDUCTED_ID | int | Идентификатор пользователя, который изменил флаг DEDUCTED ||
|| REASON_UNDO_DEDUCTED | string | Причина отмены отгрузки или списания ||
|| ALLOW_DELIVERY | bool | Флаг разрешения доставки. Возможные значения:
Y— доставка разрешена,N— доставка не разрешена.
Значение по умолчанию — N ||
|| DATE_ALLOW_DELIVERY | datetime | Дата и время разрешения доставки ||
|| EMP_ALLOW_DELIVERY_ID | int | Идентификатор пользователя, который разрешил доставку ||
|| RESERVED | bool | Флаг резервирования товаров заказа. Возможные значения:
Y— товары зарезервированы,N— товары не зарезервированы.
Значение по умолчанию — N ||
|| PRICE | float | Итоговая сумма заказа. Значение по умолчанию — 0.0 ||
|| PRICE_DELIVERY | float | Стоимость доставки заказа ||
|| CURRENCY* | string(3) | Валюта заказа ||
|| DISCOUNT_VALUE | float | Сумма скидки, которая хранится на уровне заказа. Значение по умолчанию — 0.0 ||
|| TAX_VALUE | float | Сумма налогов заказа ||
|| SUM_PAID | float | Сумма уже оплаченных платежей по заказу ||
|| USER_DESCRIPTION | string(2000) | Комментарий покупателя к заказу ||
|| PAY_VOUCHER_NUM | string(20) | Номер платежного документа ||
|| PAY_VOUCHER_DATE | date | Дата платежного документа ||
|| ADDITIONAL_INFO | string | Дополнительная информация по заказу ||
|| COMMENTS | string | Служебный комментарий к заказу ||
|| COMPANY_ID | int | Идентификатор компании, связанной с заказом ||
|| CREATED_BY | int | Идентификатор пользователя, который создал заказ ||
|| RESPONSIBLE_ID | int | Идентификатор ответственного пользователя ||
|| STAT_GID | string | Идентификатор статистики, если заказ связан с модулем статистики или аналитическим сценарием ||
|| DATE_PAY_BEFORE | date | Дата, до которой нужно оплатить заказ ||
|| DATE_BILL | date | Дата выставления счета ||
|| IS_RECURRING | bool | Флаг регулярного заказа. Возможные значения:
Y— заказ регулярный,N— заказ не регулярный.
Значение по умолчанию — N ||
|| RECURRING_ID | int | Идентификатор связанной записи регулярной оплаты или заказа ||
|| LOCKED_BY | int | Идентификатор пользователя, который заблокировал заказ для редактирования ||
|| DATE_LOCK | datetime | Дата и время блокировки заказа ||
|| CANCELED | bool | Флаг отмены заказа. Возможные значения:
Y— заказ отменен,N— заказ не отменен.
Значение по умолчанию — N ||
|| DATE_CANCELED | datetime | Дата и время отмены заказа ||
|| EMP_CANCELED_ID | int | Идентификатор пользователя, который отменил заказ ||
|| REASON_CANCELED | string | Причина отмены заказа ||
|| MARKED | bool | Флаг проблемы в заказе. Возможные значения:
Y— заказ помечен как проблемный,N— заказ не помечен.
Значение по умолчанию — N ||
|| DATE_MARKED | datetime | Дата и время установки флага MARKED ||
|| EMP_MARKED_ID | int | Идентификатор пользователя, который установил флаг MARKED ||
|| REASON_MARKED | string | Причина пометки заказа как проблемного ||
|| RECOUNT_FLAG | bool | Флаг необходимости пересчета заказа. Возможные значения:
Y— заказ нужно пересчитать,-
N— заказ не нужно пересчитывать. || ||AFFILIATE_ID| int | Идентификатор аффилиата, если заказ связан с партнерской программой || ||DELIVERY_DOC_NUM| string(20) | Номер документа доставки || ||DELIVERY_DOC_DATE| datetime | Дата документа доставки || ||UPDATED_1C| bool | Флаг обновления из 1С. Возможные значения: -
Y— заказ обновлен из 1С, -
N— заказ не обновлен из 1С. || ||ORDER_TOPIC| string | Тема заказа. Используется в служебных сценариях и интеграциях || ||XML_ID| string | Внешний идентификатор заказа || ||ID_1C| string | Идентификатор заказа в 1С || ||VERSION_1C| string | Версия данных заказа из обмена с 1С || ||VERSION| int | Внутренняя версия записи заказа || ||EXTERNAL_ORDER| bool | Флаг внешнего заказа. Возможные значения: -
Y— заказ внешний, -
N— заказ не внешний. || ||STORE_ID| int | Идентификатор склада, если заказ связан со складом || ||BX_USER_ID| string | Идентификатор посетителя или пользователя в служебных сценариях модуля || ||SEARCH_CONTENT| text | Текст для поиска по заказу || ||RUNNING| bool | Служебный флаг обработки заказа. Возможные значения: -
Y— заказ находится в обработке, N— заказ не находится в обработке.
Значение по умолчанию — N ||
|#
Корзина
Класс Bitrix\Sale\Internals\BasketTable хранит позиции до оформления и позиции, которые уже связаны с заказом через поле ORDER_ID.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор позиции корзины ||
|| LID* | string(2) | Идентификатор сайта корзины ||
|| FUSER_ID* | int | Идентификатор покупателя из Bitrix\Sale\Fuser. Связывает корзину с посетителем или пользователем ||
|| ORDER_ID | int | Идентификатор заказа. Поле заполнено, когда позиция стала частью заказа ||
|| PRODUCT_ID* | int | Идентификатор товара, торгового предложения или услуги ||
|| PRODUCT_PRICE_ID | int | Идентификатор цены товара, если позиция связана с ценой каталога ||
|| PRICE_TYPE_ID | int | Идентификатор типа цены ||
|| NAME | string | Название позиции корзины ||
|| PRICE | float | Цена позиции после расчета ||
|| BASE_PRICE | float | Базовая цена позиции до скидок ||
|| CURRENCY* | string(3) | Валюта цены позиции ||
|| QUANTITY* | float | Количество товара или услуги в позиции ||
|| WEIGHT | float | Вес позиции ||
|| VAT_INCLUDED | bool | Флаг включения НДС в цену. Возможные значения:
Y— НДС включен в цену,-
N— НДС не включен в цену. || ||VAT_RATE| float | Ставка НДС в долях единицы. Например,0.2означает 20% || ||DATE_INSERT| datetime | Дата и время создания позиции || ||DATE_UPDATE| datetime | Дата и время последнего изменения позиции || ||DATE_REFRESH| datetime | Дата и время последнего обновления позиции || ||DELAY| bool | Флаг отложенной позиции. Возможные значения: -
Y— позиция отложена, -
N— позиция не отложена. || ||CAN_BUY| bool | Флаг возможности купить позицию. Возможные значения: -
Y— позицию можно купить, -
N— позицию нельзя купить. || ||MARKING_CODE_GROUP| string | Группа кодов маркировки для позиции корзины || ||MODULE| string | Код модуля-поставщика товара. Для товаров каталога обычно используетсяcatalog|| ||PRODUCT_PROVIDER_CLASS| string | Класс провайдера товара, который проверяет цену, доступность, остатки и другие товарные данные || ||NOTES| string | Служебная пометка позиции, например данные типа цены || ||DETAIL_PAGE_URL| string | URL детальной страницы товара || ||DISCOUNT_PRICE| float | Сумма скидки на единицу позиции. Значение по умолчанию —0.0|| ||DISCOUNT_NAME| string(255) | Название примененной скидки || ||DISCOUNT_VALUE| string(32) | Значение скидки в текстовом виде || ||DISCOUNT_COUPON| string(32) | Купон, который применился к позиции || ||CATALOG_XML_ID| string | Внешний идентификатор каталога || ||PRODUCT_XML_ID| string | Внешний идентификатор товара || ||SUBSCRIBE| bool | Флаг подписки на отсутствующий товар. Возможные значения: -
Y— подписка включена, -
N— подписка не включена. || ||RESERVED| bool | Флаг резервирования позиции. Возможные значения: -
Y— позиция зарезервирована, -
N— позиция не зарезервирована. || ||RESERVE_QUANTITY| float | Зарезервированное количество по позиции || ||BARCODE_MULTI| bool | Флаг работы с несколькими штрихкодами. Возможные значения: -
Y— используется несколько штрихкодов, -
N— используется один штрихкод. || ||CUSTOM_PRICE| bool | Флаг ручной цены. Возможные значения: -
Y— цена задана вручную, N— цена рассчитывается системой. || ||DIMENSIONS| string | Сериализованные габариты товара || ||TYPE| int | Тип позиции корзины. Используется для товаров, услуг, комплектов и служебных строк || ||SET_PARENT_ID| int | Идентификатор родительской позиции комплекта или набора || ||MEASURE_CODE| int | Код единицы измерения || ||MEASURE_NAME| string | Название единицы измерения || ||CALLBACK_FUNC| string | Имя функции обратного вызова для обновления данных позиции || ||ORDER_CALLBACK_FUNC| string | Имя функции обратного вызова для оформления заказа || ||CANCEL_CALLBACK_FUNC| string | Имя функции обратного вызова для отмены заказа || ||PAY_CALLBACK_FUNC| string | Имя функции обратного вызова для обработки оплаты || ||RECOMMENDATION| string | Идентификатор рекомендации, по которой товар попал в корзину || ||SORT| int | Сортировка позиции. Значение по умолчанию —100|| ||XML_ID| string | Внешний идентификатор позиции || |#
Оплата
Класс Bitrix\Sale\Internals\PaymentTable хранит оплаты заказа. У одного заказа может быть несколько оплат.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор оплаты ||
|| ORDER_ID* | int | Идентификатор заказа, к которому относится оплата ||
|| ACCOUNT_NUMBER | string(100) | Номер оплаты для отображения и поиска ||
|| PAID | bool | Флаг оплаты. Возможные значения:
Y— оплата проведена,N— оплата не проведена.
Значение по умолчанию — N ||
|| DATE_PAID | datetime | Дата и время оплаты ||
|| EMP_PAID_ID | int | Идентификатор пользователя, который установил оплату ||
|| PAY_SYSTEM_ID* | int | Идентификатор платежной системы ||
|| PAY_SYSTEM_NAME* | string(128) | Название платежной системы, сохраненное в оплате ||
|| SUM* | float | Сумма оплаты. Значение по умолчанию — 0.0000 ||
|| CURRENCY* | string(3) | Валюта оплаты ||
|| PRICE_COD | float | Сумма наложенного платежа, если сценарий ее использует ||
|| PS_STATUS | bool | Статус платежной системы. Возможные значения:
Y— платежная система вернула успешный статус,-
N— платежная система не вернула успешный статус. || ||PS_STATUS_CODE| string(255) | Код статуса, полученный от платежной системы || ||PS_INVOICE_ID| string | Идентификатор счета или платежа во внешней платежной системе || ||PS_STATUS_DESCRIPTION| string(512) | Описание статуса платежной системы || ||PS_STATUS_MESSAGE| string(250) | Сообщение платежной системы || ||PS_SUM| float | Сумма, которую вернула платежная система || ||PS_CURRENCY| string(3) | Валюта, которую вернула платежная система || ||PS_RESPONSE_DATE| datetime | Дата и время ответа платежной системы || ||PS_RECURRING_TOKEN| string(255) | Токен рекуррентного платежа || ||PS_CARD_NUMBER| string(64) | Маскированный номер карты или другой идентификатор платежного средства || ||PAY_VOUCHER_NUM| string(20) | Номер платежного документа || ||PAY_VOUCHER_DATE| date | Дата платежного документа || ||DATE_PAY_BEFORE| date | Дата, до которой нужно выполнить оплату || ||DATE_BILL| datetime | Дата выставления счета на оплату || ||XML_ID| string(255) | Внешний идентификатор оплаты || ||RESPONSIBLE_ID| int | Идентификатор ответственного пользователя || ||EMP_RESPONSIBLE_ID| int | Идентификатор пользователя, который назначил ответственного || ||DATE_RESPONSIBLE_ID| datetime | Дата и время назначения ответственного || ||COMMENTS| string | Комментарий к оплате || ||COMPANY_ID| int | Идентификатор компании, связанной с оплатой || ||PAY_RETURN_NUM| string(20) | Номер документа возврата оплаты || ||PAY_RETURN_DATE| date | Дата документа возврата оплаты || ||EMP_RETURN_ID| int | Идентификатор пользователя, который оформил возврат || ||PAY_RETURN_COMMENT| string | Комментарий к возврату оплаты || ||IS_RETURN| enum | Состояние возврата. Возможные значения: -
N— возврата нет, Y— возврат выполнен,P— частичный возврат.
Значение по умолчанию — N ||
|| MARKED | bool | Флаг проблемы в оплате. Возможные значения:
Y— оплата помечена как проблемная,N— оплата не помечена.
Значение по умолчанию — N ||
|| DATE_MARKED | datetime | Дата и время установки флага MARKED ||
|| EMP_MARKED_ID | int | Идентификатор пользователя, который установил флаг MARKED ||
|| REASON_MARKED | string(255) | Причина пометки оплаты как проблемной ||
|| UPDATED_1C | bool | Флаг обновления из 1С. Возможные значения:
Y— оплата обновлена из 1С,-
N— оплата не обновлена из 1С. || ||ID_1C| string | Идентификатор оплаты в 1С || ||VERSION_1C| string | Версия данных оплаты из обмена с 1С || ||EXTERNAL_PAYMENT| enum | Признак внешней оплаты. Возможные значения: -
N— оплата не внешняя, Y— оплата внешняя,F— отдельный режим внешней оплаты. || |#
Привязка оплаты к позициям
Класс Bitrix\Sale\Internals\PayableItemTable связывает оплату с оплачиваемой позицией корзины или отгрузкой.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор записи привязки ||
|| PAYMENT_ID* | int | Идентификатор оплаты из PaymentTable ||
|| ENTITY_ID* | int | Идентификатор оплачиваемого объекта. Значение зависит от поля ENTITY_TYPE ||
|| ENTITY_TYPE* | enum | Тип оплачиваемого объекта. Возможные значения:
BASKET_ITEM— позиция корзины,SHIPMENT— отгрузка. || ||DATE_INSERT| datetime | Дата и время создания привязки || ||QUANTITY* | float | Количество оплачиваемого товара или услуги || ||XML_ID| string | Внешний идентификатор записи привязки || |#
Отгрузка
Класс Bitrix\Sale\Internals\ShipmentTable хранит отгрузки заказа. У одного заказа может быть несколько отгрузок.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор отгрузки ||
|| ORDER_ID* | int | Идентификатор заказа, к которому относится отгрузка ||
|| ACCOUNT_NUMBER | string(100) | Номер отгрузки для отображения и поиска ||
|| DATE_INSERT | datetime | Дата и время создания отгрузки ||
|| DATE_UPDATE | datetime | Дата и время последнего изменения отгрузки ||
|| STATUS_ID | string(2) | Идентификатор статуса отгрузки ||
|| DELIVERY_LOCATION | string(50) | Код или идентификатор местоположения доставки ||
|| DELIVERY_ID | int | Идентификатор службы доставки ||
|| DELIVERY_NAME | string(255) | Название службы доставки, сохраненное в отгрузке ||
|| BASE_PRICE_DELIVERY | float | Базовая стоимость доставки до скидок и ручных изменений ||
|| PRICE_DELIVERY | float | Итоговая стоимость доставки ||
|| CUSTOM_PRICE_DELIVERY | bool | Флаг ручной стоимости доставки. Возможные значения:
Y— стоимость задана вручную,N— стоимость рассчитывается системой.
Значение по умолчанию — N ||
|| CURRENCY | string(3) | Валюта стоимости доставки ||
|| DISCOUNT_PRICE | float | Сумма скидки на доставку ||
|| WEIGHT | float | Вес отгрузки. Значение по умолчанию — 0 ||
|| ALLOW_DELIVERY | bool | Флаг разрешения доставки. Возможные значения:
Y— доставка разрешена,N— доставка не разрешена.
Значение по умолчанию — N ||
|| DATE_ALLOW_DELIVERY | datetime | Дата и время разрешения доставки ||
|| EMP_ALLOW_DELIVERY_ID | int | Идентификатор пользователя, который разрешил доставку ||
|| DEDUCTED | bool | Флаг списания или отгрузки товаров. Возможные значения:
Y— товары списаны или отгружены,N— товары не списаны или не отгружены.
Значение по умолчанию — N ||
|| DATE_DEDUCTED | datetime | Дата и время изменения флага DEDUCTED ||
|| EMP_DEDUCTED_ID | int | Идентификатор пользователя, который изменил флаг DEDUCTED ||
|| REASON_UNDO_DEDUCTED | string(255) | Причина отмены списания или отгрузки ||
|| RESERVED | bool | Флаг резервирования отгрузки. Возможные значения:
Y— товары отгрузки зарезервированы,N— товары отгрузки не зарезервированы.
Значение по умолчанию — N ||
|| DELIVERY_DOC_NUM | string(20) | Номер документа доставки ||
|| DELIVERY_DOC_DATE | datetime | Дата документа доставки ||
|| TRACKING_NUMBER | string(255) | Трек-номер отправления ||
|| TRACKING_STATUS | int | Статус трекинга ||
|| TRACKING_DESCRIPTION | string(255) | Описание статуса трекинга ||
|| TRACKING_LAST_CHECK | datetime | Дата и время последней проверки трекинга ||
|| TRACKING_LAST_CHANGE | datetime | Дата и время последнего изменения трекинга ||
|| PARAMS | text | Сериализованные параметры отгрузки ||
|| CANCELED | bool | Флаг отмены отгрузки. Возможные значения:
Y— отгрузка отменена,N— отгрузка не отменена.
Значение по умолчанию — N ||
|| DATE_CANCELED | datetime | Дата и время отмены отгрузки ||
|| EMP_CANCELED_ID | int | Идентификатор пользователя, который отменил отгрузку ||
|| REASON_CANCELED | string(255) | Причина отмены отгрузки ||
|| MARKED | bool | Флаг проблемы в отгрузке. Возможные значения:
Y— отгрузка помечена как проблемная,N— отгрузка не помечена.
Значение по умолчанию — N ||
|| DATE_MARKED | datetime | Дата и время установки флага MARKED ||
|| EMP_MARKED_ID | int | Идентификатор пользователя, который установил флаг MARKED ||
|| REASON_MARKED | string(255) | Причина пометки отгрузки как проблемной ||
|| SYSTEM | bool | Флаг системной отгрузки. Возможные значения:
Y— системная отгрузка,N— обычная отгрузка.
Значение по умолчанию — N ||
|| RESPONSIBLE_ID | int | Идентификатор ответственного пользователя ||
|| COMMENTS | string | Комментарий к отгрузке ||
|| COMPANY_ID | int | Идентификатор компании, связанной с отгрузкой ||
|| UPDATED_1C | bool | Флаг обновления из 1С. Возможные значения:
Y— отгрузка обновлена из 1С,-
N— отгрузка не обновлена из 1С. || ||XML_ID| string(255) | Внешний идентификатор отгрузки || ||ID_1C| string | Идентификатор отгрузки в 1С || ||VERSION_1C| string | Версия данных отгрузки из обмена с 1С || ||EXTERNAL_DELIVERY| bool | Флаг внешней доставки. Возможные значения: -
Y— доставка внешняя, N— доставка не внешняя. || |#
Позиции отгрузки
Класс Bitrix\Sale\Internals\ShipmentItemTable связывает отгрузку с позициями корзины и хранит количество товара в конкретной отгрузке.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор позиции отгрузки ||
|| ORDER_DELIVERY_ID* | int | Идентификатор отгрузки из ShipmentTable ||
|| BASKET_ID* | int | Идентификатор позиции корзины из BasketTable ||
|| DATE_INSERT | datetime | Дата и время создания позиции отгрузки ||
|| QUANTITY* | float | Количество позиции корзины, которое входит в отгрузку ||
|| RESERVED_QUANTITY* | float | Зарезервированное количество по позиции отгрузки ||
|| XML_ID | string | Внешний идентификатор позиции отгрузки ||
|#
Свойства заказа
Класс Bitrix\Sale\Internals\OrderPropsTable хранит настройки свойств заказа и отгрузки. Значения этих свойств для конкретного заказа хранятся отдельно.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор свойства ||
|| PERSON_TYPE_ID* | int | Идентификатор типа плательщика, для которого доступно свойство ||
|| NAME* | string(255) | Название свойства ||
|| TYPE* | string(20) | Тип свойства. Тип определяет формат ввода и хранения значения ||
|| REQUIRED | bool | Флаг обязательного свойства. Возможные значения:
Y— свойство обязательно,-
N— свойство необязательно. || ||DEFAULT_VALUE| string | Значение свойства по умолчанию. Массивы сохраняются в сериализованном виде || ||SORT| int | Сортировка свойства в списках и формах || ||USER_PROPS| bool | Флаг сохранения свойства в профиле покупателя. Возможные значения: -
Y— свойство сохраняется в профиле покупателя, -
N— свойство не сохраняется в профиле покупателя. || ||IS_LOCATION| bool | Флаг свойства местоположения. Возможные значения: -
Y— свойство является местоположением, -
N— свойство не является местоположением. || ||PROPS_GROUP_ID* | int | Идентификатор группы свойств || ||DESCRIPTION| string(255) | Описание свойства || ||IS_EMAIL| bool | Флаг свойства e-mail покупателя. Возможные значения: -
Y— свойство хранит e-mail покупателя, -
N— свойство не хранит e-mail покупателя. || ||IS_PROFILE_NAME| bool | Флаг свойства имени профиля покупателя. Возможные значения: -
Y— свойство хранит имя профиля покупателя, -
N— свойство не хранит имя профиля покупателя. || ||IS_PAYER| bool | Флаг свойства плательщика. Возможные значения: -
Y— свойство относится к плательщику, -
N— свойство не относится к плательщику. || ||IS_LOCATION4TAX| bool | Флаг местоположения для расчета налогов. Возможные значения: -
Y— местоположение используется для расчета налогов, -
N— местоположение не используется для расчета налогов. || ||IS_FILTERED| bool | Флаг использования свойства в фильтрах. Возможные значения: -
Y— свойство используется в фильтрах, N— свойство не используется в фильтрах.
Для множественного свойства система сбрасывает этот флаг в N ||
|| CODE | string(50) | Символьный код свойства. Используется для поиска свойства в коде ||
|| IS_ZIP | bool | Флаг свойства почтового индекса. Возможные значения:
Y— свойство хранит почтовый индекс,-
N— свойство не хранит почтовый индекс. || ||IS_PHONE| bool | Флаг свойства телефона. Возможные значения: -
Y— свойство хранит телефон, -
N— свойство не хранит телефон. || ||IS_ADDRESS| bool | Флаг адресного свойства. Возможные значения: -
Y— свойство хранит адрес, -
N— свойство не хранит адрес. || ||IS_ADDRESS_FROM| bool | Флаг адреса отправления. Возможные значения: -
Y— свойство хранит адрес отправления, -
N— свойство не хранит адрес отправления. || ||IS_ADDRESS_TO| bool | Флаг адреса получения. Возможные значения: -
Y— свойство хранит адрес получения, -
N— свойство не хранит адрес получения. || ||ACTIVE| bool | Флаг активности свойства. Возможные значения: -
Y— свойство активно, -
N— свойство неактивно. || ||UTIL| bool | Флаг служебного свойства. Возможные значения: -
Y— свойство служебное, -
N— свойство не служебное. || ||INPUT_FIELD_LOCATION| int | Идентификатор поля ввода местоположения, если свойство связано с местоположением || ||MULTIPLE| bool | Флаг множественного свойства. Возможные значения: -
Y— свойство множественное, -
N— свойство не множественное. || ||SETTINGS| string | Сериализованные настройки свойства. При чтении ORM преобразует значение в массив || ||ENTITY_REGISTRY_TYPE| string | Область применения свойства. Для свойств заказа используют\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER|| ||XML_ID| string | Внешний идентификатор свойства || ||ENTITY_TYPE* | enum | Тип объекта, для которого задано свойство. Возможные значения: -
ORDER— свойство заказа, SHIPMENT— свойство отгрузки.
Значение по умолчанию — ORDER ||
|#
Значения свойств заказа
Класс Bitrix\Sale\Internals\OrderPropsValueTable хранит значения свойств конкретного заказа или отгрузки.
|
|| Поле | Тип данных | Описание ||
|| ID* | int | Идентификатор значения свойства ||
|| ORDER_ID | int | Идентификатор заказа ||
|| ORDER_PROPS_ID | int | Идентификатор настройки свойства из OrderPropsTable ||
|| NAME* | string(255) | Название свойства, сохраненное вместе со значением ||
|| VALUE | string | Значение свойства. Массивы сохраняются в сериализованном виде, а при чтении ORM может преобразовать их обратно ||
|| CODE | string(50) | Символьный код свойства, сохраненный вместе со значением ||
|| XML_ID | string | Внешний идентификатор значения свойства ||
|| ENTITY_ID | int | Идентификатор объекта, к которому относится значение. Для заказа обычно совпадает с ORDER_ID. Для отгрузки указывает на отгрузку ||
|| ENTITY_TYPE* | enum | Тип объекта, для которого хранится значение. Возможные значения:
ORDER— значение свойства заказа,SHIPMENT— значение свойства отгрузки. || |#
Настройки заказа
Ниже перечислены восемь ORM-классов для настроек заказа и профилей покупателя. В соответствующих таблицах хранятся типы плательщиков, статусы, группы свойств, варианты значений и сохраненные профили. Эти данные обычно настраивают до оформления заказа, а при создании заказа используют их идентификаторы.
|
|| ORM-класс | Что хранит ||
|| Bitrix\Sale\Internals\PersonTypeTable | Типы плательщиков. Тип плательщика определяет набор свойств заказа и участвует в выборе доступных платежных систем и служб доставки ||
|| Bitrix\Sale\Internals\StatusTable | Коды статусов заказов и отгрузок ||
|| Bitrix\Sale\Internals\StatusLangTable | Названия и описания статусов для языков сайта ||
|| Bitrix\Sale\Internals\OrderPropsGroupTable | Группы свойств заказа для типа плательщика ||
|| Bitrix\Sale\Internals\OrderPropsVariantTable | Варианты значений для свойств заказа со списком значений ||
|| Bitrix\Sale\Internals\OrderPropsRelationTable | Привязки свойств заказа к платежным системам, службам доставки, лендингам и торговым платформам ||
|| Bitrix\Sale\Internals\UserPropsTable | Профили покупателя: сохраненные наборы значений свойств для пользователя и типа плательщика ||
|| Bitrix\Sale\Internals\UserPropsValueTable | Значения свойств внутри профиля покупателя ||
|#
Типы плательщиков
Класс Bitrix\Sale\Internals\PersonTypeTable предоставляет ORM-доступ к типам плательщиков. В заказе связь с типом плательщика хранится в поле PERSON_TYPE_ID. Тип плательщика определяет, какие свойства нужно заполнить для заказа. Например, для физических и юридических лиц обычно используют разные наборы свойств.
|
|| Поле | Тип | Описание ||
|| ID* | integer | Идентификатор типа плательщика. Первичный ключ, заполняется автоматически ||
|| LID* | string | Идентификатор сайта. Длина до двух символов ||
|| NAME* | string | Название типа плательщика. Длина до 255 символов ||
|| CODE | string | Символьный код типа плательщика ||
|| SORT | integer | Индекс сортировки ||
|| ACTIVE | boolean | Активность типа плательщика. Возможные значения:
Y— тип плательщика активен,N— тип плательщика неактивен. || ||XML_ID| string | Внешний идентификатор типа плательщика || ||ENTITY_REGISTRY_TYPE| string | Область применения типа плательщика. Для заказов используют\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER|| |#
Статусы заказов и отгрузок
Класс Bitrix\Sale\Internals\StatusTable хранит статусы заказов и отгрузок. Назначение статуса задает поле TYPE:
-
O— статус заказа, -
D— статус отгрузки.
В заказе текущий статус хранится в OrderTable.STATUS_ID, в отгрузке — в ShipmentTable.STATUS_ID.
|
|| Поле | Тип | Описание ||
|| ID* | string | Код статуса. Первичный ключ. Допускаются 1 или 2 латинские буквы ||
|| TYPE | string | Тип статуса. Значение по умолчанию — O. Возможные значения:
O— заказ,-
D— отгрузка. || ||SORT| integer | Индекс сортировки. Значение по умолчанию —100|| ||NOTIFY| boolean | Отправлять уведомление при установке статуса. Значение по умолчанию —Y. Возможные значения: -
Y— отправлять уведомление, N— не отправлять уведомление. || ||COLOR| string | Цвет статуса в интерфейсе || ||XML_ID| string | Внешний идентификатор статуса || |#
ORM-класс Bitrix\Sale\Internals\StatusLangTable хранит названия статусов.
|
|| Поле | Тип | Описание ||
|| STATUS_ID* | string | Код статуса. Часть составного первичного ключа ||
|| LID* | string | Код языка. Часть составного первичного ключа ||
|| NAME* | string | Название статуса на языке LID ||
|| DESCRIPTION | string | Описание статуса ||
|#
Группы, варианты и привязки свойств
Класс Bitrix\Sale\Internals\OrderPropsGroupTable предоставляет ORM-доступ к группам свойств. Свойства заказа можно группировать по типу плательщика. Группа влияет на организацию свойств в интерфейсе и хранит связь с типом плательщика через PERSON_TYPE_ID.
|
|| Поле | Тип | Описание ||
|| ID* | integer | Идентификатор группы свойств. Первичный ключ, заполняется автоматически ||
|| PERSON_TYPE_ID* | integer | Идентификатор типа плательщика ||
|| NAME* | string | Название группы. Длина от 1 до 255 символов ||
|| CODE | string | Символьный код группы. Длина до 50 символов ||
|| SORT | integer | Индекс сортировки ||
|#
Если свойство заказа использует фиксированный список значений, варианты хранятся отдельно от настройки свойства.
Класс Bitrix\Sale\Internals\OrderPropsVariantTable хранит варианты значений свойств.
|
|| Поле | Тип | Описание ||
|| ID* | integer | Идентификатор варианта. Первичный ключ, заполняется автоматически ||
|| ORDER_PROPS_ID* | integer | Идентификатор свойства заказа ||
|| NAME* | string | Название варианта ||
|| VALUE | string | Значение варианта ||
|| SORT | integer | Индекс сортировки. Значение по умолчанию — 100 ||
|| DESCRIPTION | string | Описание варианта ||
|| XML_ID | string | Внешний идентификатор ||
|#
Класс Bitrix\Sale\Internals\OrderPropsRelationTable хранит привязки свойств к другим настройкам. Класс использует составной первичный ключ из полей PROPERTY_ID, ENTITY_ID и ENTITY_TYPE.
|
|| Поле | Тип | Описание ||
|| PROPERTY_ID* | integer | Идентификатор свойства заказа. Часть составного первичного ключа ||
|| ENTITY_ID* | string | Идентификатор связанного объекта настройки. Часть составного первичного ключа ||
|| ENTITY_TYPE* | string | Тип связанного объекта настройки. Возможные значения:
P— платежная система,D— служба доставки,L— лендинг,T— торговая платформа. || |#
Профили покупателя
Профиль покупателя — сохраненный набор значений свойств заказа для пользователя и типа плательщика. Профили помогают подставлять данные покупателя при следующем оформлении заказа. Текущие значения конкретного заказа при этом хранятся отдельно, в OrderPropsValueTable.
Класс Bitrix\Sale\Internals\UserPropsTable предоставляет ORM-доступ к профилям покупателей.
|
|| Поле | Тип | Описание ||
|| ID* | integer | Идентификатор профиля покупателя. Первичный ключ, заполняется автоматически ||
|| NAME* | string | Название профиля. Длина от 1 до 255 символов ||
|| USER_ID* | integer | Идентификатор пользователя ||
|| PERSON_TYPE_ID* | integer | Идентификатор типа плательщика ||
|| DATE_UPDATE | datetime | Дата изменения профиля ||
|| XML_ID | string | Внешний идентификатор ||
|| VERSION_1C | string | Версия данных обмена с 1С ||
|#
Класс Bitrix\Sale\Internals\UserPropsValueTable хранит значения свойств профиля покупателя.
|
|| Поле | Тип | Описание ||
|| ID* | integer | Идентификатор значения профиля. Первичный ключ, заполняется автоматически ||
|| USER_PROPS_ID | integer | Идентификатор профиля покупателя ||
|| ORDER_PROPS_ID | integer | Идентификатор свойства заказа ||
|| NAME* | string | Название значения профиля. Длина от 1 до 255 символов ||
|| VALUE | string | Значение свойства в профиле ||
|#
Как работают свойства заказа
Свойства добавляют к заказу данные, которых нет в основных полях заказа. Например, через свойства хранят e-mail, телефон, адрес, местоположение и реквизиты плательщика.
У свойства есть настройка и значение.
-
Настройка описывает, какое поле доступно в заказе: для какого типа плательщика, с каким типом ввода, в какой группе, обязательно ли его заполнять и какую роль оно выполняет.
-
Значение хранит данные конкретного заказа или отгрузки.
Класс OrderPropsTable хранит настройки свойств. Класс OrderPropsValueTable хранит значения свойств. В объектной модели значения меняют через PropertyValueCollection, которую возвращает Order::getPropertyCollection(). Коллекция сохраняет значения вместе с заказом и учитывает настройки свойств выбранного типа плательщика.
Тип плательщика определяет набор доступных свойств. Перед заполнением PropertyValueCollection задайте тип плательщика в заказе.
Типы свойств
Тип свойства задает формат значения и способ его обработки. Его указывают в поле OrderPropsTable.TYPE.
|
|| Тип | Когда использовать | Особенности хранения ||
|| STRING | Строковое значение: имя, e-mail, комментарий, простой идентификатор | Значение хранится в VALUE как строка ||
|| NUMBER | Числовое значение | Значение хранится в VALUE; проверка числового формата выполняется на уровне ввода ||
|| Y/N | Логический выбор | Значение обычно хранится как Y или N ||
|| ENUM | Выбор из заранее заданного списка | Варианты списка хранятся в OrderPropsVariantTable. Для множественного свойства значение может преобразовываться в массив ||
|| FILE | Загруженный файл | Для множественного свойства значение может преобразовываться в массив идентификаторов или данных файла ||
|| DATE | Дата | Значение хранится в VALUE; формат ввода обрабатывает тип свойства ||
|| LOCATION | Местоположение для доставки или налогов | Обычно используется вместе с флагами IS_LOCATION или IS_LOCATION4TAX ||
|| ADDRESS | Адрес | Может использоваться вместе с адресными флагами IS_ADDRESS, IS_ADDRESS_FROM, IS_ADDRESS_TO ||
|| UF | Пользовательское поле | Формат значения зависит от настройки пользовательского поля ||
|#
Флаги свойств
Флаги уточняют роль свойства в сценариях оформления и обработки заказа. Например, модуль может определить, какое свойство хранит e-mail покупателя, телефон, адрес или местоположение для расчета налогов. Одно свойство может использовать несколько флагов.
|
|| Флаг | Что означает ||
|| REQUIRED | Свойство нужно заполнить перед сохранением или оформлением заказа ||
|| USER_PROPS | Значение свойства можно сохранять в профиле покупателя ||
|| IS_LOCATION | Свойство хранит местоположение доставки ||
|| IS_LOCATION4TAX | Свойство хранит местоположение для расчета налогов ||
|| IS_EMAIL | Свойство хранит e-mail покупателя ||
|| IS_PROFILE_NAME | Свойство хранит название профиля покупателя ||
|| IS_PAYER | Свойство хранит имя или название плательщика ||
|| IS_ZIP | Свойство хранит почтовый индекс ||
|| IS_PHONE | Свойство хранит телефон ||
|| IS_ADDRESS | Свойство хранит адрес ||
|| IS_ADDRESS_FROM | Свойство хранит адрес отправления ||
|| IS_ADDRESS_TO | Свойство хранит адрес получения ||
|| IS_FILTERED | Свойство можно использовать в фильтрах. Для множественного свойства модуль сбрасывает этот флаг в N ||
|| ACTIVE | Свойство активно и участвует в сценариях оформления ||
|| UTIL | Свойство служебное ||
|| MULTIPLE | Свойство может хранить несколько значений ||
|#
Свойства заказа и отгрузки
Одни свойства относятся к заказу, другие — к отгрузке. Поле ENTITY_TYPE показывает, где используется свойство.
-
ORDER— свойство заказа, -
SHIPMENT— свойство отгрузки.
В OrderPropsTable поле ENTITY_TYPE задает область применения настройки свойства. В OrderPropsValueTable это же поле показывает, к какому объекту относится сохраненное значение.
Как работают оплаты
Оплата — дочерний объект заказа. Один заказ может содержать одну или несколько оплат. Каждая оплата хранит сумму, валюту, платежную систему, признаки оплаты и служебные данные платежного документа.
Оплаты создают и меняют через коллекцию PaymentCollection, которую возвращает метод заказа Order::getPaymentCollection().
Платежные системы подключаются классом Bitrix\Sale\PaySystem\Manager. Менеджер возвращает настроенный объект Bitrix\Sale\PaySystem\Service с обработчиком.
|
|| Объект | Роль ||
|| Bitrix\Sale\PaymentCollection | Коллекция оплат заказа. Создает оплаты и считает общую сумму оплат через getSum() ||
|| Bitrix\Sale\Payment | Одна оплата заказа. Хранит сумму, валюту, платежную систему, статус оплаты и идентификаторы платежного документа ||
|| Bitrix\Sale\PaySystem\Manager | Возвращает список платежных систем и объект платежной системы по идентификатору. Может учитывать ограничения платежных систем для заказа или оплаты ||
|| Bitrix\Sale\PaySystem\Service | Настроенная платежная система с обработчиком ||
|| Bitrix\Sale\PaySystem\ServiceHandler | Базовый класс обработчика платежной системы ||
|| Bitrix\Sale\PaySystem\ServiceResult | Результат работы платежной системы. Метод isResultApplied() показывает, применен ли результат к оплате ||
|#
Для чтения оплат используйте PaymentTable. При изменении оплаты работайте через PaymentCollection и Payment, чтобы заказ сохранил связанные изменения, события и историю.
Оплата может быть связана с оплачиваемыми объектами через PayableItemCollection. Запись привязки указывает, какой объект связан с конкретной оплатой: позиция корзины или отгрузка. Для позиции корзины количество в привязке не должно превышать количество этой позиции в корзине. Для отгрузки количество фиксируется как 1, потому что оплачивается сама отгрузка.
Как работают отгрузки и службы доставки
Отгрузка — дочерний объект заказа, который описывает доставку части или всех позиций корзины. Отгрузка хранит службу доставки, стоимость доставки, статус, признаки разрешения доставки, трекинг и состав отгружаемых позиций.
Отгрузки создают и меняют через коллекцию ShipmentCollection, которую возвращает метод заказа Order::getShipmentCollection().
Службы доставки подключаются классом Bitrix\Sale\Delivery\Services\Manager.
|
|| Объект | Роль ||
|| Bitrix\Sale\ShipmentCollection | Коллекция отгрузок заказа. Создает отгрузки и управляет их состоянием ||
|| Bitrix\Sale\Shipment | Одна отгрузка заказа. Хранит службу доставки, стоимость, статус, трекинг и коллекцию позиций отгрузки ||
|| Bitrix\Sale\ShipmentItemCollection | Коллекция позиций отгрузки. Связывает отгрузку с позициями корзины ||
|| Bitrix\Sale\ShipmentItem | Одна позиция отгрузки: ссылка на позицию корзины, количество и резерв ||
|| Bitrix\Sale\Delivery\Services\Manager | Возвращает список служб доставки и объект службы доставки по идентификатору ||
|| Bitrix\Sale\Delivery\Services\Base | Базовый класс службы доставки ||
|#
Для отчетов по отгрузкам используйте ShipmentTable и ShipmentItemTable. При изменении доставки работайте через ShipmentCollection и Shipment, чтобы состав отгрузок и пересчеты остались согласованными с заказом.
В коллекции отгрузок есть системная отгрузка. Если ее нет, ShipmentCollection создает ее автоматически и помечает полем SYSTEM = 'Y'. Такая отгрузка нужна объектной модели для внутреннего распределения позиций. В пользовательских сценариях доставки обычно работают с несистемными отгрузками, у которых задана служба доставки и состав доставляемых позиций.
Как работают скидки и купоны
Объект Bitrix\Sale\Discount рассчитывает скидки в заказе. В типовом сценарии перед сохранением заказа вызывается метод Order::doFinalAction(true). Внутри этого действия заказ получает объект скидок, запускает расчет через Discount::calculate() и применяет результат к заказу.
Перед расчетом Order::doFinalAction() выполняет накопленные действия заказа. После успешного расчета скидок метод применяет результат к корзине и заказу, а затем обновляет налоговые данные. Если в заказе нет значимых изменений, метод завершается без полного пересчета.
Скидки влияют на корзину и итоговую сумму заказа. Правила скидок также могут затрагивать доставку, если такой результат предусмотрен примененными правилами. После расчета скидок заказ пересчитывает налоговые данные. Поэтому скидки нельзя корректно применить прямой записью в хранилище: расчет должен пройти через объект заказа и корзину.
|
|| Класс | Что хранит или выполняет ||
|| Bitrix\Sale\Discount | Рассчитывает правила работы с корзиной для корзины или заказа ||
|| Bitrix\Sale\DiscountCouponsManager | Управляет купонами, которые участвуют в расчете скидок ||
|| Bitrix\Sale\OrderDiscount | Сохраняет результат расчета скидок заказа ||
|| Bitrix\Sale\Internals\OrderDiscountTable | Сохраненные скидки заказа ||
|| Bitrix\Sale\Internals\OrderCouponsTable | Купоны, примененные или сохраненные для заказа ||
|| Bitrix\Sale\Internals\OrderModulesTable | Модули, участвующие в сохраненных скидках заказа ||
|| Bitrix\Sale\Internals\OrderDiscountDataTable | Служебные данные сохраненных скидок заказа ||
|| Bitrix\Sale\Internals\OrderRulesTable | Результаты применения правил скидок ||
|| Bitrix\Sale\Internals\OrderRulesDescrTable | Описания примененных правил скидок ||
|#
Сохраненные скидки заказа нужны для истории и повторного отображения результата. Они не заменяют настройку правил скидок в продукте и не должны использоваться как основной способ пересчитать заказ.
Связь с каталогом и резервированием
Модуль sale оформляет продажу, но товарные данные обычно приходят из модуля catalog: идентификатор товара, цена, валюта, остатки, НДС и провайдер товара. Позиция корзины хранит товарные поля в BasketTable, а при сохранении заказа объектная модель вызывает провайдер каталога для обработки товарных данных.
Если заказ работает с товарами каталога, важно различать три уровня данных.
|
|| Уровень | Что хранит | Где смотреть ||
|| Товар каталога | Товар, торговое предложение, базовые цены, склады и остатки | Модуль catalog ||
|| Позиция корзины | Товар в корзине или заказе: PRODUCT_ID, MODULE, QUANTITY, PRICE, CURRENCY, VAT_RATE, RESERVED, RESERVE_QUANTITY | Классы Basket, BasketItem, BasketTable ||
|| Позиция отгрузки | Какое количество позиции корзины входит в конкретную отгрузку и сколько зарезервировано по отгрузке | ShipmentItem, ShipmentItemTable ||
|#
Резервирование связано с корзиной и отгрузками. В объектной модели для резервов используются классы ReserveQuantity и сервисы из пространства имен Bitrix\Sale\Reservation.
|
|| Класс | Роль ||
|| Bitrix\Sale\ReserveQuantity | Объект зарезервированного количества. Сохраняется как часть коллекций заказа ||
|| Bitrix\Sale\Reservation\BasketReservationService | Сервис строк резервирования корзины. Добавляет, обновляет и удаляет резерв, а также пишет историю резерва ||
|| Bitrix\Sale\Reservation\AvailableQuantityCalculator | Рассчитывает доступное количество с учетом складских остатков и истории резервирования ||
|| Bitrix\Sale\Helpers\ReservedProductCleaner | Пошагово очищает устаревшие резервы ||
|#
При изменении количества, отгрузки или резерва работайте через объектную модель заказа. Прямая правка полей RESERVED, RESERVE_QUANTITY или RESERVED_QUANTITY в таблицах не пересчитает связанные коллекции, историю резервов и данные каталога.
События и пересчеты при сохранении
Сохранение заказа не ограничивается записью через OrderTable. Объект заказа выполняет последовательность операций:
-
Вызывает событие перед сохранением заказа.
-
Проверяет данные заказа и дочерних объектов.
-
Передает позиции корзины провайдеру каталога. Провайдер обрабатывает товарные данные, резервы и списание товаров.
-
Добавляет или обновляет запись заказа.
-
Сохраняет дочерние объекты: корзину, свойства, оплаты, отгрузки и связанные коллекции.
-
Сохраняет результат расчета скидок.
-
Генерирует кассовые документы, если они нужны для заказа, и сохраняет признаки проблем у заказа, оплат или отгрузок.
-
Вызывает события после сохранения, обрабатывает отложенные события и обновляет историю.
Изменяйте заказ и связанные объекты через объектную модель, чтобы сохранить согласованность корзины, оплат, отгрузок, скидок и истории. ORM-классы используйте для отчетов и выборок данных.