Схема работы интернет-магазина и основные объекты

Модуль Интернет-магазин 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

Служебные помощники модуля, в том числе очистка устаревших резервов

Основная схема заказа

Корзина существует до оформления заказа. После создания заказа корзина становится частью заказа, а остальные данные добавляются через коллекции заказа.

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:

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 или через связанные идентификаторы.

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. Объект заказа выполняет последовательность операций:

  1. Вызывает событие перед сохранением заказа.

  2. Проверяет данные заказа и дочерних объектов.

  3. Передает позиции корзины провайдеру каталога. Провайдер обрабатывает товарные данные, резервы и списание товаров.

  4. Добавляет или обновляет запись заказа.

  5. Сохраняет дочерние объекты: корзину, свойства, оплаты, отгрузки и связанные коллекции.

  6. Сохраняет результат расчета скидок.

  7. Генерирует кассовые документы, если они нужны для заказа, и сохраняет признаки проблем у заказа, оплат или отгрузок.

  8. Вызывает события после сохранения, обрабатывает отложенные события и обновляет историю.

Изменяйте заказ и связанные объекты через объектную модель, чтобы сохранить согласованность корзины, оплат, отгрузок, скидок и истории. ORM-классы используйте для отчетов и выборок данных.