Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отчет СКД, неверно считает (округление)

Отчет СКД, неверно считает (округление)
Я
   kissolo
 
05.10.21 - 11:43
ДД, коллеги.
Попросили поправить отчет (писал не я, я по 7ке в основном, 8ку только начал), в нем считается СуммаБезНДС, СуммаНДС, СуммаСНДС, и вот последняя бывает не равна сумме первых двух, на копейки, дело явно в округлении, но как поправить отчет, я в затруднении, с СКД пока дел не имел вообще, запросы смотрел курс, но т.к. практики не было, толку мало :(
Прошу помощи.
Вот код запроса:

ВЫБРАТЬ
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    СУММА(ТоварыОрганизаций.Количество) КАК Количество,
    СУММА(ТоварыОрганизаций.Количество * ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.ВесЧислитель) КАК Вес,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена) КАК СуммаБезНДС,
    СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                ТОГДА 0.1
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                ТОГДА 0.2
        КОНЕЦ) КАК СуммаНДС,
    СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена + ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                ТОГДА 0.1
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                ТОГДА 0.2
        КОНЕЦ) КАК СуммаСНДС,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод
ИЗ
    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    ТоварыОрганизаций.ВидДвижения = &ВидДвижения
    И ТоварыОрганизаций.ХозяйственнаяОперация = &ХозяйственнаяОперация
    И ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = &СтавкаНДС
    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
    И ТоварыОрганизаций.Период < &ДатаКон
    И ТоварыОрганизаций.Период >= &ДатаНач

СГРУППИРОВАТЬ ПО
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код
   osa1C
 
1 - 05.10.21 - 12:54
(0) Маловероятно что ты сможешь подправить запрос по идее СуммаСНДС здесь считается как


    СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена + ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                ТОГДА 0.1
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                ТОГДА 0.2
        КОНЕЦ) КАК СуммаСНДС

ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена + ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * (0,1 или 0.2)

Сколько знаков после запятой имеют ТоварыОрганизаций.Количество и ЦеныНоменклатурыСрезПоследних.Цена ? а теперь умножь это на 0,1 или 0,2....
Лучше посмотри в типовых как считается СуммаСНДС
   osa1C
 
2 - 05.10.21 - 12:56
(1) хотя попробуй переписать так:

СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена + ТоварыОрганизаций.Количество  * ВЫБОР
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                ТОГДА 0.1
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                ТОГДА 0.2
        КОНЕЦ) * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаСНДС
   kissolo
 
3 - 05.10.21 - 13:43
(1) Количество - 3 знака. Цена - 2. Я и говорю, что скорее всего дело в округлении. Думал в СУММА (..) добавить округление, чтобы он сначала каждое значение округлял, для всех 3х значений - и суммы без НДС, и суммы НДС и суммы с НДС, но не дает. Видимо, нельзя?
(2) попробую
   kissolo
 
4 - 05.10.21 - 14:31
(2) Вынесение цены за скобки суммы не помогло. В идеале все же округление, но То ли я что-то не так делаю, то ли вообще нельзя в запросе округление использовать...
Попробовал
СУММА(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена) КАК СуммаБезНДС,
заменить на
СУММА(Окр(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена,2)) КАК СуммаБезНДС,
ну и остальные аналогично - ругается...
" Ошибка получения информации набора данных по причине:
Ошибка в запросе набора данных по причине:
{(8, 8)}: Синтаксическая ошибка
СУММА(<<?>>Окр(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена,2)) КАК СуммаБезНДС,"
   pechkin
 
5 - 05.10.21 - 15:18
вместо
ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена + ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * (0,1 или 0.2)

проще
ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * (1 + 0,1 или 0.2)
   kissolo
 
6 - 05.10.21 - 15:23
(5) Это не помогает. Формула ж не меняется от этого, соответственно и результат не меняется.
   pechkin
 
7 - 05.10.21 - 15:23
привдеи таблицу данных что не правильно
   kissolo
 
8 - 05.10.21 - 15:25
24149    МОЛОЧНАЯ  НЕЖНАЯ ЛИНИЯ в короб    128,96        1,506    194,21    19,42        213,64
код     название                        цена            колво  сумБезНДС  сумНДС     СумСНДС
   kissolo
 
9 - 05.10.21 - 15:27
194,21+19,42=213,63 а получается 213,64. И таких копеек достаточно много получается, в т.ч. итого по таблице по всем товарам - тоже отличается.
   kissolo
 
10 - 05.10.21 - 15:28
По сути мне бы по каждой ном-ре СуммуСНДС взять как сумму СуммыБезНДС и СуммыНДС, в принципе, в формуле то и получается... но дьявол кроется в копейках...
   pechkin
 
11 - 05.10.21 - 15:29
тебе нужно округлять сумму без ндс и сумму ндс через выразить
   Kassern
 
12 - 05.10.21 - 15:29
(9) все потому что, ту же сумму ндс могли высчитать и там 8 знаков к примеру после запятой. А далее от высчитанной суммы посчитали следующую итоговую сумму. Потом все это дело перенесли в документ, а там всего 2 знака после запятой, поэтому и вы не видите того "хвоста" в расчетах
   pechkin
 
13 - 05.10.21 - 15:29
ВЫРАЗИТЬ(ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15, 2)) * (1 + 0,1 или 0.2) КАК ЧИСЛО(15, 2))
   kissolo
 
14 - 05.10.21 - 15:30
(11) Чтото знакомое, счас посмотрю, спасибо.
   kissolo
 
15 - 05.10.21 - 16:43
(13) Непонятно, в консоли запросов получилось, округлилось до 63 копеек.
В отчете сделал аналогично - не работает. 64 копейки...
Вот что получилось:
ВЫБРАТЬ
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    СУММА(ТоварыОрганизаций.Количество) КАК Количество,
    СУММА(ТоварыОрганизаций.Количество * ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.ВесЧислитель) КАК Вес,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    СУММА(ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15,2))) КАК СуммаБезНДС,
    
    СУММА(ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                ТОГДА 0.1
            КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                ТОГДА 0.2
        КОНЕЦ КАК ЧИСЛО(15,2))) КАК СуммаНДС,
        
    СУММА(  ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15,2)) 
          + ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
                    КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                        ТОГДА 0.1
                    КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                        ТОГДА 0.2
                    КОНЕЦ КАК ЧИСЛО(15,2))
         ) КАК СуммаСНДС,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод
ИЗ
    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    ТоварыОрганизаций.ВидДвижения = &ВидДвижения
    И ТоварыОрганизаций.ХозяйственнаяОперация = &ХозяйственнаяОперация
    И ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = &СтавкаНДС
    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
    И ТоварыОрганизаций.Период < &ДатаКон
    И ТоварыОрганизаций.Период >= &ДатаНач

СГРУППИРОВАТЬ ПО
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код
   pechkin
 
16 - 05.10.21 - 17:12
должно быть 2 выразить в сумме с ндс
   pechkin
 
17 - 05.10.21 - 17:14
вот здесь
+ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
   mikecool
 
18 - 05.10.21 - 17:57
не делать такие расчеты в отчете, а брать данные из регистров
   chihpyh
 
19 - 05.10.21 - 23:11
Поместить первый запрос во временную таблицу, в нем посчитать сумму без НДС и сумму НДС. Потом вызвать эту временную таблицу, взять оттуда все поля  и добавить поле СуммаСНДС = Сумма + СуммаНДС и все будет биться. Слишком много параллельных расчетов
   kissolo
 
20 - 06.10.21 - 10:15
(18) В одном регистре количество. В другом цены. Сумм нет нигде.
   kissolo
 
21 - 06.10.21 - 10:16
(19) Скорее всего так и сделаем. Через "Выразить" почему-то срабатывает в консоли запросов, но не срабатывает в отчете.
   kissolo
 
22 - 06.10.21 - 12:18
Непонятно. Через ВТ тоже не работает. Точнее, если в запросе, то тоже нормально, а в отчете (CRL) - нет..
   kissolo
 
23 - 06.10.21 - 12:20
*СКД
   Другая
 
24 - 06.10.21 - 14:41
Возможно у вас СКД глючит, проверьте как выглядит запрос в процедуре "приКомпоновкеРезультата". Возможно он не изменился
   chihpyh
 
25 - 06.10.21 - 22:42
(22) Напишите, как с временной таблицей выглядит запрос. Возможно, там что-то неверно
   КнОпка
 
26 - 07.10.21 - 07:46
(20) Не может быть. Конфигурация какая?
   kissolo
 
27 - 07.10.21 - 08:24
(24) Коллега грит, сделал все суммовые колонки через вычисляемые поля (с ВЫРАЗИТЬ), вроде как работает. Правда, ставку НДС он сделал числом пока, т.е. надо будет переделать. Но вроде как заработало...
А так - да, через СКД не работало..
   kissolo
 
28 - 07.10.21 - 08:25
(25) На всякий случай отправлю, но пока это неактуально, коллега иначе решил вопрос..

Вот код запроса с ВТ:
ВЫБРАТЬ
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    СУММА(ТоварыОрганизаций.Количество) КАК Количество,
    СУММА(ТоварыОрганизаций.Количество * ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.ВесЧислитель) КАК Вес,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    СУММА(ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15, 2))) КАК СуммаБезНДС,
    СУММА(ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
                КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                    ТОГДА 0.1
                КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                    ТОГДА 0.2
            КОНЕЦ КАК ЧИСЛО(15, 2))) КАК СуммаНДС,
    СУММА((ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15, 2))) + (ВЫРАЗИТЬ(ТоварыОрганизаций.Количество * ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
                КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
                    ТОГДА 0.1
                КОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
                    ТОГДА 0.2
            КОНЕЦ КАК ЧИСЛО(15, 2)))) КАК СуммаСНДС,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод
ПОМЕСТИТЬ ВТ1
ИЗ
    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    ТоварыОрганизаций.ВидДвижения = &ВидДвижения
    И ТоварыОрганизаций.ХозяйственнаяОперация = &ХозяйственнаяОперация
    И ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.СтавкаНДС = &СтавкаНДС
    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
    И ТоварыОрганизаций.Период < &ДатаКон
    И ТоварыОрганизаций.Период >= &ДатаНач

СГРУППИРОВАТЬ ПО
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
    ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код,
    ЦеныНоменклатурыСрезПоследних.Цена
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ1.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    ВТ1.Количество КАК Количество,
    ВТ1.Вес КАК Вес,
    ВТ1.Номенклатура КАК Номенклатура,
    ВТ1.Номенклатура1 КАК Номенклатура1,
    ВТ1.Цена КАК Цена,
    ВТ1.СуммаБезНДС КАК СуммаБезНДС,
    ВТ1.СуммаНДС КАК СуммаНДС,
    ВЫРАЗИТЬ(ВТ1.СуммаБезНДС + ВТ1.СуммаНДС КАК ЧИСЛО(15, 2)) КАК СуммаСНДС,
    ВТ1.НоменклатураКод КАК НоменклатураКод
ИЗ
    ВТ1 КАК ВТ1
   kissolo
 
29 - 07.10.21 - 08:28
(26) Конфигурация УТ, немного доработанная, но не в этом месте, используемые регистры типовые. Вопрос в том, что смотрим не продажи, а документы внутреннего потребления(т.е. списание на расходы), поэтому берется регистр ТоварыОрганизаций, в котором только колво.
   chihpyh
 
30 - 07.10.21 - 23:04
Да, точно, через Выразить. В отчет-то 2 знака после запятой выводится и в итоговой сумме могут копейки не биться. Одна копейка, как правило.
 
 
   kissolo
 
31 - 08.10.21 - 10:49
(30) Так и есть. Правда, в итогах до 4х копеек накапливалось, а по одной номенклатуре как раз 1 копейка и вылазит обычно :(


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.