Всем привет.
Бывает такое, что у товаров в каталоге битрикса не стоит галочка «Уменьшать количество при заказе«, такое бывает, например, после импорта каталога из 1С. Поскольку проходить руками тысячи товаров это редкостное извращение, то могу поделиться с вами парой методов, как автоматизировать этот процесс.
Первый вариант.
Требуется доступ к базе, или админке, чтобы выполнить mysql запрос:
UPDATE `b_catalog_product` SET QUANTITY_TRACE = 'Y'
В админке вам надо пройти в «Рабочий стол > Настройки > Инструменты > SQL запрос» или по адресу ваш_сайт/bitrix/admin/sql.php и выполнить там этот запрос.
Второй вариант.
Нужно выполнить скрипт, который переберет все товары и проставит им нужный параметр.
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CModule::IncludeModule("catalog"); $upd = 0; $prodSections = CIBlockElement::GetList( array(), array( "IBLOCK_ID" => 3, //инфоблок в котором у вас каталог ), 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"); ?>
К минусам этих методов можно отнести то что они работают разово и для вновь добавленных товаров надо будет снова вызывать их.
Чтобы навсегда забыть об этой проблеме, вам надо в файле
/bitrix/php_interface/init.php
добавить свой обработчик события добавления товара OnProductAdd.
AddEventHandler("sale", "OnProductAdd", "OnProductAdd"); function OnProductAdd(&$ID,$Fields) { $res=Array("QUANTITY_TRACE"=>"Y"); CCatalogProduct::Update($ID,$res); }
Вот так 6 строк кода избавят вас от мучений и позволят забыть о необходимости ставить чекбокс «Уменьшать количество при заказе«.
Удачи вам в работе с битриксом.
В какую часть файла вставлять данный кусок кода? (между чем и чем, чтобы не испортить скрипт)
И влияет ли это на правильность отображения товара в YML-файле для Яндекс.Маркета?
Андрей, если вы о третьем способе, то этот надо вставить в конец файла /bitrix/php_interface/init.php перед закрывающим php тегом ?>
На выгрузку для Я.Маркета это не должно повлиять.