[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://мюнхен-лечение.рф/


Авторегер Narod.ru
[FAQ] Как грамотно писать скрипты под Human Emulator.
Автоматическая аддурилка Yandex
Test Maker v 1.0 — бесплатная CMS для создания online тестов
Здравствуйте! Меня зовут Михаил.Раньше я называл себя Новороссийским бомжем, но решил немного отойти от этого. Теперь мой блог - это Блог PHP программиста. Я уже 3 года занимаюсь PHP программированием. С недавнего времени создаю и продвигаю web сайты. Среди собственных разработок — самописная CMS, работающая на файлах, CMS для создания online тестов и т.д.
Еще можно попробовать пошаманить с фильтром в GetList’e чтобы сразу получать нужные элементы. Из документации
«CATALOG__ — по полю CATALOG_FIELD из цены типа PRICE_TYPE (ID типа цены), где CATALOG_FIELD может быть: PRICE — цена, CURRENCY — валюта.»
Есть шанс, что сработает фильтр на false или 0 и вернет сразу товары без цены.
[Ответить]