вторник, 23 сентября 2014 г.

Отбор в таблице значений

Отбор в таблице значений с использованием построителя запроса


Иногда возникают ситуации, когда нужно сделать отбор в таблице значений используя нечеткое условие, к примеру: больше, меньше, содержит и т.д. Можно, конечно же, использовать перебор в цикле и там уже делать проверку на нечеткие условия, можно использовать метод НайтиСтроки(), вот только отбор, передаваемые туда как параметр, всегда будут иметь вид сравнения - равно.Что же делать, если нам нужно найти строки в ТЧ и при этом использовать нечеткое условие и не использовать цикл?Все просто: можно воспользоваться построителем запроса.Построитель запроса - это объект встроенного языка, с помощью которого мы можем получать необходимые данные, используя отборы. 


Рекомендуется при этом при больших объемах таблиц значений индексировать колонки поиска.


Пример:



//

//где ТаблицаИсточник - это результат некого запроса
ТаблицаИсточник.Индексы.Добавить("Счет, Контрагент, ДоговорКонтрагента, СуммаОстаток");

//->поиск положительных остатков и договора
БольшеНоля = ОтборВРазрезеДоговоровБольшеНуля(ТаблицаИсточник, ТекущийДоговор.ДоговорКонтрагента);
//


Функция ОтборВРазрезеДоговоровБольшеНуля(Таблица, ДоговорКонтрагента) Экспорт

   
Построитель = Новый ПостроительЗапроса;
   
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица);

   
СтрокаОтбора = Построитель.Отбор.Добавить("ДоговорКонтрагента");
   
СтрокаОтбора.ВидСравнения = ВидСравнения.Равно;
   
СтрокаОтбора.Значение = ДоговорКонтрагента;
   
СтрокаОтбора.Использование = Истина;

   
СтрокаОтбора = Построитель.Отбор.Добавить("СуммаОстаток");
   
СтрокаОтбора.ВидСравнения = ВидСравнения.Больше;
   
СтрокаОтбора.Значение = 0;
   
СтрокаОтбора.Использование = Истина;


   
Построитель.Выполнить();

    Возврат
Построитель.Результат.Выгрузить();
КонецФункции

Комментариев нет:

Отправить комментарий