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

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

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


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

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

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

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

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

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