Розробка звітів щодо залишків товарів 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка звітів щодо залишків товарів 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка звітів по залишках товарів 1С-Бітрікс

Завдання «покажи що закінчується на складі» в 1С-Бітрікс вирішується по-різному залежно від структури обліку: один склад або кілька, синхронізація з 1С або автономний облік, торгові пропозиції або прості товари. Стандартні засоби 1С-Бітрікс дають лише базові фільтри в адміністративній частині. Для операційної роботи потрібні спеціалізовані звіти.

Структура зберігання залишків

Залишки в 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).

Ключові запити для звітів

Звіт «товари з критичним залишком»:

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 (торгових пропозиціях):

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;

Кейс: звіт для байєра в fashion e-commerce

Магазин одягу, 3 000 SKU (товар × колір × розмір), 2 склади (Москва та Санкт-Петербург), синхронізація з 1С раз на годину. Байєр щоранку перевіряв Excel із залишками — файл оновлювався вручну раз на день.

Завдання: автоматичний звіт «критичні залишки» з розсилкою на email о 8:00 ранку.

Реалізація:

  1. SQL-запит по таблицях b_catalog_store_product + b_iblock_element_property (колір, розмір)
  2. Генерація XLSX через PhpSpreadsheet з умовним форматуванням: червоний — залишок 0–1, жовтий — 2–5
  3. Агент 1С-Бітрікс, що запускається раз на добу о 7:45, генерує файл і зберігає в /upload/reports/
  4. Відправка листа через \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 хвилин до нуля — файл чекає в пошті.

Інтеграція з інтерфейсом

Для менеджерів без доступу до /bitrix/admin/ звіт доступний через сторінку в закритому розділі з формою фільтрів (період, склад, розділ каталогу, мінімальний залишок) і кнопкою «Вивантажити Excel».

Терміни

Конфігурація Термін
Звіт по критичних залишках (SQL + XLSX) 1–2 дні
Звіт по складах з деталізацією за SKU 2–4 дні
Автогенерація + розсилка + UI-фільтри 4–7 днів