1С-Битрикс. Автоматическая синхронизация с CRM bitrix24 ломает выгрузку заказов на сайте
После синхронизации CRM с сайтом компонент bitrix:sale.export.1c (проверить можно site.ru/bitrix/admin/1c_exchange.php?type=sale&mode=query) начинает отдавать ошибку: «failure Ошибка проверки источника запроса. Обновите модуль обмена»
Быстрым решением является установка опций:
COption::SetOptionString('catalog', 'DEFAULT_SKIP_SOURCE_CHECK', 'Y'); COption::SetOptionString('sale', 'secure_1c_exchange', 'N');
и отказ от синхронизации заказов со сделками CRM bitrix24.
Техническая поддержка битрикса заявляется следующее: «Чтобы не возникало данной проблемы, вам надо в 1с установить новое дополнение модуля обмена версии 4.х.х.х со страницы http://1c.1c-bitrix.ru/ecommerce/download.php».
Как вам? По-моему — круто. А если у вас сильно кастомизирован модуль обмена в 1С и вы не можете так просто обновить его? То есть, ставь новый модуль обмена и всё будет работать — отличный маркетинг.
Конечно, можно плюнуть и поискать другую CRM. Но мы не ищем лёгкий путей.
Решение
В общем, я придумал способ как эти 2 настройки держать в нужным мне флагах. То есть, что бы не устанавливали — DEFAULT_SKIP_SOURCE_CHECK всегда будет равен Y, а secure_1c_exchange — N.
Как вы могли догадаться, решение — обработчик.
Вот код:
class OptionSetHandler { private static $prefixNameEvent = 'OnAfterSetOption_'; protected static $setOptions = array(); /** * @param \Bitrix\Main\Event $e */ public static function onAfterSetOption(\Bitrix\Main\Event $e) { $optionValues = array( 'secure_1c_exchange' => array('sale', 'N'), 'DEFAULT_SKIP_SOURCE_CHECK' => array('catalog', 'Y') ); $optionName = str_replace(self::$prefixNameEvent, '', $e->getEventType()); if(!isset(self::$setOptions[$optionName]) && isset($optionValues[$optionName])) { self::$setOptions[$optionName] = 1; \Bitrix\Main\Config\Option::set($optionValues[$optionName][0], $optionName, $optionValues[$optionName][1]); } } }
Ну и подвесим обработчики на него:
\Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'OnAfterSetOption_secure_1c_exchange', array('OptionSetHandler', 'onAfterSetOption')); \Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'OnAfterSetOption_DEFAULT_SKIP_SOURCE_CHECK', array('OptionSetHandler', 'onAfterSetOption'));
3 комментария
Чувак, спасибо тебе большое, сели в ту же лужу, а твой пост все разрулил. Добра тебе!
+добра
Добрый день! У нас при выгрузке из 1c по многим Компаниям ответственным стоит админ. Какой поле надо заполнять, чтоьы все корректно выгрузилось? Спасибо.