Перейти к содержимому

Настройка обмена с 1С - точка обмена, доступ, порядок шагов

Готовим сайт к первому обмену с учётной системой: заводим доступ, проверяем точку обмена и разбираем результат первого запуска.

Решение

Заводим отдельного пользователя для обмена:

$user = new CUser();
// отдельная учётная запись только для обмена, не для людей
$id = $user->Add([
'LOGIN' => 'exchange1c',
'PASSWORD' => $password,
'CONFIRM_PASSWORD' => $password,
'EMAIL' => 'exchange@example.com',
'GROUP_ID' => [$exchangeGroupId], // группа с правом на обмен, не администраторы
'ACTIVE' => 'Y',
]);

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

Проверяем, что точка обмена отвечает:

Окно терминала
# служебный адрес обмена: с верным паролем отвечает служебным текстом
curl -s -u exchange1c:PASSWORD \
'https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth' | head -3
# success в ответе означает, что доступ есть

Ответ с отказом означает, что дело в правах или в пароле, а пустой ответ - что адрес закрыт правилом веб-сервера либо переадресацией. Учётная система в обоих случаях сообщает одно и то же: обмен не начался.

Настраиваем приём каталога:

// параметры импорта живут в настройках модуля торгового каталога
COption::SetOptionString('catalog', '1C_IBLOCK_ID', (string)$iblockId);
COption::SetOptionString('catalog', '1C_INTERVAL', '600'); // шаг по времени
COption::SetOptionString('catalog', '1C_FILE_SIZE_LIMIT', '204800');
// оба значения подбирают под сервер: готовых универсальных чисел нет

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

Смотрим результат первого запуска:

Окно терминала
tail -50 /home/bitrix/www/upload/1c_catalog/1c_exchange.log 2>/dev/null
ls -lh /home/bitrix/www/upload/1c_catalog/ | head # что реально приехало

Первый обмен проверяют по журналу и по файлам, а не по витрине. Товары могут уже лежать в базе, но не показываться из-за настроек компонента, и это отдельная задача.

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

Разделение ответственности между сторонами стоит проговорить до первого запуска. Сайт отвечает за приём и раскладку данных, учётная система - за состав, полноту и частоту выгрузки. Разбор любой жалобы начинается с вопроса, на чьей стороне данные потерялись, и файл обмена отвечает на него однозначно.

Расписание и состав выгрузки задаются в учётной системе, а не на сайте. Сайт принимает то, что ему прислали, и не умеет ни запросить данные сам, ни выбрать из них часть.

Типичные проблемы

Учётная система не соединяется с сайтом.

Не проходит авторизация на точке обмена либо адрес закрыт правилом веб-сервера. Проверяют его обычным запросом с логином и паролем.

Обмен идёт под администратором.

Не заведён отдельный пользователь. Это работает, но действия обмена смешиваются с действиями людей в журнале.

Обмен обрывается на большом файле.

Предел размера файла или время выполнения меньше, чем нужно шагу. Оба параметра подбирают под сервер.

Товары приехали не в тот инфоблок.

В настройках импорта указан другой инфоблок либо узел в учётной системе настроен на другой тип каталога.

Обмен проходит, а на витрине пусто.

Данные в базе есть, но компонент их не показывает. Это уже настройка витрины, а не обмена.

Частые вопросы

Нужны ли обмену права администратора?

Нет, достаточно права на обмен и на нужный инфоблок. Отдельная учётная запись с узкими правами безопаснее и понятнее в журнале.

Можно ли обмениваться по защищённому соединению?

Да, и это обычная практика: пароль обмена иначе передаётся открытым текстом. Сертификат при этом должен быть доверенным для учётной системы.

Как обмениваться с двумя базами сразу?

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

Почему первый обмен идёт часами?

Полная выгрузка каталога тяжелее последующих: приезжают все товары, свойства и картинки. Дальнейшие обмены передают только изменения.

Смежное

Первоисточник