Экспорт заказов в Excel в 1С-Битрикс нужен для сверок с бухгалтерией, отчётности и разовой аналитики. Штатная выгрузка из списка заказов закрывает большинство задач, но упирается в объём и набор колонок — для тысяч строк надёжнее программная выгрузка через API.
Когда нужна выгрузка в Excel
Excel-выгрузка заказов — это не замена интеграции с учётной системой, а инструмент для разовых и полуручных задач. Типичные сценарии: сверка оплат за период, передача менеджеру списка «зависших» заказов, аналитика по регионам или способам доставки, отчёт для руководителя без доступа в админку.
Важно сразу разделить два разных механизма Битрикса. Первый — экспорт списка заказов в Excel из административной таблицы (то, о чём эта статья). Второй — обмен с «1С:Предприятие» по протоколу CommerceML через /bitrix/admin/1c_exchange.php: это выгрузка заказов в учётную систему, а не в таблицу. Не путайте их — задачи и форматы принципиально разные.
Экспорт из списка заказов
Основной способ доступен без единой строки кода. Откройте Магазин → Заказы (/bitrix/admin/sale_order.php). Список построен на компоненте main.ui.grid, у которого есть штатная выгрузка.
- Внизу таблицы нажмите на «шестерёнку» настроек грида.
- В меню выберите пункт экспорта — Битрикс предложит форматы Excel и CSV.
- Для Excel формируется файл
.xls(по сути HTML-таблица с Excel-разметкой), для больших массивов удобнее.csvв кодировкеwindows-1251илиUTF-8.
В выгрузку попадают ровно те строки и столбцы, что видны в текущем состоянии грида, с учётом активного фильтра и постраничной навигации. Поэтому перед экспортом имеет смысл сначала настроить представление таблицы, а уже потом жать «Экспорт».
.xls открывается в Excel, но при открытии программа может ругаться на несоответствие формата — это нормально, файл откроется корректно. Для строгих импортов в сторонние системы берите CSV.Настройка колонок выгрузки
Набор колонок в файле = набор видимых колонок грида. Управляют им через ту же «шестерёнку» → пункт настройки столбцов: галочками включаете нужные поля и задаёте порядок перетаскиванием.
Для заказов полезно вывести и включить в экспорт:
- номер и учётную дату заказа (
ID,DATE_INSERT); - статус, флаги оплаты и отгрузки (
STATUS_ID,PAYED,DEDUCTED); - сумму заказа и валюту (
PRICE,CURRENCY); - покупателя и ответственного менеджера (
USER_ID,RESPONSIBLE_ID); - способ оплаты и доставки.
Свойств покупателя (ФИО, телефон, адрес) и позиций товаров в стандартном гриде списка нет — таблица работает на уровне заказа, а не корзины. Если в отчёте нужны товарные строки или произвольные свойства, штатная выгрузка их не даст: понадобится либо кастомная колонка через события грида, либо программный экспорт (см. ниже).
Экспорт по фильтру
Чтобы не выгружать всю базу, используйте фильтр над списком заказов. Экспорт учитывает активные условия, поэтому сначала отбираете нужное, затем выгружаете только результат.
Панель фильтра поддерживает отбор по периоду создания, статусу, флагу оплаты, менеджеру, сумме, способу оплаты и доставки. Частые связки:
| Задача | Условие фильтра |
|---|---|
| Оплаченные за месяц | Оплачен = Да, Дата с … по … |
| Неотгруженные | Отгружен = Нет, Статус ≠ Отменён |
| По менеджеру | Ответственный = сотрудник |
Сохранённые фильтры (пресеты) остаются в интерфейсе, но экспортируется всегда текущая выборка. Проверьте, что случайно не осталось лишнего условия из прошлой сессии — иначе в файл попадёт не то, что ожидаете.
Ограничения по объёму
Штатный экспорт грида формируется на лету в одном запросе к серверу. Пока речь о сотнях строк — всё быстро. На тысячах и десятках тысяч заказов вы упираетесь в ресурсы PHP.
- Память. Формирование
.xls(HTML) держит всю таблицу в памяти — при большом объёме упор вmemory_limit. - Время. Долгая выборка превышает
max_execution_time, и экспорт обрывается с «белым экраном» или таймаутом Nginx. - Полнота. Грид может выгружать текущую страницу либо все отфильтрованные строки — контролируйте, что выбрана выгрузка «всех», а не только видимой страницы.
memory_limit до гигабайтов ради одного отчёта — путь к падению всего сайта под нагрузкой. Если выгрузка регулярно не влезает, это сигнал переходить на программный экспорт, а не крутить настройки PHP.Ускорить помогает и предварительное архивирование старых заказов: активная таблица становится меньше, выборки и выгрузки — быстрее.
Программный экспорт через API
Для больших объёмов, товарных строк и произвольных полей пишут отдельный экспорт на API модуля sale. Заказы читают через \Bitrix\Sale\Internals\OrderTable::getList() или объектную модель \Bitrix\Sale\Order::load(), а файл собирают библиотекой PhpSpreadsheet (современная замена устаревшего PHPExcel).
Ключевые приёмы для устойчивой выгрузки:
- Порционная выборка. Читайте заказы батчами через
limit/offsetвgetList(), а не всё разом — так не переполните память. - CSV-стриминг. Для десятков тысяч строк выгружайте построчно в CSV через
fputcsv()прямо в поток — это на порядок легче, чем строить.xlsxцеликом. - Фоновый запуск. Тяжёлую выгрузку выносите в агент или
cronи запускайте из CLI (php -f export.php), где нет веб-таймаутов, а результат кладите в файл для скачивания. - Связанные данные. Товарные позиции берите из
getBasket(), свойства — изgetPropertyCollection(), оплаты и отгрузки — из соответствующих коллекций заказа.
Такой экспорт полностью управляемый: любой набор колонок, вычисляемые поля, несколько листов, форматирование. Это единственный надёжный способ выгружать полную детализацию по десяткам тысяч заказов.
Итог
Для разовых отчётов хватает штатной выгрузки: откройте Магазин → Заказы, настройте колонки и фильтр, экспортируйте в Excel или CSV. Помните про формат .xls как HTML-таблицы и про то, что товарных строк в списке нет. Как только объёмы переваливают за тысячи заказов или в отчёте нужна полная детализация, переходите на программный экспорт через OrderTable::getList() и PhpSpreadsheet с порционной выборкой и запуском из CLI.
Мы в B2Bsite проектируем такие выгрузки под конкретные отчёты, связываем их с обменом 1С и следим, чтобы тяжёлые экспорты не роняли магазин. Если ручная выгрузка перестала справляться — поможем перевести её на надёжный API-механизм.
Частые вопросы
Где в админке кнопка экспорта заказов?
В разделе Магазин → Заказы внизу таблицы есть «шестерёнка» настроек грида. В её меню находится пункт экспорта с выбором формата Excel или CSV.
В каком формате выгружается Excel-файл?
Штатная выгрузка формирует файл .xls, который на самом деле является HTML-таблицей с Excel-разметкой. Excel открывает его корректно, хотя может показать предупреждение о несоответствии формата.
Почему в выгрузку не попали товары заказа?
Список заказов работает на уровне самого заказа, а не корзины, поэтому товарных позиций в нём нет. Чтобы выгрузить состав заказа, нужна кастомная колонка или программный экспорт через API.
Можно ли выгрузить только заказы за период?
Да. Настройте фильтр над списком (дата, статус, оплата, менеджер), и экспорт учтёт активную выборку. Выгружаются ровно те строки, что отобраны фильтром.
Экспорт обрывается на большом числе заказов — что делать?
Скорее всего упор в memory_limit или max_execution_time PHP. Бесконечно поднимать лимиты не стоит: для тысяч строк переходите на программную выгрузку с порционной выборкой и запуском из CLI.
Чем экспорт в Excel отличается от обмена с 1С?
Экспорт в Excel — это выгрузка таблицы для человека. Обмен с 1С через 1c_exchange.php и CommerceML передаёт заказы в учётную систему в служебном формате. Это разные механизмы под разные задачи.
Какую библиотеку использовать для программной выгрузки xlsx?
Актуальный выбор — PhpSpreadsheet, современная замена устаревшего PHPExcel. Для очень больших объёмов вместо xlsx удобнее стримить CSV через fputcsv.
Влияет ли архивирование заказов на скорость выгрузки?
Да. Перенос старых заказов в архив уменьшает активную таблицу, поэтому и выборки, и экспорт по актуальным заказам выполняются быстрее.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.