Имя: Пароль:
1C
1С v8
Лишняя копейка при формировании СФ
,
0 Валидатор
 
26.03.13
16:57
Делал внешнюю ПФ СФ 1137 к ПТиУ, при формировании этой СФ, в колонку сумма ндс, и сумма с ндс значения попадают на копейку больше, чем нужно, в некоторых документах только так, из за чего может рисоваться эта копейка? Причем,если просуммировать весь столбец, то значение будет верное, но в ПФ не так(
ПФ СФ 1137 - http://pikucha.ru/iaE9a
ТОРГ12 - http://pikucha.ru/iaE9d
и сам документ - http://pikucha.ru/iaE9f
1 vde69
 
26.03.13
17:01
конфу озвучь !!!


никогда не делай ндс сверху... это та еще трабла
2 Валидатор
 
26.03.13
17:01
м да, сори, Комплексная 1.1.29.1
3 Валидатор
 
26.03.13
17:01
(1) мне все равно как) клиент не доволен разницей в 1 копейку)
4 hhhh
 
26.03.13
17:04
(3) ну скопируй из типовой. Зачем велосипед изобретать, писать тебе офигенный механизм выравнивания копеек, если он давным давно есть.
5 vde69
 
26.03.13
17:05
(3) пусть клиент на бумаге правильные числа поставит, а ты ему покажи что по строчно криво вышел ндс.

это проблемма округлений.
6 Валидатор
 
26.03.13
17:05
вот где в типовой конфе механизм окгулнеия расписан, при формировании торг12 к примеру? не могу че то найти
7 Валидатор
 
26.03.13
17:05
в ПТиУ просто получение макета, а вот само его заполнение?
8 vde69
 
26.03.13
17:06
(4) не поверишь в БУХ 3.0 этот офигенный механизм уже 4 месяца исправить не могут, Я за 1 день 4 ошибки исправил...
9 hhhh
 
26.03.13
17:10
(8) хорошо, что я на упрощенке сижу. Они меня пока только РИБом достают.
10 ДенисЧ
 
26.03.13
17:10
блин... Вроде давно обсосано, что в счф ндс нужно считать по итогу, а не построчно...
11 Валидатор
 
26.03.13
17:12
(10) передавать просто сумму из документа на нее сразу?
12 hhhh
 
26.03.13
17:14
(11) ну вот же. Во всех типовых есть:

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