К списку форумов К списку вопросов
А как отфильтровать в ТаблицеЗначений?
АсенСи
20.09.2004 - 09:22
Колонка таблицы значений принимает значения "Открыть", "Закрыть", "Работа" и др. Мне нужно Отфильтровать строки, оставив только строки, где значение "Открыть" или "Сохранить".
Златик
1 - 20.09.2004 - 09:34
Сч=ТЗ.КоличествоСтрок()
Пока Сч>0 Цикл
ПолучитьСтрокуПоНомеру(Сч);
Если Найти("Открыть,Сохранить",ТЗ.КолонкаN)=0 Тогда
ТЗ.УдалитьСтроку(Сч);
КонецЕсли
Сч=Сч-1;
КонецЦикла;
RSergio
2 - 20.09.2004 - 09:34
См. "Сортировать()", "НайтиЗначение()", "Выгрузить()"
DES
3 - 20.09.2004 - 09:34
Не моё, а чьё то!
//_____________________________________________________________________________
//Назначение:
//Возвращает ТЗ отфильтрованную по заданным условиям заданным в таблице условий
//
// У таблицы условий 2 колонки
// 1. "Иден" - содержит имя колонки
// 2. "Значение" - содержит значение для фильтра по ТЗ
//
// Если параметр ПустоеЗначение(_Значение_)=0,
// то параметр _Колонка_ есть строка с именем колонки,
// а параметр _Значение_ это значение отбора.
Функция глФильтрПоТЗ(ТаблДляФильтрации, _Колонка_, _Значение_=0) Экспорт
  Перем ТаблУсловий;
  Перем ТаблВозврат;
  Перем ТаблВозврат1;
  Перем ТЗИден;
  
  //проверяем параметры
  Если ПустоеЗначение(_Значение_)=0 Тогда
   ТаблУсловий = СоздатьОбъект("ТаблицаЗначений");
    ТаблУсловий.НоваяКолонка("Иден","Строка"); // содержит имя колонки
    ТаблУсловий.НоваяКолонка("Значение"); // содержит значение для фильтра по ТЗ
    ТаблУсловий.НоваяСтрока();
    ТаблУсловий.Иден = _Колонка_;
    ТаблУсловий.Значение = _Значение_;
  КонецЕсли;
  //переносим данные в другую таблицу (мы же не хотим испортить исходную)
  ТаблДляФильтрации.Выгрузить(ТаблВозврат);
  
  //проходим по условиям фильтрации
  ТаблУсловий.ВыбратьСтроки();
  Пока ТаблУсловий.ПолучитьСтроку() = 1 Цикл
    ТаблВозврат.Сортировать(ТаблУсловий.Иден,1);
    
    //выгружаем колонку по которой фильтруем
    ТаблВозврат.Выгрузить(ТЗИден,,,ТаблУсловий.Иден);
    //сворачиваем значния, чтобы получить уникальные значения
    ТЗИден.Свернуть(ТаблУсловий.Иден,"");
    
    //ищем строку с первым значением удовлетворяющим значению фильтра
    НачСтрока = "";
    ТаблВозврат.НайтиЗначение(ТаблУсловий.Значение,НачСтрока,ТаблУсловий.Иден);
    Если НачСтрока = 0 Тогда
      //не нашли очищаем таблицу для возврата
      ТаблВозврат.УдалитьСтроки();
      Прервать;
    КонецЕсли; //НачСтрока = 0
    
    //ищем конечную строку которая подходит для условия фильтра
    НомСтроки = "";
    ТЗИден.НайтиЗначение(ТаблУсловий.Значение,НомСтроки,1);
    Если НомСтроки = ТЗИден.КоличествоСтрок() Тогда
      КонСтрока = ТаблВозврат.КоличествоСтрок();
    Иначе
      Значение = ТЗИден.ПолучитьЗначение(НомСтроки+1,1);
      КонСтрока = "";
      ТаблВозврат.НайтиЗначение(Значение,КонСтрока,ТаблУсловий.Иден);
      КонСтрока = КонСтрока - 1;
    КонецЕсли; //НомСтроки = ТЗИден.КоличествоСтрок()
    
    //выгружаем строки удовлетворяющие условию фильтра
    ТаблВозврат.Выгрузить(ТаблВозврат1,НачСтрока,КонСтрока);
    //переписываем найденные строки в рабочую таблицу для дальнейшей обработки
    ТаблВозврат1.Выгрузить(ТаблВозврат);
  КонецЦикла; //ТаблУсловий.ПолучитьСтроку() = 1
  ВозВрат ТаблВозврат;
КонецФункции //ФильтрПоТЗ
//_____________________________________________________________________________
Гурон
4 - 20.09.2004 - 09:35
(0) есть у ТЗ такой метод - УдалитьСтроку(). Попробуй его.

К списку вопросов на форуме 1C

>>