У заказчика каталог, который используется для интернет-магазина, он же используется в CRM
Данный товарный каталог, поэтому можно загружать из 1С двумя модулями обмена
- для интернет-магазина
- синхронизация с Битрикс24
НО:
Связка у модуля обмена, который для интернет-магазина, по полю "Внешний код", а для Битрикс24, связь по ID товара (причем эти связки хранятся в разных местах в 1С), поэтому модуль обмена "Синхронизация с Битрикс24", не видел товары, которые выгружены другим модулем.
Заказы с Битрикс24 в 1С загружаются, товары в заказе есть, и связка образуется. Новый товар в 1С не создается.
НО:
- если изменить товары в 1С, то обратно на сайт заказ улетит с пустыми товарами.
- товары из 1С в Битрикс24 будут открываться только те, для которых есть связка, т.е. которые хоть раз прилетали в заказе
ТП Битрикса ответили, что другого варианта пока нет, но тикет для исправления этой проблемы создан.
Или можно вернуть второй каталог для CRM (будет 1 для магазина, второй для работы в CRM)
Было необходимо, чтобы синхронизация с Б24:
- не добавляла товары, а только получала ID уже существующего товара на сайте
- не обновляла, не удаляла товары
- не обновляла, не удаляла, не создавала разделы
Чтобы разделы не создавались, в модуле "Синхронизация с Битрикс24" в дереве групп настроено, что все товары грузятся в корневой раздел.
На стороне Битрикс
папка /bitrix/modules/crm/classes/general/ в ней кастомизируем 3 файла
crm_product.php
кастомизируем 3 метода, остальное оставляем
public static function Add($arFields){ //возвращает ID существующего товара или false $ID = false; if(isset($arFields['NAME']) && Loader::includeModule('catalog')){ $dbRes = CIBlockElement::GetList( array(), array("IBLOCK_ID"=>10,"=NAME"=>$arFields['NAME']), //фильтр по инфоблоку и имени товара false, array("nTopCount"=>1), //только 1 элемент array("ID","IBLOCK_ID") //выбираем ID ); if($arRes = $dbRes->Fetch()){ $ID = intval($arRes["ID"]); //обязательно intval } } return $ID; } public static function Update($ID, $arFields){ //ничего не обновляем, но возвращаем, что все обновили return true; } public static function Delete($ID){ //ничего не удаляем, но возвращаем, что все удалили return true; } |
кастомизируем 3 метода, остальное оставляем
public static function Add(&$arFields){ return 248; //ID одного из раздела } public static function Update($ID, &$arFields){ //ничего не обновляем, но возвращаем, что все обновили return true; } public static function Delete($ID){ //ничего не удаляем, но возвращаем, что все удалили return true; } |
кастомизируем 1 метод, остальное оставляем
public function ImportSectionArray($arSectionName, $level = 0){ return 248; //ID одного из раздела } |
Если товарный каталог небольшой и новые товары появляются редко, то лучше настроить соответствия (идентификаторы Битрикс24) в 1С обработкой или вручную, не модифицируя ядро битрикс.