[B]ОДНО ИЗ РЕШЕНИЙ, С УСЛОВИЕ ЕСЛИ НА СТОРОНЕ 1С программист согласится допилить логику[/B]
Сначала перенесем все штрих кода из системного поля в свойство товара. запускаем в PHP строке, перед етим создаем свойство у инфоблока с символьным кодом "BARCODE"
[CODE]// у меня 3 тыс товаров по этому запускаем скрипт на весь инфоблок...
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog")){
$IBLOCK_ID = 37;
//получаем все товары у которых есть штрих код
$dbBarCode = CCatalogStoreBarCode::getList(array(), array("IBLOCK_ID" => $IBLOCK_ID), false, false, $arSelect);
while($arBarCode = $dbBarCode->GetNext())
{
//в инфоблоке создал свойство "BARCODE", сейчас его будет заполнять
if($arBarCode['BARCODE']){
//значение из системного поля штрих-код мы записываем в ствойство товара BARCODE
CIBlockElement::SetPropertyValuesEx( $arBarCode['PRODUCT_ID'], $IBLOCK_ID, array('BARCODE' => $arBarCode['BARCODE']));
}
}
}
[/CODE]
Дальше, что бы все это работало в автомате, пишем обработку событий на добавление, изменение и удаление штрих кода у элемента (все это запихиваем в init.php)
[CODE]//регистрация событий: добвление, изменения, удаление штрих кода...
AddEventHandler("catalog", "OnCatalogStoreBarCodeAdd", Array("ProProCenter", "jobBarCode"));
AddEventHandler("catalog", "OnCatalogStoreBarCodeUpdate", Array("ProProCenter", "jobBarCode"));
AddEventHandler("catalog", "OnBeforeCatalogStoreBarCodeDelete", Array("ProProCenter", "DeleteBarCode"));
class ProProCenter
{
//работа с штрих кодом, при изменении или добавлении штрих кода дублируем его в свойство BARCODE
function jobBarCode($lastId, $arFields)
{
$iblock_id = 37;//ID инфоблока
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog"))
CIBlockElement::SetPropertyValuesEx($arFields['PRODUCT_ID'], $iblock_id, array('BARCODE' => $arFields['BARCODE']));
}
//удаление штрих-кода
function DeleteBarCode($id)
{
$iblock_id = 37;//ID инфоблока
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog")){
//по ID получаем информацию о штрих коде, до его удаления, что бы удалить штрих код в нашем свойстве
$dbBarCode = CCatalogStoreBarCode::getList(array(), array("ID" => $id), false, false, $arSelect);
if($arBarCode = $dbBarCode->GetNext())
{
//Удаляем запись у элемента
CIBlockElement::SetPropertyValuesEx($arBarCode['PRODUCT_ID'], $iblock_id, array('BARCODE' => ''));
}
}
}
}
[/CODE]