Налаштування звітності з маркування на 1С-Бітрікс
Обов'язкове маркування створює не лише операційне навантаження (гасити коди, оформляти повернення), а й потребу у звітності: скільки кодів виведено з обігу за період, який статус кожного документа в ЧЗ, чи є розбіжності між даними 1С-Бітрікс та Чесного Знаку. Стандартний інструментарій 1С-Бітрікс не включає звітів з маркування — їх потрібно розробляти окремо на базі даних, що накопичуються в процесі інтеграції з ЧЗ/ЄГАІС.
Джерела даних для звітів
Усі дані з маркування зберігаються у власних таблицях, створених під час інтеграції:
-
local_marking_codes— коди маркування, їх статуси, прив'язка до замовлень -
local_cz_documents— документи, надіслані до Честного Знаку (виведення з обігу, повернення) -
local_egais_documents— документи ЄГАІС (для алкоголю)
Звіти будуються SQL-запитами до цих таблиць з об'єднанням зі стандартними таблицями 1С-Бітрікс (b_sale_order, b_catalog_iblock_element).
Реалізація адміністративних звітів
В 1С-Бітрікс адміністративні звіти додаються через модуль 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';
Ключові показники звітності
Операційний звіт (щоденний):
- Кількість кодів, виведених з обігу за день
- Кількість повернень до обігу
- Помилки виведення (коди з помилкою за відповіддю ЧЗ)
- Документи в статусі очікування (не оброблені ЧЗ більше 30 хвилин)
Аналітичний звіт (щотижневий/щомісячний):
- Динаміка вибуття за категоріями товарів
- Частка повернень у розрізі SKU
- Час обробки документів ЧЗ (від надсилання до підтвердження)
Звірочний звіт:
-- Розбіжність між залишками 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
Розбіжності сигналізують про втрачені коди або помилки в ланцюжку інтеграції.
Експорт до 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% — ініціювати інвентаризацію
Сповіщення через CEventLog::Add() + email через CEvent::Send() для відповідального співробітника.
Склад робіт
- Розробка адміністративних сторінок з фільтрами та таблицями
- Агрегаційні SQL-запити: операційні та звірочні звіти
- Експорт до Excel
- Налаштування алертів на критичні ситуації
- Документування для користувачів
Терміни: 2–3 тижні за наявності робочої інтеграції з ЧЗ/ЄГАІС.







