Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

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

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
RSS
Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.
 
Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.

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

$arFields = array(
'WEIGHT' => $ar_fields['PROPERTY_ATT_WEIGHT_VALUE'],    
'WIDTH' => $ar_fields['PROPERTY_ATT_WIDTH_VALUE'],    
[COLOR=#ff0000] 'HEIGH'[/COLOR] => $ar_fields['PROPERTY_ATT_HEIGHT_VALUE'],
'LENGTH' => $ar_fields['PROPERTY_ATT_LENGTH_VALUE'] ;) ;

[COLOR=#ff0000]HEIGHT[/COLOR]

Спасибо за статью.
 
Еще есть вариант того что при событиях
OnAfterIBlockElementUpdate - обновление элемента
OnAfterIBlockElementAdd - добавление элемента
Будет не срабатывать запись, так как событие ProductUpdate срабатывает после и может перезаписывать свойство.
Тогда стоит попробовать поставить не на изменение элементов инфолока, а на изменение товара
Код
AddEventHandler("catalog", "OnBeforeOnBeforeProductUpdate", 'setDimensions');
Код
AddEventHandler("catalog", "OnBeforeProductAdd", 'setDimensions');

Полный пример кода который при изменениях в товаре или выгрузке 1С будет записывать габариты
Сайт по продаже шин, поэтому есть только объем, а для расчета отправки по почте нужны габариты

Код
AddEventHandler("catalog", "OnBeforeProductUpdate", 'setDimensions');
AddEventHandler("catalog", "OnBeforeProductAdd", 'setDimensions');

function setDimensions($id, &$arFields){
 $addProps = CIBlockElement::GetList (
 Array("ID" => "ASC"),
 Array("IBLOCK_ID" => array(17, 2), "ID" => $id),
 false,
 false,
 Array(
 'ID',
 'PROPERTY_SHIRINA_MM',
 'PROPERTY_VYSOTA_MM',
 'PROPERTY_OBEM',
 'PROPERTY_VES'
 )
 );

 while($ar_fields = $addProps->GetNext())
 {
 //Если есть параметры веса в свойствах инфоблока то ставим их
 if($ar_fields["PROPERTY_SHIRINA_MM_VALUE"] && $ar_fields["PROPERTY_VYSOTA_MM_VALUE"]){
 $width = $ar_fields["PROPERTY_VYSOTA_MM_VALUE"];
 $height = $ar_fields["PROPERTY_VYSOTA_MM_VALUE"];
 $thickness = $ar_fields["PROPERTY_SHIRINA_MM_VALUE"];
 //Если нету параметров но есть объем то высчитываем из объема примерные габариты
 }elseif ($ar_fields["PROPERTY_OBEM_VALUE"]){
 $v = $ar_fields["PROPERTY_OBEM_VALUE"];
 //Процентное соотношение габаритов относительно объёма 0.4*0.4*0.2/40% 40% 20% Высота Длина Ширина шины
 $r = pow($v/(0.4*0.4*0.2), 1/3);
 $width = round(0.4 * $r, 2)*1000;
 $height = round(0.4 * $r, 2)*1000;
 $thickness = round(0.2 * $r, 2)*1000;
 }else{
 continue;
 }
 }

 $weight = $ar_fields["PROPERTY_VES_VALUE"] * 1000;
 $arFields["WEIGHT"] = $weight;
 $arFields["WIDTH"] = $width;
 $arFields["HEIGHT"] = $height;
 $arFields["LENGTH"] = $thickness;
}
 
Добрый день
Написал обработку для того что-бы из реквизитов товара брать вес и габариты торгового предложения.
Если интересно вот ссылка
 
Цитата
Борис Черепанов пишет:
Добрый день
Написал обработку для того что-бы из реквизитов товара брать вес и габариты торгового предложения.
Если интересно  [URL=https://xakplant.ru/2019/04/19/выгрузка-веса-высоты-ширины-длинны-из/]вот ссылка[/URL]
Не заметил это сообщение  :)  свое дописал сюда же.
Но пусть тоже будет, у меня чуть иначе сделано и без ТП
 
Тестил сегодня - все работает


<?
function OnAfterIBlockElementUpdateAdd(&$arFields) {

$el = new CIBlockElement;

switch (SITE_ID ) {
case 's1':
$iBlockID = 12;
break;
case 's2':
$iBlockID = 49;
break;
}

$delivery_fields = array();

$db_props = CIBlockElement::GetProperty(
$iBlockID,
$arFields['ID'],
array("sort" => "asc"),
Array("CODE" => "CML2_TRAITS")
);

while ($ar_props = $db_props->Fetch()) {

switch ($ar_props["DESCRIPTION"]) {
case 'Длина':
$length = $ar_props['VALUE'];
break;
case 'Высота':
$height = $ar_props['VALUE'];
break;
case 'Ширина':
$width = $ar_props['VALUE'];
break;
}

}

$delivery_fields = array(

'LENGTH' => $length * 10,
'HEIGHT' => $height *10,
'WIDTH' => $width *10
);

\Bitrix\Catalog\Model\Product::update($arFields['ID'], $delivery_fields);
}
 
'WIDTH' => $VALUES['3'] * 10,
       'HEIGHT' => $VALUES['4'] * 10,
       'LENGTH' => $VALUES['5'] * 10;


Тут недочет - если из 1с не прийдет какое либо поле то ключи собьются и ваши габариты запишутся не туда, либо же к примеру прийдет еще 1поле - обьем, тогда
'WIDTH' => $VALUES['3'] * 10, уже будет не [3], а к [4] например, поэтому можно сравнивать по описанию полей

Тестил сегодня - все работает


Скрытый текст
Изменено: Михаил Базаров - 19.08.2022 18:27:46
 
В целом да. Если ключи собъются все поломается. Только и остается, проверять по точному названию поля.
Изменено: Михаил Базаров - 19.08.2022 18:29:02
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18802 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... AJAX корзина с отправкой количества из раздела каталога Просмотров: 20192 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Вывести компонент новостей на страницу в Битрикс Просмотров: 65166 Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, ч... INPUT type="file" Предпросмотр превью картинки до загрузки Просмотров: 12967 Рассмотрим на примере компонента "Форма добавления-редактирования элементов инфоблока", ка... Получение местоположений через API Битрикс c поиском по select. Просмотров: 23251 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс Просмотров: 38009 Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одн... Кастомизация компонента восстановления пароля bitrix:system.auth.forg... Просмотров: 26837 Достаточно часто спрашивают как кастомизировать компонент восстановления пароля пользовате... Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройк... Просмотров: 1709 Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступ... Определить местоположение пользователя и показать магазины поблизости... Просмотров: 1846 Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно оп... Дать пользователю возможность быстро отредактировать материал Просмотров: 4969 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Показать пользователю накопительную скидку за все сделанные заказы, и... Просмотров: 2642 Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и ... Список новостей с автопрокруткой через overflow:scroll Просмотров: 6143 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Добавление в избранное или отложенные, на AJAX из карточки товара Просмотров: 29256 В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "И... Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1166 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8723 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Ajax форма обратной связи, реализация в битрикс Просмотров: 8704 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 18697 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 6185 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во... Дополнительные картинки в новостях Битрикс, почти фотогалерея. Просмотров: 49540 Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Деталь... Вывести свойство привязка к Яндекс Картам в Битрикс Просмотров: 19477 Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента...