|   |   | 
| 
 | Получение номенклатуры из справочника по параметрам | ☑ | ||
|---|---|---|---|---|
| 0
    
        Миюки 19.06.24✎ 13:39 | 
        Добрый день!
 Помогите пожалуйста с запросом. У нас КА 2.5. Есть справочник с номенклатурой, у номенклатуры есть "Вид номенклатуры", а у вида есть дополнительные реквизиты. Например "Вид номенклатуры" равен "Дерево". У вида есть дополнительные реквизиты "Толщина" и "Цвет". С определенным видом номенклатуры вывести проблем нет, а как вывести доп реквизиты - не понимаю. | |||
| 1
    
        asady 19.06.24✎ 13:42 | 
        Пиши запрос сюда, мы поправим     | |||
| 2
    
        Миюки 19.06.24✎ 13:45 | 
        так а чего тут писать
 ВЫБРАТЬ ПЕРВЫЕ 50 Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ВидНоменклатуры = &ВидНоменклатуры | |||
| 3
    
        Valdis2007 19.06.24✎ 13:46 | 
        (0) доп.реквизиты в какой таблице лежат?     | |||
| 4
    
        Миюки 19.06.24✎ 13:47 | 
        если сделать так
 ВЫБРАТЬ ПЕРВЫЕ 50 Номенклатура.Наименование КАК Наименование, Номенклатура.ДополнительныеРеквизиты.( Ссылка КАК Ссылка, НомерСтроки КАК НомерСтроки, Свойство КАК Свойство, Значение КАК Значение, ТекстоваяСтрока КАК ТекстоваяСтрока ) КАК ДополнительныеРеквизиты ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ВидНоменклатуры = &ВидНоменклатуры то все равно в итоге вижу номенклатуру, а в дополнительном столбце ссылку на таблицу значений | |||
| 5
    
        Мультук 19.06.24✎ 13:55 | 
        (4) 
 Тут два варианта: 1) учить язык запросов в сторону Левое Соединение 2) Ждать и верить P.S. Писал без конфигуратора, может где-то "лишняя запятая" ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Наименование КАК Наименование, тЦвет.Значение, ЕстьNULL(тТолщина.Значение, 0) КАК Толщина ИЗ Справочник.Номенклатура КАК Номенклатура Левое Соединение Справочник.Номенклатура.ДополнительныеРеквизиты КАК тЦвет ПО Номенклатура.Ссылка = тЦвет.Ссылка и тЦвет.Свойство = &СвойствоЦвет Левое Соединение Справочник.Номенклатура.ДополнительныеРеквизиты КАК тТолщина ПО Номенклатура.Ссылка = тТолщина.Ссылка и тТолщина.Свойство = &СвойствоТолщина ГДЕ Номенклатура.ВидНоменклатуры = &ВидНоменклатуры | |||
| 6
    
        Миюки 19.06.24✎ 14:02 | 
        (5) иду изучать Левое Соединение!
 Огромное вам спасибо, код рабочий! | |||
| 7
    
        Ненавижу 1С 19.06.24✎ 14:15 | 
        (0) вопрос - что в итоге хотим получить?     | |||
| 8
    
        Миюки 19.06.24✎ 16:28 | 
        (7) по итогу хочу получить список номенклатуры, который будет формироваться в зависимости от параметров (доп реквезитов)     | |||
| 9
    
        youalex 19.06.24✎ 18:47 | 
        (0) вывести куда? 
 стандартно доп. реквизиты прописаны в Характеристиках объекта конфигурации, и в отчетах/отборах их можно вытаскивать через Ссылка. | |||
| 10
    
        Миюки 20.06.24✎ 08:54 | 
        (9) В таблицу. Т.е. пользователь вводит пару параметров, а запросом выбираем подходящую номенклатуру.     | |||
| 11
    
        Ненавижу 1С 20.06.24✎ 08:59 | 
        (10) конечную цель/задачу опиши     | |||
| 12
    
        Климов Сергей 20.06.24✎ 09:04 | 
        (10) Пример. Функция ищет номенклатуру по значениям двух допреквизитов.
 Функция ПолучитьНоменклатуруРукаваНаСервере(ТипРукава, ДиаметрРукава) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка, | НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство1, | НоменклатураДополнительныеРеквизиты.Значение КАК Значение1, | NULL КАК Свойство2, | NULL КАК Значение2 |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство1 | И НоменклатураДополнительныеРеквизиты.Значение = &Значение1 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка, | NULL, | NULL, | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство2 | И НоменклатураДополнительныеРеквизиты.Значение = &Значение2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица.Ссылка КАК Ссылка, | МАКСИМУМ(ВременнаяТаблица.Свойство1) КАК Свойство1, | МАКСИМУМ(ВременнаяТаблица.Значение1) КАК Значение1, | МАКСИМУМ(ВременнаяТаблица.Свойство2) КАК Свойство2, | МАКСИМУМ(ВременнаяТаблица.Значение2) КАК Значение2 |ПОМЕСТИТЬ ВременнаяТаблица1 |ИЗ | ВременнаяТаблица КАК ВременнаяТаблица | |СГРУППИРОВАТЬ ПО | ВременнаяТаблица.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица1.Ссылка КАК Ссылка |ИЗ | ВременнаяТаблица1 КАК ВременнаяТаблица1 |ГДЕ | ВременнаяТаблица1.Значение1 = &Значение1 | И ВременнаяТаблица1.Значение2 = &Значение2"; Запрос.УстановитьПараметр("Свойство1", СвойствоТипРукава); Запрос.УстановитьПараметр("Значение1", ТипРукава); Запрос.УстановитьПараметр("Свойство2", СвойствоДиаметрРукава); Запрос.УстановитьПараметр("Значение2", ДиаметрРукава); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда ОбщегоНазначения.СообщитьПользователю("Не найдена номенклатура с таким значением свойств!"); Возврат(Справочники.Номенклатура.ПустаяСсылка()); Иначе ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи.Следующий(); Возврат(ВыборкаДетальныеЗаписи.Ссылка); КонецЕсли; КонецФункции // ПолучитьНоменклатуруРукаваНаСервере() | |||
| 13
    
        Мультук 20.06.24✎ 09:10 | 
        (10) 
 Не знаю кто вы (чем занимаетесь на рабочем месте) Не знаю что вы заканчивали (где вас добровольно-принудительно учили 1С) Но если вы 1С-программист или считаете себя таковым, то 1) sql нужно учить. Без него печаль Кроме того изучение SQL приводит мозги "в порядок". Нетривиальные задачки по SQL это интересно. А вы к ним всё равно придете. Рано или поздно 2) В 1С есть такая мощная вещь как СКД. Настоятельно советую вам посмотреть хотя бы посмотреть обучающие ролики, для понимания что это, как это, что этим можно делать. В ютубе роликов полно. Я лично смотрел вот эти ролики (ну нравятся эти ребята) https://курсы-по-1с.рф/free/ "Бесплатный курс по СКД (Система Компоновки Данных)" 3) Возможно вы изобретаете велосипед. Велосипеды все изобретают, это нормально. Но лучше не начинать с велосипеда с деревянными колесами, а что-то более-менее приближенное к действительности. Не сочтите за критику, а просто как совет. | |||
| 14
    
        Волшебник 20.06.24✎ 09:11 | 
        (6) Когда изучите Левое Соединение, то приступайте к Правое Соединение! Тоже пригодится!     | |||
| 15
    
        Климов Сергей 20.06.24✎ 09:38 | 
        Ну, а уже потом, перекрестясь, браться за ПОЛНОЕ! :-)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |