Создать комплект в битриксе методом CCatalogProductSet::add , передаешь массив полей в метод add и комплект формируется (пример позаимствован с просторов сети)
// Массив для создания комплекта
$arFields = array(
"TYPE" => 1, //тип 1 - комплект, 2 - набор
// "SET_ID" => 0, //указывает на то что набор добавляется к этому товару
"ITEM_ID" => 1234, // ID товара
"ITEMS" => array(
[0] => array(
"ACTIVE" => "Y", // активность записи
"ITEM_ID" => 34, // ID товара который добавляется в комплект
"QUANTITY" => 1 // количество товара
),
[1] => array(
"ACTIVE" => "Y",
"ITEM_ID" => 56,
"QUANTITY" => 1
),
)
);
Но когда сталкиваешься с методом CCatalogProductSet::update все оказывается сложнее, особенно учитывая что нет документации.
Метод принимает два параметра CCatalogProductSet::update($intID, $arFields) и вроде бы все просто, в первом передаем айди комплекта, а во втором массив полей. Но суть в том что айди комплекта это не айди элемента в инфоблоке (тот, что мы передаем в параметре "ITEM_ID"), а свой отдельный айди.
Получить его можно с помощью метода CCatalogProductSet::getAllSetsByProduct
$arSetsByProduct = CCatalogProductSet::getAllSetsByProduct($origId, CCatalogProductSet::TYPE_SET);
$arSetsByProduct = array_shift($arSetsByProduct); // комплект данного товара, тк getAllSetsByProduct возвращает массив
и уже потом вы можете обновить комплект товаров с помощью CCatalogProductSet::update (и выполнить recalculateSetsByProduct , как советуют в другой статье https://dev.1c-bitrix.ru/community/web...log/19963/)
Паничев Алексей написал: Спасибо! Помогло в 2018 году настроить автоисправление остатков после ошибочной установки QUANTITY комплектам в результате синхронизации с 1С.
Достаточно пересохранить любой товар, входящий в комплект.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».