Если имеется две таблицы с колонками: Период, Документ, Сумма, то часто возникает задача построения объединенной таблицы "Результат" с колонками Период1, Документ1, Период2, Документ2, Сумма, в которой документы двух таблиц связаны по ФИФО. Чтобы функция Результат.Свернуть("Период1,Документ1", "Сумма") давала первую таблицу, а Результат.Свернуть("Период2,Документ2", "Сумма") - вторую. Такой задачей, является, например, распределение оплат по отгрузкам. Вот требуемая функция. Осторожнее, так как она меняет исходные таблицы!
Автор: ildarovich
Функция СвязываниеПоФИФО(А, Б, ё = 0, ж = 0) Экспорт
Результат = НовыйТаблицаЗначений("Период1, Документ1, Период2, Документ2, Сумма");
Пока ё < А.Количество() И ж < Б.Количество() Цикл
Сумма = Мин(А[ё].Сумма, Б[ж].Сумма);
ЗаполнитьЗначенияСвойств(Результат.Добавить()
, Новый Структура("Период1, Документ1, Период2, Документ2, Сумма"
, А[ё].Период, А[ё].Документ, Б[ж].Период, Б[ж].Документ, Сумма));
А[ё].Сумма = А[ё].Сумма - Сумма;
Б[ж].Сумма = Б[ж].Сумма - Сумма;
ё = ё + (А[ё].Сумма = 0);
ж = ж + (Б[ж].Сумма = 0)
КонецЦикла;
Возврат Результат
КонецФункции
Транспонировать таблицу значений
Сохранение таблицы значений в XML
ЗаполнитьТаблицуЗначений (БСП)
Дополнить таблицу значений - приемника данными из таблицы значений - источника