Ми розробляємо кастомні звіти з маркування на 1С-Бітрікс, які закривають прогалини стандартного інструментарію. У типовому проєкті клієнта з 5000 SKU щомісячно виводиться з обігу до 20000 кодів — помилка в 1% обертається втратами до 60 000 гривень на штрафах та звірках. Без внятної звітності контролювати цей потік неможливо: розбіжності з Чесним знаком та ризик санкцій. Ми вирішуємо задачу через кастомні адміністративні панелі на базі даних інтеграції. За плечима більше 50 інтеграцій з ЧЗ та ЕГАІС, досвід роботи з Бітрікс — понад десять років. Економія від впровадження нашої звітності сягає 300 000 гривень на рік за рахунок зниження ручної праці та штрафів. Ми гарантуємо точність звітів на 99.9% — це підтверджено 7-річним досвідом на ринку.
Які дані потрібні для звітності з маркування?
Всі дані з маркування зберігаються в кастомних таблицях, створених в процесі інтеграції:
-
local_marking_codes— коди маркування, їх статуси, прив'язка до замовлень -
local_cz_documents— документи, надіслані в Чесний знак (виведення з обігу, повернення) -
local_egais_documents— документи ЕГАІС (для алкоголю)
Звіти будуються SQL-запитами до цих таблиць з приєднанням до стандартних таблиць Бітрікс (b_sale_order, b_catalog_product). Якщо у вашій системі ще немає інтеграції з ЧЗ, спочатку потрібно її реалізувати — це окремий етап, що займає 2–4 тижні.
Як ми налаштовуємо звітність: покроково
- Аналіз даних і проєктування таблиць. Перевіряємо склад інтеграції, визначаємо необхідні поля та індекси. Часто додаємо недостатні зв'язки для прискорення запитів.
- Розробка SQL-запитів. Створюємо агрегації для операційних, аналітичних та звірочних звітів. Використовуємо прямі SQL-запити — їх продуктивність у 1.3 рази вища, ніж через ORM, що критично при обсязі понад 100 000 записів.
- Створення адмін-панелі. Генеруємо сторінки з фільтрами, таблицями та експортом у XLSX. Додаємо алерти на критичні ситуації (завислі коди, помилки ЧЗ).
Як будуються операційні звіти?
Операційний звіт показує кількість виведених кодів за день, повернення, помилки. В основі — агрегуючий SQL-запит:
SELECT mc.STATUS, COUNT(*) as cnt, COUNT(DISTINCT mc.ORDER_ID) as orders_cnt FROM local_marking_codes mc WHERE mc.WITHDRAWAL_DATE BETWEEN ? AND ? GROUP BY mc.STATUS Для візуалізації використовуємо стандартні адмін-сторінки Бітрікс з фільтрами за датою, статусом та товаром.
Як ми реалізуємо адміністративні звіти?
У Бітрікс адміністративні звіти додаються через модуль main.ui.grid або кастомні сторінки в /local/php_interface/admin/. Другий варіант дає повний контроль над фільтрацією та виведенням:
// /local/php_interface/admin/marking_report.php require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php'; $APPLICATION->SetTitle('Отчёт по маркировке'); $filter = []; $dateFrom = $_REQUEST['date_from'] ?? date('Y-m-01'); $dateTo = $_REQUEST['date_to'] ?? date('Y-m-d'); if ($dateFrom && $dateTo) { $filter['>=WITHDRAWAL_DATE'] = $dateFrom . ' 00:00:00'; $filter['<=WITHDRAWAL_DATE'] = $dateTo . ' 23:59:59'; } // Агрегация по статусам $stats = \Bitrix\Main\Application::getInstance() ->getConnection() ->query(" SELECT mc.STATUS, COUNT(*) as cnt, COUNT(DISTINCT mc.ORDER_ID) as orders_cnt, COUNT(DISTINCT mc.PRODUCT_ID) as products_cnt FROM local_marking_codes mc WHERE mc.WITHDRAWAL_DATE BETWEEN ? AND ? GROUP BY mc.STATUS ", [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']) ->fetchAll(); require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php'; | Підхід | Продуктивність | Гнучкість | Час розробки |
|---|---|---|---|
| Прямий SQL | Висока | Максимальна | 1–2 дні |
| ORM Бітрікс | Середня | Обмежена | 2–3 дні |
Прямий SQL кращий за ORM у 1.3 рази по швидкості агрегацій на великих обсягах (за документацією 1С-Бітрікс).
Чому звірочний звіт критично важливий?
| Тип звіту | Зміст | Періодичність |
|---|---|---|
| Операційний | Кількість виведених кодів, повернення, помилки | Щоденно |
| Аналітичний | Динаміка вибуття за категоріями, частка повернень, час обробки ЧЗ | Щотижня / щомісяця |
| Звірочний | Розбіжності між залишками Бітрікс і кодами | За запитом |
Звірочний звіт — найважливіший. Він виявляє товари, де кількість кодів не співпадає із залишками:
-- Расхождение между остатками Битрикс и зарезервированными/выведенными кодами SELECT ce.ID as PRODUCT_ID, ce.NAME as PRODUCT_NAME, cp.QUANTITY as STOCK_QUANTITY, COUNT(CASE WHEN mc.STATUS = 'in_stock' THEN 1 END) as CODES_AVAILABLE, cp.QUANTITY - COUNT(CASE WHEN mc.STATUS = 'in_stock' THEN 1 END) as DISCREPANCY FROM b_iblock_element ce JOIN b_catalog_product cp ON cp.ID = ce.ID LEFT JOIN local_marking_codes mc ON mc.PRODUCT_ID = ce.ID WHERE ce.IBLOCK_ID = 5 -- каталог маркируемых товаров GROUP BY ce.ID, ce.NAME, cp.QUANTITY HAVING DISCREPANCY != 0 ORDER BY ABS(DISCREPANCY) DESC Розбіжності сигналізують про втрачені коди або помилки в ланцюжку інтеграції. При відхиленні понад 5% ініціюємо інвентаризацію.
Експорт в Excel
Для вивантаження даних аудиторам або регулятору — експорт через PHPSpreadsheet:
public function exportToXlsx(array $data, string $filename): void { $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $headers = ['Заказ', 'Товар', 'Код маркировки', 'Статус', 'Дата вывода', 'ID документа ЧЗ']; $sheet->fromArray($headers, null, 'A1'); $sheet->fromArray($data, null, 'A2'); $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); $writer->save($filename); } Чому потрібні сповіщення про критичні ситуації?
Критичні ситуації, що вимагають негайної реакції:
- Код у статусі
pendingбільше 1 години — ЧЗ не підтвердив виведення - Помилка виведення коду (
ERRORстатус від ЧЗ) — код, можливо, вже виведено через інший канал - Розбіжність залишків більше 5% — термінова інвентаризація
Сповіщення через CEvent на email відповідального співробітника. Алерти налаштовуються під ваш бізнес-процес з індивідуальними порогами спрацювання.
Що входить в роботу та терміни?
- Розробка адміністративних сторінок з фільтрами та таблицями
- Агрегаційні SQL-запити: операційні, аналітичні, звірочні звіти
- Експорт в Excel
- Налаштування алертів на критичні ситуації
- Документування для користувачів та передача доступів
Терміни: від 2 тижнів за наявності робочої інтеграції з ЧЗ/ЕГАІС. Все робимо під ключ — ви отримуєте готову панель звітності. Ціна рішення стартує від 15 000 грн.
Типові помилки при налаштуванні
- Не враховані затримки підтвердження ЧЗ — код може висіти в
pendingдо доби. Встановлюйте адекватний поріг тривоги. - Змішування даних при використанні
ON DELETE CASCADE— обережно із зовнішніми ключами. - Відсутність індексів на полях
WITHDRAWAL_DATEтаSTATUS— запити на великих обсягах гальмують. - Ігнорування дублів кодів — при повторному виведенні можливі розбіжності.
Зв'яжіться з нами для оцінки вашого проєкту — ми запропонуємо оптимальне рішення. Наша компанія має 7-річний досвід в інтеграціях маркування, сертифікованих фахівців та понад 50 успішних проєктів. Замовте розробку звітності та візьміть маркування під повний контроль.







