שילוב 1C-Bitrix עם מערכת מרקורי: אוטומציה של eVSD
שילוב 1C-Bitrix עם מערכת מרקורי הוא חובה למסחר חוקי במוצרים מן החי. כל יום, מיליוני eVSD עוברים דרך FSIS, ועיבוד ידני מוביל לעיכובים ולקנסות של עד $1.4k–1.9k. אנו מבצעים אוטומציה של ההחלפה באמצעות REST API ותורים אסינכרוניים, ומקצרים את זמן הקבלה של אצווה בודדת פי 5. נבחן את הפרויקט שלך תוך יומיים — פשוט צור קשר.
שילוב 1C-Bitrix עם מרקורי
מרקורי מספקת REST API (https://api.vetrf.ru/schema/platform/v2/). האימות מתבצע באמצעות מפתח API שמונפק לאחר רישום הארגון. הפעולות העיקריות: שליפת מסמכים נכנסים, כיבוי eVSD, ובדיקת סטטוסי בקשות. חשוב לקחת בחשבון אסינכרוניות: כל בקשה יוצרת אפליקציה שיש לעבד עם קריאה נפרדת. לפי תיעוד FSIS Mercury, מותרות עד 10 בקשות לדקה לכל מפתח API. לכן, אנו מיישמים תור עם ניסיונות חוזרים.
פרטים נוספים על עבודת ה-API
בקשות למרקורי חייבות לכלול את כותרת ה-`apiKey` ואת ה-`Content-Type` הנכון. התגובות מגיעות בפורמט JSON עם שדה `application` המכיל את `applicationId` למעקב. בעת כיבוי מסמך, יש להעביר את הכמות המדויקת של המוצר ואת יחידת המידה.מחזור החיים האופייני של מסמך:
Поставщик → отгрузил товар с эВСД в Меркурий → Магазин получает товар → гасит входящий эВСД (acceptVetDocument) → Хранение на складе: учётная единица с ID эВСД → Заказ оформлен → продажа физлицу → Списание через транзакцию возврата (transferReceiptTransaction) בעת מכירה לצרכן קצה (יחיד), אין צורך ב-eVSD חדש — יש רק לכבות את המסמך עבור הכמות שנמכרה.
יישום לקוח PHP:
class MerkuryClient {
private string $apiUrl = 'https://api.vetrf.ru/schema/platform/v2';
private string $apiKey;
private string $issuerId;
public function __construct(string $apiKey, string $issuerId) {
$this->apiKey = $apiKey;
$this->issuerId = $issuerId;
}
public function getIncomingDocuments(string $enterpriseGuid): array {
return $this->request('GET', "/enterprises/{$enterpriseGuid}/vetDocuments", ['status' => 'CONFIRMED', 'type' => 'INCOMING'] );
}
public function extinguishDocument(
string $enterpriseGuid,
string $vetDocId,
float $quantity,
string $unit
): string {
$response = $this->request('POST', "/enterprises/{$enterpriseGuid}/vetDocuments/{$vetDocId}/extinguish", [
'returnedQuantity' => $quantity,
'returnedUnit' => $unit,
'operatorId' => $this->issuerId,
] );
return $response['application']['applicationId'];
}
public function processTransaction(
string $enterpriseGuid,
string $transactionId
): array {
return $this->request('POST', "/enterprises/{$enterpriseGuid}/applications/{$transactionId}/process" );
}
private function request(string $method, string $path, array $params = []): array {
// ... HTTP-запрос с заголовком 'apiKey: {KEY}'
}
} אחסון eVSD ב-Bitrix
כל אצווה של סחורה במחסן מקושרת ל-eVSD אחד או יותר. אנו מאחסנים אותם בטבלת ORM נפרדת:
class VetDocumentTable extends \Bitrix\Main\ORM\Data\DataManager
{
public static function getTableName(): string
{
return 'local_merkury_vet_docs';
}
public static function getMap(): array
{
return [
new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new \Bitrix\Main\ORM\Fields\IntegerField('PRODUCT_ID'),
// товар в каталоге
new \Bitrix\Main\ORM\Fields\StringField('VET_DOC_ID'),
// UUID документа в Меркурий
new \Bitrix\Main\ORM\Fields\StringField('ENTERPRISE_GUID'),
// GUID предприятия
new \Bitrix\Main\ORM\Fields\FloatField('QUANTITY'),
// остаток на складе
new \Bitrix\Main\ORM\Fields\StringField('UNIT'),
// ед. изм: kg, piece
new \Bitrix\Main\ORM\Fields\StringField('STATUS'),
// 'active', 'extinguished'
new \Bitrix\Main\ORM\Fields\DatetimeField('EXPIRE_DATE'),
// срок годности
];
}
}כאשר אצווה מגיעה, נוצר רשומה עם מזהה ה-eVSD והכמות. בעת מכירה, הכמות יורדת; כאשר היא מתכלה, הסטטוס משתנה לכבוי.
אוטומציה של כיבוי
אם אתה מכבה ידנית, אתה יכול בקלות לפספס מועד אחרון — ואז התעודה נשללת, והסחורה הופכת לבלתי חוקית. קנסות על מסחר ללא eVSD הם עד $1.4k–1.9k. אוטומציה מבטלת טעויות אנוש ועומדת בדרישות 54-FZ. בנוסף, ה-API של מרקורי עובד באופן אסינכרוני: בקשה יוצרת אפליקציה שיש לעבד עם קריאה נפרדת. אנו מיישמים תור עם ניסיונות חוזרים כדי להבטיח שאף מסמך לא יאבד.
השוואה: גישה ידנית לעומת אוטומטית
| פרמטר | מצב ידני | אוטומציה |
|---|---|---|
| זמן קבלה לאצווה | 15 דקות | 3 דקות |
| כיבוי eVSD בעת מכירה | ידני (לעיתים נשכח) | אוטומטי, עם תור |
| סיכון לשגיאות | גבוה (גורם אנושי) | מינימלי |
| עמידה ב-54-FZ | דורש בקרה נוספת | מובנה |
| עלות זמן חודשית (250 הזמנות) | ~40 שעות | ~8 שעות |
הנתונים מראים: אוטומציה מאיצה את התהליך פי 5 ומפחיתה סיכונים תפעוליים.
מקרה בוחן: חנות מוצרי חווה
הלקוח שלנו הוא חנות מקוונת המוכרת בשר ומוצרי חלב מ-15 חוות. היקף: ~250 הזמנות בשבוע. לפנינו, קבלת אצווה בודדת לקחה 15 דקות של הזנה ידנית במרקורי, וכיבוי בעת מכירה לא בוצע כלל — סיכון.
פתרון: ביצענו אוטומציה של הקבלה (דרך פאנל הניהול של Bitrix: עובד המחסן מזין את מזהה הקבלה, המערכת מוצאת אוטומטית eVSD נכנסים מהספק ב-24 השעות האחרונות ומציעה לכבות). למשלוח, אנו משתמשים במודל דו-שלבי: כאשר מוזמנת הזמנה, נוצרת בקשת כיבוי; handler cron רץ כל 2 דקות וקורא ל-processTransaction. סנכרון המלאי רץ כל שעה.
| מדד | לפני | אחרי |
|---|---|---|
| זמן קבלה (אצווה אחת) | 15 דקות (הזנה ידנית במרקורי) | 3 דקות (אישור) |
| כיבוי eVSD בעת מכירה | לא בוצע (הפרה) | אוטומטי |
| בדיקות רוסלקוזנדזור | אזהרה | ללא בעיות |
חיסכון בזמן על קבלה: 80% — כ-40 שעות בחודש. בנוסף, קנסות על כיבויים חסרים מבוטלים.
סנכרון מלאי
התאמה תקופתית היא חובה. המלאי בטבלת Поставщик → отгрузил товар с эВСД в Меркурий → Магазин получает товар → гасит входящий эВСД (acceptVetDocument) → Хранение на складе: учётная единица с ID эВСД → Заказ оформлен → продажа физлицу → Списание через транзакцию возврата (transferReceiptTransaction) מושווה למלאי הארגון במרקורי (GET class MerkuryClient { private string $apiUrl = 'https://api.vetrf.ru/schema/platform/v2'; private string $apiKey; private string $issuerId; public function __construct(string $apiKey, string $issuerId) { $this->apiKey = $apiKey; $this->issuerId = $issuerId; } public function getIncomingDocuments(string $enterpriseGuid): array { return $this->request('GET', "/enterprises/{$enterpriseGuid}/vetDocuments", ['status' => 'CONFIRMED', 'type' => 'INCOMING'] ); } public function extinguishDocument( string $enterpriseGuid, string $vetDocId, float $quantity, string $unit ): string { $response = $this->request('POST', "/enterprises/{$enterpriseGuid}/vetDocuments/{$vetDocId}/extinguish", [ 'returnedQuantity' => $quantity, 'returnedUnit' => $unit, 'operatorId' => $this->issuerId, ] ); return $response['application']['applicationId']; } public function processTransaction( string $enterpriseGuid, string $transactionId ): array { return $this->request('POST', "/enterprises/{$enterpriseGuid}/applications/{$transactionId}/process" ); } private function request(string $method, string $path, array $params = []): array { // ... HTTP-запрос с заголовком 'apiKey: {KEY}' } } ). אי-התאמות מתועדות ומודיעות למנהל. זהו אמצעי הגנה נוסף מפני דה-סנכרון.
מה כלול בשילוב מפתח מלא
- רישום במרקורי, קבלת מפתח API (אנו מדריכים אותך בכל שלב)
- פיתוח לקוח PHP: עבודה עם מסמכים נכנסים, כיבוי, עיבוד אפליקציות
- טבלת אחסון eVSD ב-Bitrix המקושרת למוצרים
- ממשק קבלה בפאנל הניהול (מהיר, עם רמזים)
- כיבוי אוטומטי בעת משלוח עם תור וניסיונות חוזרים אוטומטיים
- סנכרון מלאי מתוזמן (cron), ניטור אי-התאמות
- תיעוד תפעולי, הדרכת צוות, תמיכה לאחר השקה
לוח זמנים: 6 עד 10 שבועות בהתאם למספר הספקים ומורכבות החשבונאות. יש לנו למעלה מ-5 שנות ניסיון בשילוב Bitrix עם מערכות ממשלתיות ויותר מ-50 פרויקטים מוצלחים. הזמן ביקורת על הפרויקט שלך — קבל תוכנית שילוב תוך יומיים.

