Может быть... не спорю. Но у меня в голове никаких ЦД не было. Когда я прочитал ваше условие у меня в голове мгновенно возник этот код. И я все не мог понять почему у вас так громоздко выглядит решение. Я даже несколько раз перечитывал условие задачи... а вдруг что упустил
Это ведь классика. Расчет итогов по группировкам.
Можно группировок сделать сколько угодно. И столько же будет IF'ов с ELSE'ами.
Например есть таблица
Склад | Номенклатура | Сумма
отсортированная по первым двум полям.
Две переменные: Склад, Номенклатура
Форыч, два IF'а (для текущего склада и номенклатуры)
Пока текущий элемент равен предыдущему накапливаем итог, в противном случае скидываем результаты в таблицу итогов и обнуляем счетчики.
Любой прикладник напишет это с закрытыми глазами, не отвлекаясь от WoW