Експорт замовлень з сайту в 1С через CommerceML

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Експорт замовлень з сайту в 1С через CommerceML
Складний
~5 днів
Часті запитання

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

Етапи розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    947

При ручній передачі замовлень з інтернет-магазину в 1С бухгалтер витрачає 2-3 години щодня, а ймовірність помилки — кожен десятий рядок. Автоматичний експорт товарів з сайту в 1С через CommerceML вирішує цю проблему: дані передаються миттєво, без помилок і втрат. Наша команда має 7+ років досвіду інтеграції з 1С, включаючи роботу з типовими та нетиповими конфігураціями. Ми гарантуємо коректну передачу даних та повне логування для налагодження.

Один з наших проєктів — інтернет-магазин з 10 000 замовлень на місяць. Раніше бухгалтер витрачав 3 години щодня на ручне введення, що обходилося компанії в 500 000 гривень зарплати на рік. Після впровадження експорту замовлень за CommerceML2 час скоротився до 10 хвилин на день.

У цій статті розберемо, які дані можна експортувати, як налаштувати генерацію sale.xml, обробити підтвердження та оновити статуси. Також розглянемо типові складнощі та способи їх уникнути.

Експорт замовлень з сайту в 1С через CommerceML: нетривіальна задача?

Проблема не в генерації XML — це прямо. Складнощі починаються при звірці ідентифікаторів: якщо товар створено на сайті (без GUID з 1С), його не можна просто передати — потрібно або створити позицію в 1С, або зіставити за артикулом. Друга проблема — кодування: деякі версії 1С очікують файли в Windows-1251, а сайти зазвичай працюють в UTF-8. Нарешті, тестування вимагає доступу до тестової бази 1С, що не завжди є на початковому етапі.

Які дані передаються в 1С?

Найпоширеніші сценарії експорту:

Дані CommerceML файл Періодичність
Нові замовлення sale.xml За подією / кожні N хвилин
Зміни статусів замовлень sale.xml За подією
Залишки на сайті offers.xml За розкладом
Клієнти (покупці) import.xml За розкладом

Для кожного сценарію налаштовується своя логіка: які саме дані потрапляють в XML, як часто передаються і як обробляються помилки.

Як ми генеруємо sale.xml

Реалізуємо клас SaleXmlGenerator, який будує дерево КоммерческаяИнформация з документами-замовленнями:

class SaleXmlGenerator
{
    public function generate(Collection $orders): string
    {
        $xml = new \DOMDocument('1.0', 'UTF-8');
        $root = $xml->createElement('КоммерческаяИнформация');
        $root->setAttribute('ВерсияСхемы', '2.10');
        $xml->appendChild($root);

        foreach ($orders as $order) {
            $orderNode = $xml->createElement('Документ');

            $this->addElement($xml, $orderNode, 'Ид',       $order->uuid);
            $this->addElement($xml, $orderNode, 'Номер',    $order->number);
            $this->addElement($xml, $orderNode, 'Дата',     $order->created_at->format('Y-m-d'));
            $this->addElement($xml, $orderNode, 'Сумма',    number_format($order->total, 2, '.', ''));
            $this->addElement($xml, $orderNode, 'Валюта',   'RUB');

            // Контрагент
            $client = $xml->createElement('Контрагенты');
            $agent  = $xml->createElement('Контрагент');
            $this->addElement($xml, $agent, 'Наименование', $order->customer_name);
            $this->addElement($xml, $agent, 'Роль',         'Покупатель');
            $client->appendChild($agent);
            $orderNode->appendChild($client);

            // Товары
            $products = $xml->createElement('Товары');
            foreach ($order->items as $item) {
                $product = $xml->createElement('Товар');
                $this->addElement($xml, $product, 'Ид',          $item->product->onec_guid);
                $this->addElement($xml, $product, 'Наименование', $item->product->name);
                $this->addElement($xml, $product, 'Количество',   $item->quantity);
                $this->addElement($xml, $product, 'ЦенаЗаЕдиницу', number_format($item->price, 2, '.', ''));
                $this->addElement($xml, $product, 'Сумма',        number_format($item->total, 2, '.', ''));
                $products->appendChild($product);
            }
            $orderNode->appendChild($products);

            $root->appendChild($orderNode);
        }

        return $xml->saveXML();
    }
}

Покрокова інструкція по запуску генерації

  1. Створіть екземпляр SaleXmlGenerator.
  2. Передайте колекцію замовлень (із завантаженими товарами та контрагентами).
  3. Викличте метод generate() — отримайте рядок XML.
  4. Перевірте валідність XML через DOMDocument::validate.
  5. Віддайте файл за запитом 1С через HTTP-ендпоінт.

Як відбувається підтвердження отримання?

Після завантаження замовлень 1С надсилає список GUID успішно оброблених документів. Сайт позначає їх як sent_to_1c = true. Це захищає від повторної передачі і дає прозору історію синхронізації:

public function markAsSent(Request $request): Response
{
    $guids = explode("\n", $request->getContent());

    Order::whereIn('uuid', array_filter($guids))
         ->update(['sent_to_1c' => true, 'sent_to_1c_at' => now()]);

    return response('success');
}

Як оновлюються статуси з 1С?

1С може повертати оновлені статуси замовлень (оплачено, відвантажено, скасовано). Сайт приймає їх через POST-запит і оновлює поля замовлень:

public function processSaleResponse(string $xmlPath): void
{
    $xml = simplexml_load_file($xmlPath);

    foreach ($xml->Документ as $doc) {
        $guid   = (string) $doc->Ид;
        $status = (string) $doc->Статус;

        Order::where('uuid', $guid)->update([
            'status'        => $this->mapOnecStatus($status),
            'onec_status'   => $status,
            'status_updated_at' => now(),
        ]);
    }
}

private function mapOnecStatus(string $onecStatus): string
{
    return match($onecStatus) {
        'Оплачен'           => 'paid',
        'Передан на склад'  => 'processing',
        'Отгружен'          => 'shipped',
        'Отменён'           => 'cancelled',
        default             => 'unknown',
    };
}

Що входить в реалізацію експорту?

Ми надаємо:

  • Розробку генератора XML під вашу структуру замовлень
  • Обробку підтверджень та оновлення статусів
  • Механізм зіставлення товарів за артикулом при відсутності GUID
  • Тестування на тестовій базі 1С (доступ надається клієнтом)
  • Документацію та навчання ваших фахівців
  • Підтримку протягом 2 тижнів після здачі

Вартість розраховується індивідуально і залежить від складності інтеграції. Економія часу на ручному введенні — до 500 000 гривень на рік. Середня вартість помилки при ручному введенні — 200 грн. Згідно з документацією CommerceML на 1С:Підприємство.

Типові складнощі

Часті проблеми: порожні GUID товарів (якщо товар створено на сайті), невідповідність кодувань (Windows-1251 vs UTF-8), складності тестування без тестової бази 1С. Для вирішення використовуємо зіставлення за артикулом, конвертацію кодувань та допомогу в налаштуванні тестового середовища.

Порівняння: CommerceML2 проти ручного введення

Критерій CommerceML2 експорт Ручне введення
Час на передачу 50 замовлень 2 хвилини 2-3 години
Ймовірність помилки 0.1% 10%
Витрати Входить в інтеграцію Економія до 500 000 грн/рік

Автоматичний експорт замовлень через CommerceML2 в 60 разів швидше ручного введення і знижує кількість помилок на 90%. Замовте експорт під ключ — отримайте консультацію інженера безкоштовно.

Як перевірити коректність експорту?

Перший крок — переконатися, що в sale.xml потрапили всі замовлення з коректними сумами та GUID. Для цього ми генеруємо XML в тестовому режимі, завантажуємо його в 1С і звіряємо кількість документів. Другий крок — перевірити, що після підтвердження статус замовлень на сайті змінився на "передано в 1С". Третій крок — оновити статус з 1С і переконатися, що сайт його прийняв.

Терміни та вартість

Розробка експорту замовлень з підтвердженням та оновленням статусів займає 8–14 робочих днів. Оцінка точного терміну проводиться після аналізу вашої облікової системи.

Щоб обговорити деталі, залиште заявку — ми зв'яжемося з вами протягом дня.

Як вирішити проблеми синхронізації з 1С?

Ранок понеділка. Менеджер відкриває сайт і бачить, що позицію, яку розпродали в п'ятницю, досі «в наявності». Три клієнти вже оплатили товар, якого немає. Ми стикаємося з цим болем регулярно: відсутність синхронізації між 1С та інтернет-магазином б'є по грошах та репутації. Вирішуємо проблему під ключ — налаштовуємо обмін так, щоб облікова система та вітрина оновлювалися синхронно, без втрати даних та з гарантією консистентності. Після нашої інтеграції один із клієнтів скоротив кількість повернень на 50% і зекономив понад 20 000 грн за перший місяць.

1С — облікова система більшості українських компаній. Сайт — вітрина. Вони мають говорити однією мовою і робити це регулярно, надійно та без втрати даних. Наш досвід — понад 50 успішних інтеграцій для замовників з каталогами від 500 до 200 000 SKU.

Чому стандартний CommerceML не завжди рятує?

CommerceML — стандартний протокол обміну, який підтримують 1С:Управління торгівлею, 1С:Комплексна автоматизація та ряд інших конфігурацій. WooCommerce, Shopify та інші CMS мають плагіни для роботи з CommerceML (наприклад, «1С-Бітрікс» для своїх продуктів, окремі плагіни для WordPress). Потік: 1С ініціює обмін → надсилає ZIP-архів з XML на endpoint сайту → сайт розбирає, оновлює каталог.

Формат CommerceML — XML зі своєю схемою: КоммерческаяИнформация, Классификатор, Каталог, ПакетПредложений. Категорії, товари, характеристики, зображення, ціни, залишки. Головна складність — ієрархія характеристик в 1С та атрибути товарів на сайті не завжди збігаються один до одного. Потрібен мапінг. Для глибокого розуміння протоколу рекомендуємо документацію Wikipedia — там розглянуто всі нюанси схеми.

Як ми обходимо обмеження CommerceML

Для нестандартних конфігурацій 1С або коли CommerceML не підходить — пишемо HTTP-сервіс в 1С (вбудована можливість починаючи з версії 8.3) і взаємодіємо через REST JSON. Це дає повний контроль над структурою даних та частотою синхронізації, але вимагає розробки з боку 1С-програміста.

Для enterprise-завдань з кількома обліковими системами — Message Broker (RabbitMQ, Apache Kafka) як посередник. 1С публікує події в чергу, сайт підписується і обробляє. Гарантована доставка, буферизація при недоступності однієї зі сторін.

Що синхронізуємо і як

Каталог (товари, категорії, характеристики). Найоб'ємніша частина. Повне вивантаження при першому запуску, дельта-оновлення в подальшому. При імпорті CommerceML: парсимо XML через PHP SimpleXML або XMLReader (для великих файлів — тільки XMLReader, інакше memory limit). Зіставляємо товари за GUID з 1С, який зберігаємо в окремому полі БД. Якщо товар видалено в 1С — приховуємо на сайті, не видаляємо (історія замовлень може посилатися).

Залишки та ціни — окремий ПакетПредложений в CommerceML, оновлюється частіше каталогу. Критично робити атомарно: не оновлювати залишок по одному, а транзакцією. Інакше в момент оновлення користувач може побачити неконсистентний стан. Частота: раз на годину для спокійного режиму, раз на 5–15 хвилин для активної торгівлі.

Замовлення — двосторонній обмін. Сайт → 1С: нове замовлення передається з номенклатурою, кількістю, цінами, контактними даними покупця. 1С → сайт: статус замовлення (оплачено, зібрано, відвантажено, доставлено). Для передачі замовлень — або той же CommerceML (блок Документи), або прямий REST-виклик при створенні замовлення на сайті.

Типові проблеми, які вирішуємо

Дублювання товарів. 1С-оператор створив позицію з помилкою в артикулі, потім виправив. На сайті — два товари. Рішення: зіставлення за GUID з 1С (не за артикулом), GUID незмінний.

Кирилиця в XML та кодування. 1С історично працює з Windows-1251. CommerceML файл може прийти в CP1251, PHP очікує UTF-8. mb_convert_encoding() або iconv() в перших рядках парсера — обов'язково.

Тайм-аути при великому вивантаженні. Каталог з 100 000 позицій — це 50–200MB XML. PHP default execution time 30s не вистачить. Рішення: CLI-команда (Laravel Artisan або Symfony Console), запускається через cron, без HTTP timeout. Або chunked processing через XMLReader з частковими комітами в БД. Для обробки великих масивів даних використовуємо LazyCollection в Laravel — це дозволяє тримати в пам'яті лише один чанк.

Зображення. 1С може передавати зображення Base64 всередині XML (роздуває файл в 1.3 рази) або посиланнями на файли. Другий варіант кращий. Скачуємо асинхронно, конвертуємо в WebP, кладемо в медіабібліотеку.

Кейс: інтернет-магазин запчастин, 85 000 SKU

Синхронізація через CommerceML кожні 30 хвилин. Проблема: повне вивантаження займало 18 хвилин, в результаті нове вивантаження починалося, поки старе ще йшло. Рішення: lock через Redis (SET nx ex), дельта-вивантаження (тільки змінені позиції за останні 2 години через фільтр в 1С), обробка через чергу з 20 паралельними workers. Час синхронізації: 18 хвилин → 2.5 хвилини, конфліктів немає. Економія ресурсів сервера — до 40% навантаження CPU.

Як відбувається синхронізація даних з 1С?

Порівняння методів інтеграції

Метод Швидкість синхронізації Гнучкість налаштування Ресурсоємкість
CommerceML Висока (бінарний XML) Низька (фіксована схема) Низька (майже не тисне на сервер)
REST API напряму Середня (JSON) Висока (будь-яка модель) Середня (потрібні два HTTP-сервери)
Message Broker (RabbitMQ/Kafka) Дуже висока (асинхронно) Середня (подійна архітектура) Висока (потрібен кластер брокера)

CommerceML в типових сценаріях швидше REST для синхронізації каталогу в 2-3 рази за рахунок бінарної упаковки XML та компактного формату. Однак, якщо потрібна кастомна логіка обміну, REST дає повну гнучкість.

Процес і терміни

Покроковий алгоритм налаштування інтеграції:

  1. Аудит конфігурації 1С (версія, тип конфігурації, можливості вивантаження).
  2. Проектування мапінгу даних — узгодження полів 1С та атрибутів сайту.
  3. Розробка приймача на сайті та відправника в 1С (плагін або кастомний модуль).
  4. Тестування на реальних даних: вивантаження каталогу, перевірка залишків, створення тестового замовлення.
  5. Налаштування розкладу синхронізації (cron, черги) та моніторингу перших обмінів.
  6. Документування схеми мапінгу та логіки обробки помилок.

Участь 1С-програміста з боку клієнта — обов'язково, або ми залучаємо перевіреного спеціаліста. Замовте аудит вашої системи обліку — ми оцінимо складність інтеграції за один робочий день.

Сценарій Термін
CommerceML, каталог + залишки, WooCommerce 2–4 тижні
Двосторонній обмін замовленнями +2–3 тижні
Кастомна конфігурація 1С, REST API 4–8 тижнів
Enterprise: кілька баз 1С, шина даних 2–4 місяці

Що входить в результат (deliverables)

  • Документація: схема мапінгу, формати даних, логіка обробки помилок.
  • Налаштований розклад синхронізації з логами виконання.
  • Доступ до моніторингу (Grafana/ELK — за домовленістю).
  • Навчання менеджерів: як запускати ручний обмін, як читати логи.
  • Гарантійна підтримка після запуску — 2 тижні (виправлення інцидентів).

Отримайте консультацію

Вартість інтеграції розраховується індивідуально після аудиту — залиште заявку на консультацію. Зв'яжіться з нами, щоб отримати детальний план інтеграції для вашого бізнесу. Понад 7 років досвіду в інтеграціях з 1С — гарантуємо стабільну синхронізацію без сюрпризів.