1С-Битрикс. Скопировать все цены из одного типа цены в другой
Если у вас на сайте появился новый тип цены и вам нужно скопировать все цены из другого типа в новый(чтобы ручками этого не делать), то ниже пример кода для решения.
Код проще всего запустить в инструменте битрикса «Командная PHP-строка»
$initialPriceId = 1; // из какого типа цена брать цену $finalPriceId = 2; // с каким типом цены записывать $overwriteMode = false; // если цена уже есть с нужным типом, то перезаписывать? \Bitrix\Main\Loader::includeModule('sale'); $dbProductPrice = CPrice::GetListEx( array(), array( "CATALOG_GROUP_ID" => array($initialPriceId, $finalPriceId) ), false, false, array( "ID", "PRODUCT_ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "QUANTITY_FROM", "QUANTITY_TO" ) ); $arProductPrices = array(); while ($arProductPrice = $dbProductPrice->Fetch()) { $arProductPrices[$arProductPrice['PRODUCT_ID']] [intval($arProductPrice['CATALOG_GROUP_ID'])] = $arProductPrice; } foreach ($arProductPrices as $prices) { if (isset($prices[$initialPriceId])) { if (isset($prices[$finalPriceId])) { if ($overwriteMode) { CPrice::Delete($prices[$finalPriceId]['ID']); } else { continue; } } $arPriceUpdate = array_diff_key(array_merge($prices[$initialPriceId], array( 'CATALOG_GROUP_ID' => $finalPriceId, )), array('ID' => 1)); CPrice::Add($arPriceUpdate); } }
1 комментарий
Можно ли перезаписывать одновременно несколько типов цен? Попробовал через ";', не вышло. Возможно не хватает времени на выполнение. И можно ли при копировании цен изменять их, например прибавлять 200р?