По указанной ссылке есть и описание алгоритма, и примеры.
Пример для 1С++Дано:
Регистр ОстаткиТоваров
Измерения: Фирма, Товар, Склад
Ресурс: ОстатокТовара
Документ РасходнаяНакладная
От документа к документу меняются склад и товарный состав.
Этап № 1 (первый документ):
ТекстЗапроса = "
|SELECT ОстаткиТоваровОстатки.Товар Тов
| , :ВыбСклад Скл
| , ОстаткиТоваровОстатки.ОстатокТовараОстаток Ост
|INTO #TempTable
|FROM $РегистрОстатки.ОстаткиТоваров(:ВыбМомент ~,
| INNER JOIN $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки ON Товар = $РасходнаяНакладнаяСтроки.Товар,
| (РасходнаяНакладнаяСтроки.IDDOC = :ВыбДок)
| AND (Фирма = :ВыбФирма) AND (Склад = :ВыбСклад),
| Товар,) AS ОстаткиТоваровОстатки
|";
рс.УстановитьТекстовыйПараметр("ВыбМомент", СформироватьПозициюДокумента(ВыбДок, -1));
рс.УстановитьТекстовыйПараметр("ВыбДок", ВыбДок);
рс.УстановитьТекстовыйПараметр("ВыбФирма", ВыбДок.Фирма);
рс.УстановитьТекстовыйПараметр("ВыбСклад", ВыбДок.Склад);
рс.ВыполнитьСкалярный(ТекстЗапроса);
Этап № 2 (последующие документы):
ТекстЗапроса = "
|UPDATE #TempTable
| SET Ост = Ост + (CASE WHEN ОстаткиТоваров.DEBKRED = 0 THEN $ОстаткиТоваров.ОстатокТовара ELSE -$ОстаткиТоваров.ОстатокТовара END)
|FROM #TempTable
| INNER JOIN $Регистр.ОстаткиТоваров AS ОстаткиТоваров ON #TempTable.Тов = $ОстаткиТоваров.Товар AND #TempTable.Скл = $ОстаткиТоваров.Склад
| INNER JOIN _1SJOURN AS Журнал ON ОстаткиТоваров.IDDOC = Журнал.IDDOC
|WHERE ($ОстаткиТоваров.Фирма = :ВыбФирма)
| AND (Журнал.DATE_TIME_IDDOC Between :ПредМомент~ AND :ВыбМомент~)
|";
рс.УстановитьТекстовыйПараметр("ПредМомент", СформироватьПозициюДокумента(ПредДок, -1));
рс.УстановитьТекстовыйПараметр("ВыбМомент", СформироватьПозициюДокумента(ВыбДок, -1));
рс.УстановитьТекстовыйПараметр("ВыбФирма", ВыбДок.Фирма);
рс.ВыполнитьСкалярный(ТекстЗапроса);
ТекстЗапроса = "
|INSERT INTO #TempTable
|SELECT ОстаткиТоваровОстатки.Товар Тов
| , :ВыбСклад Скл
| , ОстаткиТоваровОстатки.ОстатокТовараОстаток Ост
|FROM $РегистрОстатки.ОстаткиТоваров(:ВыбМомент ~,
| INNER JOIN (SELECT $РасходнаяНакладнаяСтроки.Товар Тов
| FROM $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки
| WHERE (NOT $РасходнаяНакладнаяСтроки.Товар IN (SELECT #TempTable.Тов FROM #TempTable WHERE #TempTable.Скл = :ВыбСклад))
| AND (РасходнаяНакладнаяСтроки.IDDOC = :ВыбДок)
| ) Подзапрос ON Товар = Подзапрос.Тов,
| (Фирма = :ВыбФирма) AND (Склад = :ВыбСклад),
| Товар,) AS ОстаткиТоваровОстатки
|";
рс.УстановитьТекстовыйПараметр("ВыбМомент", СформироватьПозициюДокумента(ВыбДок, -1));
рс.УстановитьТекстовыйПараметр("ВыбДок", ВыбДок);
рс.УстановитьТекстовыйПараметр("ВыбФирма", ВыбДок.Фирма);
рс.УстановитьТекстовыйПараметр("ВыбСклад", ВыбДок.Склад);
рс.ВыполнитьСкалярный(ТекстЗапроса);
Получение остатков:
ТекстЗапроса = "
|SELECT #TempTable.Тов [Товар $Справочник.Номенклатура]
| , #TempTable.Ост Остаток
|FROM $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки
| INNER JOIN #TempTable ON #TempTable.Тов = $РасходнаяНакладнаяСтроки.Товар
|WHERE (РасходнаяНакладнаяСтроки.IDDOC = :ВыбДок)
| AND (#TempTable.Скл = :ВыбСклад)
|";
рс.УстановитьТекстовыйПараметр("ВыбДок", ВыбДок);
рс.УстановитьТекстовыйПараметр("ВыбСклад", ВыбДок.Склад);
тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
P.S. Код не оптимален - для наглядности. Алгоритм исходит из того, что интервал между ПредДок и ВыбДок значительно меньше периодичности сохранения остатков.