1С интеграция интернет-магазина — синхронизация остатков, цен, заказов 2026
Почему 1С интеграция критична для магазина
В Казахстане ~80% оптовых и B2B магазинов используют 1С для учёта: складские остатки, себестоимость, налоги, финансовые отчёты. Без синхронизации с сайтом вы гарантируете:
- Потерю конверсии: 30% заказов "товар недоступен" хотя он есть на складе
- Потерю денег: ручной ввод товаров + цен в магазин = 50k+ ₸ в год оплаты труда
- Ошибки: расхождение цен между 1С и сайтом, дубли товаров, неправильные остатки
Правильная интеграция решает это за 15 минут: обновили цену в 1С → она обновилась в магазине → покупатель видит актуальную цену.
CommerceML 2 — протокол синхронизации
CommerceML — это XML-формат, разработанный 1С для обмена данными. Работает как FTP: 1С кладёт файлы в папку, ваш магазин их парсит и обновляет БД.
Структура файлов CommerceML:
exchange/ ├── offers.xml (товары, цены, остатки) ├── import.xml (справочники: категории, параметры) ├── rests.xml (остатки по складам) └── orders/ (заказы из магазина → в 1С)
Пример offers.xml (товары и цены)
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.05">
<Каталог>
<Товары>
<Товар>
<Ид>SKU_12345</Ид>
<Наименование>Samsung Galaxy S25</Наименование>
<Описание>Флагман 2026 года</Описание>
<Картинка>http://example.com/img/12345.jpg</Картинка>
<ОписаниеДляСайта>Премиум-смартфон</ОписаниеДляСайта>
<СтруктураПродукта>
<Свойство>
<Наименование>Цвет</Наименование>
<Значение>Чёрный</Значение>
</Свойство>
</СтруктураПродукта>
</Товар>
</Товары>
</Каталог>
<ПредложениеВерсияСхемы="2.05">
<Предложения>
<Предложение>
<Ид>SKU_12345</Ид>
<Артикул>GAL-S25-001</Артикул>
<Наименование>Samsung Galaxy S25 Чёрный</Наименование>
<Цены>
<Цена>
<ИдТипаЦены>розница</ИдТипаЦены>
<Значение>750000</Значение> <!-- цена в тенге -->
<Валюта>KZT</Валюта>
</Цена>
</Цены>
<Остатки>
<Остаток>
<ИдСклада>Almaty_Main</ИдСклада>
<Количество>47</Количество>
</Остаток>
</Остатки>
</Предложение>
</Предложения>
</ПредложениеВерсияСхемы>
</КоммерческаяИнформация>
Как работает синхронизация
Сценарий 1: Импорт (1С → Магазин)
- 1С автоматизм или вручную выгружает комплект в
/exchange/на SFTP сервер магазина - Ваш cronjob каждые 15 мин проверяет новые файлы:
curl https://yourshop.kz/api/commerce-sync/import - PHP парсит XML, маппит товары: SKU 1С → product_id в БД
- Обновляет цены, остатки, описания
- Генерирует отчёт синхронизации (успешно / ошибки) → отправляет на email
Сценарий 2: Экспорт (Магазин → 1С)
- Покупатель делает заказ → данные сохраняются в БД
- Cronjob экспортирует заказы в 1С CommerceML формат
- Файл попадает в
/incoming/orders/на 1С - 1С парсит, создаёт документ "Заказ", привязывает контрагента
- Оператор процессирует заказ: комплектует, печатает УПД, отправляет доставщику
Синхронизация остатков (рассинхрон-fix)
Типовая проблема: магазин показывает товар в наличии, а на складе его нет. Почему? Потому что:
- Остатки синхронизируются каждые 15 мин, а между обновлениями он уходит
- В 1С есть задержка между резервированием и списанием товара
- Два магазина доставляют из одного склада → race condition
Решение: резервирование товара. Когда заказ создан, вы отправляете в 1С "зарезервировать 5 шт Galaxy S25" — и 1С убирает это из доступного остатка. Когда заказ отменён — отпускаете резерв.
Примеры реальных кейсов A-LUX
Кейс 1: Электроника. 5000 товаров, 3 склада (синхронизация каждый час)
Клиент: крупный дистрибьютор электроники в Алматы. 1С: "Управление торговлей" (УТ 11.4). Задача: онлайн-магазин с live остатками по каждому складу. Каждый клиент видит откуда будет доставлен товар (Алматы / Астана / Актау).
Решение: CommerceML импорт по складам. В маппер добавили логику: если остаток на Алматы-складе > 0 → показать опцию "Доставка 1 день". Если на Актау → "Доставка 4 дня".
Результат: конверсия +18%, задержки по наличию −95%, ручная работа −40%. Стоимость разработки: 280k ₸, ROI: 4 месяца.
Кейс 2: Мебель. Динамические цены по скидкам (синхронизация в реальном времени)
Клиент: сеть мебельных магазинов (15 филиалов). Задача: в 1С настроены скидки "VIP клиент -20%, Опт -15%, Розница 0%". Нужно чтобы цены на сайте менялись в зависимости от роли покупателя (личный кабинет).
Решение: вместо单один offers.xml мы парсим несколько типов цен из 1С. При входе в ЛК типируем цену: SELECT price FROM products WHERE type='vip'.
Результат: B2B заказы +45%, покупатели видят свою цену. Стоимость: 320k ₸.
Архитектура синхронизации (примеры кода)
Node.js + PHP для парсинга CommerceML
// commerce-sync.js — cronjob для импорта
const cron = require('node-cron');
const xml2js = require('xml2js');
const fs = require('fs');
const xmlParser = new xml2js.Parser();
// Запускаем каждые 15 минут
cron.schedule('*/15 * * * *', async () => {
try {
// Читаем offers.xml с SFTP
const offerXml = fs.readFileSync('/sftp/exchange/offers.xml', 'utf8');
const parsed = await xmlParser.parseStringPromise(offerXml);
const offers = parsed.КоммерческаяИнформация.ПредложениеВерсияСхемы[0].Предложения[0].Предложение;
for (const offer of offers) {
const sku1c = offer.Ид[0];
const price = parseFloat(offer.Цены[0].Цена[0].Значение[0]);
const rest = parseInt(offer.Остатки[0].Остаток[0].Количество[0]);
// Обновляем в БД магазина
await db.query(
'UPDATE products SET price = ?, rest = ?, updated_at = NOW() WHERE sku1c = ?',
[price, rest, sku1c]
);
}
console.log(`[${new Date().toISOString()}] Синхронизация успешна: ${offers.length} товаров`);
} catch (error) {
console.error('Ошибка синхронизации:', error);
// Отправляем email алерт
sendAlert(`[CRITICAL] CommerceML sync failed: ${error.message}`);
}
});
// Экспорт заказов → 1С
cron.schedule('0 * * * *', async () => { // каждый час
const orders = await db.query(
'SELECT * FROM orders WHERE status = ? AND synced_to_1c = 0 LIMIT 100',
['confirmed']
);
if (orders.length === 0) return;
// Генерируем XML
const xml = generateOrdersXml(orders);
fs.writeFileSync('/sftp/exchange/orders.xml', xml);
// Отмечаем как синхронизированные
await db.query(
'UPDATE orders SET synced_to_1c = 1, synced_at = NOW() WHERE id IN (?)',
[orders.map(o => o.id)]
);
console.log(`Экспортировано ${orders.length} заказов в 1С`);
});
Частые проблемы и решения
| Проблема | Причина | Решение |
|---|---|---|
| Дубли товаров | SKU в 1С и БД магазина не совпадают | Создать таблицу маппинга SKU: unique constraint на (sku1c, product_id) |
| Остатки не синхронизируются | 1С не выгружает остатки (ошибка в DataExchange) | Проверить задачи в 1С: "Обмен с интернет-магазинами", включить экспорт остатков |
| Цены не обновляются | Кеш БД магазина не инвалидируется | После UPDATE: redis.del(`product:${sku1c}`) или вообще убрать кеш для цен |
| Заказы не попадают в 1С | SFTP доступ заблокирован, неправильный XML | Проверить логи парсинга, валидировать XML через XSD схему |
| Рассинхронизация остатков | Несколько магазинов из одного склада | Добавить резервирование товара в 1С при создании заказа |
Нужна интеграция 1С с вашим интернет-магазином в Алматы?
Мы подключили 150+ магазинов к 1С. Знаем типовые ошибки и как их избежать.
Создать магазин с интеграцией 1С