Имя: Пароль:
1C
 
Распределение суммы прапорционально
0 Дебет
 
17.12.15
12:18
В определенном документе пытаюсь распределить сумму согласно количества материалов. Всего 14 позиций материалов, делаю в Запросе. Суммы распределения должны получиться с копейками. Но как бы я не старался итог у меня не 100 % а 99,99% Теряется 0,01%, соответственно и конечная сумма не сходится, что в моем случае не как нельзя допустить=(. Может старшие научные сотрудники подскажут как обойти, необходимое?
1 Godofsin
 
17.12.15
12:19
ну так показывай, что ты там распределяешь
2 Господин ПЖ
 
17.12.15
12:19
взять функцию готовую из типовых
3 Timon1405
 
17.12.15
12:19
// Выполняет пропорциональное распределение суммы в соответствии
// с заданными коэффициентами распределения.
//
// Параметры:
//  РаспределяемаяСумма - Число - сумма, которую надо распределить;
//  МассивКоэффициентов - Массив - коэффициенты распределения;
//  Точность - Число - точность округления при распределении. Необязателен.
//
// Возвращаемое значение:
//  Массив - массив размерностью равный массиву коэффициентов, содержит
//           суммы в соответствии с весом коэффициента (из массива коэффициентов).
//           В случае если распределить не удалось (сумма = 0, кол-во коэффициентов = 0,
//           или суммарный вес коэффициентов = 0), тогда возвращается значение Неопределено.
//
Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Коэффициенты, Знач Точность = 2) Экспорт
    
    Если Коэффициенты.Количество() = 0 Или Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ИндексМаксимальногоКоэффициента = 0;
    МаксимальныйКоэффициент = 0;
    РаспределеннаяСумма = 0;
    СуммаКоэффициентов  = 0;
    
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Коэффициент = Коэффициенты[Индекс];
        
        АбсолютноеЗначениеКоэффициента = ?(Коэффициент > 0, Коэффициент, -Коэффициент);
        Если МаксимальныйКоэффициент < АбсолютноеЗначениеКоэффициента Тогда
            МаксимальныйКоэффициент = АбсолютноеЗначениеКоэффициента;
            ИндексМаксимальногоКоэффициента = Индекс;
        КонецЕсли;
        
        СуммаКоэффициентов = СуммаКоэффициентов + Коэффициент;
    КонецЦикла;
    
    Если СуммаКоэффициентов = 0 Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Результат = Новый Массив(Коэффициенты.Количество());
    
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Результат[Индекс] = Окр(РаспределяемаяСумма * Коэффициенты[Индекс] / СуммаКоэффициентов, Точность, 1);
        РаспределеннаяСумма = РаспределеннаяСумма + Результат[Индекс];
    КонецЦикла;
    
    // Погрешности округления отнесем на коэффициент с максимальным весом.
    Если Не РаспределеннаяСумма = РаспределяемаяСумма Тогда
        Результат[ИндексМаксимальногоКоэффициента] = Результат[ИндексМаксимальногоКоэффициента] + РаспределяемаяСумма - РаспределеннаяСумма;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
4 Быдло замкадное
 
17.12.15
12:21
в последней строчке делай = общая сумма - уже распределили.
5 PR третий
 
17.12.15
12:22
(0) Прапорционально - это по прапорам?
6 Дебет
 
17.12.15
12:22
Большое Спасибо
7 Дебет
 
17.12.15
12:23
(3) в своей бухии не нашел такой функции
8 Господин ПЖ
 
17.12.15
12:24
>в последней строчке делай

так верстают только .удаки (с) Татьяныч...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.