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

Тема в разделе "1C и всё что с ней связано", создана пользователем dwight, 31 окт 2010.

  1. dwight

    dwight Гость

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

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

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

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

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

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Обычно, в качестве таблицы-источника выбирают саму табличную часть.
     
  3. dwight

    dwight Гость

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

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

    unknown181538 НеГуру
    1C Team

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

    dwight Гость

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Вызовите конструктор запросов, и заполните закладку "Связи".
     
  7. Darlock

    Darlock Well-Known Member
    1C Team

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

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

    dwight Гость

    Спасибо за ответ! Стыдно, но никак не могу реализовать сабж.

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Вопрос не понятен. Родителя получить можно чере ".Родитель")
     
  10. dwight

    dwight Гость

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

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Понял, наконец. Это просто родителем не называется.

    Вообще, в этом запросе не нужен пока документ закупка. Нужно, например, выгрузить список товаров в СписокЗначений, и поставить условие на товар. Если же оставлять так, то нужно условие, что выбираем именно тот документ, в котором находимся.
     
  12. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    А "Родители" - где хранятся и как связаны с товарами?
     
  13. dwight

    dwight Гость

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

Поделиться этой страницей