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


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Список Элементов Справочника
07. Марта 2012 :: 10:13
Печать  
   Делаю ПрямойЗапрос, выгружаю результат в СЗ.
Далее, ИспользоватьСписокЭлементов(СЗ).
Блин, но тормозит, причем не запрос, а конкретно Сам список.
Подскажите, пожалуйста, как правильно сделать?
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #1 - 07. Марта 2012 :: 10:20
Печать  
    Просто мне нужен сложный фильтр элементов справочника.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Список Элементов Справочника
Ответ #2 - 07. Марта 2012 :: 10:31
Печать  
Тормозило и будет тормозить. По простому, без напряженной работы - нормально не перепишешь. Поэтому предложения:
1. Разобраться с "Поставщик данных" (посмотреть, в частности, работу со справочниками)
2. или Разобраться с "Табличное поле", "Поставщик данных" для ТП, составить ГРАМОТНЫЙ SQL-запрос, прикрутить картинки и т.д.
Второй вариант я как-то давно реализовывал - работало быстро, но работы было проведено очень много
  
Наверх
ICQ  
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #3 - 07. Марта 2012 :: 10:34
Печать  
Да запрос-то как раз выполняется мгновенно, а по поводу "Поставщик данных", не можешь кинуть ссылку на пример со справочником (а то я уже всё перерыл, ничего конкретного найти не могу, а если и есть что-то, то не работает).
Заранее благодарен.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Список Элементов Справочника
Ответ #4 - 07. Марта 2012 :: 10:45
Печать  
(0) покажи хоть свои запросы.
если не подходит  ТП
то можешь улучшить свой вариант: 
результат  sql запроса сразу в список значений ( вместо тз а потом выгружать в список значений)
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #5 - 07. Марта 2012 :: 10:50
Печать  
     СЗ = СоздатьОбъект("СписокЗначений");
     Запрос = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = "
     |SELECT
     |      C.ID AS [Объект $Справочник.Контрагенты]
     |FROM
     |      SC133 as C
     |      LEFT JOIN SC112 as D ON D.PARENTEXT = C.ID
     |WHERE
     |      D.SP45104 LIKE '%4%' OR C.ISFOLDER = 1
     |GROUP BY
     |      C.ID";

     Запрос.ВыполнитьИнструкцию(ТекстЗапроса).Выгрузить(СЗ);
     Форма.ПолучитьАтрибут();
     ИспользоватьСписокЭлементов(СЗ);
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Список Элементов Справочника
Ответ #6 - 07. Марта 2012 :: 11:14
Печать  
(5)
1.используй 4
2.поставь nolock
3 убери |GROUP BY       C.ID";
4. непонятно зачем тебе в результате нужны все папки по справочнику Контрагенты
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #7 - 07. Марта 2012 :: 11:18
Печать  
Z1 писал(а) 07. Марта 2012 :: 11:14:
(5)
1.используй 4
2.поставь nolock
3 убери |GROUP BY       C.ID";
4. непонятно зачем тебе в результате нужны все папки по справочнику Контрагенты

Да нет, запрос работает нормально. Не в нем проблема.
Как сделать так, что-бы список элементов справочника не тормозил Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Список Элементов Справочника
Ответ #8 - 07. Марта 2012 :: 11:25
Печать  
DmitriyOvchinnikov писал(а) 07. Марта 2012 :: 11:18:
Z1 писал(а) 07. Марта 2012 :: 11:14:
(5)
1.используй 4
2.поставь nolock
3 убери |GROUP BY       C.ID";
4. непонятно зачем тебе в результате нужны все папки по справочнику Контрагенты

Да нет, запрос работает нормально. Не в нем проблема.
Как сделать так, что-бы список элементов справочника не тормозил Улыбка

как причем тут запрос мой запрос лучше(оптимальней ) твоего.


сам список справочника практически не может тормозить
сколько в справочнике элементов ?
Наиболее вероятная причина торможения вычисления в формулах
ну или совсем в плачевном состоянии сам sql сервер.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Список Элементов Справочника
Ответ #9 - 11. Марта 2012 :: 01:21
Печать  
[quote author=DmitriyOvchinnikov link=1331115184/0#5 date=1331117448]      СЗ = СоздатьОбъект("СписокЗначений");
     Запрос = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = "
     |SELECT
     |      C.ID AS [Объект $Справочник.Контрагенты]
     |FROM
     |      SC133 as C
     |      LEFT JOIN SC112 as D ON D.PARENTEXT = C.ID
     |WHERE
     |      D.SP45104 LIKE '%4%' OR C.ISFOLDER = 1
     |GROUP BY
     |      C.ID";

     Запрос.ВыполнитьИнструкцию(ТекстЗапроса).Выгрузить(СЗ);
     Форма.ПолучитьАтрибут();
     ИспользоватьСписокЭлементов(СЗ);[/quote]
[list][*]Запрос.ВыполнитьИнструкцию(ТекстЗапроса, СЗ);
[*]Постарайся уйти от использования LIKE - он очень медленный. Неужели нет варианта поиска по числовому значению или ссылке?
[*]Ради увеличения читаьельности кода рекомендую использовать исходный запрос с долларами, а не результат с преобразованными именами таблиц и полей, т.к. метапарсер все равно будет задействован.
[*]Первое условие во WHERE лучше перенести в условие соединения, но с LIKEом разницы особо не заметишь, а вот если будет число или ссылка - почуствуешь разницу.
[*]Поясни, что значит "тормозит список"?
[/list]
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #10 - 11. Марта 2012 :: 03:11
Печать  
Тормозит - это значит, что список элементов при прокрутке колесом мыши притормаживает.
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #11 - 11. Марта 2012 :: 03:19
Печать  
В общем задача конкретно стоит такая:
Имеется справочник "Контрагенты", у него есть подчиненный справочник "Договоры". У справочника договоры есть реквизит "Подразделение" (справочник "Подразделения"). Нужно вывести список контрагентов (и папок) у которых есть хотя-бы один договор с подразделением как у текущего пользователя.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Список Элементов Справочника
Ответ #12 - 11. Марта 2012 :: 04:17
Печать  
DmitriyOvchinnikov писал(а) 11. Марта 2012 :: 03:11:
Тормозит - это значит, что список элементов при прокрутке колесом мыши притормаживает.
С этим можно помочь только заменой элемента управления или мыши (видел такие, где колесо как-бы дергается туда-сюда).

DmitriyOvchinnikov писал(а) 11. Марта 2012 :: 03:19:
В общем задача конкретно стоит такая:
Имеется справочник "Контрагенты", у него есть подчиненный справочник "Договоры". У справочника договоры есть реквизит "Подразделение" (справочник "Подразделения"). Нужно вывести список контрагентов (и папок) у которых есть хотя-бы один договор с подразделением как у текущего пользователя.

Это же совсем другой запрос (про элементы):
Код
Выбрать все
 ТекстЗапроса = "
     |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"; 

А вот про папки я не понял. Как можно определить, что в этой папке есть контрагент с нужным договором?
Твое же условие выводило все папки без какого-либо порядка и проверки условий.
Короче, про папки еще надо думать, а с элементами все просто.
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 48
Местоположение: Екатеринбург
Зарегистрирован: 05. Марта 2012
Пол: Мужской
Re: Список Элементов Справочника
Ответ #13 - 11. Марта 2012 :: 04:25
Печать  
Спасибо ОГРОМНОЕ за помощь!
А вот мышь - нормальная. Тормозит сам список контрагентов при навигации по нему, хоть с помощью мыши, хоть с помощью клавиатуры.
  
Наверх
 
IP записан
 
DmitriyOvchinnikov
Junior Member
**
Отсутствует


1C++ rocks!

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