Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.

Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1С не умеет выгружать параметры товара: Вес, Ширина, Высота, Глубина.

Но эти параметры нужны для служб доставки, таких как Почта России, DHL и прочих. И желательно, что бы они были именно в параметрах товара модуля торгового каталога.

Заполнить их достаточно просто, для этого понадобиться создать дополнительные реквизиты в 1С с этими параметрами и воспользоваться методом API CCatalogProduct::Update

Заполняем параметры из свойств

Итак: мы создали доп реквизиты Вес, Ширина, Высота, Глубина в 1С, заполнили их и обменялись с сайтом. Теперь на сайте есть свойства ATT_WEIGHT, ATT_WIDTH, ATT_HEIGHT, ATT_LENGTH

Пишем простенький скрипт, который просто получит все элементы из инфоблока с каталогом (в примере, его ID = 15), с отбором данных свойств.

  $addProps = CIBlockElement::GetList (
  Array("ID" => "ASC"),
  Array("IBLOCK_ID" => 15),
    false,
    false,
      Array(
      'ID',
      'PROPERTY_ATT_WEIGHT',
      'PROPERTY_ATT_WIDTH',
      'PROPERTY_ATT_HEIGHT',
      'PROPERTY_ATT_LENGTH'
      )
);
while($ar_fields = $addProps->GetNext())
{
  echo 'ID' . $ar_fields['ID'] .' / ';
  echo 'Вес:' . $ar_fields['PROPERTY_WEIGHT_VALUE'].' / ';
  echo 'Длина:' . $ar_fields['PROPERTY_DLINA_VALUE'].' / ';
  echo 'Ширина:' . $ar_fields['PROPERTY_SHIRINA_VALUE'].' / ';
  echo 'Высота:' . $ar_fields['PROPERTY_VYSOTA_VALUE'].'

'; } endif;

Если запустить этот скрипт, просто получим вывод всех товаров каталога с указанием ID элемента и наших свойств.

Зная эти свойства, просто загоняем их значения в стандартные поля торгового каталога, методом CCatalogProduct::Update

  $addProps = CIBlockElement::GetList (
  Array("ID" => "ASC"),
  Array("IBLOCK_ID" => 15),
    false,
    false,
      Array(
      'ID',
      'PROPERTY_ATT_WEIGHT',
      'PROPERTY_ATT_WIDTH',
      'PROPERTY_ATT_HEIGHT',
      'PROPERTY_ATT_LENGTH'
      )
);
while($ar_fields = $addProps->GetNext())
{
  echo 'Товару с ID-' . $ar_fields['ID'] .' установлены параметры';
  echo 'Вес:' . $ar_fields['PROPERTY_ATT_WEIGHT_VALUE'].' / ';
  echo 'Длина:' . $ar_fields['PROPERTY_ATT_WIDTH_VALUE'].' / ';
  echo 'Ширина:' . $ar_fields['PROPERTY_ATT_HEIGH_VALUET'].' / ';
  echo 'Высота:' . $ar_fields['PROPERTY_ATT_LENGTH_VALUE'];
  
  Cmodule::IncludeModule('catalog');
  $PRODUCT_ID = $ar_fields['ID'];
  $arFields = array(
    'WEIGHT' => $ar_fields['PROPERTY_ATT_WEIGHT_VALUE'],
    'WIDTH' => $ar_fields['PROPERTY_ATT_WIDTH_VALUE'],
    'HEIGH' => $ar_fields['PROPERTY_ATT_HEIGHT_VALUE'],
    'LENGTH' => $ar_fields['PROPERTY_ATT_LENGTH_VALUE']
  );
  CCatalogProduct::Update($PRODUCT_ID, $arFields);
}
endif;

В примере, вывод с небольшой свисто-перделкой- он выводит уведомление об установке параметров. Можно этого не делать, просто вывести echo 'Параметры успешно установлены';

Данный скрипт, подразумевает, что Вы будете запускать его в ручную, по необходимости. Это оптимально, если в каталоге не высокая текучка товаров и параметры товаров не меняются постоянно.

Само собой, можете добавить его в init.php дабы скрипт срабатывал на событиях
OnAfterIBlockElementUpdate - обновление элемента
OnAfterIBlockElementAdd - добавление элемента
Что повысит время обмена с 1С и в целом, нагрузку на сервер

Либо добавить скрипт в крон, на выполнение по расписанию. Для совсем больших магазинов, можно создать своего агента. Но, данной заметкой, надеюсь, дал наводку.

Комментарии

Узнать стоимость

Нажимая на кнопку "Заказать", вы даете согласие на обработку персональных данных

Или напишите нам на info@365mg.ru

Мы не будем доставать Вас звонками, обещаем! ;)

Пока не готов
*Мы гарантируем, что ваши контакты не будут переданы третьим лицам