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







