Иногда, после импорта каталога из 1С, у товаров битрикса не стоит галочка “Уменьшать количество при заказе”. Править руками тысячи товаров, это конечно же не вариант, и нам необходимо автоматизировать этот процесс.
Как это сделать в самой базе при помощи SQL запроса? Заходим в:
Рабочий стол > Настройки > Инструменты > SQL запрос, или в браузере жмем ваш_сайт/bitrix/admin/sql.php и пишем:
Внимание! Перед данной процедурой сделайте резервную копию.
UPDATE `b_catalog_product` SET QUANTITY_TRACE = 'Y'
Как выбрать чекбокс у товаров при помощи скрипта в битриксе? Создаем файл:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CModule::IncludeModule("catalog"); $upd = 0; $prodSections = CIBlockElement::GetList( array(), array( "IBLOCK_ID" => 1, // инфоблок с каталогом ), false, false, array('ID') ); echo 'all elements '.$prodSections->SelectedRowsCount(); while($arSection = $prodSections->GetNext()){ if (CCatalogProduct::Update( $arSection['ID'], array('QUANTITY_TRACE' => 'Y') )){ $upd++; } } echo '<br>updated '.$upd.' elements'; require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Но как вы сами понимаете, для новых товаров нужно будет проделать всё это заново. Как вариант, повесить данный скрипт на cron.
Как еще можно решить эту задачу? Для автоматической простановки галочки “Уменьшать количество при заказе” воспользуемся скриптом событий /bitrix/php_interface/init.php (напоминаю, если у вас его нет, то создайте). Нам необходимо добавить обработчик события добавления товара OnProductAdd:
AddEventHandler("sale", "OnProductAdd", "OnProductAdd"); function OnProductAdd(&$ID,$Fields) { $res=Array("QUANTITY_TRACE"=>"Y"); CCatalogProduct::Update($ID,$res); }
Пробуйте и делитесь в комментариях своими методами 🙂