Задача – определять поля торгового каталога CAN_BUY_ZERO и QUANTITY_TRACE в определенные значения при обновлении элемента торгового каталога. Используем обработку событий в init.php и низкоуровневые события D7.
Оставлю здесь. Может быть кому-то пригодится в решении своей задачи, и себе на будущее.
Решение рекомендовано технической поддержкой Битрикса. Ниже предоставлю варианты решений из обращения. Немного модифицировали правда.
[CODE]$bxEventManager = \Bitrix\Main\EventManager::getInstance();
$bxEventManager->addEventHandler(
'catalog',
'\Bitrix\Catalog\Product::OnBeforeUpdate',
[
CatalogEvents::class,
"OnBeforeUpdate"
]
);
class CatalogEvents
{
public static function OnBeforeUpdate(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameter("fields");
$element_id = $event->getParameter("id")['ID'];
if ($element_id) {
Cmodule::IncludeModule('iblock');
$res = CIBlockElement::GetByID($element_id);
if ($ar_res = $res->GetNext()) {
if ($ar_res["IBLOCK_ID"] == $IBLOCK_ID) {
if (isset($data['CAN_BUY_ZERO']) && isset($data['QUANTITY_TRACE'])) {
$result->modifyFields(array('CAN_BUY_ZERO' => "Y", 'QUANTITY_TRACE' => "N"));
}
}
}
}
return $result;
}
}
[/CODE][QUOTE]Попробуйте, пожалуйста, использовать решение, описанное в статье: [URL=https://dev.1c-bitrix.ru/community/blogs/vws/rabota-s-tsenami-v-forme-redaktirovaniya-elementa-infobloka.php]https://dev.1c-bitrix.ru/community/blogs/vws/rabota-s-tsenami-v-forme-redaktirovaniya-elementa-infobloka.php[/URL]
Вместо события OnBeforeProductUpdate вы можете использовать низкоуровневое событие \Bitrix\Catalog\[COLOR=#ff0000]Model[/COLOR]\Product::OnBeforeUpdate
Пример описан в документации: [URL=https://dev.1c-bitrix.ru/api_help/catalog/events/onbeforeproductupdate.php]https://dev.1c-bitrix.ru/api_help/catalog/events/onbeforeproductupdate.php[/URL]
Это низкоуровневое событие, как работать с данными событиями найдёте здесь: [URL=https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2244#events]https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2244#events[/URL][/QUOTE]
Оставлю здесь. Может быть кому-то пригодится в решении своей задачи, и себе на будущее.
Решение рекомендовано технической поддержкой Битрикса. Ниже предоставлю варианты решений из обращения. Немного модифицировали правда.
[CODE]$bxEventManager = \Bitrix\Main\EventManager::getInstance();
$bxEventManager->addEventHandler(
'catalog',
'\Bitrix\Catalog\Product::OnBeforeUpdate',
[
CatalogEvents::class,
"OnBeforeUpdate"
]
);
class CatalogEvents
{
public static function OnBeforeUpdate(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameter("fields");
$element_id = $event->getParameter("id")['ID'];
if ($element_id) {
Cmodule::IncludeModule('iblock');
$res = CIBlockElement::GetByID($element_id);
if ($ar_res = $res->GetNext()) {
if ($ar_res["IBLOCK_ID"] == $IBLOCK_ID) {
if (isset($data['CAN_BUY_ZERO']) && isset($data['QUANTITY_TRACE'])) {
$result->modifyFields(array('CAN_BUY_ZERO' => "Y", 'QUANTITY_TRACE' => "N"));
}
}
}
}
return $result;
}
}
[/CODE][QUOTE]Попробуйте, пожалуйста, использовать решение, описанное в статье: [URL=https://dev.1c-bitrix.ru/community/blogs/vws/rabota-s-tsenami-v-forme-redaktirovaniya-elementa-infobloka.php]https://dev.1c-bitrix.ru/community/blogs/vws/rabota-s-tsenami-v-forme-redaktirovaniya-elementa-infobloka.php[/URL]
Вместо события OnBeforeProductUpdate вы можете использовать низкоуровневое событие \Bitrix\Catalog\[COLOR=#ff0000]Model[/COLOR]\Product::OnBeforeUpdate
Пример описан в документации: [URL=https://dev.1c-bitrix.ru/api_help/catalog/events/onbeforeproductupdate.php]https://dev.1c-bitrix.ru/api_help/catalog/events/onbeforeproductupdate.php[/URL]
Это низкоуровневое событие, как работать с данными событиями найдёте здесь: [URL=https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2244#events]https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2244#events[/URL][/QUOTE]