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

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 8 окт 2009.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    обхожу ТЗ в цикле в какой-то момент получаю строку, значения которой мне нужно продублировать, т.е. чтобы появилась еще одна строка после текущей со значениями текущей. как это сделать?
     
  2. Hryv

    Hryv Гость

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    НоваяСтрока(<НомерСтроки>)
    Назначение:
    Добавляет новую строку в таблицу значений.
    Параметры:
    <НомерСтроки> - необязательный параметр. Числовое выражение, содержащее позицию, в которую следует вставить новую строку.
     
  4. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    про новую строку я знаю. и как передать в новой стоке парметр тоже знаю. и то что можно сначала выгрузить значения колонок из одной строки "через равно" и заполнить новую - тоже. но это неинтересно. неужели нет какого-нить более оптимального способа копирования строки в ТЗ?
     
  5. Hryv

    Hryv Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Конкурс? Попробуем...

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

    Hryv Гость

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

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

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

    ???
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    В таком случае возможно нарушение выборки. Поэтому я бы для такого цикла писал в новую таблицу, которую загружал бы по окончании в старую. Сложность универсальности заключается в том, что не всегда возможно привести типы колонок универсально. Да и не совсем понятно, как отработает ТЗ.НоваяСтрока() при открытой выборке. Вполне допускаю, что она либо не появится в выборке, но потом будет видна в таблице, как добавленная (т.е. 1С при открытии выборки создают копию таблицы), либо 1С не позволит добавить строку, потому как собъется выборка.
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Аналогичные проблемы возникают и при удалении строки ТЗ
     
  10. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Нормально отработает
    нужно помнить об этом и обрабатывать такую ситуацию и все ок будет.

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    расшифровал бы....
     
Загрузка...

Поделиться этой страницей