Мы разрабатываем специализированные отчёты по остаткам товаров для 1С-Битрикс под ключ. В нашей практике частый запрос: «Покажи, что заканчивается на складе». Задача решается по-разному в зависимости от структуры учёта: один склад или несколько, синхронизация с 1С или автономный учёт, торговые предложения или простые товары. Стандартные средства Битрикс дают только базовые фильтры в административной части. Для операционной работы нужны специализированные отчёты. Наш опыт — 8+ лет, 50+ проектов — гарантирует, что вы получите работающее решение без сюрпризов. Экономия времени после внедрения — до 10 часов в неделю, а точность данных — 100%.
Какие проблемы решают отчёты по остаткам?
Менеджеры тратят часы на ручной сбор данных из разных разделов админки. Ошибки в Excel, устаревшие цифры, потерянные заказы из-за отсутствия товара — всё это решается автоматическими отчётами. Автоматизация исключает человеческий фактор: данные всегда актуальны на момент генерации, а пороги срабатывания настраиваются под категории товаров.
Как хранятся остатки в 1С-Битрикс?
Остатки в Битрикс хранятся в нескольких таблицах в зависимости от режима учёта:
-
b_catalog_product— полеQUANTITY(суммарный остаток),QUANTITY_RESERVED(зарезервировано) -
b_catalog_store_product— остатки по складам (store_id,product_id,amount,quantity_reserved)
При работе с торговыми предложениями (SKU): базовый товар (b_iblock_element с типом товар) не имеет остатка — остатки задаются на уровне SKU (b_catalog_product.product_id = sku_element_id).
Какие SQL-запросы нужны для отчёта по остаткам?
Отчёт «товары с критическим остатком»
SELECT ie.id, ie.name, prop_art.value AS article, sect.name AS section, cp.quantity AS stock, cp.quantity_reserved AS reserved, cp.quantity - cp.quantity_reserved AS available FROM b_catalog_product cp JOIN b_iblock_element ie ON ie.id = cp.id LEFT JOIN b_iblock_element_property prop_art ON prop_art.iblock_element_id = ie.id AND prop_art.iblock_property_id = :article_prop_id LEFT JOIN b_iblock_section sect ON sect.id = ie.iblock_section_id WHERE ie.iblock_id = :iblock_id AND ie.active = 'Y' AND (cp.quantity - cp.quantity_reserved) <= :min_stock_threshold ORDER BY (cp.quantity - cp.quantity_reserved) ASC; Остатки по складам с детализацией (для многоскладского учёта)
SELECT ie.name AS product_name, prop_art.value AS article, cs.title AS store_name, cs.address AS store_address, csp.amount AS store_amount, csp.quantity_reserved AS store_reserved FROM b_catalog_store_product csp JOIN b_catalog_store cs ON cs.id = csp.store_id AND cs.active = 'Y' JOIN b_iblock_element ie ON ie.id = csp.product_id LEFT JOIN b_iblock_element_property prop_art ON prop_art.iblock_element_id = ie.id AND prop_art.iblock_property_id = :article_prop_id WHERE ie.iblock_id = :iblock_id AND csp.amount > 0 ORDER BY ie.name, cs.sort; Отчёт по SKU (торговым предложениям)
SKU — это модификации товара (размер, цвет). Для отчёта по остаткам SKU используйте этот запрос:
SELECT parent.name AS product_name, sku.name AS sku_name, prop_color.value AS color, prop_size.value AS size, cp.quantity AS stock FROM b_iblock_element sku JOIN b_iblock_element parent ON parent.id = sku.wf_parent_id -- для старого API -- Или через b_catalog_product_offer для D7: JOIN b_catalog_product_offer cpo ON cpo.id = sku.id JOIN b_iblock_element parent ON parent.id = cpo.owner_id JOIN b_catalog_product cp ON cp.id = sku.id LEFT JOIN b_iblock_element_property prop_color ON prop_color.iblock_element_id = sku.id AND prop_color.iblock_property_id = :color_prop_id LEFT JOIN b_iblock_element_property prop_size ON prop_size.iblock_element_id = sku.id AND prop_size.iblock_property_id = :size_prop_id WHERE sku.iblock_id = :sku_iblock_id AND sku.active = 'Y' ORDER BY parent.name, sku.name; Кейс: автоматизация рассылки отчётов для магазина одежды
Магазин одежды: 3 000 SKU, 2 склада (Москва и Санкт-Петербург), синхронизация с 1С раз в час. Байер каждое утро проверял Excel с остатками — файл обновлялся вручную раз в день. Мы реализовали автоматический отчёт «критические остатки» с рассылкой по email в 8:00 утра.
Реализация:
- SQL-запрос по таблицам
b_catalog_store_product+b_iblock_element_property(цвет, размер) - Генерация XLSX через PhpSpreadsheet с условным форматированием: красный — остаток 0–1, жёлтый — 2–5
- Агент Битрикс, запускаемый раз в сутки в 7:45, генерирует файл и сохраняет в
/upload/reports/ - Отправка письма через
\Bitrix\Main\Mail\Event::send()с вложением байеру и директору
function GenerateLowStockReport(): string { $generator = new StockReportGenerator(); $file = $generator->generateLowStock(threshold: 5); $savedPath = '/upload/reports/low_stock_' . date('Y-m-d') . '.xlsx'; copy($file, $_SERVER['DOCUMENT_ROOT'] . $savedPath); \Bitrix\Main\Mail\Event::send([ 'EVENT_NAME' => 'LOW_STOCK_REPORT', 'LID' => 's1', 'C_FIELDS' => [ 'REPORT_DATE' => date('d.m.Y'), 'FILE_PATH' => $savedPath, ], ]); unlink($file); return __FUNCTION__ . '();'; } Результат: отчёт сократил время подготовки данных байером с 30 минут до 0 — файл ждёт в почте. В 10 раз быстрее ручного формирования — это реальная экономия.
Почему стоит выбрать автоматизацию?
Автоматический отчёт исключает человеческий фактор: не нужно помнить о загрузке, не нужно отправлять вручную, данные всегда актуальны на момент генерации. Плюс — возможность настроить разные пороги срабатывания для разных категорий товаров. Подробнее о структуре данных.
Типичные ошибки при разработке отчётов по остаткам
Неправильные JOIN в SQL: например, забывают учесть резервы (QUANTITY_RESERVED) или не учитывают многоскладской учёт. Игнорирование торговых предложений: отчёт показывает остатки только базовых товаров, а SKU остаются без внимания. Отсутствие проверки актуальности данных: если обмен с 1С задержался, отчёт покажет неверные цифры. Мы помогаем избежать этих ошибок на этапе анализа — получите консультацию, чтобы ваш отчёт работал без сбоев.
Что входит в разработку отчёта под ключ
- Анализ текущей структуры учёта (склады, SKU, 1С-обмен)
- Написание и оптимизация SQL-запросов
- Разработка модуля генерации XLSX с условным форматированием
- Настройка агента для автозапуска по расписанию
- Создание простого UI для ручного запуска и фильтрации
- Инструкция для администратора (где файлы, как добавить получателей)
- Тестирование на ваших данных
Закажите разработку — мы покажем, как ваш бизнес сэкономит время и деньги.
Сравнение способов получения данных об остатках
| Способ | Скорость | Гибкость | Автоматизация | Сложность |
|---|---|---|---|---|
| Стандартный фильтр в админке | Мгновенно | Низкая | Нет | Низкая |
| REST API | Быстро | Средняя | Частичная | Средняя |
| Прямые SQL-запросы | Быстро | Высокая | Полная | Требует эксперта |
Сроки и стоимость
| Конфигурация | Срок |
|---|---|
| Отчёт по критическим остаткам (SQL + XLSX) | 1–2 дня |
| Отчёт по складам с детализацией по SKU | 2–4 дня |
| Автогенерация + рассылка + UI-фильтры | 4–7 дней |
Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта. Мы гарантируем качество и сопровождение после внедрения.







