1c7.7 ТЗ, как скопировать строку?

  • Автор темы Автор темы KiR
  • Дата начала Дата начала
K

KiR

обхожу ТЗ в цикле в какой-то момент получаю строку, значения которой мне нужно продублировать, т.е. чтобы появилась еще одна строка после текущей со значениями текущей. как это сделать?
 
Именно сразу после текущей или просто продублировать (вконец добавить)

Можно просто делать НоваяСтрока(), а потом СдвинутьСтроку()
Если мешает перебору, то добавлять можно в другую таблицу (предварительно в нее выгрузить первичную)

Если в ТЗ не слишком много колонок, то можно не мудрить, а просто через равно колонки присваивать
Если много, то в цикле по КоличествоКолонок() делать ТЗ2.УстановитьЗначение(<Строка>,<Колонка>,ТЗ1.ПолучитьЗначение(<Строка>,<Колонка>))
 
НоваяСтрока(<НомерСтроки>)
Назначение:
Добавляет новую строку в таблицу значений.
Параметры:
<НомерСтроки> - необязательный параметр. Числовое выражение, содержащее позицию, в которую следует вставить новую строку.
 
про новую строку я знаю. и как передать в новой стоке парметр тоже знаю. и то что можно сначала выгрузить значения колонок из одной строки "через равно" и заполнить новую - тоже. но это неинтересно. неужели нет какого-нить более оптимального способа копирования строки в ТЗ?
 
Тогда надо объявить конкурс на лучшую процедуру копирующую строки ТЗ
Любой сможет добавить ее себе в гл.модуль и юзать ;)
 
Конкурс? Попробуем...

Код:
А = 1;
Пока А <= ТЗ.КоличествоСтрок() Цикл
Если ... Тогда //проверяем условие копирования строки
ТЗ.НоваяСтрока(А+1);
Для КК = 1 По ТЗ.КоличествоКолонок() Цикл
ТЗ.УстановитьЗначение(А+1,КК,ТЗ.ПолучитьЗначение(А,КК));
КонецЦикла;
А = А + 1; // если вновь вставленную строку надо пропустить
КонецЕсли;
А = А + 1;
КонецЦикла;
Я угадал?
 
Решение оченьпохоже на идеальное
Будем так считать, пока никто не предложит лучше

А кто предложит вариант для случая

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
...
КонецЦикла;

???
 
А кто предложит вариант для случая

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
...
КонецЦикла;
В таком случае возможно нарушение выборки. Поэтому я бы для такого цикла писал в новую таблицу, которую загружал бы по окончании в старую. Сложность универсальности заключается в том, что не всегда возможно привести типы колонок универсально. Да и не совсем понятно, как отработает ТЗ.НоваяСтрока() при открытой выборке. Вполне допускаю, что она либо не появится в выборке, но потом будет видна в таблице, как добавленная (т.е. 1С при открытии выборки создают копию таблицы), либо 1С не позволит добавить строку, потому как собъется выборка.
 
как отработает ТЗ.НоваяСтрока()
Нормально отработает
В таком случае возможно нарушение выборки.
нужно помнить об этом и обрабатывать такую ситуацию и все ок будет.

а вообще спибо за предложенный вариант копирования. ток я уже присвоением сделал.. ща пойал себя на мысли что очень многие штуки можно было сделать черезподобную выгрузку загрузу, а я блин по неопытности получал нужную строку, брал оттуда данные, а потом возвращался к первоначальной стоке.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab