Имя: Пароль:
1C
 
Помогите вытащить запросом аналоги номенклатуры
0 insorte
 
30.10.09
07:43
Есть регистр сведений с двумя измерениями Номенклатура и Аналог. Как запросом вытащить все аналоги если например в рег. сведений номенклатура а = b ,а = с, d = b. Т.е. запрос должен выдать a,b,c,d являются аналогами.
1 Рэйв
 
30.10.09
07:46
Чт-то вроде:

Выбрать
 Ном.Ссылка,
 Рег,Аналог
ИЗ Справочник.Номенкатура КАК Ном
Левое соединение
 РегистрСведений.Аналоги
ПО
   Ном.Ссылка=  Рег.Номенклатура
2 ИС-2
 
30.10.09
08:04
Если вам надо и аналоги и саму номенклатуру, то можно использовать объединение запросов (вкладка Объединения/Псевдоними)
3 insorte
 
30.10.09
08:24
(2) Мне надо по любой номенклатуре вытащить все ее аналоги из регистра. Могут быть ситуации когда у ном. "А" аналог "B" в регистре, но есть еще запись, что ном. "С" аналог "А", следовательно когда я вытаскиваю аналоги номенклатуры "С" запрос должен выдать "А" и "B"
4 Рэйв
 
30.10.09
08:40
(3)Вот три уровня вложенности. Можешь сделать больше по аналогии

ВЫБРАТЬ
   Запр.Ссылка,
   Запр.Аналог1,
   Запр.Аналог2,
   Запр.Аналог3
ИЗ
   (ВЫБРАТЬ
       Ном.Ссылка КАК Ссылка,
       АналогиНоменклатуры.Аналог КАК Аналог1,
       АналогиНоменклатуры2.Аналог КАК Аналог2,
       АналогиНоменклатуры3.Аналог КАК Аналог3
   ИЗ
       Справочник.Номенклатура КАК Ном
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиНоменклатуры КАК АналогиНоменклатуры
           ПО Ном.Ссылка = АналогиНоменклатуры.Номенклатура
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиНоменклатуры КАК АналогиНоменклатуры2
           ПО (АналогиНоменклатуры.Аналог = АналогиНоменклатуры2.Номенклатура)
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиНоменклатуры КАК АналогиНоменклатуры3
           ПО (АналогиНоменклатуры2.Аналог = АналогиНоменклатуры3.Номенклатура)) КАК Запр
           
ГДЕ
   (НЕ Запр.Аналог1.Ссылка ЕСТЬ NULL )
5 also
 
30.10.09
08:41
(3) Если тебе неизвестно заранее уровень вложенности, то запросом не достать...Тока рекурсией
6 insorte
 
30.10.09
08:43
(5) Т.е. цикл запросов, до тех пор пока в результате количество строк > 0?
7 also
 
30.10.09
08:44
+(5) Ну или сначала определять уровень вложенности, а потом запрос динамически формировать
8 Рэйв
 
30.10.09
08:44
(6)Прико будет если гдето цепочка пересекает сама себя. Уйдешь в бесконечный цикk
9 also
 
30.10.09
08:44
(6) цикл запросов не гуд...
10 also
 
30.10.09
08:46
(0) Ты это не из задачника на спеца задачу решаешь?
11 insorte
 
30.10.09
08:47
(10) Нет)))))) Это реальная работа
12 пента
 
30.10.09
08:47
(0) как раз тот случай когда без цикла не обойтись :)
13 also
 
30.10.09
08:48
(11) Что тебе мешает ограничить уровень вложенности...И вообще в УПП это реализовано :)
14 insorte
 
30.10.09
08:52
(13) Это не совсем вложенность. Просто надо дать возможность ввода аналога для номенклатуры и определять впоследствии взаимосвязи аналогов.
15 also
 
30.10.09
08:55
(14) Если товар "б" является аналогом "а", а "с" аналогом "б", то "а" аналог "с". Это по сути и есть вложенность
16 also
 
30.10.09
08:57
В общем если сможешь ограничить вложенность, то делай типо как в (4). Нет-рекурсией. Но рекурсию предлагаю делать через таблицы значений
17 НЕА123
 
30.10.09
09:01
(0)
может офф.
интересно, действительно ли из утверждений
"А аналог Б, Б аналог С" следует, что "А аналог С"?
18 НЕА123
 
30.10.09
09:03
(17)+
если да, то где?
19 insorte
 
30.10.09
09:18
(18) в нашем случае да, следует
20 insorte
 
30.10.09
09:21
(18) Цитрамон  = Цитрамон П  = sitramon (казахстан)
21 elgureka
 
30.10.09
09:33
искуственно уменьшить аналоги скажем 3 - Цитрамон =Цитрамон П=Цитрамон ХЗ, пропускаем sitramon (казахстан)- в силу маолго спороса
22 НЕА123
 
30.10.09
09:54
(19)
тогда может имеет смысл пересмотреть структуру хранения аналогов.
например, типа
Измерения: Имя(строка), Номенклатура(ссылка)

"Цитрамон", Цитрамон;
"Цитрамон", Цитрамон П;
"Цитрамон", sitramon (казахстан).

хотя... все может быть сложнее.
в аптеке, если нет цитрамона - могут предложить аспирин либо парацетамол.
2 + 2 = 3.9999999999999999999999999999999...