Имя: Пароль:
1C
1С v8
Зачем это нужно
0 Homer
 
14.10.11
14:08
Зачем округлять один(если разница в 1 между округленной суммой и исходной) элемент из базы, если все остальные будут не округлены?
//////////
Процедура ОкруглитьСлагаемыеПоСумме(Данные, ИмяКолонки, Сумма, Точность = 0, ИмяКлюча = "ФизЛицо")
   
   ВременнаяТаблица = Данные.Скопировать(, ИмяКлюча + "," + ИмяКолонки);
   ВременнаяТаблица.Колонки.Добавить(ИмяКолонки + "Окр");
   Для каждого СтрокаТЗ Из ВременнаяТаблица Цикл
       СтрокаТЗ[ИмяКолонки + "Окр"] = Окр(СтрокаТЗ[ИмяКолонки],Точность)
   КонецЦикла;
   
   СуммаСлагаемых = ВременнаяТаблица.Итог(ИмяКолонки + "Окр");
   Если СуммаСлагаемых = Сумма Тогда
       Данные.ЗагрузитьКолонку(ВременнаяТаблица.ВыгрузитьКолонку(ИмяКолонки + "Окр"),ИмяКолонки);
   Иначе
       Шаг = Pow(10, -Точность);
       РасхождениеСуммы = Сумма - СуммаСлагаемых;
       Приращение = ?(РасхождениеСуммы > 0, Шаг, -Шаг);
       ВсегоПриращений = РасхождениеСуммы / Приращение;
       ВременнаяТаблица.Колонки.Добавить(ИмяКолонки + "Расхождение");
       ВременнаяТаблица.Колонки.Добавить(ИмяКолонки + "Изменение");
       Для каждого СтрокаТЗ Из ВременнаяТаблица Цикл
           СтрокаТЗ[ИмяКолонки + "Расхождение"] = ?(СтрокаТЗ[ИмяКолонки + "Окр"] < СтрокаТЗ[ИмяКолонки], СтрокаТЗ[ИмяКолонки] - СтрокаТЗ[ИмяКолонки + "Окр"], СтрокаТЗ[ИмяКолонки + "Окр"] - СтрокаТЗ[ИмяКолонки]);
           СтрокаТЗ[ИмяКолонки + "Изменение"] = ?(СтрокаТЗ[ИмяКолонки + "Окр"] < СтрокаТЗ[ИмяКолонки], - Шаг, Шаг);
       КонецЦикла;
       ВременнаяТаблица.Сортировать(ИмяКолонки + "Расхождение Убыв");
       Для Сч = 1 По ВсегоПриращений Цикл
           Если ВременнаяТаблица[Сч-1][ИмяКолонки + "Изменение"] <> Приращение Тогда
               СтрокаДанных = Данные.Найти(ВременнаяТаблица[Сч-1][ИмяКлюча],ИмяКлюча);
               СтрокаДанных[ИмяКолонки] = ВременнаяТаблица[Сч-1][ИмяКолонки + "Окр"] + Приращение;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

КонецПроцедуры
/////////////////
1 Amiralnar
 
14.10.11
14:13
Округляется величина, равная сумме слагаемых.
2 Homer
 
14.10.11
14:27
попробуй посчитай и удивишься логике 1с
вот Данные
101 381,13
56 302,17
17 675,5
3 871,39
6 165,09
15 907,95
23 550,61
12 633,76
13 003,68
171 954,94
25 370,6
20 297,98
19 190,55
6 685,96
15 655,44
25 370,6
18 180,51
19 271,49
20 899,28
вот сумма 593369
где
ОкруглитьСлагаемыеПоСумме(ВременнаяТаблица,"П000310001005", Окр(СтрокаДоходов._П000030005003,0));
3 Amiralnar
 
14.10.11
14:30
Сумма твоих значений - 593368,63
Округленная сумма - 593369
Что не  так?
4 Homer
 
14.10.11
14:32
не так, что в отчет встает сумма 593368,13
5 Homer
 
14.10.11
14:32
и если идти по коду то так и получается
6 Gesperid10
 
14.10.11
14:33
ошибка в этой процедуре
7 Amiralnar
 
14.10.11
14:33
Ошибка стало быть
8 Homer
 
14.10.11
14:35
обнаружилость что в "СтрокаДоходов._П000030005003" уже стоит округленная сумма 593369
9 Homer
 
14.10.11
14:36
это 4ФСС таб 3.1 ну и соответсвенно Таб 3
10 Homer
 
14.10.11
14:36
УПП 14 рел
11 Gesperid10
 
14.10.11
14:37
уже 17-ый есть =)
Закон Брукера: Даже маленькая практика стоит большой теории.