Интеграция 1С:Предприятие с сайтом
Интеграция сайта с 1С — задача, которую недооценивают по сложности. 1С — не просто база данных, это сложная учётная система с собственной логикой бизнес-процессов, конфигурациями, которые сильно различаются между клиентами, и инфраструктурными ограничениями (часто работает в локальной сети предприятия).
Архитектурные варианты интеграции
Вариант 1: 1С как мастер данных 1С хранит актуальные данные (остатки, цены, номенклатуру), сайт периодически синхронизируется. Подходит, если 1С — основная учётная система, а сайт — просто витрина.
Вариант 2: Двусторонняя синхронизация Заказы создаются на сайте и передаются в 1С. Обновления данных идут из 1С на сайт. Требует тщательной логики разрешения конфликтов.
Вариант 3: Сайт как мастер для заказов Сайт управляет заказами, 1С получает их для учёта и производства/отгрузки. Данные каталога поступают из 1С.
Методы подключения к 1С
Web-сервисы 1С (SOAP/REST) — 1С публикует HTTP-сервис через веб-сервер (Apache/IIS). Сайт обращается к нему напрямую. Требует публикации 1С на внешний адрес или VPN.
Промежуточная шина (брокер) — рекомендуемый вариант для продакшна. RabbitMQ или Redis Queue между сайтом и агентом 1С. Агент — отдельный процесс (Node.js, Go, Python), который читает очередь и вызывает COM-объект 1С или его HTTP-сервис.
Сайт → RabbitMQ (exchange: site_to_1c) → 1С-агент → 1С
1С → RabbitMQ (exchange: 1c_to_site) → PHP Worker → Сайт
CommerceML (1С→сайт) — XML-формат выгрузки каталога из 1С. Подробнее в описании CommerceML-интеграции.
1С:Коннектор для сайтов — готовый модуль для 1C-Bitrix. Для других CMS — нет готового решения, нужна разработка.
Синхронизация номенклатуры
Из 1С выгружаются: артикул, наименование, описание, характеристики (цвет, размер), единица измерения, НДС, изображения (ссылки или base64), штрихкоды.
Формат выгрузки: JSON через REST API 1С или XML по протоколу CommerceML.
// Обработка полученной номенклатуры
foreach ($nomenclature as $item) {
Product::updateOrCreate(
['sku_1c' => $item['code']],
[
'name' => $item['name'],
'description' => $item['description'],
'price' => $item['price'],
'stock' => $item['stock']
]
);
}
Синхронизация остатков и цен
Остатки и цены меняются чаще, чем номенклатура. Для них нужна более частая синхронизация (каждые 15–30 минут). Оптимально — инкрементальная выгрузка: только изменившиеся позиции с момента последней синхронизации.
-- В 1С: выгружать только изменённые с последней синхронизации
ВЫБРАТЬ Номенклатура.Код, ОстаткиТоваров.КоличествоОстаток
ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиТоваров
ГДЕ ОстаткиТоваров.Период > &ПоследняяСинхронизация
Передача заказов в 1С
Заказ передаётся в 1С после подтверждения и оплаты. Формат зависит от конфигурации 1С. Для "Управления торговлей" — объект "Заказ покупателя":
{
"Номер": "SITE-12345",
"Дата": "2024-03-15T10:30:00",
"Контрагент": {
"ИНН": "7712345678",
"Наименование": "ИП Иванов"
},
"Товары": [
{
"Артикул": "ART-001",
"Количество": 2,
"Цена": 1500.00,
"Сумма": 3000.00,
"СтавкаНДС": "20%"
}
],
"СуммаДокумента": 3000.00,
"Комментарий": "Доставка курьером"
}
Справочники: контрагенты, склады, организации
Перед передачей заказа может потребоваться создание или поиск контрагента в 1С по ИНН или email. Это отдельный запрос к 1С-сервису. Если контрагент не найден — создаётся новый.
Обработка ошибок и мониторинг
1С — система с ограниченной отказоустойчивостью. Типичные ошибки:
- 1С заблокирована другим пользователем (монопольный режим)
- Нарушение ссылочной целостности (товар в заказе отсутствует в 1С)
- Таймаут при большом объёме данных
Все операции логируются в sync_log с деталями запроса и ошибок. Алерты при серии ошибок — в Telegram/email.
Безопасность
1С не должна быть напрямую доступна из интернета. Рекомендуется:
- VPN или выделенная сеть между сервером сайта и 1С
- Брокер сообщений как единственная точка связи
- IP-whitelist для REST-сервиса 1С
Срок разработки: 6–10 недель в зависимости от конфигурации 1С, объёма данных и выбранного метода интеграции.







