Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Список Элементов Справочника (число прочтений - 7976 )
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #15 - 11. Марта 2012 :: 04:38
Печать  
Блин, сейчас посмотрел списки других справочников - тоже тормозят.
Что такое может быть?
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #16 - 11. Марта 2012 :: 04:53
Печать  
$D.Подразделение = :Подразделение

Запрос.УстановитьТекстовыйПараметр("Подразделение", Пользователь.Подразделение);

   Не работает запрос. Выводит всех контрагентов.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Список Элементов Справочника
Ответ #17 - 11. Марта 2012 :: 05:40
Печать  
DmitriyOvchinnikov писал(а) 11. Марта 2012 :: 04:53:
Не работает запрос. Выводит всех контрагентов.
Запрос то покажи. Поди с условием напутал что-нибудь...
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #18 - 11. Марта 2012 :: 06:03
Печать  
ТекстЗапроса = "
     |SELECT
     |      DISTINCT C.ID AS [Объект $Справочник.Контрагенты],
     |      C.DESCR,
     |      C.ISFOLDER
     |FROM
     |      $Справочник.Контрагенты as C
     |      LEFT JOIN $Справочник.Контрагенты as D ON D.PARENTEXT = C.ID
    |            AND $D.Местонахождение = :Подразделение
    |ORDER BY
    |      C.ISFOLDER, C.DESCR";


Запрос.УстановитьТекстовыйПараметр("Подразделение", Пользователь.Сотрудник.Подразделение.Получить());

P.S. У справочника "Договоры" реквизит "Местонахождение" является ссылкой на справочник "Подразделение"
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Список Элементов Справочника
Ответ #19 - 11. Марта 2012 :: 06:13
Печать  
А где мое условие "D.ID IS NOT NULL"? Именно оно и гарантировало элементы ТОЛЬКО с нужным подразделением.
Но оно же не даст тебе вывести и папки.
Вот что тебе нужно:
Код
Выбрать все
ТекстЗапроса = "
     |SELECT
     |	DISTINCT C.ID AS [Объект $Справочник.Контрагенты]
     |FROM
     |	$Справочник.Контрагенты as C
     |	LEFT JOIN $Справочник.Договоры as D ON D.PARENTEXT = C.ID AND $D.Подразделение = :КакУЮзера
     |WHERE
     |	C.ISFOLDER = 2 AND D.ID IS NOT NULL
     |UNION
     |SELECT
     |	C.ID AS [Объект $Справочник.Контрагенты]
     |FROM
     |	$Справочник.Контрагенты as C
     |WHERE
     |	C.ISFOLDER = 1"; 

  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #20 - 11. Марта 2012 :: 06:23
Печать  
Огромное спасибо!!!!! Работает.

Вот только что-то я не догоняю смысла вот этого:
"WHERE
     C.ISFOLDER = 2 AND D.ID IS NOT NULL"
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Список Элементов Справочника
Ответ #21 - 11. Марта 2012 :: 06:41
Печать  
Строится таблица (виртуальная), образующаяся из справочника "Контрагенты", к которому дорисованы колонки из таблицы "Договоры" (не все элементы, а с учетом условия $D.Подразделение = :КакУЮзера) связанные по ИД. Из этой таблицы отфильтровываются записи, у которых C.ISFOLDER = 2 - т.е. это НЕ группа, а именно Элемент, И D.ID IS NOT NULL - т.е. при добавлении доп колонок - в данной строке значения были найдены
  
Наверх
ICQ  
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #22 - 11. Марта 2012 :: 06:59
Печать  
Спасибо!!!!
А как-то можно тебе плюсик на форуме поставить? Улыбка
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #23 - 11. Марта 2012 :: 07:03
Печать  
И еще один вопрос появился (по поводу оптимизации запроса): использование индексов (INDEX)
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Список Элементов Справочника
Ответ #24 - 12. Марта 2012 :: 06:56
Печать  
Правило №1) Не считай себя умнее оптимизатора скуля.
Правило №2) даже если прямое указание индекса ускоряет выполнение запроса, см п.1. Видимо, где-то в другом ты теряешь.

Если же ты по прежнему уверен, что выигрываешь больше, чем теряешь - бог в помощь.
Пишется что-то типо
From $Справочник.Контрагенты as C (Nolock INDEX=<имя индекса>)
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Список Элементов Справочника
Ответ #25 - 12. Марта 2012 :: 07:11
Печать  
Satans Claws писал(а) 12. Марта 2012 :: 06:56:
Правило №1) Не считай себя умнее оптимизатора скуля.
Это правило работает не всегда, но где-то в 99.9999999999% случаев оно справедливо  Подмигивание
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #26 - 12. Марта 2012 :: 11:23
Печать  
Спасибо за подробный ответ. Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать