1с скопировать структуру в структуру

Обновлено: 07.07.2024

1С 8 таблица значений. Создание. Копирование структуры. Копирование данных.

Таблица значений 1С 8.Х - возможности работы с таблицей по созданию пустой таблицы, копированию структуры и данных.

Создание таблицы значений 1С 8.х, пустая таблица значений.

Таблица значения 1С 8 можно создать двумя путями.

Либо непосредственно, путем вызова конструктора для объекта типа таблицы значений, либо получить эту таблицу можно путем вызова методов других объектов 1С (например, метода Выгрузить() табличной части документа) или путем выполнения запроса.

Пример непосредственного создания пустой 1С 8 таблицы значений путем вызова конструктора.

Пример создания 1С 8 таблицы значений при помощи вызова метода объекта:

Пример, приведенный выше, по созданию 1С 8 таблицы значений не универсальный. Он лишь демонстрирует возможность получения таблицы, которая наполнена содержимым конкретного документа "Реализация" с конкретным номером "000001" В вашей конфигурации могут быть другие документы, с другими номерами.

Копирование структуры таблицы значений 1С 8.х, создание новой таблицы со структурой, идентичной уже существующей таблице.

Иногда может потребоваться создать пустую таблицу значений 1С 8.Х по "образу и подобию" другой таблицы - без переноса данных. Иными словами, требуется создать пустую таблицу идентичной структуры, т.е. скопировать структуру таблицы значений из другой таблицы.

Полное копирование (структуры и данные) таблицы значений 1С 8.х в новую таблицу значений.

Внимание!

Для копирования структуры и данных 1С 8 таблицы значений нельзя просто взять и написать такое: КопияТЗ = ТЗ Это типичная ошибка новичков. Вместо копии таблицы значений.


мы просто получаем еще одну переменную КопияТЗ, которая указывает на тот же самый набор данных что и переменная ТЗ

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

Поэтому для копирования всегда применяем метод Скопировать(). Он создаст в памяти новую таблицу значений, которую заполнит структурой и данными из старой таблицы - и это будет независимая таблица-копия. Последующие изменения в новой таблице никак не отразятся на старой.


Следует так же заметить, что методы СкопироватьКолонки() и Скопировать() у 1С 8 таблицы значений могут иметь параметры (необязательные), при помощи которых можно указать конкретные колонки для копирования, и/или конкретные строки данных, подлежащих копированию.

Прошу оставлять комментарии к статье, задавать вопросы и пожелания.

Эта статья относится к темам 1С с нуля, таблица значений 1С

Как научиться программировать в 1С с нуля?

Как работать программистом 1С и получать до 150 000 рублей в месяц?


ЗАПИШИСЬ НА БЕСПЛАТНЫЙ

"ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ"

Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.

Мы столкнулись с этой задачкой на следующем кейсе: пользователю в подсистеме EDIbot (конструктор веб приложений, nocode CMS, B2B порталов на 1С) было необходимо быстро вставлять готовые преформы (блоки/компоненты) в структуру страницы, а также копировать существующие преформы для возможности изменения. Структура веб страницы в подсистеме EDIbot реализована как дерево значений, и интерактивное копирование платформой 1С копирует только строчку, без вложенных в нее узлов/строк/блоков. Поэтому было решено сделать отдельные кнопки (команды), которые позволяют выполнять копирование и подбор готовых преформ со всеми вложенными узлами/строками.

Итак, вот видео с примером работы пользователя по результату выполненной модификации:

Описание: пользователь создает личный кабинет B2B портала из готовых преформ/блоков - шапки, слайдера акций (по овощам) и меню, потом добавляет еще один слайдер, изменяет источник данных - по фруктам.

Давайте разберемся, как подобное сделать Вам в своих конфигурациях.

Рассмотрим первый пример - копирование в дереве значений на управляемой форме (ДанныеФормыДерево).

Для начала получим активную строку/узел (ДанныеФормыЭлементДерева), на которой пользователь нажал кнопку "Копировать".

Копировать будем в родителя текущего узла, поэтому получим родителя текущего узла/строки и опишем это в коде:

Теперь можем вызвать нашу функцию, которая на клиенте скопирует выбранную пользователем строку в родителя:

Итак, первый пример мы решили, переходим ко второму - подбор и вставка узлов из другого элемента справочника. Тут сложность в том, что дерево значений хранится в реквизите элемента с типом ХранилищеЗначения, придется его получить на сервере и там же добавить в дерево значений формы (ДанныеФормыДерево) нашу структуру, решить проблему передачи ДанныеФормыЭлементДерева с клиента на сервер.

По команде нашей кнопки открывается выбор страницы, с которой мы хотим скопировать структуру:

По завершению выбора будет вызвана процедура:

Как видно, мы всегда предполагаем, что у нашего дерева есть корневая строка (root) и если её нет, то мы её добавляем.

поэтому, мы будем передавать не сам тип ДанныеФормыЭлементДерева, а числовой идентификатор элемента в ДанныеФормыДерево.

Интересно, да? ДанныеФормыЭлементДерева есть и в контексте Сервера и в контекста Клиента, но передать его с клиента на сервер напрямую мы не можем, поэтому делаем это через идентификатор.

Теперь осталось описать функцию по копированию узлов дерева значений (СтрокаДереваЗначений) в наше дерево значений формы (ДанныеФормыДерево)

В итоге мы с Вами решили обе задачки по копированию, разобрались с работой ДанныеФормыДерево, передачей с клиента на сервер ДанныеФормыЭлементДерева - пользователь может копировать и вставлять/подбирать нужные ему блоки страницы веб приложения.

Надеюсь, моя публикация была Вам полезна и сэкономит Ваше время, ссылка на все публикации SizovE, например, в публикации

Подписывайтесь на мой канал (наверху), будет много интересного бесплатного контента :)

Читайте также: