Имя: Пароль:
1C
1С v8
Как отобрать строки из Таблицы Значений по условию например "сумма < 70"
0 RalexR
 
30.10.12
23:19
Доброго времени суток народ! Вот впервый раз столкнулся с ситуацией когда надо отобрать строки из ТЗ по условию меньше или больше. Запросом понятно можно, каким другим способом, возможно ли тут использование метода ТЗ.НАйтиСтроки()? я так понял что нет.
1 Feanorko
 
30.10.12
23:21
НайтиСтроки ищет тока на равенство
2 ботаникус
 
30.10.12
23:21
запрос
3 RalexR
 
30.10.12
23:27
Да, я тоже других способов пока не нашёл, думал может кто подскажет:)надеялся без запроса обойтись.
4 hhhh
 
30.10.12
23:33
(3) вы что-то странные способы ищете. Нужно спрашивать вообще-то: Как обойтись без этого кривого метода НайтиСтроки()?
5 ВалераОшкин
 
30.10.12
23:35
Для каждого СтрокаТЗ ИЗ ТЗ
Если СтрокаТЗ.Сумма < 70 Тогда
МассивОтобранныхСтрок.Добавить(СтрокаТЗ);
КонецЕсли;
Цикл;
6 RalexR
 
30.10.12
23:35
через запрос уже реализовал:) таблицы значений большие очень, хотел просто ради любопытства сравнить время отбора и время запросом когда отбираешь.
7 hhhh
 
30.10.12
23:44
(6) ну сам сравни запрос дает в результате всем понятную таблицу значений. Ее можно сразу проиндексировать по нужному полю, чтобы быстро летала.

НайтиСтроки дает в результате такую вещь: массив строк ТЗ. Это сам понимаешь полная задница. Его не проиндексируешь и поиск в нем организовать очень трудно. И время его обработки будет запредельное.
8 Фокусник
 
31.10.12
00:14
(7) Можно же
тзНовая = тзИсходная.Скопировать(мНайденныеСтроки)
:)
9 RalexR
 
31.10.12
09:02
ну для начала эти строки надо найти:)
10 Нуф-Нуф
 
31.10.12
09:15
запрос?
11 YF
 
31.10.12
09:17
А что метод Скопировать по отбору не устраивает?
12 YF
 
31.10.12
09:17
ТаблицаЗначений (ValueTable)
Скопировать (Copy)
Вариант синтаксиса: Скопировать строки

Синтаксис:

Скопировать(<Строки>, <Колонки>)
Параметры:

<Строки> (необязательный)

Тип: Массив.
Массив строк для копирования. Если не указан, копируются все строки таблицы значений.
<Колонки> (необязательный)

Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
Описание варианта метода:

Если указаны строки и колонки, то только они будут скопированы. Если не указаны - то будет создана полная копия таблицы значений.
Вариант синтаксиса: Скопировать по отбору

Синтаксис:

Скопировать(<ПараметрыОтбора>, <Колонки>)
Параметры:

<ПараметрыОтбора> (необязательный)

Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
<Колонки> (необязательный)

Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
Описание варианта метода:

Если указан отбор, то только строки из отбора будут скопированы. Если отбор не указан, то будут скопированы все строки таблицы значений. Если указаны колонки, то только эти колонки будут скопированы. Иначе, будут скопированы все колонки таблицы значений.
Возвращаемое значение:

Тип: ТаблицаЗначений.

Описание:

Создает копию исходной таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

НовТаблицаЦен = ТаблицаЦен.Скопировать();
13 GANR
 
31.10.12
09:25
(0) Часто применяемый мною прием:

1. Загнать ТЗ в запрос (читай про временные таблицы)
2. Поставить фильтры какие мне надо
3. Выгрузить результат запроса 1. в ТЗ

Кстати, 1. может быть заменен и на набор данных типа "объект" в СКД в случае особо сложных отборов.
14 GANR
 
31.10.12
09:28
(6)Не заметил... СКД ещё есть - редко кем применяемый способ. Но я сомневаюсь, что это быстрей. Единственный плюс - отборы можно самые извратные без труда накладывать накладывать в пользовательском режиме.
15 GANR
 
31.10.12
09:45
Как-то так:

Функция НаложениеОтборовНаТаблицуЧерезСКД(ТвояТЗ, СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных) Экспорт

   РезультирующаяТаблица = Новый ТаблицаЗначений;

   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"), Ложь);    
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ОсновнойНабор", ТвояТЗ));
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ПроцессорВывода.УстановитьОбъект(РезультирующаяТаблица);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);

   Возврат РезультирующаяТаблица;

КонецФункции