Имя: Пароль:
1C
 
Поле "ДокументСписок". Получение массива отборанных. Как ускорить?
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 По КолСтрок Цикл
СтрокаПоиска = СтрПолучитьСтроку(СтрокиПоиска,Сч);
СледПоле = СледПоля.Найти(СтрокаПоиска);
Если СледПоле = Неопределено Тогда
Прервать;
Иначе
СледПоля = СледПоле.Поля;
КонецЕсли;
КонецЦикла;

Если СледПоле = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции


Функция ПривестиВидСравненияКНужному(ВидСравн)

Если ВидСравн = ВидСравненияКомпоновкиДанных.Больше Тогда
Возврат ВидСравнения.Больше;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда
Возврат ВидСравнения.БольшеИлиРавно;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВИерархии Тогда
Возврат ВидСравнения.ВИерархии;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВСписке Тогда
Возврат ВидСравнения.ВСписке;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
Возврат ВидСравнения.ВСпискеПоИерархии;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Заполнено Тогда
Возврат Неопределено;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Меньше Тогда
Возврат ВидСравнения.Меньше;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда
Возврат ВидСравнения.МеньшеИлиРавно;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда
Возврат ВидСравнения.НеВИерархии;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВСписке Тогда
Возврат ВидСравнения.НеВСписке;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда
Возврат ВидСравнения.НеВСпискеПоИерархии;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда
Возврат Неопределено;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеРавно Тогда
Возврат ВидСравнения.НеРавно;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.НеСодержит Тогда
Возврат ВидСравнения.НеСодержит;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Равно Тогда
Возврат ВидСравнения.Равно;

ИначеЕсли ВидСравн = ВидСравненияКомпоновкиДанных.Содержит Тогда
Возврат ВидСравнения.Содержит;

Иначе
Возврат Неопределено;
КонецЕсли;

КонецФункции
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс