У меня такое решение сделано.
Если через 1с тогда делаю так.
Считываю информацию по товару .
Соответственно они могут меняться.
Перед записью новых комбинаций удаляю старую информацию по комбинациям.
Таблица атрибутов:
Стр ="SELECT c1.* FROM `ps_product_attribute` c1
| WHERE c1.`id_product` = "+Д4+"
|";
Д4 = Это id товара
Строка.id_product_attribute – Из таблицы арибутов.
Стр ="DELETE FROM ps_product_attribute_combination WHERE ps_product_attribute_combination.id_product_attribute = "+Строка(Формат(Строка.id_product_attribute,"ЧГ="));
Стр ="DELETE FROM ps_product_attribute_shop WHERE ps_product_attribute_shop.id_product_attribute = "+Строка(Формат(Строка.id_product_attribute,"ЧГ="));
Стр ="DELETE FROM ps_stock_available WHERE ps_stock_available.id_product = '"+Д4+"'"+" AND ps_stock_available.id_product_attribute = '"+ Строка(Формат(Строка.id_product_attribute,"ЧГ="))+"'";
Стр ="DELETE FROM ps_attribute_impact WHERE ps_attribute_impact.id_product = '"+Д4+"'";
Стр ="DELETE FROM ps_product_attribute WHERE ps_product_attribute.id_product = '"+Д4+"'"+" AND ps_product_attribute.id_product_attribute = '"+ Строка(Формат(Строка.id_product_attribute,"ЧГ="))+"'";
Стр ="DELETE FROM ps_product_supplier WHERE ps_product_supplier.id_product = '"+Д4+"'";
Формирую новые комбинации. Ну и конечно указывается количество товара при формировании.
Тогда нет никаких дублей. Практически это как формирование первоначальных комбинаций.
Можно и другим вариантом.
Считывание информации с номенклатуры товара, формирование таблицы комбинаций.
Считывание информации комбинаций с сайта по этому товару.
Сравнение первой и второй таблицы.
Удаляются записи с сайта комбинации которых нет, и добавляются новые комбинации.
Второй вариант это фактически синхронизация сайта с 1с.
Можно автоматом, можно каждый по отдельности выборочно.