|
Помогите с запросом... Доп реквизиты Номенклатуры | ☑ | ||
---|---|---|---|---|
0
m1_1976
29.06.21
✎
13:11
|
Всем добрый день.
Подскажите в тупике. 1С Розница. Справочник Номенклатура. У номенклатуры 8 доп реквизитов. (Важно что их конечное число). Хочу найти запросом все товары у которых 7 известных мне конкретных реквизитов совпадают. (допустим мне известен один товар - из него эти 7 доп.реквизитов беру). Все доп.реквизиты обязательны к заполнению... |
|||
1
m1_1976
29.06.21
✎
13:14
|
Верно понимаю что должно быть 7 уровней вложенных запросов.
Первым нахожу все товары у которых совпадает Доп.свойство 1 Второым нахожу все товары среди результатов 1 запроса у которых совпадает Доп.свойство 2 и т.д. ???? |
|||
2
m1_1976
29.06.21
✎
13:14
|
Че-то мне кажется какой-то огород горожу...
|
|||
3
RomanYS
29.06.21
✎
13:17
|
соединить по равенству свойств, а потом сгруппировать по ссылке. <!>Имеющие<!> 7 совпадений - искомые элементы
|
|||
4
H A D G E H O G s
29.06.21
✎
13:18
|
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка, | МАКСИМУМ(ВЫБОР | КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит1 | ТОГДА НоменклатураДополнительныеРеквизиты.Значение | КОНЕЦ) КАК Реквизит1, | МАКСИМУМ(ВЫБОР | КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит2 | ТОГДА НоменклатураДополнительныеРеквизиты.Значение | КОНЕЦ) КАК Реквизит2 |ПОМЕСТИТЬ Реквизиты |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты | |СГРУППИРОВАТЬ ПО | НоменклатураДополнительныеРеквизиты.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | Реквизиты.Ссылка КАК Ссылка |ИЗ | Реквизиты КАК Реквизиты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Реквизиты КАК Реквизиты1 | ПО Реквизиты.Реквизит1 = Реквизиты1.Реквизит1 | И Реквизиты.Реквизит2 = Реквизиты1.Реквизит2" |
|||
5
m1_1976
29.06.21
✎
13:18
|
так решил...
ВЫБРАТЬ ВложенныйЗапрос.Ссылка КАК Ссылка, СУММА(ВложенныйЗапрос.Поле1) КАК Поле1 ИЗ (ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка, 1 КАК Поле1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеТовар ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеЦвет ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка, 1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеАртикул) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Ссылка УПОРЯДОЧИТЬ ПО Поле1 УБЫВ |
|||
6
m1_1976
29.06.21
✎
13:19
|
Добавил доп поле = 1 в каждом.
Потом выбираю только те у которых Поле1 = 8 |
|||
7
RomanYS
29.06.21
✎
13:26
|
(4) с одной стороны прикольно, с другой стороны: почему тогда не просто 2 (или N) левых соединения? Вроде методически более верно и не сильно более громоздко
|
|||
8
apdate by
29.06.21
✎
13:42
|
а так не правильно? (я плохо знаю запросы знаю mysql Но и там задумался (
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Артикул = Номенклатура.Артикул | И Номенклатура.АлкогольнаяПродукция = Номенклатура.АлкогольнаяПродукция | И Номенклатура.Наименование = Номенклатура.Наименование"; |
|||
9
apdate by
29.06.21
✎
13:47
|
+(8) у меня сработало
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Тест.Ссылка КАК Ссылка, | Тест.ВерсияДанных КАК ВерсияДанных, | Тест.ПометкаУдаления КАК ПометкаУдаления, | Тест.Код КАК Код, | Тест.Наименование КАК Наименование, | Тест.А КАК А, | Тест.Б КАК Б, | Тест.С КАК С, | Тест.Д КАК Д, | Тест.Предопределенный КАК Предопределенный, | Тест.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | Справочник.Тест КАК Тест |ГДЕ | Тест.А = Тест.А | И Тест.Б = Тест.А | И Тест.С = Тест.А | И Тест.Д = Тест.А"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл а = ""; КонецЦикла; |
|||
10
RomanYS
29.06.21
✎
13:48
|
(8) у тебя все условия заведомо Истина (для не групп)
|
|||
11
apdate by
29.06.21
✎
13:48
|
+(9) выдало все элементы у которых в реквизитах
А, Б, С, Д одинаковые значения |
|||
12
apdate by
29.06.21
✎
13:51
|
(10) а что у меня не верно? то?
оно работает далее поместить результат в массив и соединением выдрать ссылки на владельца этих доп реквизитов? |
|||
13
Classic
29.06.21
✎
13:53
|
ВЫБРАТЬ
СравниваемаяНоменклатура.Ссылка КАК Номенклатура ПОМЕСТИТЬ НесовпадающиеНоменклатуры ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ОсновнаяНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СравниваемаяНоменклатура ПО ОсновнаяНоменклатура.Ссылка <> СравниваемаяНоменклатура.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДанныеСравниваемойНоменклатуры ПО СравниваемаяНоменклатура.Ссылка = ДанныеСравниваемойНоменклатуры.Ссылка И ОсновнаяНоменклатура.Свойство = ДанныеСравниваемойНоменклатуры.Свойство И ОсновнаяНоменклатура.Значение = ДанныеСравниваемойНоменклатуры.Значение ГДЕ ОсновнаяНоменклатура.Ссылка = &НашаНоменклатура И ДанныеСравниваемойНоменклатуры.Ссылка ЕСТЬ NULL ; ВЫБРАТЬ СпрНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ НесовпадающиеНоменклатуры КАК НесовпадающиеНоменклатуры ПО СпрНоменклатура.Ссылка = НесовпадающиеНоменклатуры.Номенклатура ГДЕ НесовпадающиеНоменклатуры.Номенклатура ЕСТЬ NULL |
|||
14
Classic
29.06.21
✎
13:53
|
(13)
Как-то так. Идея я думаю ясна |
|||
15
lodger
29.06.21
✎
13:54
|
(5)
а если так? ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка, СУММА(1) КАК Поле1 ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ГДЕ НоменклатураДополнительныеРеквизиты.Значение В (&СписокЗначений) СГРУППИРОВАТЬ ПО НоменклатураДополнительныеРеквизиты.Ссылка ИМЕЮЩИЕ СУММА(1) = 8 |
|||
16
RomanYS
29.06.21
✎
13:54
|
(12) У ТСа совсем другая задача
|
|||
17
apdate by
29.06.21
✎
13:55
|
(16) да я видимо не понял задачу :-(
|
|||
18
RomanYS
29.06.21
✎
14:06
|
(13) возможно сработает.
Только есть нюансы: 1. прикладной: у ТСа свойств всего 8, а совпадать должно 7 2. более принципиальный: что будет если у элемента не будет допреквизита? Есть подозрение, что он попадёт в выборку |
|||
19
m1_1976
29.06.21
✎
14:09
|
(18) 2) Будет. Заполнение доп.реквизита обязательно!
Сделал по своему... Только долго работает запрос... |
|||
20
Classic
29.06.21
✎
14:14
|
(18)
Как задача стоит? Любые 7? Тогда да, мой подход неправильный. Но тогда (6) вообще непонятно к чему Конкретные 7? Ставим отбор в первой таблице на свойство У номенклатуры всего 7 из 8? Тогда все правильно. Я думаю, что задача стоит получить все номенклатуры с такими же свойствами, как и у заданной. Такая задача логична. Единственный вопрос. Если у заданной будет 4 свойства, а у какой-то 5, эта какая-то должна в выборку попадать? |
|||
21
RomanYS
29.06.21
✎
14:16
|
(19) Заполнение доп.реквизита обязательно!
Ага и у групп и услуг? (20) Если у номенклатуры не будет ни одной записи ДР (например у групп) - она попадёт в твою выборку? |
|||
22
Classic
29.06.21
✎
14:17
|
(21)
Нет, она попадет в первую таблицу |
|||
23
RomanYS
29.06.21
✎
14:24
|
(22) ОК.
И даже 8 раз)) Имеет смысл "различные" добавить, а может и не повлияет ни на что. |
|||
24
Classic
29.06.21
✎
14:27
|
(23)
Не повлияет. Во втором запросе проверка на нулл. Туда только те, что не в первой таблице. Можно поставить конечно. Можно и на один запрос переписать, только тогда следующий программист вообще не поймет как это работает :) |
|||
25
m1_1976
29.06.21
✎
14:37
|
(21) А причем тут Группы?
У них нет ТЧ "ДополнительныеРеквизиты". Да и групп у меня нет и не будем в этой базе.. Все живет в доп.реквзитах замечтаельно. Еще и по группам их раскладывать??? :) (20) У доп.свойства в рознице есть признак обязательности заполнения. У меня все заполнены. 100% Спасибо всем за помощь. Процентов на 60% помогли. Самое важно - натолкнули на мысль! За это СПАСИБО! |
|||
26
Classic
29.06.21
✎
14:45
|
(25)
Покажи, что налабал. А то терзают смутные сомнения |
|||
27
m1_1976
29.06.21
✎
14:56
|
см (5)
через задницу... но |
|||
28
Classic
29.06.21
✎
15:10
|
(27)
Это очень мягко сказано. В общем случае, если типы свойств будут разные, то твой запрос будет выдавать непонятные значения |
|||
29
m1_1976
29.06.21
✎
15:18
|
(28) Типы свойств всегда справочник "Дополнительные свойства".
Одно плохо = долго работает. Несколько секунд (5-7) запрос выполняется. потом переделаю... |
|||
30
Classic
29.06.21
✎
15:41
|
(29)
Смотри, например у тебя есть свойства (условно) "длина" и "ширина" У твоей номенклатуры длина 10, ширина 5 У другой номенклатуры ширина 10, длина 5 Что выдаст твой запрос? |
|||
31
m1_1976
29.06.21
✎
16:22
|
(30) С ума сойти... Меня пытаетесь запутать? Зачем? Пишите правильно:
Ш10 Д5 Ш5 Д10 Прчием тут мой запрос. У меня в запросе строго будет (ШИРИНА = &ВыбШИРИНА) (ДЛИНА = &ВыбДлина) И не важно в каком порядоке Вы их в своем вопросе написали :)))))) У меня строго 8 доп.реквизитов У меня есть товар, в котором у меня все известно (БРЕНД,СОСТАВ,ТИПТОВАРА,ЦВЕТ, МОДЕЛЬ и т.д) Восьмое свойство РАЗМЕР. Я своим запросом зная, эти 7 доп.реквизитов (из одного товара) - нахожу все такие же товары всех размеров! Задачу я решил. |
|||
32
Eiffil123
29.06.21
✎
16:36
|
наиболее логично сделать 7 внутренних соединений с основой таблицей номенклатур и далее на закладке отборов наложить фильтр на эти реквизиты
|
|||
33
acanta
29.06.21
✎
16:37
|
А если это не доп.реквизиты, а части одного реквизита, подстроки?
|
|||
34
Жан Пердежон
29.06.21
✎
16:59
|
(30) там разные ссылки будут, так как (29)
(5) для общего случая - в каждый подзапрос отбор по свойству добавить (если не только доп.свойства), если только допсвойства, то и (15) должно работать и зачем у тебя сортировка вместо ИМЕЮЩИЕ СУММА(Поле1) = 7? |
|||
35
Classic
29.06.21
✎
17:09
|
(31)
У тебя в (5) ничего такого не написано. Решил, то и решил. Но я бы порекомендовал тебе проверить свое решение на вариантах, когда значения совпадают, но они не у тех свойств. |
|||
36
Garykom
гуру
29.06.21
✎
17:12
|
у допреквизитов поле имя есть по которому удобно в запросах
|
|||
37
m1_1976
29.06.21
✎
17:21
|
(34) Сортировка это пережиток КонсолиЗапросов (отладка) - так вывел себе наверх в результате наиболее часто встречающиеся. Попробовал на десятке разных наборов. Понял что работает... и переделал на ИМЕЮЩИЕ.
Тут поспешил... |
|||
38
m1_1976
29.06.21
✎
17:22
|
(35) Так не может быть! так как (29)
|
|||
39
m1_1976
29.06.21
✎
17:23
|
Еще раз спасибо.
тему можно закрыть. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |