При ручній передачі замовлень з інтернет-магазину в 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(); } } Покрокова інструкція по запуску генерації
- Створіть екземпляр
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 гривень на рік. Середня вартість помилки при ручному введенні — 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 робочих днів. Оцінка точного терміну проводиться після аналізу вашої облікової системи.
Щоб обговорити деталі, залиште заявку — ми зв'яжемося з вами протягом дня.







