При массовом изменении только одного свойства в инфоблоке Битрикс, остальные свойства не должны стираться. Это может происходить, если не правильно настроена логика обновления свойств.
Чтобы избежать стирания остальных свойств при массовом изменении, можно использовать следующий алгоритм:
1. Получить список элементов инфоблока, которые нужно изменить.
2. Для каждого элемента:
- Получить текущие значения всех свойств элемента.
- Изменить только нужное свойство.
- Обновить элемент инфоблока с новыми значениями свойств, оставив остальные без изменений.
Примерный код на языке PHP для массового изменения свойства "Цвет" элементов инфоблока:
```php
<?php
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Main\Update\Stepper;
Loader::includeModule('iblock');
$iblockId = 1; // Идентификатор инфоблока
$propertyCode = "COLOR"; // Код свойства
$elements = ElementTable::getList([
'filter' => ['IBLOCK_ID' => $iblockId],
'select' => ['ID']
]);
while ($element = $elements->fetch()) {
$elementId = $element['ID'];
$dbPropertyValues = CIBlockElement::GetProperty($iblockId, $elementId, ['sort' => 'asc']);
$updatedProperties = [];
while ($propertyValue = $dbPropertyValues->GetNext()) {
if ($propertyValue['CODE'] == $propertyCode) {
// Меняем только свойство "Цвет"
$updatedProperties[$propertyValue['CODE']] = 'New Value';
} else {
// Остальные свойства оставляем без изменений
$updatedProperties[$propertyValue['CODE']] = $propertyValue['VALUE'];
}
}
$element = new CIBlockElement;
$element->Update($elementId, $updatedProperties);
}
```
В данном примере мы получаем список элементов инфоблока с заданным идентификатором и проходим по каждому элементу. Затем мы получаем текущие значения свойств элемента с помощью метода `CIBlockElement::GetProperty`, меняем только нужное свойство и обновляем элемент с новыми значениями свойств, оставляя остальные без изменений.