Реализация экспорта товаров из сайта в 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, '.', ''));
            $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С после успешного получения отправляет список 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,
            'status_updated_at' => now(),
        ]);
    }
}

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

Типичные сложности

  • Пустые GUID товаров — если товар создан на сайте, а не импортирован из 1С, его GUID в 1С неизвестен. Нужна логика создания нового товара в 1С или сопоставление по артикулу
  • Кодировка — некоторые версии 1С требуют файлы в Windows-1251
  • Тестирование — нужен доступ к тестовой базе 1С клиента на этапе разработки

Сроки

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