Автоматизація алкогольного обліку: інтеграція 1С-Бітрікс з ЄДАІС

Ручне списання алкоголю в ЄДАІС забирає час і загрожує помилками, які можуть призвести до блокування ліцензії. Ми автоматизуємо інтеграцію 1С-Бітрікс з ЄДАІС під ключ, налаштовуючи обмін через УТМ. Наша команда бере на себе весь цикл — від аудиту до впровадження та подальшої підтримки, щоб кожна операція фіксувалася надійно та без зриву строків.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Автоматизація алкогольного обліку: інтеграція 1С-Бітрікс з ЄДАІС
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1534
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1049
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    820
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    920
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    858
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1209

Інтеграція 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 замовлень на день. Щоденне завдання — списання кожної реалізованої одиниці алкоголю до ЄДАІС. При помилці списання замовлення не можна вважати закритим з точки зору закону.

Проблеми проєкту:

  1. УТМ встановлено на офісному Windows-комп'ютері, сайт — на хостингу. Прямого мережевого доступу немає.

  2. Іноді УТМ не відповідав (перезавантаження, оновлення), документи губилися.

  3. ЄДАІС повертає AlcoCode — унікальний код кожної пляшки (для маркованого алкоголю), потрібно зберігати відповідність AlcoCode ↔ позиція замовлення.

Рішення:

  1. VPN-тунель між хостингом та офісним сервером + Middleware на офісному сервері, який приймає запити з Бітрікс та передає їх в УТМ. Middleware на Node.js, працює як Windows-служба.

  2. Черга завдань на стороні Бітрікс: непідтверджені документи повторно відправляються через 10 хвилин (до 5 спроб). При вичерпанні — повідомлення адміністратору.

  3. При отриманні підтвердження від ЄДАІС — зберігаємо 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. Отримайте консультацію інженера вже сьогодні.