|
|
|
Фильтр на ТаблицуЗначений 2 | ☑ | ||
|---|---|---|---|---|
|
0
АлисА
13.09.05
✎
13:03
|
Извините, хотела в старую ветку добавить. Но почему-то не получается ((
Посидела на выходных. Подумала не много. Посмотрела различные варианты. Из предложенных не один не удовлетворял условиям задачи. Те, что выложил mszsuz в клубе профессионалов пролетали мимо. Самым лучшим был Нефедова Сергея (опять таки, для моей задачи) но у него есть несколько но. В принципе эти, но не существенны. Кроме одного. Все будет зависеть от количества отбираемых значений. Если частота появления отбираемых строк меньше чем 1 из 35, то алгоритм Сергея побеждает. Если же больше чем 1 из 40, то мой начинает работать шустрее. В остальных случаях результат получается приблизительно одинаковый и им можно пренебречь. У меня же частота строк равно 1 из 1000 если не реже. То есть из 15000-20000 элементов ТЗ нужно получить ТЗ размером не более 20-30. И тут я руль ;-Р А вот вприципе и сам алгоритм Функция Фильтр(Таблица, Колонка, Значение) ТабВрем1 = СоздатьОбъект("ТаблицаЗначений"); ТабВрем2 = СоздатьОбъект("ТаблицаЗначений"); Результат = СоздатьОбъект("ТаблицаЗначений"); Таблица.Выгрузить(Результат, 1, 1); Результат.УдалитьСтроку(1); Таблица.Выгрузить(ТабВрем2); ПустоеЗн = ПолучитьПустоеЗначение(ТипЗначенияСтр(Значение)); Позиция = 0; Пока ТабВрем2.НайтиЗначение(Значение, Позиция, Колонка) > 0 Цикл ТабВрем2.Выгрузить(ТабВрем1, Позиция, Позиция); Результат.НоваяСтрока(); ПоследняяСтр = Результат.КоличествоСтрок(); Результат.Заполнить(ТабВрем1, ПоследняяСтр); ТабВрем2.УстановитьЗначение(Позиция, Колонка, ПустоеЗн); Позиция = 0; КонецЦикла; Возврат Результат; КонецФункции |
|||
|
1
NS
13.09.05
✎
13:07
|
Тебе нужно оставить строки с нужным значением в данной колонке?
|
|||
|
2
АлисА
13.09.05
✎
13:10
|
В принципе да.
|
|||
|
3
NS
13.09.05
✎
13:16
|
нач="";
кон=""; ТЗ1=создатьобъект("ТаблицаЗначений"); ТЗ.Сортировать("ТвояКолонка+"); Если ТЗ.НайтиЗначение(ТвоеЗначение,нач,"ТвояКолонка")>0 Тогда ТЗ.Сортировать("ТвояКолонка-"); ТЗ.НайтиЗначение(ТвоеЗначение,кон,"ТвояКолонка"); ТЗ.Выгрузить(ТЗ1,кон,ТЗ.КоличествоСтрок()-нач+1); ТЗ=ТЗ1; Иначе сообщить("не найдено ни одного значения"); КонецЕсли; |
|||
|
4
АлисА
13.09.05
✎
13:21
|
Спасибочки. :))
Сейчасм гляну. Сергей а можешь ответить на вопрос, просто когда с этой бедой боролась столкунлась первый раз. Почему не работает служебное слово Знач(Val) в передаче параметров процедуре/функции, если тип передоваемого значения ТаблицаЗначений. То есть над строкой мы можем издеваться как хотим, а над ТЗ нет? |
|||
|
5
NS
13.09.05
✎
13:24
|
(4) Занч работает только для простых типов. ТЗ непростой тип, и занимает много места. Поэтому передается только по ссылке.
И так же присваивание ТЗ=ТЗ1 - не присваивает таблицу, а присваивает ссылку. То есть, после этого присваивания после изменения ТЗ1 - будет автоматом менятся ТЗ и наоборот. |
|||
|
6
АлисА
13.09.05
✎
13:26
|
(5)Еще раз спасибочки. ;)
Приятно, когда все таки есть джентельмены. А не только... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |