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