Перейти к основному содержимому

Создание копированием

Создание копированием

Чтобы упростить работу пользователей приложения и ускорить ввод данных в систему, «1С:Шина» предоставляет возможность создавать новый экземпляр записи регистров сведений путем копирования данных существующего экземпляра.

Системная команда Создать копию автоматически добавляется в формы списка и записи регистров сведений при их создании. При вызове этой команды выполняется копирование исходного объекта и открывается форма записи копии. Далее пользователь может отредактировать данные копии и сохранить изменения.

Команда Создать копию автоматически добавляется в дополнительные команды при создании новой формы записи в среде разработки, а также в автоматическую форму записи при ее создании.

Команда «Создать копию» в форме записи

При создании новой формы записи команда Создать копию автоматически прописывается в ее YAML-файле в свойстве ДополнительныеКоманды:

ДополнительныеКоманды:
Тип: ФрагментКомандногоИнтерфейса<Команда>
Элементы:
- =Обновить
- =СоздатьКопию

В формах списка записей команда Создать копию автоматически добавляется в команды строки:

Команда «Создать копию» в форме списка

При создании новой формы списка команда Создать копию автоматически прописывается в ее YAML-файле в свойстве КомандыСтроки:

КомандыСтроки:
Тип: ФрагментКомандногоИнтерфейса<КомандаСПараметром<Массив<Сущность.Ключ>>|КомандаСПараметром<Сущность.Ключ>>
Элементы:
- =Компоненты.ОсновнаяТаблица.СоздатьКопию

Использование механизма создания копированием в интерфейсе

Вы можете создать новый экземпляр сущности на клиенте из формы или другого компонента интерфейса. Для этого:

  • в модуле компонента интерфейса получите ключ записи сущности-источника;

  • откройте форму записи и в качестве параметра КлючИсточникаКопирования: имя-регистра-сведений.КлючЗаписи укажите этот ключ.

    метод ОткрытьКопиюМоегоРегистраСведений(Ключ: МойРегистрСведений.КлючЗаписи)
    Открыть(КлючИсточникаКопирования = Ключ,
    СпособОткрытия = СпособОткрытияФормы.ВМодальномОкне)
    ;

Использование механизма создания копированием в коде

Чтобы создать копию экземпляра регистра сведений в коде на сервере:

  • получите ключ копируемой записи регистра сведений и воспользуйтесь методом имя-регистра-сведений.КлючЗаписи.СоздатьКопиюЗаписи(). Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметрами, аналогично конструктору экземпляра сущности:

    метод СкопироватьЗаписьСКлючом(Парам: Строка)
    пер Запрос = Запрос{ВЫБРАТЬ КлючЗаписи ИЗ МойРегистрСведений ГДЕ Измерение1 == %Парам}
    исп Результат = Запрос.Выполнить()
    для Строка из Результат
    пер Ключ = Строка.КлючЗаписи
    пер НоваяЗапись = Ключ.СоздатьКопиюЗаписи()
    // Меняем значения ресурсов, измерений или реквизитов и записываем новую запись
    ;
    ;
  • получите копируемую запись регистра сведений и воспользуйтесь методом имя-регистра-сведений.Запись.СоздатьКопию(). Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметрами, аналогично конструктору экземпляра сущности:

    метод СкопироватьЗапись(Парам: Строка)
    пер Запрос = Запрос{ВЫБРАТЬ КлючЗаписи ИЗ МойРегистрСведений ГДЕ Измерение1 == %Парам}
    исп Результат = Запрос.Выполнить()
    для Строка из Результат
    пер Ключ = Строка.КлючЗаписи
    пер Запись = Ключ.ЗагрузитьЗапись()
    пер НоваяЗапись = Запись.СоздатьКопию()
    // Меняем значения ресурсов, измерений или реквизитов и записываем новую запись
    ;
    ;

Настройка создания копированием

Вы можете изменить процесс создания копированием в обработчике события ПриСозданииКопии в модуле записи регистра сведений. В параметре Источник этого обработчика находятся данные копируемого объекта. Вы можете перезаписать значения нужных вам измерений, ресурсов и реквизитов в соответствии с бизнес-логикой. Пример:

	@Обработчик
метод ПриСозданииКопии(Источник: МойРегистрСведений.Данные)
если Источник.Реквизит1 == 1
Реквизит2 = "Значение Реквизита2, соответствующее бизнес-логике"
;
;

На момент вызова обработчика ПриСозданииКопии значения всех реквизитов уже будут скопированы, за исключением стандартного поля Период для периодических регистров сведений.

примечание

При создании копированием событие ПриЗаполнении вызывается так же, как и при обычном создании:

  • пользователь нажимает на соответствующий компонент интерфейса;
  • открывается форма объекта сущности с переданным параметром КлючИсточникаКопирования;
  • форма отправляет запрос на сервер, который формирует данные источника копирования;
  • на сервере происходит создание нового экземпляра сущности:
    • вызывается обработчик события ПриЗаполнении;
    • вызывается обработчик события ПриСозданииКопии;
  • получившийся экземпляр возвращается в форму.

Свойство «ЗаполнятьПриКопировании»

Чтобы отключить копирование определенного реквизита, воспользуйтесь свойством ЗаполнятьПриКопировании, которое присутствует у измерений, ресурсов и реквизитов.

ВидЭлемента: РегистрСведений
Ид: 1228d00a-dc2a-48bf-8709-d4fd0fdd331e
Имя: МойРегистрСведений
ОбластьВидимости: ВПодсистеме
Измерения:
-
Ид: 4661c2bc-a5b2-4293-ac66-02a5dd16fdc0
Имя: Измерение1
Тип: Число
ЗаполнятьПриКопировании: Ложь
Ресурсы:
-
Ид: 2af5e19a-d922-4158-b27a-36bd214ee295
Имя: Ресурс1
Тип: Строка
МаксимальнаяДлина: 10
ЗаполнятьПриКопировании: Ложь
Реквизиты:
-
Ид: 1e26fe17-1f7f-42be-b9bc-9a4c449a1279
Имя: Реквизит1
Тип: Число
ЗаполнятьПриКопировании: Ложь