Имя: Пароль:
1C
 
Перенос записей по условию из одной таблицы значений в другую (учебный пример)
0 gaigalov
 
27.01.21
12:09
Добрый день. Тема чисто для обучения.
Встал вопрос работы с Таблицей значений.
Создал запрос, выгрузил из него в Таблицу значений.
Нужно часть записей, не соответствующих условию убрать.
Сначала решил Просто их удалить.

Для Каждого Стр Из ТЗ Цикл
   Если ... Тогда
    ТЗ.Удалить(Стр);
   КонецЕсли;
        
КонецЦикла;

Позиции удаляются, но не все. Если позиции идут подряд, то удаляются нечетные, а четные остаются. Я так понимаю что при удалении указатель записи переходит на следующую строку таблицы значений, а при выполнении цикла Для еще раз переходит на строку ниже, и в результате четная строка пропускается и не обрабатывается в цикле. Грустно. Как можно исправить?

Попробовал по советам из инета через цикл Пока по индексам снизу вверх, т.е. в обратном порядке.

КолТЗ = ТЗ.Количество()-1;
  
Пока КолТЗ >=0 Цикл

    СтрТЗ = ТЗ.Получить(КолТЗ);
    Если ... Тогда
        ТЗ.Удалить(КолТЗ);
    КонецЕсли;
        КолТЗ = КолТЗ - 1;
    
КонецЦикла;


Тут все работает на УРА.

Прочитал еще вариант через функцию ЗаполнитьЗначенияСвойств.
И вот тут засада. Ничего не заполняется.

Для Каждого Стр Из ТЗ Цикл
    Если ... Тогда
    
       ЗаполнитьЗначенияСвойств(ТаблЗН.Добавить(),Стр);
            
    КонецЕсли;
        
КонецЦикла;

В новой Таблице значений создаются пустые строки с полем строка таблицы значений и таким же типом данных и все. Ни одна колонка из ТЗ не переноситься. В исходной Таблице 4 колонки.
Что я делаю не так. Почему колонки не переносятся??
Программист всегда исправляет последнюю ошибку.