Для краткости и ясности используем язык математики.
Обозначим номенклатуру i, приход j, расход k.
Функция X(i,j,k) определяет структуру списания, сложившуюся в интересующий нас момент t.
То есть отвечает на вопрос - сколько номенклатуры i из прихода j было списано при расходе k.
Функцию можно представить в виде куба со сторонами: Номенклатура, Приход, Расход.
Исправление задним числом можно представить как функцию dX(i,j,k). Так что Xt+1(i,j,k)=Xt(i,j,k)+dX(i,j,k).
То есть корректировка документа не должна быть перепроведением, а должна рассчитывать дельту структуры списания.
Предложение объединить два измерения (номенклатуру и приход) ничего не меняет.
В этом случае используется структура Y(l,k), где l=i*N+j. N - количество номенклатуры.
А уравнение превращается в Yt+1(l,k)=Yt(l,k)+dY(l,k).
Как решается задача определения dX?
Куб X делится на слои номенклатуры i: Z=X(i=i,j,k). В каждом слое применяется изменение d (уменьшается или увеличивается приход или расход или изменяется их порядок).
Затем решается частный случай ТРАНСПОРТНОЙ ЗАДАЧИ (это разновидность задач линейного программирования) с ограничениями:
Σj Zjk = Rk
(общий расход из всех приходов равен количеству Rk в расходной накладной k)
Σk Zjk <= Sj
(общий приход из всех расходов ограничен количеством Sj прихода j)
и целевой функцией:
Σjk Zjk * Cjk -> min
При этом для метода ФИФО, например, коэффициенты Сjk будут определяться правилом
Cjk = 1/(T(k) - T(j)), если T(k) > T(j) и Cjk = ∞, если T(k) <= T(j),
где T(j), T(k) - время прихода и расхода соответственно.
В качестве опорного решения берется текущее значение Z.
Правда, так мы фактически вычисляем не dX, а непосредственно Xt+1.
Почему же тогда 1С использует перепроведение и последовательность?
Потому что в этом случае не нужен отдельный алгоритм расчета dX и структуры данных под него.
dX определяется последовательным повторением элементарных проведений одного документа,
начиная с момента нарушения последовательности.
Такие алгоритмы называются решением методом "грубой силы".
Можно предложить различные частичные усовершенствования. Например, "softpoint", в котором восстановление последовательности проводится отдельно по каждому слою номенклатуры.
Можно оптимизировать хранение структуры списания.
Хотя сам собой напрашивается регистр сведений с измерениями: Номенклатура, Приход, Расход и ресурсом Количество.
Так раньше и хранили разреженные матрицы.
Можно поставить задачу найти самый быстрый алгоритм расчета dX.
Сам алгоритм решения ТРАНСПОРТНОЙ ЗАДАЧИ (метод потенциалов, симплекс-метод) хорошо исследован,
новое можно попробовать поискать в ускорении для данного частного случая задания целевой функции и опорного решения.
Или уже учесть особенности реализации: самый быстрый с использованием промежуточных записей в БД, самый быстрый в оперативной памяти,
самый быстрый при использовании структур данных 77 и т.п.
Только сначала нужно определиться: зачем?
Дело в том, что генезис платформ 1С - от бухгалтерии, от учетных задач, нацеливает решения не на отражение настоящего, а на рисование прошлого.
Бухгалтер раскладывает на столе первичку и решает: в какой момент произвести списание?
Когда товар был подороже или подешевле? Показывать или нет авансы?
Ну и пусть попробует один вариант, восстановит последовательность (пересчитает себестоимость), подождет.
Вам хочется, чтобы это делалось максимально быстро? Стоит ли овчинка выделки? Раз в месяц, раз в квартал - компьютер не перетрудится!
В общем, к управлению, к отражению настоящего, эта задача "рисования прошлого" не относится, а значит, ИМХО не требует высокой скорости расчетов.