אנו מפתחים דוחות התאמה מותאמים אישית על 1С-Bitrix הממלאים את הפערים של הכלים הסטנדרטיים. בפרויקט טיפוסי עם 5000 פריטים (SKU), נמשכים עד 20000 קודים בחודש — שגיאה של 1% גורמת להפסדים של עד 540–780 דולר בקנסות והתאמות. ללא דיווח נכון, אי אפשר לשלוט בזרימה זו: אי-התאמות עם Chesny Znak וסיכון לסנקציות. אנו פותרים זאת באמצעות פאנלים אדמיניסטרטיביים מותאמים אישית הבנויים על מסד נתוני האינטגרציה. עם למעלה מ-50 אינטגרציות עם CZ ו-EGAIS, ויותר מעשר שנות ניסיון עם Bitrix, החיסכון מהדוחות שלנו יכול להגיע ל-2.7k–3.9k דולר בשנה על ידי הפחתת עבודה ידנית וקנסות. הפתרון המובטח שלנו מתחיל מ-1.4k–1.9k דולר ומפחית עבודה ידנית בעד 70%. עבור חברה עם 5000 פריטים, הטמעת דוחות מותאמים אישית חוסכת כ-1.8k–2.6k דולר בשנה בהפחתת עבודה ידנית ומונעת קנסות של עד 540–780 דולר. בנוסף, הפתרון שלנו הופך 90% מהדוחות החוזרים לאוטומטיים, ומקצר את זמן הביקורת ב-60%.
אילו נתונים נדרשים לדוחות התאמה?
כל נתוני ההתאמה מאוחסנים בטבלאות מותאמות אישית שנוצרו במהלך האינטגרציה:
-
local_marking_codes— קודים, סטטוסים, קישורי הזמנות -
local_cz_documents— מסמכים שנשלחו ל-Chesny Znak (משיכות, החזרות) -
local_egais_documents— מסמכי EGAIS (לאלכוהול)
הדוחות נבנים באמצעות שאילתות SQL לטבלאות אלה, תוך חיבור לטבלאות Bitrix סטנדרטיות (b_sale_order, b_catalog_product). אם המערכת שלך עדיין אינה כוללת אינטגרציית CZ, יש ליישם אותה תחילה — זה לוקח 2–4 שבועות כשלב נפרד.
כיצד להגדיר דיווח צעד אחר צעד?
שלב 1: ניתוח נתונים ועיצוב טבלאות. אנו בודקים את הרכב האינטגרציה, קובעים שדות ואינדקסים נדרשים. לעיתים קרובות אנו מוסיפים קשרים חסרים כדי להאיץ שאילתות.
שלב 2: פיתוח שאילתות SQL. אנו יוצרים אגרגציות לדוחות תפעוליים, אנליטיים והתאמה. אנו משתמשים בשאילתות SQL ישירות — הן מהירות פי 1.3 מ-ORM, דבר קריטי עבור מערכי נתונים של למעלה מ-100,000 רשומות.
שלב 3: יצירת פאנל אדמיניסטרטיבי. אנו מייצרים דפים עם מסננים, טבלאות וייצוא XLSX. אנו מוסיפים התראות למצבים קריטיים (קודים תקועים, שגיאות CZ).
דוחות תפעוליים
דוח תפעולי מציג את מספר הקודים שנמשכו ביום, החזרות ושגיאות. הוא מבוסס על שאילתת 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לצורך ויזואליזציה, אנו משתמשים בדפי ניהול סטנדרטיים של Bitrix עם מסננים לפי תאריך, סטטוס ומוצר.
דוחות אדמיניסטרטיביים ב-Bitrix
ב-Bitrix, דוחות אדמיניסטרטיביים מתווספים באמצעות מודול 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/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 ימים |
| Bitrix ORM | בינוני | מוגבלת | 2–3 ימים |
SQL ישיר מהיר פי 1.3 מ-Bitrix ORM עבור אגרגציות על נפחים גדולים.
דוח ההתאמה הקריטי
| סוג דוח | תוכן | תדירות |
|---|---|---|
| תפעולי | מספר קודים שנמשכו, החזרות, שגיאות | יומי |
| אנליטי | דינמיקת משיכות לפי קטגוריה, שיעור החזרות, זמן עיבוד CZ | שבועי/חודשי |
| התאמה | אי-התאמות בין מלאי Bitrix לקודים | לפי דרישה |
דוח ההתאמה הוא החשוב ביותר. הוא מזהה מוצרים שבהם מספר הקודים אינו תואם למלאי:
-- Расхождение между остатками Битрикс и зарезервированными/выведенными кодами
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%, אנו יוזמים ספירת מלאי. עבור קמעונאי עם 10,000 פריטים, דוח זה הפחית אי-התאמות ב-95% בתוך הרבעון הראשון.
ייצוא לאקסל
לייצוא נתונים לרואי חשבון או רגולטורים — ייצוא באמצעות 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);
} התראות למצבים קריטיים
מצבים קריטיים הדורשים תגובה מיידית:
- קוד בסטטוס
/local/php_interface/admin/במשך יותר משעה — CZ לא אישר את המשיכה - שגיאת משיכת קוד (סטטוס
// /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';מ-CZ) — ייתכן שהקוד כבר נמשך דרך ערוץ אחר - חריגת מלאי מעל 5% — נדרשת ספירת מלאי דחופה
התראות דרך -- Расхождение между остатками Битрикс и зарезервированными/выведенными кодами 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 למייל העובד האחראי. ההתראות מוגדרות לפי תהליך העבודה שלך עם ערכי סף אישיים.
מה כלול ותוצרים
- פיתוח דפי ניהול עם מסננים וטבלאות
- שאילתות SQL אגרגטיביות: דוחות תפעוליים, אנליטיים והתאמה
- ייצוא לאקסל
- הגדרת התראות למצבים קריטיים
- תיעוד משתמש מקיף, העברת גישה ותמיכה לאחר השקה
לוחות זמנים: החל משבועיים אם קיימת אינטגרציה פעילה עם CZ/EGAIS. אנו עושים הכל במפתח פתוח — אתה מקבל פאנל דיווח מוכן.
טעויות הגדרה טיפוסיות
- אי התחשבות בעיכובי אישור CZ — קוד עלול להיתקע ב-
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ו-ERROR— שאילתות על נפחים גדולים מואטות. - התעלמות מכפילויות קודים — אי-התאמות עלולות להתרחש במשיכה חוזרת.
צור קשר להערכת הפרויקט שלך — נציע את הפתרון האופטימלי. הזמן פיתוח דוחות התאמה מותאמים אישית וקח שליטה מלאה על ההתאמה.

