
Каталог синхронизируется с 1С, но на "Коэфициент единицы измерения" это ни как не влияет. Решения этой задачи мы разбили на 2 подзадачи:
1) Массово изменить "Коэфициент единицы измерения" с 1 на 2.
2) Автоматическое обновление коэффициэнта из свойства при обмене с 1С
Для начала в 1С создали новой свойство "Кратность", потом всем товарам (в нашем случае шины) это свойство заполнилось значением равным 2. После обмена с 1С на сайте создалось новое свойство "Кратность" с сивольным кодом "KRATNOST".
Заполнить коэффициент единицы измерения из свойства используя D7
Для решения, в php консоли сайта выполнили следующий код:
PHP
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Catalog\MeasureRatioTable;
Loader::includeModule('iblock');
Loader::includeModule('catalog');
$iblockId = 39;
$updateElements = ElementTable::getList([
'select' => ['ID'],
'filter' => ['IBLOCK_ID' => $iblockId],
]);
while ($arFields = $updateElements->fetch()) {
$propertyValue = CIBlockElement::GetProperty(
$iblockId,
$arFields['ID'],
[],
[
'CODE' => 'KRATNOST'
]
);
if ($arProperty = $propertyValue->Fetch()) {
$coeff = $arProperty['VALUE'];
$curElementRatio = MeasureRatioTable::getList([
'filter' => [
'=PRODUCT_ID' => $arFields['ID'],
],
]);
if ($arRatio = $curElementRatio->fetch()) {
MeasureRatioTable::update($arRatio['ID'], [
'RATIO' => $coeff,
]);
}
}
}
Значение коэффициента загнали в переменную $coeff.
С помощью MeasureRatioTable::update перезаписали/установили коэффициенты для конкретного товара.
Автоматическое обновление коэффициэнта из свойства при обмене с 1С
Для того чтобы сделать код срабатывающим на событии OnSuccessCatalogImport1C, мы зарегистрировали обработчик событий, используя следующий код в файле init.php:
init.php
/******************* Обновление коэффициентов после импорта **************/
use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Catalog\MeasureRatioTable;
CModule::IncludeModule("iblock");
CModule::IncludeModule('catalog');
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "UpdateElementRatio");
function UpdateElementRatio($arParams, $arFields)
{
$updateElements = ElementTable::getList([
'select' => ['ID'],
'filter' => ['IBLOCK_ID' => 39],
]);
while ($arFields2 = $updateElements->fetch()) {
$propertyValue = CIBlockElement::GetProperty(
39,
$arFields2['ID'],
[],
[
'CODE' => 'KRATNOST'
]
);
if ($arProperty = $propertyValue->Fetch()) {
$coeff = $arProperty['VALUE'];
$curElementRatio = MeasureRatioTable::getList([
'filter' => [
'=PRODUCT_ID' => $arFields2['ID'],
],
]);
if ($arRatio = $curElementRatio->fetch()) {
MeasureRatioTable::update($arRatio['ID'], [
'RATIO' => $coeff,
]);
}
}
}
}
/******************* Обновление коэффициентов после импорта **************/