Битрикс CRM Получить ID контакта?
Есть как минимум 2 варианта (без прямых запросов в базу) как это сделать:
1) Высокоуровневый (работает всегда). Метод с поддержкой обратной совместимости: CCrmContact::GetList (bxapi.ru/src/?id=183244)
Применение (за основу взял код описанный Артем):/* @var array Список контактов */
$arContacts = array();

if ( \Bitrix\Main\Loader::IncludeModule('crm') )
{
	/* @var array Сортировка полученного списка контактов */
	$arOrder  = array('ID' => 'DESC');

	/* @var array Условия получаемого списка контактов */
	$arFilter = array(
		"NAME"      => "Имя",
		"LAST_NAME" => "Фамилия",
		'CHECK_PERMISSIONS' => 'N' // Данный ключ необходим для того чтобы получить всех пользоватей,
								   // иначе, будет найден только если ответственным за него является тот,
								   // под кем запускается скрипт в битриксе
	);

	/* @var array Получаемые поля для списка контактов */
	$arSelect = array(
		'ID'
	);

	// NOTE: Запрашивайте только необходимые поля
	$res = CCrmContact::GetList( $arOrder, $arFilter, $arSelect );

	while( $arContact = $res->fetch() )
	{
		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
	}
}

// Тут в $arContacts либо пустой массив, либо массив с ID контактами, которые соответствуют условию поиска
2) Низкоуровневый DataMapper (новый подход d7)use \Bitrix\Main\Loader;
use \Bitrix\Crm;

/* @var array Список контактов */
$arContacts = array();

if ( Loader::IncludeModule('crm') )
{

	$resContacts = Crm\ContactTable::getList(array(
		'select' => array('ID'),
		'filter' => array(
			"NAME"      => "Имя",
			"LAST_NAME" => "Фамилия",
		),
		'order' => array('ID' => 'DESC')
	));

	while( $arContact = $resContacts->fetch() )
	{
		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
	}

	/*
	Начиная с 17 версии (вроде бы), можно делать так:
	foreach( $resContacts as $arContact)
	{
		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
	}
	вместо while цикла
	*/
}
Преимущество первого подхода:
- Работает всегда, как для новых, так и для старых проектов
- Можно использовать уровни доступа
Преимущество нового подхода:
- Технологически универсален за счет d7 (можно в runtime прибавлять связи, доставать связанные сущности и т.п.)
- В DataMapper есть технология кеширования, т.е. можно закешировать результат просто добавив в массив getList еще один ключик
- Субъективно код легче воспринимается
Пример запроса:if(!CModule::IncludeModule('crm')) die('error');

$res = CCrmContact::GetList($arOrder = array('DATE_CREATE' => 'DESC'), $arFilter = array("NAME"=>"Имя", "LAST_NAME"=>"Фамилия"), $arSelect = array(), $nPageTop = false);
while($ob = $res->GetNext()){
	$arContacts = $ob;
}
- фильтр контактов по имени и фамилии. 
Метод: bxapi.ru/src/?module_id=crm&name=CCrmContact%3A%3A...