Реалізація експорту товарів із сайту в 1С (CommerceML)

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація експорту товарів із сайту в 1С (CommerceML)
Складна
~5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація експорту товарів з сайту в 1С (CommerceML)

Якщо імпорт з 1С — це синхронізація каталогу на сайт, то експорт — обернена задача: передача заказів, залишків або даних про клієнтів назад в 1С. Часто потребує у інтернет-магазинах, де 1С — система обліку, а сайт — точка продажу.

Що передається в 1С

Найбільш поширені сценарії:

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

Протокол обміну (сторона сайту)

1С запрошує дані за протоколом CommerceML2:

GET /1c-exchange/?type=sale&mode=checkauth
GET /1c-exchange/?type=sale&mode=init
GET /1c-exchange/?type=sale&mode=query        — отримати список замовлень
POST /1c-exchange/?type=sale&mode=success     — підтвердження отримання
GET /1c-exchange/?type=sale&mode=file&filename=sale.xml — скачати файл

Генерація sale.xml

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, '.', ''));

            // Контрагент
            $client = $xml->createElement('Контрагенты');
            $agent = $xml->createElement('Контрагент');
            $this->addElement($xml, $agent, 'Наименование', $order->customer_name);
            $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);
                $products->appendChild($product);
            }
            $orderNode->appendChild($products);

            $root->appendChild($orderNode);
        }

        return $xml->saveXML();
    }
}

Підтвердження отримання замовлень

1С після успішного отримання відправляє список GUID оброблених замовлень. Сайт помічає їх як передані в 1С:

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 /1c-exchange/?type=sale&mode=file:

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,
        ]);
    }
}

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

Типичні складності

  • Пусті GUID товарів — якщо товар створен на сайте, а не імпортований з 1С, його GUID в 1С невідомий. Потрібна логіка створення нового товара в 1С або зіставлення за артикулом
  • Кодування — деякі версії 1С вимагають файли в Windows-1251
  • Тестування — потрібен доступ до тестової бази 1С клієнта на етапі розробки

Лінія часу

Експорт замовлень в 1С з підтвердженням отримання та оновленням статусів: 8–14 робочих днів.