| 
    
        
     
     | 
    
  | 
получить в запросе значения характеристик номенклатуры | ☑ | ||
|---|---|---|---|---|
| 
    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 характеристик свернутых по одной ссылке не очень показателен. Как идея конечно интересно, спасибо.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |