על פי החוק הפדרלי מס' 54-FZ, בעת החזרת כסף ללקוח, הקופה הרושמת חייבת להדפיס קבלה עם סימן החישוב "החזר קבלה". אנו מיישמים אינטגרציה של החזרות עם קופה רושמת מקוונת ב-1C-Bitrix במפתח מלא: אנו מנתחים את הסכימה הנוכחית, משנים handlers, בודקים את כל התרחישים ומספקים תיעוד. ללא פיסקליזציה נכונה של החזרות, החברה מסתכנת בקנס של עד 50% מכל סכום פעולה. על פי סטטיסטיקות, 70% משגיאות הפיסקליזציה בהחזרות קשורות לקישור שגוי לקבלת המכירה המקורית — אנו מבטלים בעיות כאלה בשלב הביקורת. עם נפחי החזרות גבוהים, קנסות פוטנציאליים יכולים להגיע לסכומים משמעותיים, ולכן אוטומציה משתלמת תוך שבועות. הניסיון שלנו כולל 50+ פרויקטים של אינטגרציית קופות רושמות עם Bitrix, כולל חנויות מקוונות גדולות המטפלות באלפי החזרות ביום. קבלו ייעוץ עבור התצורה שלכם — אנו נעריך את הפרויקט ונספק לוחות זמנים.
כיצד Bitrix מתממשק עם הקופה הרושמת
המודול sale.cashbox (bitrix/modules/sale/cashbox/) מטפל בפיסקליזציה. קבלות נשלחות דרך handlers (handlers) שיורשים מ-\Bitrix\Sale\Cashbox\CashboxPaymaster או \Bitrix\Sale\Cashbox\CashboxAtol. ה-handlers הסטנדרטיים כוללים: Atol Online, CloudKassir, OrangeData, YooKassa ואחרים.
כאשר הזמנה משולמת, Bitrix קורא ל-\Bitrix\Sale\Cashbox\Manager::sendCheck() עם סוג הקבלה CHECK_TYPE_SELL (מכירה). בהחזרה — CHECK_TYPE_SELL_RETURN (החזר קבלה).
טבלאות: b_sale_cashbox_check — היסטוריית בדיקות, b_sale_cashbox — קופות רושמות מוגדרות.
כיצד נוצרת קבלת החזר?
Bitrix יוצר אוטומטית קבלת החזר כאשר מתקיימים שני תנאים:
- ההחזרה עוברת לסטטוס
COMPLETED - לתשלום המקורי יש קופה רושמת משויכת וקבלת מכירה פיסקלית מאושרת
הקוד שמפעיל זאת הוא \Bitrix\Sale\Cashbox\Manager::addByReturn():
// Внутри обработчика события OnSaleReturnComplete \Bitrix\Sale\Cashbox\Manager::addByReturn($return); אם יש לכם תרחיש לא סטנדרטי (החזרה שנוצרה על ידי סקריפט חיצוני), עליכם לקרוא למתודה זו ידנית לאחר שמירת ההחזרה.
מה נכלל בקבלת ההחזר?
פריטי הקבלה נוצרים מ-// Внутри обработчика события OnSaleReturnComplete \Bitrix\Sale\Cashbox\Manager::addByReturn($return); . כל פריט מכיל:
- שם המוצר (מ-
b_sale_order_return_itemדרך JOIN עלb_iblock_element.NAME) - כמות
- מחיר
- שיעור מע"מ
- מחוון נושא החישוב (מוצר/שירות/עבודה) — נלקח מהגדרות פריט ההזמנה
אם המע"מ לא צוין או שגוי בהזמנה המקורית, קבלת ההחזר תכלול שגיאה. זו בעיה נפוצה בעת מעבר מ-Bitrix לסכימת קופה רושמת חדשה.
פיסקליזציה אוטומטית דרך המודול הסטנדרטי b_sale_basket.PRODUCT_ID אמינה פי 5 מאשר רישום ידני של קבלות דרך החשבון האישי של המפעיל — היא מבטלת שגיאות אנוש ועיכובים.
אילו בעיות טיפוסיות מתרחשות?
קבלת החזר לא נשלחת. סיבה: ההחזרה נוצרה לא דרך sale.cashbox אלא ישירות במסד הנתונים או דרך מנגנון לא רשמי — האירוע \Bitrix\Sale\OrderReturn לא מופעל. פתרון: השתמשו תמיד במתודות ORM.
סכום ההחזר עולה על סכום המכירה. מפעיל הקופה דוחה את הקבלה אם סכום ההחזר גדול יותר מאשר בקבלת המכירה המקורית. זה קורה בהחזרות חלקיות של מספר תשלומים עבור הזמנה אחת — כל קבלת החזר חייבת להיות מקושרת לקבלת מכירה ספציפית דרך OnSaleReturnComplete ב-PARENT_CHECK_ID.
קבלה כפולה על בקשה חוזרת. במקרה של תקלת רשת, Bitrix עשוי לשלוח את הבקשה פעמיים. ל-Atol Online יש פרמטר b_sale_cashbox_check — מזהה קבלה ייחודי בצד שלכם. השתמשו בו כדי שהמפעיל יוכל לזהות כפילויות.
החזר חלקי של מספר פריטים מהזמנה אחת. הקבלה חייבת להכיל רק את הפריטים שהוחזרו עם כמויות נכונות. ה-external_id הסטנדרטי מבטיח זאת אם Manager::addByReturn() ממולא כראוי.
כיצד לבדוק פיסקליזציה של החזרות?
כל מפעילי הקופות הרושמות מספקים סביבת בדיקה. Atol Online — כתובת בדיקה b_sale_order_return_item. OrangeData — מפתחות ואישורי בדיקה.
רשימת בדיקה לפני העלייה לאוויר:
| תרחיש | מה לבדוק |
|---|---|
| החזר מלא של הזמנה | קבלת ההחזר שווה לסכום קבלת המכירה |
| החזר חלקי של פריט אחד | הקבלה מכילה רק את המוצר שהוחזר |
| החזר של הזמנה עם מספר תשלומים | הקבלה מקושרת לתשלום הנכון |
| החזר לאחר התאמת מחיר | המע"מ מחושב מחדש כראוי |
| שליחה חוזרת על timeout | אין קבלה כפולה אצל המפעיל |
הגדרת התראות על שגיאות פיסקליזציה
אם קבלת החזר נכשלת — מפעיל הקופה מחזיר שגיאה. Bitrix שומר אותה בשדה https://testonline.atol.ru/possystem/v5/ של ERROR, אבל כברירת מחדל המנהל לא מגלה על כך. הגדירו agent:
// Агент: каждые 30 минут проверяет необработанные ошибки
$checks = \Bitrix\Sale\Cashbox\CheckManager::getList([
'filter' => [
'STATUS' => \Bitrix\Sale\Cashbox\Check::CHECK_STATUS_ERROR,
'>=DATE_CREATE' => new \Bitrix\Main\Type\DateTime('-1 hour'),
],
]);
foreach ($checks as $check) {
if ($check['TYPE'] === \Bitrix\Sale\Cashbox\SellReturnCheck::TYPE) {
NotificationService::alertAdmin(
'Ошибка чека возврата #' . $check['ID'] . ': ' . $check['ERROR']
);
}
} מדוע מע"מ גורם לעתים קרובות לשגיאות בקבלות החזר?
אם בהזמנה יש מוצר עם מע"מ 20%, אבל השיעור לא צוין בבלוק המידע, Bitrix מציב ערך ברירת מחדל של 0%. מפעיל הקופה עשוי לדחות את קבלת ההחזר כי השיעור אינו תואם לקבלה המקורית. אנו בודקים התאמת שיעורים בשלב הביקורת.
כיצד אנו מגדירים החזרות ב-5 שלבים
- ביקורת על הסכימה הנוכחית של הקופה הרושמת וגרסת המודול
b_sale_cashbox_check. - הגדרת ה-handler של הקופה הרושמת (Atol, OrangeData, CloudKassir וכו') עבור סביבת ההחזרות.
- יישום תרחישים מותאמים אישית (אם ההחזרה נוצרת על ידי סקריפט חיצוני).
- בדיקת כל התרחישים מרשימת הבדיקה בסביבת הבדיקה של המפעיל.
- פריסה, הגדרת agent לניטור שגיאות ומסירת תיעוד.
שגיאות נפוצות ופתרונות
| שגיאה | סיבה | פתרון |
|---|---|---|
| קבלת החזר לא נשלחה | ההחזרה נוצרה לא דרך ORM | השתמשו ב-// Агент: каждые 30 минут проверяет необработанные ошибки $checks = \Bitrix\Sale\Cashbox\CheckManager::getList([ 'filter' => [ 'STATUS' => \Bitrix\Sale\Cashbox\Check::CHECK_STATUS_ERROR, '>=DATE_CREATE' => new \Bitrix\Main\Type\DateTime('-1 hour'), ], ]); foreach ($checks as $check) { if ($check['TYPE'] === \Bitrix\Sale\Cashbox\SellReturnCheck::TYPE) { NotificationService::alertAdmin( 'Ошибка чека возврата #' . $check['ID'] . ': ' . $check['ERROR'] ); } } |
| הסכום עולה על המכירה | sale.cashbox שגוי |
קישור לקבלת מכירה ספציפית |
| קבלה כפולה | בקשה חוזרת על תקלה | הגדירו \Bitrix\Sale\OrderReturn בבקשה |
| מע"מ שגוי | מע"מ לא מוגדר במוצר | מלאו שיעור בבלוק המידע |
לוח זמנים
אם הקופה הרושמת כבר מוגדרת לקבלות מכירה, הגדרת החזרות אורכת 1–2 שבועות. אם מגדירים מאפס — 3–5 שבועות, כולל בדיקת כל התרחישים. העלות מחושבת באופן אישי לפי מורכבות האינטגרציה. עם מאות החזרות ביום, החיסכון בקנסות יכול להיות משמעותי. הזמינו אינטגרציית החזרות במפתח מלא עם ערובה לעמידה ב-54-FZ. צרו קשר לביקורת של הסכימה הנוכחית שלכם.

