• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы 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
|	СписокТоваров.Товар = &Нужный_товар
 
Мы в соцсетях:

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