Имя: Пароль:
1C
1С v8
СКД: меняются итоги при добавлении группировки
0 fmst
 
03.01.25
18:45
Отчет в СКД
Если добавить ещё одну группировку, то меняются общие итоги.
Из-за чего это может быть?

https://imagizer.imageshack.com/img923/9757/C2ysrC.png

https://imagizer.imageshack.com/img923/574/XvXFS9.png

https://imagizer.imageshack.com/img924/792/iaYjnu.png
1 Михаил Козлов
 
03.01.25
20:22
Запросом с итогами проверьте по "кривой" номенклатуре.
2 fmst
 
03.01.25
21:33
(1) В запросе Итоги правильно считает
3 Ненавижу 1С
 
03.01.25
21:46
Правильные в итоге какие? С одной группировкой или двумя?

От запроса зависит конечно. Попробуйте установить у поля Номенклатура обязательное, тогда по идеи будет как с двумя группировками
4 fmst
 
03.01.25
22:19
(3) с двумя

у всех полей поставил "Обязательное" - не помогло

Итоговый запрос

ВЫБРАТЬ
    ВТПродажи.ДокументПродажи КАК ДокументПродажи,
    ВТПродажи.Номенклатура КАК Номенклатура,
    ВТПродажи.Артикул КАК Артикул,
    ВТПродажи.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ЕСТЬNULL(ВТПродажи.Количество, 0) КАК Количество,
    ВТПродажи.Подразделение КАК Подразделение,
    ВЫБОР
        КОГДА НЕ ВТПродажиМаксимумы.Подразделение ЕСТЬ NULL
            ТОГДА 1
        КОГДА НЕ ВТПродажиМинимумы.Подразделение ЕСТЬ NULL
            ТОГДА -1
        ИНАЧЕ 0
    КОНЕЦ КАК ЭтоМаксимальныеПродажи
{ВЫБРАТЬ
    ДокументПродажи.*,
    Номенклатура.*,
    Артикул,
    КатегорияНоменклатуры.*,
    Количество,
    Подразделение.*,
    ЭтоМаксимальныеПродажи}
ИЗ
    ВТПродажи КАК ВТПродажи
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиМаксимумы2 КАК ВТПродажиМаксимумы
        ПО ВТПродажи.КатегорияНоменклатуры = ВТПродажиМаксимумы.КатегорияНоменклатуры
            И ВТПродажи.Подразделение = ВТПродажиМаксимумы.Подразделение
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиМинимумы2 КАК ВТПродажиМинимумы
        ПО ВТПродажи.КатегорияНоменклатуры = ВТПродажиМинимумы.КатегорияНоменклатуры
            И ВТПродажи.Подразделение = ВТПродажиМинимумы.Подразделение
{ГДЕ
    ВТПродажи.ДокументПродажи.*,
    ВТПродажи.Номенклатура.*,
    ВТПродажи.Артикул,
    ВТПродажи.КатегорияНоменклатуры.*,
    (ЕСТЬNULL(ВТПродажи.Количество, 0)) КАК Количество,
    ВТПродажи.Подразделение.*,
    (ВЫБОР
            КОГДА НЕ ВТПродажиМаксимумы.Подразделение ЕСТЬ NULL
                ТОГДА 1
            КОГДА НЕ ВТПродажиМинимумы.Подразделение ЕСТЬ NULL
                ТОГДА -1
            ИНАЧЕ 0
        КОНЕЦ) КАК ЭтоМаксимальныеПродажи}
5 fmst
 
03.01.25
22:30
И расшифровки по любому из поле тоже другие итоги дают. Причём не во всём отчете, пока не могу выловить зависимость.
6 Ненавижу 1С
 
03.01.25
22:31
Там еще и временные таблицы...
А почему цвет розовый и зеленый?
7 fmst
 
03.01.25
22:34
(6) Да. А какая разница - итоговая таблица-то одна.

условное форматирование
8 Ненавижу 1С
 
03.01.25
22:34
Нужно смотреть на формирование временных таблиц
9 Ненавижу 1С
 
03.01.25
22:35
(7) разница есть
Что условное форматирование я догадался
10 fmst
 
03.01.25
22:37
(9) что тогда сделать с временными таблицами?
11 fmst
 
03.01.25
22:38
ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.Номенклатура.Артикул КАК Артикул,
    ПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ПродажиОбороты.Регистратор КАК ДокументПродажи,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиНоменклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, НоменклатураНабора = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.НоменклатураНабора КАК Номенклатура,
    Продажи.НоменклатураНабора.Артикул КАК Артикул,
    Продажи.НоменклатураНабора.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    Продажи.Регистратор КАК ДокументПродажи,
    МАКСИМУМ(Продажи.Количество) КАК Количество,
    Продажи.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиНаборы
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И Продажи.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

СГРУППИРОВАТЬ ПО
    Продажи.НоменклатураНабора,
    Продажи.НоменклатураНабора.Артикул,
    Продажи.НоменклатураНабора.КатегорияНоменклатуры,
    Продажи.Регистратор,
    Продажи.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиНоменклатура.Номенклатура КАК Номенклатура,
    ПродажиНоменклатура.Артикул КАК Артикул,
    ПродажиНоменклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ПродажиНоменклатура.ДокументПродажи КАК ДокументПродажи,
    ПродажиНоменклатура.Количество КАК Количество,
    ПродажиНоменклатура.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажи
ИЗ
    ВТПродажиНоменклатура КАК ПродажиНоменклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиНаборы.Номенклатура,
    ПродажиНаборы.Артикул,
    ПродажиНаборы.КатегорияНоменклатуры,
    ПродажиНаборы.ДокументПродажи,
    ПродажиНаборы.Количество,
    ПродажиНаборы.Подразделение
ИЗ
    ВТПродажиНаборы КАК ПродажиНаборы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажи.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ВТПродажи.Подразделение КАК Подразделение,
    СУММА(ВТПродажи.Количество) КАК Количество
ПОМЕСТИТЬ ВТПродажиИтоги
ИЗ
    ВТПродажи КАК ВТПродажи

СГРУППИРОВАТЬ ПО
    ВТПродажи.КатегорияНоменклатуры,
    ВТПродажи.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиИтоги.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    МАКСИМУМ(ВТПродажиИтоги.Количество) КАК Количество
ПОМЕСТИТЬ ВТПродажиМаксимумыКатегорий
ИЗ
    ВТПродажиИтоги КАК ВТПродажиИтоги

СГРУППИРОВАТЬ ПО
    ВТПродажиИтоги.КатегорияНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиИтоги.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    МИНИМУМ(ВТПродажиИтоги.Количество) КАК Количество
ПОМЕСТИТЬ ВТПродажиМинимумыКатегорий
ИЗ
    ВТПродажиИтоги КАК ВТПродажиИтоги

СГРУППИРОВАТЬ ПО
    ВТПродажиИтоги.КатегорияНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиИтоги.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ВТПродажиИтоги.Подразделение КАК Подразделение,
    МАКСИМУМ(ВТПродажиИтоги.Количество) КАК Количество
ПОМЕСТИТЬ ВТПродажиМаксимумы
ИЗ
    ВТПродажиИтоги КАК ВТПродажиИтоги

СГРУППИРОВАТЬ ПО
    ВТПродажиИтоги.КатегорияНоменклатуры,
    ВТПродажиИтоги.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиИтоги.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ВТПродажиИтоги.Подразделение КАК Подразделение,
    МИНИМУМ(ВТПродажиИтоги.Количество) КАК Количество
ПОМЕСТИТЬ ВТПродажиМинимумы
ИЗ
    ВТПродажиИтоги КАК ВТПродажиИтоги

СГРУППИРОВАТЬ ПО
    ВТПродажиИтоги.КатегорияНоменклатуры,
    ВТПродажиИтоги.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиМаксимумыКатегорий.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ВТПродажиМаксимумы.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиМаксимумы2
ИЗ
    ВТПродажиМаксимумыКатегорий КАК ВТПродажиМаксимумыКатегорий
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиМаксимумы КАК ВТПродажиМаксимумы
        ПО ВТПродажиМаксимумыКатегорий.КатегорияНоменклатуры = ВТПродажиМаксимумы.КатегорияНоменклатуры
            И ВТПродажиМаксимумыКатегорий.Количество = ВТПродажиМаксимумы.Количество
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажиМинимумыКатегорий.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ВТПродажиМинимумы.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиМинимумы2
ИЗ
    ВТПродажиМинимумыКатегорий КАК ВТПродажиМинимумыКатегорий
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиМинимумы КАК ВТПродажиМинимумы
        ПО ВТПродажиМинимумыКатегорий.КатегорияНоменклатуры = ВТПродажиМинимумы.КатегорияНоменклатуры
            И ВТПродажиМинимумыКатегорий.Количество = ВТПродажиМинимумы.Количество
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажи.ДокументПродажи КАК ДокументПродажи,
    ВТПродажи.Номенклатура КАК Номенклатура,
    ВТПродажи.Артикул КАК Артикул,
    ВТПродажи.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ЕСТЬNULL(ВТПродажи.Количество, 0) КАК Количество,
    ВТПродажи.Подразделение КАК Подразделение,
    0 КАК ЭтоМаксимальныеПродажи
{ВЫБРАТЬ
    ДокументПродажи.*,
    Номенклатура.*,
    Артикул,
    КатегорияНоменклатуры.*,
    Количество,
    Подразделение.*,
    ЭтоМаксимальныеПродажи}
ИЗ
    ВТПродажи КАК ВТПродажи
{ГДЕ
    ВТПродажи.ДокументПродажи.*,
    ВТПродажи.Номенклатура.*,
    ВТПродажи.Артикул,
    ВТПродажи.КатегорияНоменклатуры.*,
    (ЕСТЬNULL(ВТПродажи.Количество, 0)) КАК Количество,
    ВТПродажи.Подразделение.*}
12 fmst
 
03.01.25
22:44
В конце уже оставил одну таблицу ВТПродажи чтобы как-то выловить причину.
13 Ненавижу 1С
 
03.01.25
22:45
МАКСИМУМ(Продажи.Количество) КАК Количество

Это уже интересно.
Показывайте ресурсы скд
14 fmst
 
03.01.25
22:50
(13) сделал так, потому что в базе все составляющие в наборах по 1 шт, продажа одной из номенклатур набора означает продажу самого набора

https://imagizer.imageshack.com/img922/6254/3sZ0zC.png
15 Ненавижу 1С
 
03.01.25
23:00
(14) сделайте сумма
Для наборов почему не используете обороты?
16 FormatC
 
03.01.25
23:02
Если в отчет не выводится номенклатура, то СКД убирает это поле из всех запросов, поэтому и меняются итоги.
17 Ненавижу 1С
 
03.01.25
23:04
(15) или оставьте просто количество, но обязательно тогда использовать обороты
18 Ненавижу 1С
 
03.01.25
23:05
(16) такой вы внезапный весь )))
мы уже это прошли. Надеюсь автор не соврал и везде поставил "обязательное"
19 FormatC
 
03.01.25
23:07
не всегда помогает
20 FormatC
 
03.01.25
23:10
есть несколько вариантов решения этой проблемы, и поставить галочку "обязательное" - это самое очевидное и простое.
но порой просто приходится выполнять запрос в процедуре "ПриКомпоновке..." и и кормить его как внешний источник данных...
а еще есть метод индийских программистов через фиктивные условия в запросе
21 fmst
 
03.01.25
23:14
(15) сделал сумма - не помогло

в регистре количество только для составляющих набора

брюки 1
рубашка 1
пиджак 1

а нужно получить костюм 1

обороты стразу суммируют в зависимости от выбранных полей

чтобы получить нужную сумму нужно выбирать лишнее поле, посчитал, что проще основную таблицу использовать
22 fmst
 
03.01.25
23:16
(20) сейчас попробую скормить внешний источник
23 FormatC
 
03.01.25
23:20
Можно прописать условие в ГДЕ
ВЫБОР
   КОГДА Истина = Истина
ТОГДА Истина
ИНАЧЕ Номенклатура = &Номенклатура
Конец
СКД подумает ,что номенклатура используется в условии и оставит это поле...
Но тут надо смотреть контекст запроса.
А еще СКД не убирает поля никогда из вложенных запросов, это тоже можно использовать в некоторых случаях.
24 Волшебник
 
03.01.25
23:23
(23) хе-хе
25 Ненавижу 1С
 
03.01.25
23:32
Ладно, покажи, что поставил поле номенклатура обязательным.
Нет ресурса в регистре КоличествоНаборов?
26 fmst
 
03.01.25
23:37
27 Ненавижу 1С
 
03.01.25
23:43
(26) и вычисляемых полей нет, надеюсь?
28 fmst
 
03.01.25
23:49
(22) засунул во внешнюю таблицу - не помогло
29 fmst
 
03.01.25
23:49
(27) нет
30 fmst
 
03.01.25
23:51
(23) дело не в номенклатуре
любое поле во вторую группировку добавить или расшифровать итоговое значение по любому полю - и итог не сходится
31 fmst
 
04.01.25
00:11
Упростил запрос - такое же поведение

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.Номенклатура.Артикул КАК Артикул,
    ПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ПродажиОбороты.Регистратор КАК ДокументПродажи,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиНоменклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, НоменклатураНабора = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.НоменклатураНабора КАК Номенклатура,
    Продажи.НоменклатураНабора.Артикул КАК Артикул,
    Продажи.НоменклатураНабора.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    Продажи.Регистратор КАК ДокументПродажи,
    МАКСИМУМ(Продажи.Количество) КАК Количество,
    Продажи.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажиНаборы
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И Продажи.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

СГРУППИРОВАТЬ ПО
    Продажи.НоменклатураНабора,
    Продажи.НоменклатураНабора.Артикул,
    Продажи.НоменклатураНабора.КатегорияНоменклатуры,
    Продажи.Регистратор,
    Продажи.Подразделение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиНоменклатура.Номенклатура КАК Номенклатура,
    ПродажиНоменклатура.Артикул КАК Артикул,
    ПродажиНоменклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ПродажиНоменклатура.ДокументПродажи КАК ДокументПродажи,
    ПродажиНоменклатура.Количество КАК Количество,
    ПродажиНоменклатура.Подразделение КАК Подразделение
ПОМЕСТИТЬ ВТПродажи
ИЗ
    ВТПродажиНоменклатура КАК ПродажиНоменклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиНаборы.Номенклатура,
    ПродажиНаборы.Артикул,
    ПродажиНаборы.КатегорияНоменклатуры,
    ПродажиНаборы.ДокументПродажи,
    ПродажиНаборы.Количество,
    ПродажиНаборы.Подразделение
ИЗ
    ВТПродажиНаборы КАК ПродажиНаборы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажи.ДокументПродажи КАК ДокументПродажи,
    ВТПродажи.Номенклатура КАК Номенклатура,
    ВТПродажи.Артикул КАК Артикул,
    ВТПродажи.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    ЕСТЬNULL(ВТПродажи.Количество, 0) КАК Количество,
    ВТПродажи.Подразделение КАК Подразделение
ИЗ
    ВТПродажи КАК ВТПродажи
32 Ненавижу 1С
 
04.01.25
00:21
(31) попробуйте категорию и артикул вычислять не сразу, а в итоговом запросе
33 fmst
 
04.01.25
00:28
Нашёл. Количество наборов получаю теперь по другому. Не понятно, что ему не понравилось в МАКСИМУМ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СоставНаборов.НоменклатураНабора КАК НоменклатураНабора,
    СоставНаборов.ХарактеристикаНабора КАК ХарактеристикаНабора,
    СУММА(СоставНаборов.Количество) КАК Количество
ПОМЕСТИТЬ ВТСоставНаборов
ИЗ
    РегистрСведений.СоставНаборов КАК СоставНаборов
ГДЕ
    (СоставНаборов.НоменклатураНабора, СоставНаборов.ХарактеристикаНабора) В
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                Продажи.НоменклатураНабора,
                Продажи.ХарактеристикаНабора
            ИЗ
                РегистрНакопления.Продажи КАК Продажи
            ГДЕ
                Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
                И Продажи.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))

СГРУППИРОВАТЬ ПО
    СоставНаборов.НоменклатураНабора,
    СоставНаборов.ХарактеристикаНабора
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.НоменклатураНабора КАК Номенклатура,
    Продажи.НоменклатураНабора.Артикул КАК Артикул,
    Продажи.НоменклатураНабора.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
    Продажи.Регистратор КАК ДокументПродажи,
    Продажи.Количество / ВТСоставНаборов.Количество КАК Количество,
    Продажи.Подразделение КАК Подразделение
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ ВТСоставНаборов КАК ВТСоставНаборов
        ПО Продажи.НоменклатураНабора = ВТСоставНаборов.НоменклатураНабора
            И Продажи.ХарактеристикаНабора = ВТСоставНаборов.ХарактеристикаНабора
ГДЕ
    Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И Продажи.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой