Имя: Пароль:
1C
1С v8
неожиданные данные при работе с СКД
0 ASimonova
 
10.04.23
11:36
1С:Предприятие 8.3 (8.3.20.2184)
Пишу запрос, приведу его в первом комментарии

Если я строю структуру
- Профессия ---------- КоличествоРазныхТоваров
--- Товар ------------ КоличествоРазныхТоваров
я получаю одни результаты, а именно вот например так:
- Старший химик ----- 3
--- Костюм ---------- 1
--- Маска ----------- 1
--- Фильтр ---------- 1
- Химик ------------- 3
--- Костюм ---------- 1
--- Маска ----------- 1
--- Фильтр ---------- 1

А если я строю структуру
- Профессия ---------- КоличествоРазныхТоваров
я получаю другие результаты, а именно:

- Старший химик ----- 1
- Химик ------------- 1

Выходит как будто бы в одном случае для химика три разных товара, а в другом случае - один товар. Может кто-нибудь объяснить, как сделать, чтобы при короткой структуре (вариант 2) количество товаров все равно показывалось 3?
1 ASimonova
 
10.04.23
11:36
ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм,
    1 КАК Количество
ПОМЕСТИТЬ Исходная
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование2)}

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

ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия,
    НормыВыдачиСрезПоследних.НаборНорм,
    1
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.НаборНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.НаборНорм = &Наименование2)}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходная.Количество) КАК Количество
{ВЫБРАТЬ
    Профессия.*,
    ОбъединениеНорм,
    Количество}
ИЗ
    Исходная КАК Исходная

СГРУППИРОВАТЬ ПО
    Исходная.Профессия,
    Исходная.ОбъединениеНорм
2 azernot
 
10.04.23
11:39
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходная.Количество) КАК Количество

Ну логично. Количество различных чисел равно 1.


Используйте сумму.
3 ASimonova
 
10.04.23
11:42
(2) результат временной таблицы Исходная не дает такого права, там ооочень много строк
4 azernot
 
10.04.23
11:48
(3) Чего?!
Какую-то фигню вы говорите.

Метод СУММА() в запросе предполагает суммирование числовых полей при агрегации. Вне зависимости от количества исходных данных.
Для записей
1, 1, 1, 2, 2, 2
этот метод вернёт 9

Суть метода КОЛИЧЕСТВО(Исходная.Количество) в запросе - рассчитать количество используемых значений.
Для записей
1, 1, 1, 2, 2, 2
этот метод вернёт 6

Уточнение "РАЗЛИЧНЫЕ" указывает на то, что нужно рассчитать количество РРЗНЫХ используемых значений.
Для записей
1, 1, 1, 2, 2, 2
этот метод вернёт 2
5 ASimonova
 
10.04.23
11:54
Я подозреваю, что мы друг друга не поняли, если вас смущает метод количество различные, давайте последнюю часть запроса заменим на то, что ниже. Результаты от этого не поменяются.

ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    Исходная.Количество КАК Количество
{ВЫБРАТЬ
    Профессия.*,
    ОбъединениеНорм,
    Количество}
ИЗ
    Исходная КАК Исходная

СГРУППИРОВАТЬ ПО
    Исходная.Профессия,
    Исходная.ОбъединениеНорм,
    Исходная.Количество
6 toypaul
 
гуру
10.04.23
12:04
так вроде дали уже правильный ответ на вопрос "как сделать". просуммировать. что тут может быть не понятно
7 azernot
 
10.04.23
12:06
(5) >Я подозреваю, что мы друг друга не поняли
Ну конечно же. Не поняли.

>Может кто-нибудь объяснить, как сделать, чтобы при короткой структуре (вариант 2) количество товаров все равно показывалось 3?
Мой ответ вам, используйте
СУММА(Исходная.Количество) КАК Количество
Во втором запросе.

Ну в вообще, я не вижу в запросе поля "Товар". Да и задача непонятна. Если уж нужно посчитать количество различных товаров (типа количества SKU), то в запросе Должно быть что-то типа
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходная.Товар) КАК Количество
8 ASimonova
 
10.04.23
12:16
(6) если просуммировать, я покажу что будет (примерно):
- Старший химик ----- 84
--- Костюм ---------- 96
--- Маска ----------- 13
--- Фильтр ---------- 2
- Химик ------------- 92
--- Костюм ---------- 77
--- Маска ----------- 14
--- Фильтр ---------- 1
потому что, повторяю, результат временной таблицы Исходная не дает такого права, там ооочень много строк
9 ASimonova
 
10.04.23
12:17
(6) вообще надо понимать, что данный запрос конечно слеплен намеренно, чтобы показать ошибку. выкладывание здесь исходного запроса - это перебор, он довольно длинный
10 ASimonova
 
10.04.23
12:18
(7) надо посчитать не количество разных товаров, как если бы товар лежал в отдельной ячейке, а количество товаров, понимая под понятием "товар" уникальную совокупность из нескольких колонок
11 ASimonova
 
10.04.23
12:19
вот условно вот такой запрос обсуждаем


ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм,
    1 КАК Количество
ПОМЕСТИТЬ Исходная
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование2)}

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

ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия,
    НормыВыдачиСрезПоследних.НаборНорм,
    1
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.НаборНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.НаборНорм = &Наименование2)}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    СУММА(Исходная.Количество) КАК КоличествоРазныхТоваров
{ВЫБРАТЬ
    Профессия.*,
    ОбъединениеНорм,
    Количество}
ИЗ
    Исходная КАК Исходная

СГРУППИРОВАТЬ ПО
    Исходная.ОбъединениеНорм,
    Исходная.Профессия
12 ASimonova
 
10.04.23
12:20
а, сори, это я как раз ПЛОХОЙ запрос вывела. А вот запрос, который дает нормальные результаты при "полной" структуре:


ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм,
    1 КАК Количество
ПОМЕСТИТЬ Исходная
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование2)}

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

ВЫБРАТЬ
    НормыВыдачиСрезПоследних.Профессия,
    НормыВыдачиСрезПоследних.НаборНорм,
    1
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.НаборНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.НаборНорм = &Наименование2)}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    Исходная.Количество КАК КоличествоРазныхТоваров
{ВЫБРАТЬ
    Профессия.*,
    ОбъединениеНорм,
    Количество}
ИЗ
    Исходная КАК Исходная

СГРУППИРОВАТЬ ПО
    Исходная.ОбъединениеНорм,
    Исходная.Профессия,
    Исходная.Количество
13 azernot
 
10.04.23
12:23
(10) Ну так добейтесь того, чтобы Исходная таблица не содержала дублей, раз они вам не нужны.
ВЫБРАТЬ РАЗЛИЧНЫЕ
...

ОБЪЕДИНИТЬ

ВЫБРАТЬ РАЗЛИЧНЫЕ
...

Или, повторюсь, используете
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходная.Товар) КАК Количество

Где Товар - это как раз то "уникальное", что вам надо посчитать.
14 ASimonova
 
10.04.23
12:26
(13) Ну так добейтесь...
Я пробовала собственно очень просто, оборачивала все это еще в одну ВТ Итоговая, и помещала уже ее в отчет, результат такой же

Или, повторюсь, используете...
повторяю сообщение (10), где я написала, что Товар не лежит в одной колонке, это уникальная совокупность из нескольких колонок, поэтому к этой совокупности конечно нельзя применить количество различные
15 azernot
 
10.04.23
12:29
(14)
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм
ПОМЕСТИТЬ Исходная
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.ОбъединениеНорм = &Наименование2)}

ОБЪЕДИНИТЬ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    НормыВыдачиСрезПоследних.Профессия,
    НормыВыдачиСрезПоследних.НаборНорм
    
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
{ГДЕ
    (НормыВыдачиСрезПоследних.НаборНорм = &Наименование1
            ИЛИ НормыВыдачиСрезПоследних.НаборНорм = &Наименование2)}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    1 КАК КоличествоРазныхТоваров
ИЗ
    Исходная КАК Исходная

СГРУППИРОВАТЬ ПО
    Исходная.ОбъединениеНорм,
    Исходная.Профессия
16 ASimonova
 
10.04.23
12:40
(15) ну собственно разницы между моими вариантами вообще никакой. и в результатах конечно никакой, я даже специально проверила, не поленилась
17 ASimonova
 
10.04.23
12:41
(16) *разницы между моими вариантами и вашим
18 azernot
 
10.04.23
12:49
(16) Вы результат запроса смотрели или отчёт в СКД?
Что у вас на вкладке "Ресурсы" в СКД для поля "КоличествоРазныхТоваров"? Сумма или количество(различных)? Поставьте сумму для моего запроса.
19 ASimonova
 
10.04.23
12:49
(18) да, там стоит сумма
20 ASimonova
 
10.04.23
12:50
вот такой вот запрос выдает то же самое, то есть разные результаты при разных структурах

ВЫБРАТЬ РАЗЛИЧНЫЕ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм,
    НормыВыдачиСрезПоследних.ГруппаНорм КАК ГруппаНорм,
    1 КАК КоличествоРазличныхТоваров
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
21 ASimonova
 
10.04.23
12:51
и такой

ВЫБРАТЬ РАЗЛИЧНЫЕ
    НормыВыдачиСрезПоследних.Профессия КАК Профессия,
    НормыВыдачиСрезПоследних.ОбъединениеНорм КАК ОбъединениеНорм,
    НормыВыдачиСрезПоследних.ГруппаНорм КАК ГруппаНорм,
    1 КАК КоличествоРазличныхТоваров
ПОМЕСТИТЬ Исходная
ИЗ
    РегистрСведений.НормыВыдачи.СрезПоследних КАК НормыВыдачиСрезПоследних
ГДЕ
    НормыВыдачиСрезПоследних.Профессия В ИЕРАРХИИ(&Профессия)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исходная.Профессия КАК Профессия,
    Исходная.ОбъединениеНорм КАК ОбъединениеНорм,
    Исходная.ГруппаНорм КАК ГруппаНорм,
    Исходная.КоличествоРазличныхТоваров КАК КоличествоРазличныхТоваров
ИЗ
    Исходная КАК Исходная
22 azernot
 
10.04.23
12:52
В СКД на вкладке "Наборы данных" снимите флаг "Использовать группировки запроса если возможно"
23 ASimonova
 
10.04.23
12:54
(22) пробовала, не влияет
24 ViSo76
 
10.04.23
13:04
Это упп что ли?
25 ASimonova
 
10.04.23
13:04
(24) самописная
26 ViSo76
 
10.04.23
13:25
(25) ну так какие там данные что за структура и какие параметры в отборе. Тут нет телепатов.
27 azernot
 
10.04.23
13:29
(23) Укажите в СКД на вкладке "Набор данных" в колонке "Роль" для полей "Профессия" и "ОбъединениеНорм" признак "Обязательное"
28 ViSo76
 
10.04.23
13:54
(25) тут бы пригодился товарищ, из фильма Чего хочет женщина, что бы дистанционно залез в мозг.
1. На сколько я понял таблица исходная одинаковая, просто из ВТ выбираются разное количество полей, а одном случае добавляется поле товар, а в другом нет, то есть в первом случае выбирается 3 поля, а в другом 2 поля, правильно я понял исходные данные?
29 ASimonova
 
10.04.23
13:55
(26) я указала довольно много, структуру расписала, запрос выложила, результаты выложила. параметр один - Профессия, он указан в запросе. если нужно что-то еще, напишите, выложу
30 ASimonova
 
10.04.23
13:57
(27) что-то интересное получилось, данные явно получились одинаковые в обоих вариантах, правда в обоих неправильные, но все же это что-то! пока что спасибо)
31 azernot
 
10.04.23
14:00
(30) В смысле "неправильные"?
Вы использовали "мой" запрос? И на вкладке ресурсы "Сумма"?
32 ASimonova
 
10.04.23
14:00
(28) из ВТ в запросе всегда все одинаково, а вот что СКД выбирает при разных структурах я не знаю, вообще плохо знаю как работает СКД внутри себя. для запроса (21) вот такие два примера структуры:
1)
- Профессия ---------- КоличествоРазличныхТоваров
2)
- Профессия --------- КоличествоРазличныхТоваров
-- ОбъединениеНорм -- КоличествоРазличныхТоваров
33 ASimonova
 
10.04.23
14:01
(31) я использовала свой запрос, указанный в (21), и в нем данные отличаются друг от друга если указать "обязательное" во всех полях, кроме КоличествоРазличныхТоваров и если не указывать
34 azernot
 
10.04.23
14:06
(33) Это понятно. Если не указать "обязательное", СКД выполняет урезанный запрос убирая неиспользуемые в итоге поля, поэтому количество записей отличается. Когда мы указываем "обязательное", поля из запроса не убираются, даже если мы меняем структуру отчёта.

Но что у вас "неправильно" получается?
35 ASimonova
 
10.04.23
14:09
(34) все, я все поняла, что он делает. все получилось правильно. спасибо!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн