Имя: Пароль:
1C
 
Как удалить пустые строки в ТД?
0 Parti
 
14.05.10
13:49
Вопрос вроде простой, если бы не одно "но". Пример:
Табличный документ следующий:
1.
2.
3.
4.
5. Молоток
6. Гвозди

Цифры - это номера строк. Надо удалить все пустые строки в документе,чтобы результат был только

1.Молоток
2.Гвозди

Если обходить ТД в цикле:

СчСтрок =1;
ВысотаТабл = ТабДок.ВысотаТаблицы;
Пока СчСтрок<> ВысотаТабл Цикл
Если ТабДок.Область(СчСтрок,1).Текст = ""
Тогда
ТабДок.УдалитьОбласть()//со смещением по вертикали
КонецЕсли;
СчСтрок = СчСтрок+1;
КОнецЦикла;

Облом в том, что область удаляется, смещается и следующий обход цикла начинается не со следующей строки, а перескакивая через строку.
Пример
СчСтрок =1. Удалили пустую строку, сдвинули, 2я строка встала на место первой и в следующем шаге цикла (счСтрок=2) новую первую уже пропустим..
1 zak555
 
14.05.10
13:50
начинай с конца
2 Maxus43
 
14.05.10
13:52
или

Тогда
ТабДок.УдалитьОбласть()//со смещением по вертикали
СчСтрок = СчСтрок -1;
КонецЕсли;
3 Parti
 
14.05.10
13:54
(1) а если пустые строки будут в середине?
4 zak555
 
14.05.10
13:54
(3) какая разница ?
5 Maxus43
 
14.05.10
13:56
Если ТабДок.Область(СчСтрок,1).Текст = ""
Тогда
ТабДок.УдалитьОбласть()//со смещением по вертикали
Иначе
СчСтрок = СчСтрок+1;
КонецЕсли;

и всё, и не парься
6 Parti
 
14.05.10
15:23
(5)не прокатит. Счетчик наберется только до значения 2 и не выполнится условие Пока СчСтрок<> ВысотаТабл и цикл будет бесконечен
7 Maxus43
 
14.05.10
15:27
Должно так прокатить

СчСтрок =1;
ВысотаТабл = ТабДок.ВысотаТаблицы;
Пока СчСтрок<> ВысотаТабл Цикл
Если ТабДок.Область(СчСтрок,1).Текст = ""
Тогда
ТабДок.УдалитьОбласть()//со смещением по вертикали
ВысотаТабл = ВысотаТабл - 1;//высота становится меньше
Иначе
СчСтрок = СчСтрок+1;
КонецЕсли;
КОнецЦикла;
8 a_alenkin
 
14.05.10
15:28
Заполни массив строк и потом их удали
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.