Имя: Пароль:
1C
1С v8
Группировка строк в запросе
,
0 Janna26
 
14.09.20
13:33
Добрый день всем. Не могу решить одну проблему. Очень прошу помощи.
Суть такая. Есть запрос к регистру сведений. вот пример
ВЫБРАТЬ
    ДопСвойства.Ном КАК Ном,
    ВЫБОР
        КОГДА ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство1)
            ТОГДА ДопСвойства.Значение
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.Значения.ПустаяСсылка)
    КОНЕЦ КАК Значение1,
    ВЫБОР
        КОГДА ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство2)
            ТОГДА ДопСвойства.Значение
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.Значения.ПустаяСсылка)
    КОНЕЦ КАК Значение2
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства

На выходе получаю таблицу https://ibb.co/qRdsLvT
А мне нужно что бы таблица схлопывалась по номенклатуры, на примере ссылки что бы в первой строке было Ном1 Значение 1 Значение 2. Это реально сделать запросом или СКД?
1 ДенисЧ
 
14.09.20
13:35
Два запроса и объединить все
2 dka80
 
14.09.20
13:39
(1) null или пустая ссылка со значением не схлопнутся
Выбираешь номенклатуру и к ней двумя левыми соединениями свойства делаешь
3 Janna26
 
14.09.20
13:44
(1) Так я тоже пробовала, не помогает.
(2) Через Левое соединение тоже.
4 dka80
 
14.09.20
13:44
(3) не верю. Давай запрос
5 Janna26
 
14.09.20
13:47
(4) ВЫБРАТЬ
    ДопСвойства.Ном КАК Ном
ПОМЕСТИТЬ Вт_товар
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вт_товар.Ном КАК Ном,
    ДопСвойства.Значение КАК Свойство1,
    ДопСвойства1.Значение КАК Свойство2
ИЗ
    Вт_товар КАК Вт_товар
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства
        ПО Вт_товар.Ном = ДопСвойства.Ном
            И (ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство1))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства1
        ПО Вт_товар.Ном = ДопСвойства1.Ном
            И (ДопСвойства1.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство2))
6 dka80
 
14.09.20
13:48
(5) мда...
Ну хотя бы так поправь уж
ВЫБРАТЬ различные
    ДопСвойства.Ном КАК Ном
ПОМЕСТИТЬ Вт_товар
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства
7 Janna26
 
14.09.20
13:48
На выходе лучше результат, но теперь данные задваиваются, по тому что в регистре 3 измерения, а связь можно сделать только по 2
8 Janna26
 
14.09.20
13:49
(6) вот я дура.......
9 Janna26
 
14.09.20
13:58
(6) нет всё таки не дура :)) в общем так "различные срабатывают" но на маленькой выборке
10 Ёпрст
 
14.09.20
13:59
(9) а чем маленькая от большой отличается в плане  (6) ?
11 dka80
 
14.09.20
14:00
(9) см (8), а потом результат временной таблицы выведи в консоль запросов и убедись, что в Вт_товар у тебя нет дублей, а если дубли есть, то убедись, что это точно дубли, а не разная номенклатура с одинаковым названием (например, по коду)
12 Janna26
 
14.09.20
14:00
(10) я просто в консоле проверила и мне показало правильно, потом когда начала разбираться то вышло что не так.
13 lEvGl
 
гуру
14.09.20
14:05
если правильно понял суть запроса, то
выбор когда свойство = перечисление Тогда
когда свойство = перечисление2
иначе
пустаяссылка

зачем два запроса и зачем 2 когда разделены? при таком раскладе он будет дважды выбирать
14 Janna26
 
14.09.20
14:05
(11) https://ibb.co/hKF7dVH вот результат выборки, https://ibb.co/Kh8mSS7 вот что в регистре. Получается что Ном2 Значение3 дублируется, так же у ном 1 Значение 2 дублируется
15 lEvGl
 
гуру
14.09.20
14:06
(14) объедини два условия в одно
16 lEvGl
 
гуру
14.09.20
14:07
эммм... все такие неправильно понял, с одной колонкой не пойдет?
17 lEvGl
 
гуру
14.09.20
14:08
потом развернуть эту колонку в Колонки СКД
18 dka80
 
14.09.20
14:08
(14) это что за конфигурация??? 1С Бордель? Как у одной номенклатуры может быть несколько одинаковых свойств?
19 Janna26
 
14.09.20
14:08
(14) Нужно несколько колонок, а можно такое как нить на СКД сделать?
20 Janna26
 
14.09.20
14:09
(18) Это я для примера просто сделала.
21 dka80
 
14.09.20
14:09
И какой результат у тебя должен быть при таких значениях регистра? Выложи ожидаемый результат
22 lEvGl
 
гуру
14.09.20
14:11
желание в (0) - ерунда, задача скорее всего в другом
23 Janna26
 
14.09.20
14:11
(21) результат должен быть такой https://ibb.co/pQKwfGB сколько строк в регистре столько значений и в таблице
24 dka80
 
14.09.20
14:13
А почему у тебя Свойство2 Значение2 встало рядом со Свойство1 Значение1, а не со Свойство1 Значение2? Чувствуешь, что у тебя добавляется элемент случайности в результате?
25 Janna26
 
14.09.20
14:15
(24) Это не особо важно, оно может встать с Значение 2 и Значение2, просто там было одно лишние, и надо как то это сделать. Может это можно как то решить через СКД?
26 lEvGl
 
гуру
14.09.20
14:16
ну и разверни колонку в горизонталь в СКД
27 lEvGl
 
гуру
14.09.20
14:16
на пересечении ресурс - значение
28 lEvGl
 
гуру
14.09.20
14:19
и что то приведенный запрос не соответствует желаемому на картинке
ВЫБРАТЬ
    Вт_товар.Ном КАК Ном,
    ДопСвойства.Значение КАК Свойство1,
    ДопСвойства1.Значение КАК Свойство2
ИЗ
    Вт_товар КАК Вт_товар
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства
        ПО Вт_товар.Ном = ДопСвойства.Ном
            И (ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство1))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства1
        ПО Вт_товар.Ном = ДопСвойства1.Ном
            И (ДопСвойства1.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство2))

где тут значение?
29 Janna26
 
14.09.20
14:20
(27) на СКД я решила вот так https://ibb.co/FV57Qt6 но это всё равно не правильно, по тому что там только по одной строке с номенклатурой, я добилась этого с помощью https://ibb.co/GRr7pyY
30 Janna26
 
14.09.20
14:21
(28) в таблицу попадают лишние данные
31 Janna26
 
14.09.20
14:24
(27) А если убрать с ресурса "ТаблицуЗначений" то СКД вывод всего 2 строки вместо 4-х https://ibb.co/FX5LLgW , не могу понять почему так происходит, но и детальные записи тоже ужасно выглядят.
32 lEvGl
 
гуру
14.09.20
14:31
на этой картинке русским по белому https://ibb.co/pQKwfGB

Номенклатура Свойство1 Свойство2
ведро        10 литров пластиковое
ведро        15 литров

хоть это и бредовое нечто, но получиться должно
в скд Новая Таблица, в строках Номенклатура, в колонках Свойство, в ресурсах Значение, ресурс в выбранные поля для отчета
33 lEvGl
 
гуру
14.09.20
14:32
ну и запрос как в (13) писал
34 Janna26
 
14.09.20
14:34
(32) так не получается, я скриншот в (31) выложила, как это выгялядит. Должно быть
ведро        10 литров пластиковое
ведро        15 литров
А получается
ведро        10 литров пластиковое
СКД каким то образом убирает нужные строки.
35 dka80
 
14.09.20
14:38
Выбери все свойства1 и прономеруй строки
Выбери все свойства2 и прономеруй строки
Далее выбираешь номенклатуру и к ней левым соединением свойства1 по номенклатуре, а к свойства1 левым соединением свойства2 по номенклатуре и номеру строки
36 Janna26
 
14.09.20
14:39
(33) вот запрос если делать через СКД https://yadi.sk/i/5t4bpACRo1TUkw вот так выглядят ресурсы https://yadi.sk/i/TRtU5f9pCbhRcA я убрала из выражения всё что бы не было количества скажем. Настройки самые примитивные https://yadi.sk/i/2IXg5HylMg9tsg и на выходе получаем фигню https://yadi.sk/i/2IXg5HylMg9tsg а если вместо ном вывести "Детальные записи" то таблица получается большой, что тоже не верно https://yadi.sk/i/GlJutiFIK0onjA
37 Janna26
 
14.09.20
14:47
(35) сделала
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДопСвойства.Ном КАК Ном
ПОМЕСТИТЬ Вт_товар
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДопСвойства.Ном КАК Ном,
    ДопСвойства.Свойство КАК Свойство,
    ДопСвойства.Значение КАК Значение,
    АВТОНОМЕРЗАПИСИ() КАК НомерСтроки
ПОМЕСТИТЬ ВТ_свойство1
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства
ГДЕ
    ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство1)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДопСвойства.Ном КАК Ном,
    ДопСвойства.Свойство КАК Свойство,
    ДопСвойства.Значение КАК Значение,
    АВТОНОМЕРЗАПИСИ() КАК НомерСтроки
ПОМЕСТИТЬ ВТ_свойство2
ИЗ
    РегистрСведений.ДопСвойства КАК ДопСвойства
ГДЕ
    ДопСвойства.Свойство = ЗНАЧЕНИЕ(Перечисление.Свойства.Свойство2)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Вт_товар.Ном КАК Ном,
    ВТ_свойство1.Значение КАК Свойство1,
    ВТ_свойство2.Значение КАК Свойство2
ИЗ
    Вт_товар КАК Вт_товар
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_свойство1 КАК ВТ_свойство1
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_свойство2 КАК ВТ_свойство2
            ПО ВТ_свойство1.Ном = ВТ_свойство2.Ном
                И ВТ_свойство1.НомерСтроки = ВТ_свойство2.НомерСтроки
        ПО Вт_товар.Ном = ВТ_свойство1.Ном

На выходе потерялась запись из Ном2 https://yadi.sk/i/70G_snfAbsbVwA
38 dka80
 
14.09.20
14:52
Ну включи немножко голову. Я ж не вижу полностью, что ты хочешь сделать. Пропала ном2 потому что у него нет Свойства1, а я тебе написал левым соединением к Свойству1.
39 Janna26
 
14.09.20
14:56
(38) Так есть же свойство1 у Ном2, и я вроде так и сделала, К Номенклатуре левым соединением свойство 1 и к свойству 1 левым соединением Свойство 2
40 Janna26
 
14.09.20
14:59
(38) мне нужно вот как тут https://yadi.sk/i/MiH0-cuMvWT-xA вот это почти идеальный вариант, но при этом что бы Ном 1 и Ном 2 были двумя строками.
41 Janna26
 
14.09.20
15:09
Я всё равно уверена что это можно как то решить на уровне СКД, только вот как не понятно...
42 Жан Пердежон
 
14.09.20
15:34
Покажи регистр "ДопСвойства", откуда там несколько значений одного свойства для одной номенклатуры
43 dka80
 
14.09.20
15:36
(42) (14)
44 Janna26
 
14.09.20
15:37
(42) я примерно накидала, регистр, мне это нужно для немного другой задачи.
45 Жан Пердежон
 
14.09.20
15:50
(44) Почему у тебя в результате должно быть

Ном1-Значение1-Значение2
Ном1-Значение2-NULL

а не
Ном1-Значение2-Значение2
Ном1-Значение1-NULL

или не
Ном1-Значение2-Значение2
Ном1-Значение1-Значение2

?
46 Жан Пердежон
 
14.09.20
16:05
последний запрос в (37):

ВЫБРАТЬ
    ЕСТЬNULL(ВТ_свойство1.Ном, ВТ_свойство2.Ном) КАК Ном,
    ВТ_свойство1.Значение КАК Свойство1,
    ВТ_свойство2.Значение КАК Свойство2
ИЗ
    ВТ_свойство1 КАК ВТ_свойство1
    ПОЛНОЕ СОЕДИНЕНИЕ ВТ_свойство2 КАК ВТ_свойство2
    ПО ВТ_свойство1.Ном = ВТ_свойство2.Ном
        И ВТ_свойство1.НомерСтроки = ВТ_свойство2.НомерСтроки