Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как пройти по индексу ИТЗ удаляя некоторые строки (число прочтений - 2812 )
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Как пройти по индексу ИТЗ удаляя некоторые строки
03. Ноября 2006 :: 21:22
Печать  
С обычной таблицей значений достаточно часто приходится проделывать такую операцию. Проходить по таблице и удалять по какому-то сложному условию некоторые строки, а некоторые просто  изменять. С изменением, понятное дело, проблем никаких нет, а вот из-за необходимости удаления без нарушения последовательности просмотра приходилось отказываться от прохода по таблице с помощью методов ВыбратьСтроки(), ПолучитьСтроку() и использовать для этого счётчик и метод ПолучитьСтрокуПоНомеру().
Теперь задача в том, чтобы обработать не всю таблицу, а только часть. Для отбора части таблицы удобно использовать индексированную таблицу значений. Имея ключ и используя метод Подмножество() я легко получаю выборку интересующих меня строк. Но как пройти по ней последовательно, удаляя некоторые строки?
Такая задача возникает очень часто.
  
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #1 - 08. Ноября 2006 :: 07:33
Печать  
Насколько я понял, ИндексированнаяТаблица также не имеет метода ПолучитьСтрокуПоНомеру(), который позволил бы по номеру строки (основной индекс) спозиционировать строку (т.е. как в стандартной ТаблицеЗначений). Наличие такого метода позволило бы (не так красиво, как хотелось бы) решить описанную проблему.
  
Наверх
 
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #2 - 08. Ноября 2006 :: 09:35
Печать  
1. В 1Совской таблице значений (ТЗ) - слишком непозволительная "роскошь" удалять строки в прбегаясь по таблице т.к. данный алгоритм мягко говоря не самый быстрый Улыбка
2. Вместо "ПолучитьСтрокуПоНомеру()" можно использовать "НайтиСтроку(Индекс, Ключ, [чНайтиПоследнюю = 0], [чСпозиционироваться = 0])" т.е. использая флаг "чСпозиционироваться" - получится точно такой же результат как и "ПолучитьСтрокуПоНомеру(номСтроки)"

хотя и непонятно для чего такие сложности, если все решается через установку фильтров на через индексы с последующей выгрузка например в туже самую "ТЗ"
  
Наверх
wwwICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #3 - 08. Ноября 2006 :: 11:19
Печать  
Удаление строк в ИТ процесс ещё более трудоёмкий, потому что при этом перестраиваются все индексы.
Удаление строк при наличии открытых выборок - вообще скорее всего приведёт к падению, поскольку выборка топает по узлам поискового дерева, и после удаления текущего узла произойдёт memory exception.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #4 - 08. Ноября 2006 :: 11:33
Печать  
Автор, будь проще.

Добавь колонку, заполни ее флажком (1 - удалять, 0 - не удалять)
Построй по этой колонке индекс
Поставь фильтр 1 по этому индексу
Удали по индексу и фильтру

В качестве приза получишь перестроение индексов ровно 1 раз.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #5 - 08. Ноября 2006 :: 11:35
Печать  
kbakaras писал(а) 08. Ноября 2006 :: 07:33:
Насколько я понял, ИндексированнаяТаблица также не имеет метода ПолучитьСтрокуПоНомеру(), который позволил бы по номеру строки (основной индекс) спозиционировать строку (т.е. как в стандартной ТаблицеЗначений). Наличие такого метода позволило бы (не так красиво, как хотелось бы) решить описанную проблему.

Свойство НомерСтроки, read/write, позволяет управлять позиционированием по основному индексу
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #6 - 08. Ноября 2006 :: 11:52
Печать  
Спасибо всем за дельные советы. Буду ещё внимательнее читать документацию. Описание поля НомерСтроки ТИ дано весьма лаконичное:

Описание: Номер текущей строки в основном индексе. Если строка не выбрана, то 0.

..и не наводит на мысль о том, что реквизит позволяет позиционировать строку в объекте.
В любом случае спасибо, все советы по делу.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как пройти по индексу ИТЗ удаляя некоторые стр
Ответ #7 - 08. Ноября 2006 :: 13:46
Печать  
Ты внимательно почитай, что тебе насоветовали. По-моему очень дельный совет дал noprogrammer:
noprogrammer писал(а) 08. Ноября 2006 :: 09:35:
хотя и непонятно для чего такие сложности, если все решается через установку фильтров на через индексы с последующей выгрузка например в туже самую "ТЗ"

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать