8.х Помогите с запросом

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем bevaine, 24 фев 2009.

  1. TopicStarter Overlay
    bevaine
    Offline

    bevaine

    Регистрация:
    24 фев 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Имеется регистр сведений в котором содержаться записи абонентов. У каждого абонента имеется установленное оборудование, у некоторых установлен 1 прибор у некоторых несколько. Необходимо отобрать тех абонентов у которых имеются 2 мною заданных прибора, я пишу следующие:
    Код:
            "|ВЫБРАТЬ
    |    РегистрПодключенияОборудования.Абонент
    |ИЗ
    |    РегистрСведений.ПодключенияОборудования КАК РегистрПодключенияОборудования
    |ГДЕ
    |    РегистрПодключенияОборудования.Оборудование.Наименование ПОДОБНО &ПГ СПЕЦСИМВОЛ ""~""
    |    И РегистрПодключенияОборудования.Оборудование.Наименование ПОДОБНО &КГИ СПЕЦСИМВОЛ ""~"""; 
    
    не получается, в принци и правильно ведь для каждого абонента имеется только одно поле с установленным оборудованием. Помогите, что делать?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Напиши не И, а ИЛИ
  3. TopicStarter Overlay
    bevaine
    Offline

    bevaine

    Регистрация:
    24 фев 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    если пишу ИЛИ в результат запроса не попадают абоненты у которых присутствуют указанные 2 обородования.
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Мммм.... проверяй в консоли - должны попадать.
  5. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    хм, все-таки должно быть "или"... Если я правильно понимаю структуру вашего регистра (в регистре несколько записей с одним абонентом но разными приборами, запись абонент-прибор уникальна), то должно работать где-то так:

    1) выбрать всех у кого либо одно, либо второе, т.к. в регистре храниться несколько записей с одним абонентом, но с разными приборами.
    2) сгруппировать по абоненту и подсчитать количество строк например в поле "кол".
    3) отобрать строки где кол= 2, т.е. 2 прибора у одного абонента...
    т.е. примерно так:

    Код:
    ВЫБРАТЬ
    ВложенныйЗапрос.Абонент
    ИЗ
    (ВЫБРАТЬ
    РегистрПодключенияОборудования.Абонент,
    СУММА(1) КАК Поле1		
    ИЗ
    РегистрСведений.ПодключенияОборудования КАК РегистрПодключенияОборудования
    ГДЕ
    (РегистрПодключенияОборудования.Оборудование.Наименование ПОДОБНО &ПГ СПЕЦСИМВОЛ ""~""
    ИЛИ РегистрПодключенияОборудования.Оборудование.Наименование ПОДОБНО &КГИ СПЕЦСИМВОЛ ""~""")
    
    СГРУППИРОВАТЬ ПО
    РегистрПодключенияОборудования.Абонент) КАК ВложенныйЗапрос
    ГДЕ
    ВложенныйЗапрос.Поле1 >1
    
    Если у одного абонента может быть несколько приборов одного вида, тогда похоже надо ипользовать 2 подзапроса - один выберет абонентов с приборами первого типа, второй абонентов с приборами второго типа, а внешний склеит 2 таблицы по вхождению записи в обе.
  6. TopicStarter Overlay
    bevaine
    Offline

    bevaine

    Регистрация:
    24 фев 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    tunec, этот вариант не подходит, потому что у абонента может быть несколь записей с одним из видов приборов, а по второму например 0, соответсвенно он попадет в результат выборки.
  7. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    1. Покажите структуру регистра
    2. А поиск нужен именно по наименованию??? Может попробовать передать массив оборудования?

    |ГДЕ
    | РегистрПодключенияОборудования.Оборудование В (&СписокОборудования)

    Запрос.УстановитьПараметр("СписокОборудования",МассивОборудования);
  8. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    написал же, что если нет уникальности, то использовать выборку с 2 вложенными... Или еще и этот запрос выкладывать?

    лениво набивать, поэтому еще раз:
    1) подзапрос 1 выбирает всех у кого есть предмет 1. Без повторений.
    2) запрос 2 выбирает всех у кого есть предмет 2. Без повторений.
    3) внешний запрос склеивает 2 внутренних по признаку вхождения элемента в оба подзапроса (внутреннее соединение). Вуаля!

    Структура регистра примерно такая:
    Дата/номер/еще чего-то - измерение (для того, чтобы вешать на абонента несколько одинаковых приборов)
    Абонент - измерение
    Прибор - ресурс

    банально передаш массив - получишь белиберду, т.к. все свалится в кучу и отсеять лишних почти не реал.

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