• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

dwight

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

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

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

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

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

Код:
ВЫБРАТЬ
|	Магазины.Ссылка,
|	Магазины.СписокТоваров.(
|		Товар
|	)
|ИЗ
|	Справочник.Магазины КАК Магазины,
|	Документ.Закупка КАК Закупка
|ГДЕ
|	Магазины.СписокТоваров.Товар= Закупка.Товар

возвращает ошибку
Код:
Неоднозначное поле "Магазины.СписокТоваров.Товар"

Чувствую нужно запрос сделать с ВНУТРЕННЕЕ СОЕДИНЕНИЕ, но не могу осилить.. Помогите пожалуйста!
 
U

unknown181538

Обычно, в качестве таблицы-источника выбирают саму табличную часть.
 
D

dwight

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

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

unknown181538

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

dwight

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

unknown181538

Вызовите конструктор запросов, и заполните закладку "Связи".
 
D

Darlock

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

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

dwight

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

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

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

unknown181538

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

dwight

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

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

unknown181538

Понял, наконец. Это просто родителем не называется.

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

dwight

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!