В стандартном функционале в 25-ой версии было сделано дополнение для этого:
Цитата: Замещение накопительных дисконтных карт.
В разделе «Скидки» на странице «Дисконтные карты» создана процедура замещения одной накопительной дисконтной карты другой.
Процедура замещения накопительной дисконтной карты позволяет учитывать предыдущую активность покупателя в случае выдачи ему новой дисконтной карты взамен утерянной или испорченной.
Процедура «Заместить дисконтные карты» вызывается кнопкой «Обработать», относящейся к списку дисконтных карт накопительного типа. Процедура позволяет заместить одну или более выбранных карт другой дисконтной картой. При замещении тех дисконтных карт, которые сами замещают какие-либо дисконтные карты, ссылка замещения для ранее замещенных карт меняется на новую карту.
Замещенная дисконтная карта блокируется, и ее разблокирование не разрешается.
Замещать дисконтную карту нужно только дисконтной картой того же типа.
Процедура замещения позволяет указать процедуре расчета накопительной скидки на то, что при расчете суммарной активности покупателя необходимо учитывать не только активность по данной дисконтной карте, но и активность по всем тем дисконтным картам, которые были замещены данной картой. Сами замещенные карты в расчете новых значений скидок не участвуют.
Что касается скрипта, то
kadr прав. Новая дисконтная карта "привязывается" к тому же клиенту, что и старая. И наколения считаются для клиента. Есть один момент: у нас есть карты, к которым привязаны клиенты, и есть - к которым не привязаны. Поэтому мы сначала считаем накопления просто по картам, а потом - корректируем еще раз по клиентам.