|
получить в запросе значения характеристик номенклатуры | ☑ | ||
---|---|---|---|---|
0
Hlorka
20.11.22
✎
13:38
|
Добрый день всем! Необходимо запросом вытащить данные о характеристике номенклатуры, штрихкоде и т.д. Загвоздка в характеристике.
В ТЧ документа https://ibb.co/0yrFYqf характеристика состоит из двух характеристик - цвет и размер. Подскажите пожалуйста, как в запросе отдельно вытащить размер и отдельно вытащить цвет? Могу только полную характеристику получить. Характеристика номенклатуры живет в спр. ХарактеристикиНоменклатуры, свойства и значения харак-тик создаются в ТЧ. https://ibb.co/rc6H1v9 Конфа: УНФ 1.6 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПеремещениеЗапасовЗапасы.Номенклатура КАК Номенклатура, | ПеремещениеЗапасовЗапасы.Характеристика КАК Характеристика, | СУММА(ПеремещениеЗапасовЗапасы.Количество) КАК Количество |ПОМЕСТИТЬ ВТ_Запасы |ИЗ | Документ.ПеремещениеЗапасов.Запасы КАК ПеремещениеЗапасовЗапасы |ГДЕ | ПеремещениеЗапасовЗапасы.Ссылка = &ТекущийДокумент | |СГРУППИРОВАТЬ ПО | ПеремещениеЗапасовЗапасы.Номенклатура, | ПеремещениеЗапасовЗапасы.Характеристика | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Запасы.Номенклатура КАК Номенклатура, | ВТ_Запасы.Характеристика КАК Характеристика, | ВТ_Запасы.Количество КАК Количество, | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод |ИЗ | ВТ_Запасы КАК ВТ_Запасы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры | ПО ВТ_Запасы.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура | И ВТ_Запасы.Характеристика = ШтрихкодыНоменклатуры.Характеристика"; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаДокумент); РезультатЗапроса = Запрос.Выполнить(); |
|||
1
RomanYS
20.11.22
✎
17:08
|
(0) два соединения с ТЧ свойств характеристик
... ВТ левое соединение ТЧ как ТЧ_Свойств1 по ВТ.Характеристика = ТЧ_Свойств1.Ссылка и ТЧ_Свойств1.Свойство = &Свойство1 ... |
|||
2
Said_We
20.11.22
✎
19:54
|
(0) Не нужны соединения....
Запрос по характеристикам |
|||
3
Hlorka
23.11.22
✎
15:02
|
Сделала таким образом:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПеремещениеЗапасовЗапасы.Номенклатура КАК Номенклатура, | ПеремещениеЗапасовЗапасы.Характеристика КАК Характеристика, | СУММА(ПеремещениеЗапасовЗапасы.Количество) КАК Количество |ПОМЕСТИТЬ ВТ_Запасы |ИЗ | Документ.ПеремещениеЗапасов.Запасы КАК ПеремещениеЗапасовЗапасы |ГДЕ | ПеремещениеЗапасовЗапасы.Ссылка = &ТекущийДокумент | И ПеремещениеЗапасовЗапасы.Номенклатура.КатегорияНоменклатуры В ИЕРАРХИИ(&Родитель) | |СГРУППИРОВАТЬ ПО | ПеремещениеЗапасовЗапасы.Номенклатура, | ПеремещениеЗапасовЗапасы.Характеристика | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Запасы.Номенклатура КАК Номенклатура, | ВТ_Запасы.Характеристика КАК Характеристика, | ВТ_Запасы.Количество КАК Количество, | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод, | ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.( | Свойство КАК Свойство, | Значение КАК Значение | ) КАК ДополнительныеРеквизиты |ИЗ | ВТ_Запасы КАК ВТ_Запасы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры | ПО ВТ_Запасы.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура | И ВТ_Запасы.Характеристика = ШтрихкодыНоменклатуры.Характеристика | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры | ПО ВТ_Запасы.Характеристика = ХарактеристикиНоменклатуры.Ссылка |ГДЕ | (ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.Свойство = &Цвет | ИЛИ ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.Свойство = &Размер)"; Работает, но если в ТЧ поле Характеристика пустое, то Номенклатура, количество и прочее в выборку не попадают. А мне надо, чтобы попадали и + характеристика просто была пустым значением. Как это поправить можно? |
|||
4
vicof
23.11.22
✎
15:08
|
Потому что внутренне соединение.
Перенеси условия в условия соединения |
|||
5
Hlorka
23.11.22
✎
15:51
|
(4) то есть так?
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры | ПО ВТ_Запасы.Характеристика = ХарактеристикиНоменклатуры.Ссылка И (ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.Свойство = &Цвет | ИЛИ ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.Свойство = &Размер) |
|||
6
Hlorka
23.11.22
✎
15:52
|
(5) возникает ошибка
Запрос невозможно исполнить В условиях соединения запроса не допускается обращение к табличным частям. (1) |
|||
7
vicof
23.11.22
✎
15:54
|
Что-то типа того. Вообще запрос, по-хорошему, переписать нужно, но на первый раз пойдет.
|
|||
8
vicof
23.11.22
✎
15:57
|
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты
|
|||
9
RomanYS
23.11.22
✎
16:22
|
(3) вот так
"ВЫБРАТЬ ... | ХарактеристикиЦвет.Значение КАК Цвет, | ХарактеристикиРазмер.Значение КАК Размер |ИЗ | ВТ_Запасы КАК ВТ_Запасы ... | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиЦвет | ПО ВТ_Запасы.Характеристика = ХарактеристикиЦвет.Ссылка | И (ХарактеристикиЦвет.Свойство = &Цвет) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиРазмер | ПО ВТ_Запасы.Характеристика = ХарактеристикиРазмер.Ссылка | И (ХарактеристикиРазмер.Свойство = &Размер)" |
|||
10
Hlorka
23.11.22
✎
17:45
|
(9) До меня дошло:) Спасибо большое! Всё получилось
|
|||
11
RomanYS
23.11.22
✎
20:19
|
(10) пожалуйста)
Была надежда, что (1) будет достаточно |
|||
12
Said_We
23.11.22
✎
22:42
|
(11) А у меня была надежда, что разберется в (2).
|
|||
13
RomanYS
23.11.22
✎
23:15
|
(12) Как по мне, выглядит слишком громоздко. Даже если предположить, что это эффективнее (проверять лень)
|
|||
14
Said_We
24.11.22
✎
00:47
|
(13) Ну это вопрос к 1С - почему IIF() не поддерживается для менее громоздкого кода. Так же не поддерживается PIVOT и UNPIVOT.
По поводу эффективности это не предположение. В (2) есть замеры. |
|||
15
Said_We
24.11.22
✎
00:56
|
ВЫБОР
КОГДА ЗначенияСвойствОбъектов.Свойство = &Марка ТОГДА ЗначенияСвойствОбъектов.Значение ИНАЧЕ NULL КОНЕЦ, ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерА ТОГДА ЗначенияСвойствОбъектов.Значение ИНАЧЕ NULL КОНЕЦ, Выглядит с IIF() примерно так: IIF(ЗначенияСвойствОбъектов.Свойство = &Марка, ЗначенияСвойствОбъектов.Значение, NULL) как Марка IIF(ЗначенияСвойствОбъектов.Свойство = &РазмерА, ЗначенияСвойствОбъектов.Значение, NULL) как РазмерА Ну или так: IIF(т.Свойство = &Марка, т.Значение, NULL) как Марка IIF(т.Свойство = &РазмерА, т.Значение, NULL) как РазмерА |
|||
16
RomanYS
24.11.22
✎
01:03
|
(14) там какие-то оценки типа в N раз быстрее. На практике это всё равно не конечная цель, то есть твой запрос всё равно придётся засунуть в Вт и соединять с основной таблицей.
|
|||
17
RomanYS
24.11.22
✎
01:06
|
(14) СКД же может напрямую работать со свойствами/характеристиками, можно считать это расширением языка запросов
|
|||
18
Said_We
24.11.22
✎
11:39
|
(16) "твой запрос всё равно придётся засунуть в Вт и соединять с основной таблицей" - это зачем соединять?
(17) СКД нельзя считать расширением языка запросов. Секции "ИТОГ ПО" и "В ИЕРАРХИИ" можно считать расширением языка запросов. СКД это самостоятельный инструмент, который у себя внутри много чего имеет, в том числе формировать себе на вход данные из результата запрос. |
|||
19
RomanYS
24.11.22
✎
12:05
|
(18) >> это зачем соединять?
Есть основная таблица с 100500 полей, ты предлагаешь их все в твои подзапросы добавить и группировку по ним по всем делать? А среди них могут быть поля неограниченной длины и хранилища... От соединения не уйдешь |
|||
20
Said_We
24.11.22
✎
13:09
|
(19) Не внимательно смотрели пример в (2).
|
|||
21
RomanYS
24.11.22
✎
13:31
|
(20) Речь про 28 сообщение?
Запрос по характеристикам |
|||
22
Said_We
24.11.22
✎
14:08
|
(21) В 28 сообщении нет соединения. И не понимаю зачем оно может быть понадобиться.
|
|||
23
Said_We
24.11.22
✎
14:19
|
(19) Много таких свойств, которые строки неограниченной длины или хранилища? Это единичные случаи. Их можно и присоединить.
Если не критично, то строки неограниченной длины можно обрезать через выразить, а далее можно применять функцию максимум: Выбрать максимум(Выразить(т.комментарий как строка(1000))) как комментарий из документ.<любой документ> как т |
|||
24
RomanYS
24.11.22
✎
15:01
|
(23) >> Это единичные случаи.
Не соглашусь, это типичная задача: взять какие-то данные (которые сами могут быть объединением нескольких ТЧ например) и к ним прикрутить характеристики. И эти данные могут содержать длинные строки, которые нельзя резать и хранилище (это конечно редко). И даже после обрезки, группировка например по 10 полям будет идти также быстро как по одной ссылке? |
|||
25
Said_We
24.11.22
✎
16:00
|
(24) Поля, по которым идет Группировка в примере в (0) это Номенклатура (Справочник.Номенклатура) и Характиристика (Справочник.ХарактеристикиНоменклатуры).
В обоих случаях это ссылки. Все остальные поля: Количество и т.д. Это не поля группировки, а поля по которым вычисляется агрегатная функция Количество или Максимум. |
|||
26
RomanYS
24.11.22
✎
16:06
|
(25) это частный случай, здесь и пяти характеристик нет для которых вы намерили ускорение в разы
|
|||
27
Said_We
24.11.22
✎
16:14
|
(26) Вопрос в самом подходе. Если всегда пишешь без мысли о производительности, то рано или поздно получишь общие тормоза всей системы ...
|
|||
28
RomanYS
24.11.22
✎
17:53
|
(27) Именно что в подходе. Если запрос для отчета, который будет в среднем раз в день формироваться, то я просто убежусь, что он формируется за 0,5-3 секунды и даже замеры делать не буду. И уж тем более не буду переписывать на никому непонятного монстра из (2).
А если запрос при проведении основного документа, то возможны всякие ухищрения... Но ещё раз: у меня большие сомнения что предложенный вариант дает заявленное ускорение в общем случае. Частный случай 5 характеристик свернутых по одной ссылке не очень показателен. Как идея конечно интересно, спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |