Имя: Пароль:
1C
1С v8
Копейки при округлении
0 IT_PROGRAMMIST
 
11.10.12
22:04
УПП 1.3.18.1(украина), пл.8.2.15.319.
Документ Корректировка долга дает движение по добавленному регистру Бухгалтерии.

При пересчете из валюты в гривны остаются копейки.Пересчет из валюты в гривны происходит типовыми средствами.

Пример:
КТ Счет1 659621.03 (получилось от 659621.025)
КТ Счет1 -78676,01 (получилось от -76676,012025)
ДТ Счет2 580945,01 (получилось от 580945,012975)

В результате рвет на  0.01 копейки.

Ребят, подскажите кто сталкивался, как решал? У меня есть идеи,просто хочу услышать мнения умных людей, которые эту проблему исправляли.
1 DrShad
 
11.10.12
22:06
какую проблему?
2 DrShad
 
11.10.12
22:07
по твоему прмеру все счета раскрыты и нигде ничего не рвет - где ты копейку нашел?
3 НикДляЗапросов
 
11.10.12
22:09
03-01 -01 = 0?
4 IT_PROGRAMMIST
 
11.10.12
22:09
(2) как это не рвет: 659621,03-78676,01-580945,01 = 0,01
5 DrShad
 
11.10.12
22:10
у тебя счета разные, дятел
6 Lama12
 
11.10.12
22:11
Уж даже не знаю...
В Украине есть курсовые разницы?
При переоценке валют должно все сгладиться.
7 IT_PROGRAMMIST
 
11.10.12
22:12
(5) объясню:
Дебиторская задолженность 659621.03
Дебиторская задолженность -78676,01
Авансы полученные 580945,01
8 DrShad
 
11.10.12
22:12
все равно разные
9 DrShad
 
11.10.12
22:13
кроме того не может быть сначала дебиторка а потом аванс на меньшую сумму - только при разной аналитике
10 IT_PROGRAMMIST
 
11.10.12
22:14
(8) по делу пиши. то что они разные это понятно. Они закрыться в 0 должны.
11 НикДляЗапросов
 
11.10.12
22:14
Ну там субсчета
12 DrShad
 
11.10.12
22:15
(10) никуя не должны - учи матчасть
13 IT_PROGRAMMIST
 
11.10.12
22:15
дело не в том какие сдесь счета. Дело в округлении. остается блин 0,01 копейки. а хочется, чтобы в ноль ушло
14 DrShad
 
11.10.12
22:15
а по делу - ты дятел
15 DrShad
 
11.10.12
22:16
(13) в ноль на разных счетах не уйдет!
16 IT_PROGRAMMIST
 
11.10.12
22:18
(15) да как это не уйдет.
уйдет. Дебиторская задолженность - Авансы полученные
17 DrShad
 
11.10.12
22:22
нет у тебя авансов - забудь
18 IT_PROGRAMMIST
 
11.10.12
22:26
(17) слушай, все закрывается как нужно. Проблема в (1)
19 DrShad
 
11.10.12
22:27
т.е. как я всю ветку и твержу что никакой проблемы?
20 Classic
 
11.10.12
22:27
(0)
Не пойму в чем у тебя проблема, если честно. Ситуация конечно не нормальная, но при закрытии задолженности все должно закрыться нормально.
Вопрос больше в другом - как вы определяете валютную задолженность с такой точностью?
21 IT_PROGRAMMIST
 
11.10.12
22:28
(20) с точностью до 2
22 Classic
 
11.10.12
22:30
Но в (0) валютная задолженность с точностью до 6ти знаков
23 IT_PROGRAMMIST
 
11.10.12
22:30
используется типовая функция ОкруглитьСУчетомПогрешности.
Вод код:
Функция ОкруглитьСУчетомПогрешности(Число, Точность, Погрешность = 0,
                  СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт

   Если НЕ СоответствиеПогрешностей = Неопределено И ЗначениеЗаполнено(Ключ) Тогда
   
       // считываем погрешность округления, накопленную ранее при расчетах
       Погрешность = СоответствиеПогрешностей[Ключ];
       // погрешности округления еще нет -- первая сумма
       Если Погрешность = Неопределено Тогда
           Погрешность = 0;
       КонецЕсли;
       // округлим с учетом погрешности
       Округленное = ОкруглитьСУчетомПогрешности(Число, Точность, Погрешность);
       // сохраним погрешность округления
       СоответствиеПогрешностей.Вставить(Ключ, Погрешность);
   
   Иначе
       
       Если Число = 0 Тогда
           Возврат 0;
       КонецЕсли;
   
       // выравнивание разрядности
       Число = Окр(Число, 27, ?(Число<0, РежимОкругления.Окр15как10, РежимОкругления.Окр15как20));
       
       // сумма с учетом погрешности предыдущих вычислений
       Округляемое = Число + Погрешность;

       // для отрицательного числа меняем направление округления, чтобы избежать ошибки Окр(-0.5) = -1
       Округленное    = Окр(Округляемое, Точность, ?(Округляемое<0, РежимОкругления.Окр15как10, РежимОкругления.Окр15как20));
                       
       // рассчитаем новую погрешность округления
       Погрешность    = Округляемое - Округленное;
       
   КонецЕсли;
   
   Возврат Округленное;

КонецФункции
24 IT_PROGRAMMIST
 
11.10.12
22:31
(20) с точностью до двух знаков после запятой
25 IT_PROGRAMMIST
 
11.10.12
22:33
Функция пересчета из валюты в гривну

Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
                  ПоКратностьНач = 1, ПоКратностьКон = 1, Погрешность = 0,
                  СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт

   Если (ВалютаНач = ВалютаКон) Тогда

       // Считаем, что пересчет не нужен.
       Возврат Сумма;
   КонецЕсли;

   Если (ПоКурсуНач = ПоКурсуКон)
      и (ПоКратностьНач = ПоКратностьКон) Тогда

       // пересчет суммы не требуется
       Возврат Сумма;
   КонецЕсли;

   Если ПоКурсуНач     = 0
    или ПоКурсуКон     = 0
    или ПоКратностьНач = 0
    или ПоКратностьКон = 0 Тогда
       ОбщегоНазначения.СообщитьОбОшибке("При пересчете из валюты '"+ВалютаНач+"' в валюту '"+ВалютаКон+"' обнаружен нулевой курс. Пересчет не произведен!");
       Возврат 0;
   КонецЕсли;

   
   НоваяСумма = (Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач);
   Возврат ОбщегоНазначения.ОкруглитьСУчетомПогрешности(НоваяСумма, 2, Погрешность, СоответствиеПогрешностей, Ключ);

КонецФункции //ПересчитатьИзВалютыВВалюту()
26 Bell
 
11.10.12
22:39
Так валюта осталась?
27 IT_PROGRAMMIST
 
11.10.12
22:41
(26) валютные суммы полностью закрываются в 0
28 IT_PROGRAMMIST
 
11.10.12
22:42
в (1) суммы в грн.
29 IT_PROGRAMMIST
 
11.10.12
22:42
+(28)т.е в (0)
30 DrShad
 
11.10.12
22:43
пилять, разберись в показаниях
31 Classic
 
11.10.12
22:57
(27)
Не понимаю, какие у тебя валютные суммы. Но это в принципе не важно. При правильном закрытии счетов у тебя и гривневые суммы закроются. Потом :)
Счета кстати какие? Активно-пассивные?
32 Classic
 
11.10.12
23:01
Кстати для правильной работы "Округлить с учетом погрешности" передавай в функцию Дт-Кт. Или Кт-Дт. Тогда округлит правильно
33 Classic
 
11.10.12
23:03
Или для другого счета используй другой ключ. Тогда тоже все сбежится
34 IT_PROGRAMMIST
 
11.10.12
23:32
(31) да счета Активно - пассивные
35 IT_PROGRAMMIST
 
11.10.12
23:32
спасибо за советы завтра утром попробую