Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос: вернуть все строки табличной части по совпадению хотя бы одного значения  (Прочитано 10831 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Vlad3
Участник

ua
Offline Offline

« : 12-10-2009 08:14 » 

Здравствуйте!

Есть Справочник1 у которого есть только ТабличнаяЧасть1 у которой один Реквизит1.
Другими словами Справочник1 представляет собой группу таблиц.

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

На выходе получить такой список значений.

Пример.
Элемент1
    ТабличнаяЧасть
         123
         321
         456
Элемент2
    ТабличнаяЧасть
         693
         523
         456

Если на вход запросу дать строку "123" то на выходе должны получить
        123
        321
        456

Если на вход дать строку "456" то на выходе должны получить
        123
        321
        456
        693
        523
        456
 
« Последнее редактирование: 12-10-2009 10:11 от Kivals » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-10-2009 10:10 » 

Через вложенный запрос: во внутреннем запросе ищешь в табличной части искомое значение и возвращаешь ссылку на элемент справочника, внешним запросом возвращаешь все элементы табличной части для отобранных ссылок.
То же самое можно через ЛЕВОЕ СОЕДИНЕНИЕ двух одинаковых таблиц, но вложенным запросом ИМХО нагляднее.
Записан
Vlad3
Участник

ua
Offline Offline

« Ответ #2 : 12-10-2009 11:55 » 

Через вложенный запрос: во внутреннем запросе ищешь в табличной части искомое значение и возвращаешь ссылку на элемент справочника, внешним запросом возвращаешь все элементы табличной части для отобранных ссылок.
То же самое можно через ЛЕВОЕ СОЕДИНЕНИЕ двух одинаковых таблиц, но вложенным запросом ИМХО нагляднее.
Вот по внутреннему запросу. Как тут быть при обращении к табличной части? Можно хоть какойто пример?
Еще гдето слышал что 1С не поддерживает вложенные запросы, только соединения.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 12-10-2009 12:47 » new

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

На счет не поддерживает вложенных запросов - возможно так было в 8.0, с которой я не работал (начал уже с 8.1)
Записан
Vlad3
Участник

ua
Offline Offline

« Ответ #4 : 12-10-2009 13:07 » 

Уфффф, после нескольких часов мучений по отладке внутреннего запроса, заработал вариант №2 любезно предоставленный Kivals.
Спасибо!
Я уже потерял надежду и начал результаты внутреннего запроса обрабатывать в цикле  Краснею.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-10-2009 14:00 » 

15:47:11 - 16:07:29  несколько часов? ню-ню Улыбаюсь)
Записан
Vlad3
Участник

ua
Offline Offline

« Ответ #6 : 12-10-2009 14:40 » 

15:47:11 - 16:07:29  несколько часов? ню-ню Улыбаюсь)
Внутренний запрос был получен мною гораздо раньше.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines