Как настроить обмен данными между 1С и сайтом

Как настроить обмен данными между 1С и сайтом

Если у вас есть интернет-магазин, рано или поздно вы столкнетесь с этим вопросом. Вручную переносить товары, обновлять цены и переписывать заказы из сайта в 1С — то еще удовольствие. Особенно когда номенклатуры не сто позиций, а несколько тысяч. Я сам через это проходил, поэтому давайте разберемся, как настроить нормальный автоматический обмен и не сойти с ума в процессе.

А зачем вообще это нужно?

Тут все просто. Когда обмен настроен, система сама делает то, на что раньше уходили часы:

  • подтягивает на сайт весь каталог — с описаниями, характеристиками, картинками;
  • держит цены и остатки в актуальном состоянии (никаких «извините, товара уже нет» после оформления заказа);
  • забирает заказы с сайта прямо в 1С;
  • обновляет статусы, чтобы клиент видел, что происходит с его покупкой.

По сути, вы один раз все настраиваете — и дальше просто следите, чтобы работало. Экономия времени колоссальная, а количество ошибок стремится к нулю.

Какие вообще есть варианты

Прежде чем лезть в настройки, стоит понять, каким способом вы будете дружить 1С с сайтом. Их несколько.

1. Стандартный обмен по CommerceML

Это, скажем так, «народный» вариант. Фирма «1С» придумала свой протокол обмена, и его поддерживает большинство популярных CMS — Битрикс, CS-Cart, InSales и другие. Работает это так: 1С готовит XML-файлы с товарами и отправляет их на сайт, а сайт в ответ отдает заказы. Плюс в том, что все уже есть из коробки и программировать ничего не надо. Для 90% магазинов этого за глаза хватает.

2. Обмен через API

Вариант посовременнее. Тут все крутится вокруг API сайта. Имеет смысл, если у вас нестандартное решение или большие нагрузки, с которыми обычный обмен уже не справляется.

3. Через промежуточную базу

Данные гоняются через отдельную базу (например, MySQL). Способ понадежнее и щадит нагрузку на систему, но и повозиться придется больше.

Для большинства случаев я советую начинать со стандартного CommerceML — на нем и остановимся подробнее.

Настраиваем обмен по CommerceML (на примере Битрикса)

Разберу на 1С-Битрикс, потому что это самый распространенный вариант. С другими CMS логика примерно та же, отличаются детали.

Шаг 1. Начинаем с сайта

Первым делом идем в админку сайта и открываем раздел Магазин → Настройки → Торговый каталог. Здесь нужно настроить типы цен, единицы измерения и склады. Это важный момент — если тут накосячить, потом придется все переделывать. Дальше в разделе Обмен с 1С включаем нужный профиль.

Шаг 2. Заводим отдельного пользователя

Совет из личного опыта: не используйте для обмена свою основную учетку администратора. Создайте отдельного пользователя специально под обмен и дайте ему только нужные права. Логин и пароль запишите — они пригодятся, когда будем настраивать 1С.

Шаг 3. Переходим в 1С

Теперь открываем конфигурацию — допустим, «Управление торговлей». Идем в Администрирование → Обмен с сайтом. Создаем новый узел обмена и указываем адрес сайта, он выглядит примерно так:

http://ваш-сайт.ru/bitrix/admin/exchange-1c.php

Сюда же вбиваем логин и пароль того самого пользователя, которого создали на прошлом шаге.

Шаг 4. Решаем, что именно выгружать

А вот тут стоит подумать. Не всегда нужно вываливать на сайт вообще всё. Определитесь:

  • какие группы товаров выгружать;
  • какой тип цен показывать на сайте;
  • по каким складам считать остатки;
  • нужны ли характеристики и свойства;
  • выгружать ли картинки (обычно да, но они могут заметно утяжелить обмен).

Шаг 5. Настраиваем расписание

Обмен можно запускать руками, но зачем, если есть регламентные задания? Настройте автоматику под свои задачи. Я обычно делаю так:

  • полная выгрузка каталога — раз в сутки, ночью;
  • обмен заказами — каждые 15–30 минут;
  • обновление остатков — раз в час.

Логика простая: то, что меняется часто, обменивается часто. То, что редко — реже.

Отдельно про заказы

Заказы едут в обратную сторону — с сайта в 1С. Цепочка такая: клиент оформил заказ → при следующем сеансе обмена 1С его забрала → в базе появился документ «Заказ покупателя» → менеджер его обработал → статус улетел обратно на сайт, и клиент видит обновление.

Главное здесь — правильно сопоставить справочники. Статусы заказов, способы оплаты, способы доставки на сайте и в 1С должны совпадать. Если этого не сделать, заказы будут загружаться криво, и придется разбираться вручную.

Что обычно ломается (и как чинить)

Скажу честно: с первого раза идеально не заводится почти никогда. Вот типичные грабли, на которые все наступают.

Не проходит авторизация. В девяти случаях из десяти это опечатка в логине/пароле или у пользователя не хватает прав. Перепроверьте.

Товары не выгружаются. Скорее всего, они не попали в выбранную группу выгрузки или у них не заполнены обязательные поля. Проверьте настройки и реквизиты карточек.

Товары задвоились. Классика. Обычно это значит, что сбилось сопоставление по идентификаторам (GUID). Лечится очисткой данных обмена и полной повторной выгрузкой.

Обмен обрывается на полпути. Если каталог большой, PHP может просто не успевать. Тут помогает увеличение лимитов max_execution_time и memory_limit, плюс есть смысл разбить выгрузку на части.

Не грузятся картинки. Почти всегда упирается в ограничения на размер файлов. Поднимите upload_max_filesize и post_max_size — и все поедет.

Пара советов напоследок

За годы возни с обменами я вынес для себя несколько правил, которыми поделюсь.

Во-первых, используйте инкрементальный обмен — то есть выгружайте только то, что изменилось, а не весь каталог каждый раз. Это разгружает систему в разы.

Во-вторых, разделяйте потоки. Товары можно обновлять раз в сутки, а вот цены и остатки — гораздо чаще. Незачем гонять всё вместе.

В-третьих, всегда включайте логи. Когда что-то отвалится (а оно отвалится), логи сэкономят вам кучу нервов при поиске причины.

И еще: любые изменения в настройках сначала обкатывайте на копии базы. Экспериментировать на рабочей системе, через которую идут реальные заказы, — так себе идея.

Подведем итог

Настройка обмена между 1С и сайтом на первый взгляд кажется страшной, но на деле все вполне подъемно. Для типового магазина на популярной CMS хватит стандартного CommerceML — его реально настроить самому за несколько вечеров. Если же у вас что-то нестандартное или большие объемы, тогда уже стоит смотреть в сторону API или звать на помощь специалиста.

Главное — не бойтесь. Один раз разберетесь, настроите — и забудете про ручное перепечатывание заказов как про страшный сон. А время, которое освободится, потратите на что-нибудь поприятнее, чем возня с таблицами.