Заказы в 1С-Битрикс - статусы, свойства, события
Заказы - вторая по объёму подтема магазина: 514 вопросов из собранных. Здесь собраны решения по ним.
Что общего у этих задач
Заказ - это не строка в таблице, а дерево коллекций. Корзина, отгрузки, платежи и свойства живут отдельными объектами, и почти каждая операция задевает несколько из них сразу. Отсюда правило: заказ читают и меняют объектами D7, а не прямыми запросами к базе.
Свойства заказа принадлежат типу плательщика. Один и тот же вопрос покупателю у физлица и у организации - это два разных свойства с разными идентификаторами. Код, который берёт свойство по номеру, ломается на втором типе плательщика.
Статус - это строка с внешним кодом, а не число. Смена статуса запускает события и пересчёты, а сопоставление с учётной системой идёт по коду. Статус, заведённый руками, из 1С не обновится.
Решения подтемы
-
Статусы заказов: смена, события, сопоставление с 1С - как менять статус из кода и почему он не приходит из учётной системы.
-
Свойства заказа: чтение, запись, фильтрация - типы плательщиков, выборка по свойству, лишние поля в админке.
-
Заказ из кода: чтение, поиск по номеру, изменение состава - загрузка объекта, номер против идентификатора, пересчёт при сохранении.
-
Личный кабинет покупателя: список заказов, повтор и отмена - раздел кабинета, повтор заказа, отмена, проверка владельца.
-
Оплаты и отгрузки заказа: объекты, признаки, частичные операции - наборы внутри заказа, частичная оплата, резерв товара.
-
Список заказов из кода: фильтры, постраничность, позиции - выборка полей вместо объектов, страницы, позиции одним запросом.
-
Отчёты по заказам: агрегаты, группировка, выгрузка - суммы в базе, разбивка по дням, расчёт по расписанию.
-
Уведомления покупателю: письма и SMS по статусам заказа - события статусов и дубли.
-
Перенос заказов и клиентов со старого сайта: порядок и сверка - внешние коды и сверка.
-
Заказ из кода не сохраняется: разбор причин - результат сохранения, тип плательщика, корзина, отгрузки, события.
-
Свои номера документов и заявок: шаблон, счётчики, уникальность - нумератор ядра, служебные слова, счётчики по хешу.
-
Свои страницы личного кабинета: раздел, меню, права, данные - раздел и меню, закрытие от гостей, данные покупателя.
-
Источник заказа: метки в адресе, хранение, отчёт - перехват меток, первый и последний источник, отчёт.
-
Уведомления менеджеру: письмо, чат, эскалация по времени - адрес письма магазина, дубль в чат, ответственный, напоминания.
-
Заказ изнутри: коллекции, пересчёт, сохранение, события - дерево коллекций, момент пересчёта, объект результата, порядок событий.
Частые вопросы
Почему у заказа пустая коллекция свойств?
Тип плательщика не задан или задан после setBasket. Свойства принадлежат типу плательщика, и коллекция собирается в момент его установки. Порядок вызовов здесь обязателен.
Можно ли менять заказ прямыми запросами к базе?
Технически да, практически нет: заказ хранится в нескольких таблицах, и правка одной оставит остальные рассогласованными. Скидки, суммы и статусы пересчитываются кодом, а не триггерами базы.
Как выбрать заказы по значению свойства?
Через ORM с присоединением таблицы значений свойств. Фильтровать надо по идентификатору свойства, а не по названию: у разных типов плательщиков одинаковые названия принадлежат разным свойствам.
Почему смена статуса не запускает почтовое событие?
Событие отправляется штатным обработчиком при смене через API заказа. Прямая запись поля статуса в базу его не вызывает, и письмо не уходит.
Связанные темы
- Каталог и продажи - устройство заказа и его коллекций
- Обмен: заказы - как заказ ходит в 1С и обратно
- Личный кабинет и кассы - что видит покупатель
- Права доступа на практике - кто видит и меняет заказы
- Оформление заказа - как заказ создаётся покупателем
- Не выгружаются заказы в 1С - заказ есть на сайте, но не в учётной системе
- Раздел Интернет-магазин