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