Переключатель
08.07.2011

[Bitrix] Как деактивировать товары без цены?

Всем привет! Давненько не писал в свой любимы блог, последнее время очень много задач, на решение которых уходит масса времени. Но ничего блог я не брошу, а только буду развивать. В планах перевести блог на платформу Bitrix и сделать его, так как мечтаю.

Итак, сегодня выложу очередной скрипт под Битрикс. Скрипт пригодится тем кто работает с интернет магазинами или занимается их разработкой.

Рассмотрим ситуацию: Клиент заказал интеграцию 1С Управление торговлей с интернет магазином на базе 1С — Bitrix. Но вот только проблемка в базе не на все товары установлена цена, а их около 25 тысяч и искать те, для которых не установлена цена очень долго. Поэтому все манипуляции с товарами, решено выполнять на сайте. Выполняем выгрузку на сайт, а теперь ищем элементы номенклатуры, для которых не задана цена и деактивируем их.

Для деактивации и был написан скрипт:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Деактивация товаров без цены ");
?>
<?

		if(!CModule::IncludeModule("iblock"))
		{
			ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
			return;
		}

$TYPE = "1ccatalog";
$OUT="<div style=\"padding:10px;\"><table width=100%>
<tr><td><div align=\"center\"><b>ID</b></div></td><td><div align=\"center\"><b>Название</b></div></td><td><div align=\"center\"><b>Доступность поиска</b></div></td></tr>";

$arSelect = Array("ID","NAME","IBLOCK_ID","ACTIVE");
$arFilter = Array("IBLOCK_TYPE"=>$TYPE);
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"),$arFilter, false, false,$arSelect);

$i = 0;
$c = 0;

			while($ob = $res->GetNext())
			{

			   $i++;

                                    if (CModule::IncludeModule("catalog"))
                                     {
			                            // Тип цен Розница
							           $PRICE_TYPE_ID = 4;

							           // Получаем розничную цену
									         $db_res = CPrice::GetList(
									        array(),
									        array(
									                "PRODUCT_ID" => $ob['ID'],
									                "CATALOG_GROUP_ID" => $PRICE_TYPE_ID
									            )
									    );

											if (!$ar_resprice = $db_res->Fetch())
											{

											    $OUT.="<tr><td>$ob[ID]</td><td style=\"text-align:left;\"><a href=\"http://sport-23.ru/bitrix/admin/iblock_element_edit.php?ID=$ob[ID]&type=$TYPE&lang=ru&IBLOCK_ID=$ob[IBLOCK_ID]&find_section_section=-1\">$ob[NAME]</td><td>$ob[ACTIVE]</td></tr>";

                                                if($ob['ACTIVE']=="Y"){

											    $el = new CIBlockElement;

                                                                                                  												$arLoadProductArray = Array(
												   "ACTIVE"         => "N");
                                                 // Меняем параметры
												 $ress = $el->Update($ob['ID'], $arLoadProductArray);

												}

											       $c++;

											  }

									 }
			}

$OUT.="</table></div>";

echo $OUT;

/*echo "Всего товара:$i<br />";
echo "Всего товаров без цены:$c";*/

?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Удобнее для такого скрипта создать отдельный раздел, установить для него права (доступ имеет только администратор) и после каждой выгрузки запускать данный скрипт. Плюс скрипт отображает те товары, у которых нет цены, это очень удобно, т.к. можно отследить данные товары и постепенно избавляться от них в 1С, если их реализацией уже не занимается организация или установить им цену.

Спонсор поста: Говорят что в Мюнхене очень хорошие клиники а еще так высоко развита медицина. Подробнее можно почитать на сайте http://мюнхен-лечение.рф/

Понравилась статья?

Подписка на обновления блога через RSS ленту или по электронной почте, а так же следуй за мной .

RotaPost - Эффективная реклама в блогах

Ваш комментарий

  1. Еще можно попробовать пошаманить с фильтром в GetList’e чтобы сразу получать нужные элементы. Из документации
    «CATALOG__ — по полю CATALOG_FIELD из цены типа PRICE_TYPE (ID типа цены), где CATALOG_FIELD может быть: PRICE — цена, CURRENCY — валюта.»
    Есть шанс, что сработает фильтр на false или 0 и вернет сразу товары без цены.

    [Ответить]

О блоге

Здравствуйте! Меня зовут Михаил.Раньше я называл себя Новороссийским бомжем, но решил немного отойти от этого. Теперь мой блог - это Блог PHP программиста. Я уже 3 года занимаюсь PHP программированием. С недавнего времени создаю и продвигаю web сайты. Среди собственных разработок — самописная CMS, работающая на файлах, CMS для создания online тестов и т.д.

Подробнее о блоге

Связаться со мной