Заполнить или изменить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента при обмене с 1С
Заполнить или изменить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента при обмене с 1С
Константин Либерман
Основатель компании «LIBERTY»
193 просмотра
На одном из наших проектов к нам пришла задача сделать миниальное кол-во товаров при покупке равное 2 шт. По умолчанию в 1С_Битрикс в торговом каталоге в каждом товаре есть свойство "Коэфициент единицы измерения" и он равен 1.
Каталог синхронизируется с 1С, но на "Коэфициент единицы измерения" это ни как не влияет. Решения этой задачи мы разбили на 2 подзадачи:
1) Массово изменить "Коэфициент единицы измерения" с 1 на 2.
2) Автоматическое обновление коэффициэнта из свойства при обмене с 1С
Для начала в 1С создали новой свойство "Кратность", потом всем товарам (в нашем случае шины) это свойство заполнилось значением равным 2. После обмена с 1С на сайте создалось новое свойство "Кратность" с сивольным кодом "KRATNOST".
Заполнить коэффициент единицы измерения из свойства используя D7
Для решения, в php консоли сайта выполнили следующий код:
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Catalog\MeasureRatioTable;
Loader::includeModule('iblock');
Loader::includeModule('catalog');
C помощью CIBlockElement::GetProperty - получили значение свойства KRATNOST из инфоблока с ID 39.
Значение коэффициента загнали в переменную $coeff.
Внутри цикла (каждого элемента), с помощью MeasureRatioTable::getList получили ID коэффициента конкретного товара (элемента).
С помощью MeasureRatioTable::update перезаписали/установили коэффициенты для конкретного товара.
Автоматическое обновление коэффициэнта из свойства при обмене с 1С
Для того чтобы сделать код срабатывающим на событии OnSuccessCatalogImport1C, мы зарегистрировали обработчик событий, используя следующий код в файле 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 ){
tmpsave1(array($arParams, $arFields),"UpdateElementRatio_1");
$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'];
Этот код предполагает, что коэффициент хранится в свойстве с кодом KRATNOST. Обработчик событий OnSuccessCatalogImport1C регистрируется для выполнения необходимых операций перед обновлением или добавлением элемента. Функция updateMeasureRatios обновляет коэффициент, если он присутствует.