Имя: Пароль:
1C
1С v8
Высчитать процент
0 Recrut1
 
28.02.14
09:12
Всем доброго времени суток! Есть такая задачка,имеется три показателя.
1 показатель - 83.5%
2 показатель - 7.5%
3 показатель - 9%
В сумме должно получиться 100%, но показатели должны выводиться в целых числах.Если использовать Окр(), то 0.5 будет всегда округлять в большую сторону. Итог 84+8+9= 101. Если бы было 2 показателя, то можно из 100 - показатель 1, но их 3. Есть ли способ высчитать его? Как я думаю, можно высчитать дельту и вешать его на макс. показатель. У кого какие соображения?
1 Starhan
 
28.02.14
09:13
Правильно думаешь.
2 Ненавижу 1С
 
гуру
28.02.14
09:14
84
7
9
3 Recrut1
 
28.02.14
09:15
(2) ?
4 Azverin
 
28.02.14
09:17
почему бы не сложить 83,5 + 7,5 +9 ?
5 Azverin
 
28.02.14
09:17
(4) извините, пью кофе и прихожу в себя))))
6 Recrut1
 
28.02.14
09:17
(4) В целых, дружище
7 zak555
 
28.02.14
09:18
> Итог 84+8+9= 101

посмотри баланс, там бы получилось не 101, а 100
8 KUBIK
 
28.02.14
09:24
(0) Посмотри в типовой бухии (2.0) функцию в ОМ РаспределитьПропорционально(...). Там это реализовано
9 Recrut1
 
28.02.14
09:27
(8) Спасибо, гляну
10 Recrut1
 
28.02.14
10:33
Кому интересно, как то так получилось:

КолОкр = 0;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ДробнаяЧасть = ВыборкаДетальныеЗаписи.Процент%1;
        Если ДробнаяЧасть = 0.5 Тогда
            КолОкр = КолОкр + 1;
        КонецЕсли;        
    КонецЦикла;
    КолОкр = КолОкр / 2;
    ВыборкаДетальныеЗаписи.Сбросить();
       Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ДробнаяЧасть = ВыборкаДетальныеЗаписи.Процент%1;
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        Если ДробнаяЧасть = 0.5 Тогда
            Если Не КолОкр = 0 Тогда
                Процент= Окр(ВыборкаДетальныеЗаписи.Процент);
                КолОкр = КолОкр - 1;
            Иначе
                Процент= Окр(ВыборкаДетальныеЗаписи.Процент, 0,РежимОкругления.Окр15как10);
            КонецЕсли;
            ОбластьДетальныхЗаписей.Параметры.Процент= Процент;
        КонецЕсли;
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;