Имя: Пароль:
1C
1С v8
Странное поведение ТЗ
0 ParinovS
 
04.03.13
13:19
Доброго всем дня! Уже час не могу понять странное поведение ТЗ.
В общем есть 2 ТЗ, которые я получаю из запроса (методом Выгрузить()).
В первую ТЗ у меня помещается результат из запроса к БД, из которой запускаю обработку, во вторую из запроса к другой БД(копия первой). В общем дергаю движения и нужно найти отличия. Вот таким кодом удаляю в 2-х  ТЗ одинаковые строки:

Для Каждого СтрокаТек  Из РезультатТекущий Цикл
                   СтруктураОтбора = Новый Структура;
                   Для каждого Колонка Из РезультатТекущий.Колонки Цикл
                       СтруктураОтбора.Вставить(Колонка.Имя, СтрокаТек[Колонка.Имя]);
                   КонецЦикла;
                   НайденныеСтроки = ТаблицаКБД.НайтиСтроки(СтруктураОтбора);
                   Если НайденныеСтроки.Количество() > 0 Тогда  
                       РезультатТекущий.Удалить(СтрокаТек);
                       Для номер =0 По НайденныеСтроки.Количество()-1 Цикл
                           ТаблицаКБД.Удалить(НайденныеСтроки[номер]);    
                       КонецЦикла;
                   КонецЕсли;
               КонецЦикла;


Но самое веселое то, что цикл доходит примерно до середины. Т.е. размер 51 элемент, а цикл проходит всего лишь 25 раз.
1 zladenuw
 
04.03.13
13:20
ну так ты удаляешь сразу. индекс сдвигается
2 ParinovS
 
04.03.13
13:20
добавлю, вторую ТЗ привожу к типу данных первой.

ТаблицаКБД = ЗначениеИзСтрокиВнутр( V8.ЗначениеВСтрокуВнутр(РезультаткБД));


Так что, типы колонок и их количество у меня точно совпадают в 2-х ТЗ.
3 Wobland
 
04.03.13
13:20
удалять строки из ТЗ нужно с конца. не вчитывался
4 MSII
 
04.03.13
13:21
Добавить удаляемые строки в массив, потом удалять.
5 ParinovS
 
04.03.13
13:22
аха, спасибо!) сейчас попробую)
6 ParinovS
 
04.03.13
13:26
все, спасибо всем!) Заработало))) сделал так:

МассивУдаляемых = Новый Массив;
               
               Для Каждого СтрокаТек  Из РезультатТекущий Цикл
                   СтруктураОтбора = Новый Структура;
                   Для каждого Колонка Из РезультатТекущий.Колонки Цикл
                       СтруктураОтбора.Вставить(Колонка.Имя, СтрокаТек[Колонка.Имя]);
                   КонецЦикла;
                   НайденныеСтроки = ТаблицаКБД.НайтиСтроки(СтруктураОтбора);
                   Если НайденныеСтроки.Количество() > 0 Тогда  
                       МассивУдаляемых.Добавить(СтрокаТек);
                       Для номер =0 По НайденныеСтроки.Количество()-1 Цикл
                           ТаблицаКБД.Удалить(НайденныеСтроки[номер]);    
                       КонецЦикла;
                   КонецЕсли;
               КонецЦикла;
               Для Номер = 0 По МассивУдаляемых.Количество()-1 Цикл
                   РезультатТекущий.Удалить(МассивУдаляемых[номер]);
               КонецЦикла;