|
Поле "ДокументСписок". Получение массива отборанных. Как ускорить? | ☑ | ||
---|---|---|---|---|
0
Галахад
гуру
12.03.15
✎
06:18
|
Получаю таким кодом:
Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок); Результат = Построитель.Результат; Как отследить изменение отбора? Пока запихал в "ПриПолученииДанных", но это медленно. |
|||
1
kosts
12.03.15
✎
06:30
|
(0) А зачем это при каждом получении?
|
|||
2
Галахад
гуру
12.03.15
✎
06:35
|
(1) Да не знал как лучше.
Почитал тут: http://its.1c.ru/db/metod8dev#content:2836:hdoc Переделал. Всем спасибо. |
|||
3
DrZombi
гуру
12.03.15
✎
07:02
|
(0) Я вот так велосИпед делал :)
Запрос = Новый ПостроительЗапроса; Запрос.Текст = "ВЫБРАТЬ... и т.д. запрос"; ПоляНастройки = Запрос.Отбор.ПолучитьДоступныеПоля(); Для Каждого Элемент Из НастройкиКомпоновщика.Отбор.Элементы Цикл Если Элемент.Использование = Истина Тогда Описание = Строка(Элемент.ЛевоеЗначение); Если НайтиПолеНастройки(ПоляНастройки, Описание) <> Истина Тогда Продолжить; КонецЕсли; ВидСравн = ПривестиВидСравненияКНужному(Элемент.ВидСравнения); Если ВидСравн = Неопределено Тогда Продолжить; КонецЕсли; ЭлемОтбора = Запрос.Отбор.Добавить(Описание); ЭлемОтбора.ВидСравнения = ВидСравн; ЭлемОтбора.Значение = Элемент.ПравоеЗначение; ЭлемОтбора.Использование = Истина; КонецЕсли; КонецЦикла; Запрос.Выполнить(); РезЗапроса = Запрос.Результат; Выборка = РезЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой); //Далее уже сам поймешь, что делалось :) Функция НайтиПолеНастройки(ПоляНастройки, Описание) Если ПустаяСтрока(Описание) Тогда Возврат Ложь; КонецЕсли; СтрокиПоиска = СокрЛП(Описание); СтрокиПоиска = СтрЗаменить(СтрокиПоиска,".",Символы.ПС); КолСтрок = СтрЧислоСтрок(СтрокиПоиска); СледПоле = Неопределено; СледПоля = ПоляНастройки; Для Сч = 1 По КолСтрок Цикл СтрокаПоиска = СтрПолучитьСтроку(СтрокиПоиска,Сч); СледПоле = СледПоля.Найти(СтрокаПоиска); Если СледПоле = Неопределено Тогда Прервать; Иначе СледПоля = СледПоле.Поля; КонецЕсли; КонецЦикла; Если СледПоле = Неопределено Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции Функция ПривестиВидСравненияКНужному(ВидСравн) Если ВидСравн = ВидСравненияКомпоновкиДанных.Больше Тогда Возврат ВидСравнения.Больше; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда Возврат ВидСравнения.БольшеИлиРавно; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВИерархии Тогда Возврат ВидСравнения.ВИерархии; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВСписке Тогда Возврат ВидСравнения.ВСписке; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда Возврат ВидСравнения.ВСпискеПоИерархии; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Заполнено Тогда Возврат Неопределено; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Меньше Тогда Возврат ВидСравнения.Меньше; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда Возврат ВидСравнения.МеньшеИлиРавно; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда Возврат ВидСравнения.НеВИерархии; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВСписке Тогда Возврат ВидСравнения.НеВСписке; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда Возврат ВидСравнения.НеВСпискеПоИерархии; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда Возврат Неопределено; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеРавно Тогда Возврат ВидСравнения.НеРавно; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеСодержит Тогда Возврат ВидСравнения.НеСодержит; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Равно Тогда Возврат ВидСравнения.Равно; ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Содержит Тогда Возврат ВидСравнения.Содержит; Иначе Возврат Неопределено; КонецЕсли; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |