Інтеграція 1С-Бітрікс з ЄДАІС: налаштування, кейси та терміни
Помилка списання алкоголю в ЄДАІС — одна з частих причин блокування ліцензії інтернет-магазину. Кожен не зафіксований продаж загрожує штрафом до $2.7k–3.9k. Ми спеціалізуємося на інтеграції 1С-Бітрікс з ЄДАІС під ключ: автоматизуємо передачу даних про продажі, повернення та залишки. Гарантуємо фіксацію кожної операції — виключаємо штрафи. За час роботи виконали понад 50 проєктів для алкогольних інтернет-магазинів. Ми — команда інженерів із 5-річним досвідом інтеграції ЄДАІС.
ЄДАІС — федеральна система обліку алкоголю. Інтернет-магазин, що продає алкоголь дистанційно, зобов'язаний фіксувати кожен продаж. 1С-Бітрікс має взаємодіяти з ЄДАІС через УТМ (універсальний транспортний модуль) — локальне ПЗ, яке шифрує та підписує звернення до ЄДАІС.
Ручне списання алкоголю займає до 2 годин на день і загрожує помилками. Автоматизація окупається за 1-2 місяці за рахунок виключення штрафів та економії часу. Вартість інтеграції починається від $1.4k–1.9k. та окупається за 1-2 місяці.
Що таке УТМ і навіщо він потрібен?
УТМ — універсальний транспортний модуль, розроблений Росалкогольрегулюванням. Це локальний Windows- або Linux-додаток, який приймає XML-запити від сайту, шифрує їх за допомогою криптоключа JaCarta та відправляє в ЄДАІС. Відповіді УТМ отримує асинхронно та поміщає в чергу для завантаження. Без УТМ пряма інтеграція з ЄДАІС неможлива.
Архітектура інтеграції
ЄДАІС не надає хмарний REST API. Взаємодія тільки через УТМ, встановлений на локальному сервері. УТМ приймає XML-запити на порту 8080 та віддає відповіді через чергу.
1С-Бітрікс → XML-запит → УТМ (localhost:8080) ↓ ЄДАІС (Росалкогольрегулювання) ↓ УТМ формує відповідь → Бітрікс polling черги відповідей Схема асинхронна: запит відправлено — відповідь з'являється через секунди або хвилини.
Структура XML для запиту списання
Приклад XML-документа списання
<!-- TTNQuery — запит на списання при реалізації --> <?xml version="1.0" encoding="utf-8"?> <ns:Documents xmlns:ns="urn:TNInformF2Reg:Documents" xmlns:oref="urn:TNInformF2:OrgInfo" version="2"> <ns:Document> <ns:TTNInformF2Reg> <ns:Header> <ns:IsSSMark>0</ns:IsSSMark> </ns:Header> <ns:Content> <ns:Position> <ns:Identity>1</ns:Identity> <ns:ProductCode>0366700000002375890</ns:ProductCode> <ns:Quantity>1.000</ns:Quantity> <ns:InformF1RegId>TEST-TTN123456</ns:InformF1RegId> <ns:InformF2RegId>TEST-F2-123456</ns:InformF2RegId> </ns:Position> </ns:Content> </ns:TTNInformF2Reg> </ns:Document> </ns:Documents> PHP-клієнт для взаємодії з УТМ
Код клієнта
class EgaisUtmClient { private string $utmUrl; private string $orgRarId; // ідентифікатор організації в ЄДАІС public function __construct(string $utmUrl, string $orgRarId) { $this->utmUrl = $utmUrl; $this->orgRarId = $orgRarId; } public function sendDocument(string $xmlDocument): string { $response = file_get_contents( $this->utmUrl . '/opt/in/TTNInformF2Reg', false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/xml', 'content' => $xmlDocument, ] ]) ); $replyXml = simplexml_load_string($response); return (string)$replyXml->ReplyId; } public function getReplyQueue(): array { $response = file_get_contents($this->utmUrl . '/opt/out'); return $this->parseQueue($response); } public function getReply(string $replyId): ?array { $response = file_get_contents( $this->utmUrl . "/opt/out/TTNInformF2Reg/{$replyId}" ); if (!$response) return null; $xml = simplexml_load_string($response); return [ 'result' => (string)$xml->Result->Conclusion, 'comment' => (string)$xml->Result->ConclusionDate, 'egais_id' => (string)$xml->Result->AccisesHeader->EGAISQuntId, ]; } } Обробка замовлень у Бітрікс
Обробник події зміни статусу
// Обробник події зміни статусу замовлення \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleStatusOrderChange', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $statusId = $event->getParameter('VALUE'); if ($statusId !== 'shipped') return; // відправка тільки при статусі «Відвантажено» $egaisItems = $this->getAlcoholItemsFromOrder($order); if (empty($egaisItems)) return; $client = new EgaisUtmClient(EGAIS_UTM_URL, EGAIS_ORG_RAR_ID); $xml = $this->buildActWriteOff($order, $egaisItems); $replyId = $client->sendDocument($xml); // Зберігаємо replyId для відстеження EgaisDocumentTable::add([ 'ORDER_ID' => $order->getId(), 'REPLY_ID' => $replyId, 'STATUS' => 'pending', 'SENT_AT' => new \Bitrix\Main\Type\DateTime(), ]); } ); Як уникнути помилок при обміні з ЄДАІС? Кейс з нашої практики
З нашої практики: один із наших клієнтів — онлайн-магазин вино-горілчаних виробів, ~300 замовлень на день. Щоденне завдання — списання кожної реалізованої одиниці алкоголю до ЄДАІС. При помилці списання замовлення не можна вважати закритим з точки зору закону.
Проблеми проєкту:
-
УТМ встановлено на офісному Windows-комп'ютері, сайт — на хостингу. Прямого мережевого доступу немає.
-
Іноді УТМ не відповідав (перезавантаження, оновлення), документи губилися.
-
ЄДАІС повертає AlcoCode — унікальний код кожної пляшки (для маркованого алкоголю), потрібно зберігати відповідність AlcoCode ↔ позиція замовлення.
Рішення:
-
VPN-тунель між хостингом та офісним сервером + Middleware на офісному сервері, який приймає запити з Бітрікс та передає їх в УТМ. Middleware на Node.js, працює як Windows-служба.
-
Черга завдань на стороні Бітрікс: непідтверджені документи повторно відправляються через 10 хвилин (до 5 спроб). При вичерпанні — повідомлення адміністратору.
-
При отриманні підтвердження від ЄДАІС — зберігаємо EGAISQuntId в таблиці
local_egais_alcocodes, зв'язок з позицією замовлення Бітрікс.
| Показник | До інтеграції | Після |
|---|---|---|
| Ручні операції в ЄДАІС | ~2 год/день | 0 (тільки моніторинг) |
| Затримка списання від факту відвантаження | 1–3 год | < 15 хв |
| Пропущені списання | 3–5%/міс | < 0.1% |
Автоматична інтеграція в 10 разів швидша за ручне введення даних та виключає штрафи за кожне не зафіксоване списання. Вона також у 3 рази надійніша за альтернативні напівручні рішення.
Повернення в ЄДАІС
При поверненні алкоголю — зворотна операція: поставка на баланс через документ WayBillAct. Тригер — подія повернення в Бітрікс (OnSaleRefund).
Залишки ЄДАІС в Бітрікс
Для синхронізації залишків на складі з даними ЄДАІС — періодичний запит до УТМ (RestBal) та порівняння з залишками в каталозі Бітрікс. Розбіжності — в лог для ревізії.
Що входить в роботу
- Налаштування УТМ, отримання ключів ЄДАІС (через Росалкогольрегулювання)
- Мережева зв'язка: VPN або Middleware-сервіс
- PHP-клієнт для УТМ: відправка документів, polling відповідей
- Генерація XML для актів списання, повернень
- Обробники подій Бітрікс: відвантаження, повернення
- Черга з ретраями, моніторинг помилок
- Таблиця історії ЄДАІС-документів в Бітрікс
- Навчання адміністратора, 3 місяці підтримки
Порівняння ручного та автоматичного підходу:
| Критерій | Ручне введення | Автоматична інтеграція |
|---|---|---|
| Час на одну операцію | 10–15 хвилин | < 1 секунди |
| Ризик помилки | високий | ≈ 0% |
| Витрати часу на день | до 2 годин | 5 хвилин (контроль) |
Типові помилки при налаштуванні:
- Відсутність постійного мережевого каналу до УТМ — документи не доходять.
- Неправильні сертифікати — ЄДАІС відхиляє запити.
- Пропуск статусів замовлення — списання не тригериться.
- Немає обробки черги відповідей — підтвердження губляться.
Чому варто довірити інтеграцію нашим інженерам?
Сертифіковані спеціалісти з багаторічним досвідом. Ми — команда інженерів із 5-річним досвідом інтеграції ЄДАІС, виконали понад 50 проєктів для алкогольних інтернет-магазинів. Надаємо гарантію на всі роботи та навчання вашої команди. Замовте аудит вашої інфраструктури — оцінимо проєкт і назвемо терміни.
Терміни: за наявності налаштованого УТМ та мережевого доступу — 4–6 тижнів. При необхідності налаштування інфраструктури — 8–12 тижнів. Вартість інтеграції починається від $1.4k–1.9k. Отримайте консультацію інженера вже сьогодні.







