Найти в Дзене

Дубликаты пользователей 1С-Битрикс. Поиск. Объединение.

Иногда бывает необходимо найти все дубликаты пользователей в 1С-Битрикс "Управление сайтом" и что-то с ними сделать, например объединить. Прежде найдем эти аккаунты. Для этого можно использовать простой код. $query = \Bitrix\Main\UserTable::query();
$query->setSelect(['EMAIL']);
$query->addSelect(new \Bitrix\Main\ORM\Fields\ExpressionField('CNT', 'COUNT(%s)', 'EMAIL'));
$query->setGroup('EMAIl');
$query->having('CNT', '>', 1);
$query->setLimit(10); // для примера возьмем только 10
$dbr = $query->exec();
while( $ar = $dbr->fetch())
{
echo '<pre>';
print_r($ar);
echo '</pre>';
} При этом формируется sql запрос SELECT
`main_user`.`EMAIL` AS `EMAIL`,
COUNT(`main_user`.`EMAIL`) AS `CNT`
FROM `b_user` `main_user`
GROUP BY `main_user`.`EMAIL`
HAVING COUNT(`main_user`.`EMAIL`) > '1'
LIMIT 0, 10 В итоге нам известен список email адресов с дубликатами. Далее проходим по каждому и переносим его заказы, профили покупателя на другой аккаунт. При необходимости можно доб

Иногда бывает необходимо найти все дубликаты пользователей в 1С-Битрикс "Управление сайтом" и что-то с ними сделать, например объединить. Прежде найдем эти аккаунты. Для этого можно использовать простой код.

$query = \Bitrix\Main\UserTable::query();
$query->setSelect(['EMAIL']);
$query->addSelect(new \Bitrix\Main\ORM\Fields\ExpressionField('CNT', 'COUNT(%s)', 'EMAIL'));
$query->setGroup('EMAIl');
$query->having('CNT', '>', 1);
$query->setLimit(10); // для примера возьмем только 10
$dbr = $query->exec();

while( $ar = $dbr->fetch())
{
echo '<pre>';
print_r($ar);
echo '</pre>';
}

При этом формируется sql запрос

SELECT
`main_user`.`EMAIL` AS `EMAIL`,
COUNT(`main_user`.`EMAIL`) AS `CNT`
FROM `b_user` `main_user`
GROUP BY `main_user`.`EMAIL`
HAVING COUNT(`main_user`.`EMAIL`) > '1'
LIMIT 0, 10

В итоге нам известен список email адресов с дубликатами.

Далее проходим по каждому и переносим его заказы, профили покупателя на другой аккаунт. При необходимости можно добавить перенос и других данных.

На гитхабе разместил рабочий класс для объединения дубликатов, можете оттуда скопировать и разместить в файле /bitrix/php_interface/init.php .

github.com

После размещения файла, необходимо в административном разделе сайта в командной строке выполнить команду добавления агента, для автоматического выполнения объединения

\MergeAccount::addAgent();

-2

В результате будет добавлен агент, который в фоне, будет объединять дубликаты, которые уже есть и которые появятся.