Вход | Регистрация
 

Перенос записей по условию из одной таблицы значений в другую (учебный пример)

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

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

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

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

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

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


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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.