Четверг, 16:40. Товары на сайте — из прошлой недели
Звонит владелец магазина электроники. Спокойный, но настороженный: «Сергей, клиент только что оформил заказ на видеокарту за 42 тысячи. А в 1С она стоит 58 тысяч. Мы поменяли цену три дня назад. Почему на сайте старая?»
Заходим в админку Битрикса. Раздел «Интеграция с 1С» → «Журнал обмена». Последний успешный обмен — понедельник, 10:23. Сегодня четверг. Три дня сайт жил с устаревшими данными. Цены неактуальны. Остатки не соответствуют складу. Два товара, которых нет в наличии, висят как «В наличии» и принимают заказы.
Причина: обновление модуля каталога в среду сбило настройки обмена. Битрикс перестал принимать файлы из 1С, но никаких ошибок в интерфейсе не показывал. Всё выглядело нормально — просто данные не обновлялись.
За три дня магазин принял 11 заказов с устаревшими ценами. Разница в цене на четырёх позициях составила от 3 до 16 тысяч рублей. Итого: 47 тысяч рублей убытков. Плюс неприятные разговоры с клиентами, которым пришлось объяснять, почему цена изменилась после оформления.
И знаете, что самое тревожное? Если бы клиент не позвонил с вопросом о цене — проблему обнаружили бы ещё позже. Может, через неделю. Может, через две.
Как работает обмен 1С и Битрикс (без технических терминов)
Прежде чем разбирать ошибки, стоит понять, как вообще устроен обмен 1С и Битрикс. Без этого ошибки будут казаться случайными, хотя у каждой — конкретная причина.
Представьте два здания через дорогу. В одном — склад (1С). В другом — витрина магазина (сайт на Битрикс). Между ними — курьер, который носит папки с документами туда-обратно.
Вот что происходит при каждом обмене:
- 1С формирует XML-файлы — большие текстовые файлы с информацией о товарах, ценах, остатках, категориях. Файлы могут весить от нескольких мегабайт до нескольких гигабайт — зависит от размера каталога.
- 1С отправляет файлы на сервер — через HTTP-запросы, по частям. Каждый кусок — отдельный запрос к серверу. Для каталога в 10 000 товаров это могут быть сотни запросов.
- Битрикс принимает и разбирает файлы — читает XML, сопоставляет товары по артикулам, обновляет цены, остатки, описания, картинки. Самый ресурсоёмкий этап.
- Битрикс отправляет заказы в 1С — в обратную сторону: информация о новых заказах, оплатах, статусах доставки.
Проблема может возникнуть на любом из четырёх этапов. И каждый этап ломается по-своему.
7 ошибок обмена, которые мы видим каждую неделю
1. Таймаут: обмен не успевает завершиться
Самая частая ошибка. 1С начинает отправлять данные, сервер принимает — и через 30 секунд разрывает соединение. Почему? Потому что по умолчанию веб-сервер ждёт ответ от PHP-скрипта 30 секунд. А настройка обмена 1С и Битрикс с каталогом на 15 000 товаров занимает 10–20 минут.
Результат: обмен обрывается на середине. Часть товаров обновилась, часть — нет. На сайте — каша: одни позиции с новыми ценами, другие — со старыми.
У одного нашего клиента обмен обрывался каждый раз на 73% прогресса. Ровно на 73%. Потому что именно в этот момент начиналась обработка самой тяжёлой категории — «Запчасти для грузовиков» с 4 000 позициями и вложенными свойствами.
Если обмен регулярно обрывается — проблема почти всегда в таймаутах сервера. Проверьте max_execution_time в PHP и proxy_read_timeout в nginx.
2. Нехватка памяти PHP
XML-файл обмена с 10 000 товарами весит 50–200 МБ. Чтобы его разобрать, PHP загружает файл в оперативную память. Если memory_limit установлен в 128 МБ (стандарт многих хостингов), скрипт падает с ошибкой «Allowed memory size exhausted».
На сайте это выглядит по-разному: иногда ошибка 500, иногда обмен просто «зависает» — вроде запустился, но ничего не происходит. 1С может показывать сообщение «Ошибка загрузки на сайт» или просто тишину.
3. Файлы обмена забили диск
При каждом обмене Битрикс создаёт временные файлы в папке /upload/1c_exchange/. Если обмен проходит успешно — файлы удаляются. Если обмен обрывается — файлы остаются. Навсегда.
За полгода неудачных обменов папка может разрастись до десятков гигабайт. Мы видели случай, когда /upload/1c_exchange/ занимала 84 ГБ на сервере с диском в 100 ГБ. Свободного места оставалось 2 ГБ. Битрикс не мог записать кэш и сессии — и сайт начал «сыпаться» на ровном месте.
4. Конфликт кодировок
1С работает в кодировке Windows-1251. Битрикс — в UTF-8. При обмене товарами 1С и Битрикс происходит конвертация. Обычно она работает прозрачно. Но иногда — особенно когда в названиях товаров есть спецсимволы, кавычки-«ёлочки» или символ «№» — конвертация ломается.
Результат: на сайте вместо «Кабель ПВС 3×2,5 №12» появляется «Кабель ПВС 3Ч2,5 в„–12». Или, что хуже, товар вообще не импортируется — Битрикс не может разобрать XML.
5. Дубли товаров после обмена
Битрикс сопоставляет товары из 1С по внешнему коду (XML_ID). Если в 1С этот код меняется — например, после переноса базы или обновления конфигурации — Битрикс воспринимает «старый» и «новый» товар как два разных.
Итог: один и тот же товар на сайте в двух экземплярах. С разными URL. С разными ценами (если старая запись не обновилась). SEO-катастрофа: поисковик видит дубли страниц и пессимизирует обе.
6. Заказы не уходят в 1С
Обмен работает в две стороны. Но часто настраивают только одну: товары из 1С → на сайт. А обратная передача заказов с сайта → в 1С либо не настроена, либо ломается тихо.
Мы обслуживаем магазин, где заказы не передавались в 1С три недели. Менеджеры обрабатывали заказы вручную — скачивали из Битрикса и вбивали в 1С руками. Никто не заметил, что автоматический обмен сломался. Просто привыкли к ручному режиму.
7. Обмен «съедает» сервер в рабочее время
Полный обмен каталога — ресурсоёмкая операция. Сервер загружает XML, парсит его, обновляет базу данных, перестраивает индексы. CPU и RAM в этот момент работают на пределе.
Если обмен запускается в 10 утра — когда на сайте пик посещений — покупатели получают медленный сайт или ошибки. Мы уже рассказывали о клиенте, у которого обмен длился 25 минут из каждых 30. Сервер был свободен 5 минут в полчаса.
Обмен работает, но сайт лежит: парадокс нагрузки
Есть ситуация хуже сломанного обмена. Это обмен, который формально работает — данные обновляются, ошибок нет — но при этом кладёт сайт для покупателей.
Как это возможно? Вот механика. При обмене Битрикс обновляет тысячи записей в базе данных. MySQL блокирует таблицы на время записи. Пока идёт обмен, запросы покупателей к тем же таблицам встают в очередь. Страницы грузятся 10–15 секунд вместо обычных 2.
Покупатель ничего не знает про обмен с 1С. Он видит, что сайт тормозит, и уходит. А в логах обмена — всё чисто. «Обмен завершён успешно.»
Это особенно болезненно для магазинов с частым обменом — каждые 15–30 минут. По сути, сайт работает нормально только в паузах между обменами. Остальное время — тормозит.
Хотите узнать, как обмен 1С влияет на скорость вашего магазина? Мы можем проверить это бесплатно — support.orangecode.ru
Как наладить обмен: пошаговый план
Шаг 1. Увеличьте лимиты сервера
Минимальные значения для стабильного обмена 1С и Битрикс:
- max_execution_time: 600 секунд (10 минут). Для крупных каталогов — 1800 (30 минут).
- memory_limit: 512M. Для каталогов с 20 000+ товаров — 1024M.
- post_max_size: 100M и выше.
- upload_max_filesize: 100M и выше.
- proxy_read_timeout (nginx): 600 секунд.
- fastcgi_read_timeout (nginx): 600 секунд.
Важно: менять нужно и в PHP, и в nginx. Одних PHP-настроек недостаточно — nginx разорвёт соединение раньше, чем PHP закончит работу.
Шаг 2. Перенесите обмен на нерабочее время
Полный обмен каталога — ночью или в 5–6 утра. Если нужен обмен остатков в реальном времени — настройте его отдельно от полного обмена и порционно: по 300–500 товаров за раз, а не все 15 000 одним пакетом.
Шаг 3. Почистите папку обмена
Зайдите в /upload/1c_exchange/ на сервере. Если там файлы старше недели — безопасно удаляйте. Автоматизируйте через cron: ежедневное удаление файлов старше 3 дней.
Шаг 4. Настройте пошаговый режим
В настройках обмена в 1С есть параметр «Количество элементов за шаг». По умолчанию — 0 (всё за один шаг). Поставьте 500. Это заставит 1С отправлять данные порциями. Каждая порция — отдельный HTTP-запрос, который укладывается в таймаут.
Шаг 5. Настройте мониторинг обмена
Это самое важное. Обмен может сломаться в любой момент: после обновления, после изменения конфигурации 1С, после переноса сервера. Мониторинг должен отслеживать:
- Дату и время последнего успешного обмена
- Ошибки в логе обмена Битрикс
- Размер папки /upload/1c_exchange/
- Время ответа сервера во время обмена
Если последний успешный обмен был больше 24 часов назад — это алерт. Кто-то должен разобраться.
Когда обмен не виноват: три ловушки диагностики
Не каждая проблема с ценами и остатками — ошибка обмена. Иногда обмен работает идеально, а данные всё равно расходятся.
Ловушка 1: Кэш Битрикс. Товар обновился в базе, но страница отдаётся из кэша со старыми данными. Особенно актуально для композитного сайта. Решение: настроить автосброс кэша при обмене.
Ловушка 2: Множественные типы цен. В 1С одна цена, на сайте — другая. Не потому что обмен сломался, а потому что в Битрикс настроены несколько типов цен (розница, опт, по карте лояльности), и обмен обновляет не тот тип, который отображается на сайте.
Ловушка 3: Ручные правки на сайте. Контент-менеджер поправил описание товара вручную. Следующий обмен затёр правки данными из 1С. Менеджер думает, что обмен «глючит». На самом деле он работает ровно так, как настроен — перезаписывает данные из 1С поверх любых изменений на сайте.
Частые вопросы
Как понять, что обмен 1С и Битрикс сломался, если ошибок на сайте не видно?
Зайдите в админку Битрикс → 1С:Предприятие → Журнал обмена. Посмотрите дату последнего успешного обмена. Если она старше 24 часов — обмен не работает. Также проверьте: цены на сайте совпадают с ценами в 1С? Остатки актуальны? Если нет — обмен сбоит, даже если явных ошибок нет.
Обмен 1С с Битрикс зависает на середине — что делать?
В 90% случаев это таймаут. Проверьте max_execution_time в PHP (нужно минимум 600 секунд) и proxy_read_timeout в nginx (тоже 600). Если обмен всё равно обрывается — настройте пошаговый режим: в 1С установите «Количество элементов за шаг» = 500.
Как часто должен запускаться обмен 1С и Битрикс?
Зависит от бизнеса. Полный обмен каталога — 1–2 раза в сутки, в ночное время. Обмен остатков — можно чаще (каждые 1–4 часа), но порционно и не в часы пик. Обмен заказов — каждые 15–30 минут, он лёгкий и не нагружает сервер.
Можно ли настроить обмен 1С и Битрикс самостоятельно?
Базовую настройку обмена товарами — да, если следовать документации Битрикс. Но тонкая настройка (порционный обмен, оптимизация под большие каталоги, мониторинг) требует опыта работы с сервером. Неправильные настройки PHP или nginx могут привести к падению сайта.
Обмен 1С тормозит сайт — как разделить нагрузку?
Три решения: перенести обмен на ночное время, настроить пошаговый режим с паузами между шагами, или — для крупных магазинов — вынести обмен на отдельный сервер или процесс. Последнее требует настройки на уровне сервера.
Что делать прямо сейчас
Обмен 1С и Битрикс — не та вещь, которая «работает сама». Это сложная интеграция двух систем, каждая из которых регулярно обновляется. И каждое обновление — потенциальная точка отказа.
Три действия на сегодня:
- Проверьте дату последнего обмена — в админке Битрикс → 1С:Предприятие → Журнал обмена. Если старше суток — у вас проблема.
- Сравните цены — возьмите 5 случайных товаров и сверьте цену на сайте с ценой в 1С. Не совпадает? Обмен работает некорректно.
- Посмотрите папку обмена — /upload/1c_exchange/ на сервере. Если там гигабайты старых файлов — пора чистить.
Если хотите полную картину — мы проверим ваш сервер и настройки обмена бесплатно. За 24 часа пришлём отчёт: что работает, что нет, и что нужно исправить.
→ Закажите бесплатный аудит на support.orangecode.ru — отчёт за 24 часа