Битрикс: выбор дублей

19.08.2016  09:50

Типовая задача: выбор дублей в инфоблоке. Допустим, по какой-то причине задвоились артикулы (в примере это строковое свойство CODE).

Решение:

$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
require($DOCUMENT_ROOT."/bitrix/modules/main/include/prolog_before.php");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
set_time_limit(0);
ini_set('max_execution_time', '3600');
ini_set('memory_limit', '512M');
if ( !$USER->IsAdmin() ) {
    $APPLICATION->AuthForm("");
}
CModule::IncludeModule("iblock");
$IBLOCK_ID = 1;
$obE = new CIBlockElement();
$arSelect = array(
	"ID",
	"NAME",
	"IBLOCK_ID",
	"PROPERTY_CODE",//added
);
$arFilter = array(
	"IBLOCK_ID" => $IBLOCK_ID,
	"IBLOCK_ACTIVE" => "Y",
	"ACTIVE_DATE" => "Y",
	"ACTIVE" => "Y",
);
$r = CIBlockElement::GetList(
	array(), 
	$arFilter, 
	false, 
	false, 
	$arSelect
);
while ( $arCurrentItem = $r->GetNext() ) {
	$article = $arCurrentItem['PROPERTY_CODE_VALUE'];
	$arSelect2 = array(
		"ID",
		"NAME",
		"IBLOCK_ID",
		"PROPERTY_CODE",//added
	);
	$arFilter2 = array(
		"IBLOCK_ID" => $IBLOCK_ID,
		"IBLOCK_ACTIVE" => "Y",
		"=PROPERTY_CODE" => $article,
		"ACTIVE_DATE" => "Y",
		"ACTIVE" => "Y",
	);
	$r2 = CIBlockElement::GetList(
		array(), 
		$arFilter2, 
		false, 
		false, 
		$arSelect2
	);
	if ($r2->SelectedRowsCount() > 1) {
		while ( $arCurrentItem2 = $r2->GetNext() ) {
			echo '
';
			print_r($arCurrentItem2);//exit;
			echo '
'; } } } echo 'fin';


Т.е. внутри первого обхода проверяется нет ли ещё записей с выбранным артикулом. Внутри второго обхода можно добавить удаление записей, либо Update. Всё!


перейти в Блог | Блог (стр. 9)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 44  PHP 56  web-программирование 80  молодым домохозяйкам 44  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)