Имя: Пароль:
1C
1С v8
Проблема округления итогов в запросе
0 Eckadra
 
28.11.18
16:11
Привет. Помогите пожалуйста, решить одну проблему. Есть простой запрос:
ВЫБРАТЬ
    ТоварыВРозницеОстатки.Склад КАК Склад,
    ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
    ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры,
    ТоварыВРозницеОстатки.СуммаПродажнаяОстаток КАК СуммаПродажнаяОстаток
ИЗ
    РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
ИТОГИ
    СУММА(СуммаПродажнаяОстаток)
ПО
    ОБЩИЕ,
    Склад,
    Номенклатура

Итоги считаются верно. Но при округлении и выводе их в макет, если сложить итоги по номенклатуре и сравнить с итогами по складу, то в некоторых случаях возникают расхождения на копейки. Причину я выяснила. После округления итогов теряется точность расчетов, отсюда расхождения. Можно ли как-то избавиться от погрешности?
1 Джинн
 
28.11.18
16:13
Какие тут округления вообще могут быть? Все цифры с двумя знаками после запятой.
2 Eckadra
 
28.11.18
16:59
Извиняюсь. Забыла указать... Конфигурация с изменениями. В регистр записываются значения, которые могут иметь точность более 2 знаков. Отсюда и округление.
Для округления используется функция Формат. Если использовать Выразить() в запросе, то итоги будут считаться с учетом этой функции или по исходным значениям?
3 dka80
 
28.11.18
17:05
(2) по исходным. Чтобы учитывало выразить помести результат во временную таблицу и итоги получай из временной таблицы
4 Джинн
 
28.11.18
17:09
(2) Любят люди находить геморрой на свою задницу....
5 RomanYS
 
28.11.18
17:11
(3) "по исходным" с чего вдруг? Выразить() - это округление(а не формат), итоги конечно будут суммировать округленные суммы
6 PR
 
28.11.18
17:13
У меня есть запрос безо всяких округлений и регистр с количеством знаков после запятой больше двух, в итоге считается неправильно
В чем проблема, с учетом того, что все вообще нахрен не так, как я написала?
7 Джинн
 
28.11.18
17:15
(6) Кстати да - с чего бы вдруг групповой функции округлять?
8 Конструктор1С
 
28.11.18
17:21
Это поступает в отчёт на СКД?
9 Конструктор1С
 
28.11.18
17:30
Я предполагаю что проблема в следующем. В регистре хранится, допустим, 4 знака после запятой. Запрос делает итоги с 4 знаками после запятой. А потом значения итоговых полей помещаются в другую коллекцию значений, где 2 знака после запятой. Чтобы этого избежать, нужно  сразу в запросе округлить до нужной точности

ВЫРАЗИТЬ(ТоварыВРозницеОстатки.СуммаПродажнаяОстаток КАК ЧИСЛО(15,2))

тогда ошибка округления уйдёт
10 youalex
 
28.11.18
17:35
(3) уверены? Итоги это вообще пост-обработка
11 Eckadra
 
28.11.18
17:36
(6) Пробовала использовать функцию Выразить в запросе, но проблема с расхождением итоговых данных осталась. Попробую поместить все во временную таблицу как подсказал (3) и считать итоги по ней.
12 Ботаник Гарден Меран
 
28.11.18
17:47
Че непонятного?
Округляют перед выводе в макет (оставить 4 знака после запятой перед текстом "Руб" некошерно).
Потом по распечатанному проверяют.
ТС успехов в накоплении опыта.
13 PR
 
28.11.18
17:59
(11) Ты троллишь что ли?
Что не так-то?
В вашей копроситуации это абсолютно нормальное поведение, так и должно быть