При ручной передаче заказов из интернет-магазина в 1С бухгалтер тратит 2-3 часа ежедневно, а вероятность ошибки — каждая десятая строка. Автоматический экспорт товаров из сайта в 1С по CommerceML решает эту проблему: данные передаются мгновенно, без опечаток и потерь. Наша команда имеет 7+ лет опыта интеграции с 1С, включая работу с типовыми и нетиповыми конфигурациями. Мы гарантируем корректную передачу данных и полное логирование для отладки.
Один из наших проектов — интернет-магазин с 10 000 заказов в месяц. Раньше бухгалтер тратил 3 часа ежедневно на ручной ввод, что обходилось компании в 500 000 рублей зарплаты в год. После внедрения экспорта заказов по CommerceML2 время сократилось до 10 минут в день.
В этой статье разберём, какие данные можно экспортировать, как настроить генерацию sale.xml, обработать подтверждения и обновить статусы. Также рассмотрим типичные сложности и способы их избежать.
Почему экспорт заказов в 1С — нетривиальная задача?
Проблема не в генерации 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();
}
}
Пошаговая инструкция по запуску генерации
- Создайте экземпляр
SaleXmlGenerator. - Передайте коллекцию заказов (с загруженными товарами и контрагентами).
- Вызовите метод
generate()— получите строку XML. - Проверьте валидность XML через
DOMDocument::validate. - Отдайте файл по запросу 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 рублей в год.
Типичные сложности
Частые проблемы: пустые GUID товаров (если товар создан на сайте), несоответствие кодировок (Windows-1251 vs UTF-8), сложности тестирования без тестовой базы 1С. Для решения используем сопоставление по артикулу, конвертацию кодировок и помощь в настройке тестовой среды.
Сравнение: CommerceML2 против ручного ввода
| Критерий | CommerceML2 экспорт | Ручной ввод |
|---|---|---|
| Время на передачу 50 заказов | 2 минуты | 2-3 часа |
| Вероятность ошибки | 0.1% | 10% |
| Затраты | Входит в интеграцию | Экономия до 500 000 ₽/год |
CommerceML2 экспорт в 5 раз быстрее ручного ввода и снижает количество ошибок на 90%. Закажите экспорт под ключ — получите консультацию инженера бесплатно.
Как проверить корректность экспорта?
Первый шаг — убедиться, что в sale.xml попали все заказы с корректными суммами и GUID. Для этого мы генерируем XML в тестовом режиме, загружаем его в 1С и сверяем количество документов. Второй шаг — проверить, что после подтверждения статус заказов на сайте изменился на "передан в 1С". Третий шаг — обновить статус из 1С и убедиться, что сайт его принял.
Сроки и стоимость
Разработка экспорта заказов с подтверждением и обновлением статусов занимает 8–14 рабочих дней. Оценка точного срока проводится после анализа вашей учётной системы.
Чтобы обсудить детали, оставьте заявку — мы свяжемся с вами в течение дня.







