Как задать фильтр со сложной логикой по CcrmCompany в Bitrix?

У нас в сущности Компания, используется 2 поля привязки к пользователю:
1) Стандартное поле Ответственный
2) Кастомное поле

Нужно сделать выборку что пользователь с ИД 1526 находится в любом из полей.

Пробовал разными способами написать классическую тему как в инфоблоках:

$res = CCrmCompany::GetList(['DATE_MODIFY' => 'DESC'], [['LOGIC' => 'OR', ['ASSIGNED_BY' => 1526], ['UF_CRM_1444399075' => 1526]]], ['ASSIGNED_BY', 'UF_CRM_1444399075', 'ID'], 5);

while($item = $res->Fetch())
{
	pre($item);
}


Менял местами квадратные скобки (потому что везде по разному пишут что именно должно быть массивом, или я не догнал), пробовал использовать не GetList, а еще GetListEx... без результата. Есть какие то варианты?
  • Вопрос задан
  • 2926 просмотров
Пригласить эксперта
Ответы на вопрос 4
@tutdiscoteca
Сам по себе запрос отрабатывает ? Только фильтр не работает ? По моему значения логического фильтра должны быть не в массиве, попробуй так :
$res = CCrmCompany::GetList(['DATE_MODIFY' => 'DESC'], [['LOGIC' => 'OR', 'ASSIGNED_BY' => 1526, 'UF_CRM_1444399075' => 1526]], ['ASSIGNED_BY', 'UF_CRM_1444399075', 'ID'], 5);
Ответ написан
@Drayde
Установите последним параметром false, вместо 5 и получите все записи, а не 5 первых.
Ответ написан
Комментировать
Daniss74
@Daniss74
Занимаюсь Битрикс24
цитата с сайта
https://forwww.com/how-to-use-filter-in-bitrix/

Если использовать в скриптах arFilter и arSelect — вы исключите лишние данные

На самом деле этот код:

Array("ID" => "ASC", " ACTIVE" => "Y"),
Array("IBLOCK_ID" => 14, 'PROPERTY_SALELEADER_VALUE' => 'да'),
false,
false,
Array('ID', 'NAME', 'CODE')

наглядно показывает, что ничего лишнего мы не будем передавать (важно не только указывать условия в фильтре, но и только те поля которые вы будете использовать, arSelect, или в данном случае последний массив). Записывать «больше-меньше» нужно таким вот образом:

'>=CATALOG_PRICE_1' => '250',

Для остальных условий — аналогично, пишем перед свойством >, <, >=, <=, ! и вуаля .
Как написать фильтр со сложной логикой 1С-Битрикс

Вот мы и подошли к самому интересному и не очевидному. Сложный фильтр может принимать 2 значения AND и OR (И и ИЛИ). При этом сложность условия, опять же, ограничивается лишь вашей фантазией . Не будем ходить далеко, возьмем пример из документации:

$arFilter = array(
"IBLOCK_ID" => $IBLOCK_ID,
"SECTION_CODE" => "orange",
"INCLUDE_SUBSECTIONS" => "Y",
array(
"LOGIC" => "OR",
array(" 50, "=PROPERTY_CONDITION" => "Y"),
array(">=PROPERTY_RADIUS" => 50, "!=PROPERTY_CONDITION" => "Y"),
),
);

Итак, для сложного фильтра, нам нужно создать массив, указать значение LOGIC в значение OR или AND, и после запятой создать 2 сравниваемых массива. Как видите, тут есть практически все условия о которых мы говорили выше (меньше, равно, больше или равно, не равно).
Ответ написан
Комментировать
@kleerik
Привет. Все просто. Ты пропустил знак = перед названиями полей:
$res = CCrmCompany::GetList(['DATE_MODIFY' => 'DESC'], [['LOGIC' => 'OR', ['=ASSIGNED_BY_ID' => 1526], ['=UF_CRM_1444399075' => 1526]]], ['ASSIGNED_BY', 'UF_CRM_1444399075', 'ID'], 5);

Ну и ASSIGNED_BY_ID.
Тут почитай, много хороших примеров
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы