Наткнулся на несправедливость, в пылу разработки облачной версии, забывают про коробку. Так например забыли про вывод в фильтре полей типа hlblock, выводится оно в таком виде, и никак нельзя установить в нём значение:
Или так (в этом случае кстати можно хотя бы ID записи ввести для отбора):
Решение и причина проблемы просты, для элементов инфоблока адаптацию поля под ui сделали, а для HL нет, поэтому надо её доделать, пока это не появится в обновлении.
Маскируемся под разработчика битрикс и лезем в код модуля crm:
/bitrix/modules/crm/lib/filter/userfielddataprovider.php
В строке 145 добавляем тип hlblock в условие, что бы он определялся как список (list):
Далее в этом же файле чуть ниже, в строке 261 (может отличаться смотрите ориентир), добавляем формирование списка значений:
Теперь поле выглядит как обычное поле списка с мультивыбором:
Однако это не всё, мне по этому полю нужно было отбирать участников рассылки в модуле CRM-Маркетинг. А там как оказалось поля формируются совсем другим методом. Поэтому открываем файл:
/bitrix/modules/crm/classes/general/crm_usertype.php
В строке 338 вставляем код формирования поля с элементами списка:
Теперь и при формировании сегмента рассылки поле фильтра выводится корректно:

Или так (в этом случае кстати можно хотя бы ID записи ввести для отбора):

Решение и причина проблемы просты, для элементов инфоблока адаптацию поля под ui сделали, а для HL нет, поэтому надо её доделать, пока это не появится в обновлении.
Маскируемся под разработчика битрикс и лезем в код модуля crm:
/bitrix/modules/crm/lib/filter/userfielddataprovider.php
В строке 145 добавляем тип hlblock в условие, что бы он определялся как список (list):
|| $typeID === 'hlblock' |

Далее в этом же файле чуть ниже, в строке 261 (может отличаться смотрите ориентир), добавляем формирование списка значений:
elseif($typeID === 'hlblock') { $entity = new \CUserTypeHlblock(); $dbResult = $entity->GetList($userField); $items = array(); if(is_object($dbResult)) { $count = 0; while($ary = $dbResult->Fetch()) { $items[$ary['ID']] = $ary["VALUE"]; if(++$count > 500) { break; } } } return array( 'params' => array('multiple' => 'Y'), 'items' => $items ); } |
Примечание. Обратите внимание, что в формировании списка стоит лимит на 500 записей, такой же лимит выставлен и для iblock_element, и для iblock_section. Это не есть хорошо, конечно же в идеале поле с большим количеством элементов, должно получать список элементов динамически с фильтрацией, но думаю и этого дождёмся. |

Теперь поле выглядит как обычное поле списка с мультивыбором:

Однако это не всё, мне по этому полю нужно было отбирать участников рассылки в модуле CRM-Маркетинг. А там как оказалось поля формируются совсем другим методом. Поэтому открываем файл:
/bitrix/modules/crm/classes/general/crm_usertype.php
В строке 338 вставляем код формирования поля с элементами списка:
elseif($typeID === 'hlblock') { $entity = new \CUserTypeHlblock(); $dbResult = $entity->GetList($arUserField); $items = array(); if(is_object($dbResult)) { $count = 0; while($ary = $dbResult->Fetch()) { $items[$ary['ID']] = $ary["VALUE"]; if(++$count > 500) { break; } } } $arFilterFields[] = array( 'id' => $FIELD_NAME, 'name' => $fieldLabel, 'type' => 'list', 'params' => array('multiple' => 'Y'), 'items' => $items ); continue; } |
Примечание. В этом файле также ставится лимит на количество записей для iblock_element и iblock_section, только теперь 200, но я оставил 500. |

Теперь и при формировании сегмента рассылки поле фильтра выводится корректно:
