Решили кастомизировать таблицу корзины? Подумайте дважды, стоит ли

Последние два дня ловил баг в корзине (bitrix:sale.basket.basket) с кастомизированным шаблоном, решил поделиться находкой. 
Кастомизация была минимальной - это не с нуля написанный шаблон, а небольшие косметические изменения существующего шаблона. Как оказалось, они были критичны для стандартного script.js. 
В чем суть бага - изменения кол-ва товаров не сохранялись. То есть нажимаете на "+" или "-" ничего не происходило и при обновлении корзины значения оставались прежними. 
Стал копать в сторону js функции recalcBasketAjax() и выяснилось, что вот эти изменения шаблона (basket_items.php) были критичны:
<tbody>
   <?foreach($arResult["GRID"]["ROWS"] as $k => $arItem):?>
      <tr id="<?=$arItem["ID"]?>" class="prod-line">
         // Здесь идут данные о товаре - картинка, название и т.д. всё стандартно
      </tr>
      
      <?if($arItem["DESCRIPTION"]):?>
         <tr><td colspan="5"><?=$arItem["DESCRIPTION"];?></td></tr>
      <?endif;?>

      <tr class="line"><td colspan="6"></td></tr>
   <?endforeach;?>

Вот как раз дополнительные tr на каждый товар и сбивали работу JavaScript, а именно, этот участок функции recalcBasketAjax():
if (!!items && items.rows.length > 0)
{
   for (var i = 1; items.rows.length > i; i++)
      postData['QUANTITY_' + items.rows[i].id] = BX('QUANTITY_' + items.rows[i].id).value;
}

Здесь в переменной items находится вся таблица с товарами (вместе с thead). Не очень понимаю, как из всего куска DOM этим js выдергивается информация о товарах, но факт таков, что лишних <tr> он не приемлет, ругается на ".value". 
Поэтому проблем решил переверстав таблицу что бы избавиться от лишних <tr>. 

Остается один момент, после обновления количества товара меняется и сумма, только вместо символа рубля (перечеркнутая "Р") появляется "руб.". Что с этим делать, пока не придумал.
rub[1].jpg