Имя: Пароль:
1C
 
Получение номенклатуры из справочника по параметрам
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
Ну, а уже потом, перекрестясь, браться за ПОЛНОЕ! :-)