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

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

KiR

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

Hryv

Именно сразу после текущей или просто продублировать (вконец добавить)

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

Если в ТЗ не слишком много колонок, то можно не мудрить, а просто через равно колонки присваивать
Если много, то в цикле по КоличествоКолонок() делать ТЗ2.УстановитьЗначение(<Строка>,<Колонка>,ТЗ1.ПолучитьЗначение(<Строка>,<Колонка>))
 
V

vbs

НоваяСтрока(<НомерСтроки>)
Назначение:
Добавляет новую строку в таблицу значений.
Параметры:
<НомерСтроки> - необязательный параметр. Числовое выражение, содержащее позицию, в которую следует вставить новую строку.
 
K

KiR

про новую строку я знаю. и как передать в новой стоке парметр тоже знаю. и то что можно сначала выгрузить значения колонок из одной строки "через равно" и заполнить новую - тоже. но это неинтересно. неужели нет какого-нить более оптимального способа копирования строки в ТЗ?
 
H

Hryv

Тогда надо объявить конкурс на лучшую процедуру копирующую строки ТЗ
Любой сможет добавить ее себе в гл.модуль и юзать ;)
 
V

vitfil

Конкурс? Попробуем...

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

Hryv

Решение оченьпохоже на идеальное
Будем так считать, пока никто не предложит лучше

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

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

???
 
V

vitfil

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

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

KiR

как отработает ТЗ.НоваяСтрока()
Нормально отработает
В таком случае возможно нарушение выборки.
нужно помнить об этом и обрабатывать такую ситуацию и все ок будет.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!