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

Заказы в 1С-Битрикс - статусы, свойства, события

Заказы - вторая по объёму подтема магазина: 514 вопросов из собранных. Здесь собраны решения по ним.

Что общего у этих задач

Заказ - это не строка в таблице, а дерево коллекций. Корзина, отгрузки, платежи и свойства живут отдельными объектами, и почти каждая операция задевает несколько из них сразу. Отсюда правило: заказ читают и меняют объектами D7, а не прямыми запросами к базе.

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

Статус - это строка с внешним кодом, а не число. Смена статуса запускает события и пересчёты, а сопоставление с учётной системой идёт по коду. Статус, заведённый руками, из 1С не обновится.

Решения подтемы

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

Почему у заказа пустая коллекция свойств?

Тип плательщика не задан или задан после setBasket. Свойства принадлежат типу плательщика, и коллекция собирается в момент его установки. Порядок вызовов здесь обязателен.

Можно ли менять заказ прямыми запросами к базе?

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

Как выбрать заказы по значению свойства?

Через ORM с присоединением таблицы значений свойств. Фильтровать надо по идентификатору свойства, а не по названию: у разных типов плательщиков одинаковые названия принадлежат разным свойствам.

Почему смена статуса не запускает почтовое событие?

Событие отправляется штатным обработчиком при смене через API заказа. Прямая запись поля статуса в базу его не вызывает, и письмо не уходит.

Связанные темы

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