Запрос к табличной части

  • Автор темы dwight
  • Дата начала
D

dwight

#1
Всем бодрого времени суток!

Помогите новичку составить запрос.

Есть документ "Закупка", в нём реквизит "Товар" (ссылается на справочник "Номеклатура") и табличная часть "СписокМагазинов" с реквезитом "Магазин".
Реквизит "Магазин" ссылается на справочник "Магазины", в котором есть табличная часть "СписокТоваров". В ней есть реквизит "Товар" (ссылается на справочник "Номеклатура").

Нужно чтобы при выборе товара в документе "Закупка" табличная часть заполнялась магазинами, в которых есть такой товар.
Т.е. открыли док. "Закупка", выбрали товар, запустился запрос который возвращает те элементы справочника Магазины, в табличных частях которых есть выбранный товар.

Итак, пробовал с таким запросом:

Код:
ВЫБРАТЬ
|	Магазины.Ссылка,
|	Магазины.СписокТоваров.(
|		Товар
|	)
|ИЗ
|	Справочник.Магазины КАК Магазины,
|	Документ.Закупка КАК Закупка
|ГДЕ
|	Магазины.СписокТоваров.Товар= Закупка.Товар
возвращает ошибку
Код:
Неоднозначное поле "Магазины.СписокТоваров.Товар"
Чувствую нужно запрос сделать с ВНУТРЕННЕЕ СОЕДИНЕНИЕ, но не могу осилить.. Помогите пожалуйста!
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Обычно, в качестве таблицы-источника выбирают саму табличную часть.
 
D

dwight

#3
Обычно, в качестве таблицы-источника выбирают саму табличную часть.
Т.е как я понял нужно примерно так (выбирать из табличной части СписокТоваров):
Код:
ВЫБРАТЬ
|	Магазины.Ссылка,
|	Магазины.СписокТоваров.(
|		Товар
|	)
|ИЗ
|	Справочник.Магазины.СписокТоваров КАК СписокТоваров,
|	Документ.Закупка КАК Закупка
|ГДЕ
|	СписокТоваров.Товар= Закупка.Товар
Выводит ошибку "Поле не найдено! (Справочник.Магазины.СписокТоваров)"

Скорее всего я не в ту сторону копаю, можете на примере подсказать пожалуйста?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#4
Код:
ВЫБРАТЬ
|	СписокТоваров.Ссылка,
|  СписокТоваров.Товар
|  
|ИЗ
|	Справочник.Магазины.СписокТоваров КАК СписокТоваров,
|	Документ.Закупка КАК Закупка
|ГДЕ
|	СписокТоваров.Товар= Закупка.Товар
И добавить соединение (ЛЕВОЕ, ВНЕШНЕЕ ВНУТРЕННЕЕ)
 
D

dwight

#5
Это возвращает элементы табличной части "СписокТоваров". Не поможете подцепить сюда JOIN, чтобы возвращались элементы справочника "Магазины"?
 

Darlock

Well-known member
04.01.2008
560
1
#7
Комрады, в тексте запроса обращение к 2 таблицам сразу (док и ТЧ). Проще в разы будет если строить запрос напрямую к ТЧ. А ТЧ в себе содержит ссылку на сам док.

2) Не стоит делать подобный запрос ПРИ ДОБАВЛЕНИИ КАЖДОЙ СТРОКИ в ТЧ.
 
D

dwight

#8
Комрады, в тексте запроса обращение к 2 таблицам сразу (док и ТЧ). Проще в разы будет если строить запрос напрямую к ТЧ. А ТЧ в себе содержит ссылку на сам док.

2) Не стоит делать подобный запрос ПРИ ДОБАВЛЕНИИ КАЖДОЙ СТРОКИ в ТЧ.
Спасибо за ответ! Стыдно, но никак не могу реализовать сабж.

Подскажи - вот есть на выходе из запроса элемент табличной части, как получить его родителя (элемента справочника)? Другими словами, как узнать к какому элементу справочника принадлежит запись из ТЧ?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#9
Подскажи - вот есть на выходе из запроса элемент табличной части, как получить его родителя (элемента справочника)? Другими словами, как узнать к какому элементу справочника принадлежит запись из ТЧ?
Вопрос не понятен. Родителя получить можно чере ".Родитель")
 
D

dwight

#10
Через .родитель() я так понимаю обращаются к объектам, а не к результатам запроса (может я чего не так понимаю?)

Вот рабочий запрос:
Код:
ВЫБРАТЬ
|	СписокТоваров.Товар
|ИЗ
|	Справочник.Магазины.СписокТоваров КАК СписокТоваров,
|	Документ.Закупка КАК Закупка
|ГДЕ
|	СписокТоваров.Товар= Закупка.Товар
- Возвращает товары из ТЧ "СписокТоваров" из ВСЕХ элементов справочника "Магазины" , которые совпали с указанным в док.Закупка товаром.
Мне нужно чтобы возвращались только их родители-элементы справочника "Магазины".
Т.е. запрос должен возвращать те элементы справочника "Магазины", в ТЧ которых есть выбранный товар (Документ.Закупка.Товар).
Как такое провернуть?
:ya_lamo: :KillMe:
Помогите разобраться пожалуйста!
 

unknown181538

НеГуру
28.12.2008
1 417
0
#11
Понял, наконец. Это просто родителем не называется.

ВЫБРАТЬ
| СписокТоваров.Товар,
| СписокТоваров.Ссылка
|ИЗ
| Справочник.Магазины.СписокТоваров КАК СписокТоваров,
| Документ.Закупка КАК Закупка
|ГДЕ
| СписокТоваров.Товар= Закупка.Товар
Вообще, в этом запросе не нужен пока документ закупка. Нужно, например, выгрузить список товаров в СписокЗначений, и поставить условие на товар. Если же оставлять так, то нужно условие, что выбираем именно тот документ, в котором находимся.
 
D

dwight

#13
В общем я уже получил что хотел.
Вот что мне было нужно - запрос, который возвращает те элементы справочника "Магазины", в ТЧ ("СписокТоваров") которых есть определённая запись (Нужный_товар):
Код:
SELECT
|	Магазины.Ссылка
|FROM
|	Справочник.Магазины КАК Магазины
|LEFT JOIN Справочник.Магазины.СписокТоваров КАК СписокТоваров 
|	ON (Магазины.Ссылка = СписокТоваров.Ссылка)
|WHERE
|	СписокТоваров.Товар = &Нужный_товар