Создание копированием и создание на основании
Создание копированием
- элементы справочников,
- экземпляры документов,
- узлы планов обмена,
- записи регистров сведений,
- элементы хранилищ настроек.
Системная команда Создать копию автоматически добавляется в формы списка и объекта для справочников, документов, планов обмена и регистров сведений при их создании. При вызове этой команды выполняется копирование исходного объекта и открывается форма объекта копии. Далее пользователь может отредактировать данные копии и сохранить изменения.
Команда Создать копию автоматически добавляется в дополнительные команды при создании новой формы объекта в среде разработки, а также в автоматическую форму объекта при ее создании.
При создании новой формы объекта команда Создать копию автоматически прописывается в ее 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
        Тип: Число
        ЗаполнятьПриКопировании: ЛожьСоздание на основании
- справочники,
- документы,
- планы обмена,
- контракты сущностей,
- структуры (элементы проекта).

Например:
ВидЭлемента: Документ
Ид: d41be85d-d23e-4a9a-aeeb-a5ffc51cb7af
Имя: ДокументОснование
ОбластьВидимости: ВПодсистеме
СозданиеНаОсновании:
    - МойСправочник.Ссылка
    - Основное::МояСтруктура
Реквизиты:
    -
        Имя: Дата
        Тип: ДатаВремя
    -
        Имя: Номер
        Длина: 15
        Автонумерация:
            Использовать: Ложь
    -
        Ид: 82b4f4a2-a216-4473-883c-253f0c06eb6e
        Имя: Поле_строка
        Тип: Строка
ТабличныеЧасти:
    -
        Ид: 5df84bd8-b268-45fa-aabe-9dae894cec2e
        Имя: ТабличнаяЧастьДокумент
        Реквизиты:
            -
                Ид: 4f26bfdc-80f3-4f73-85fd-1ae7bb25312d
                Имя: Реквизит_число
                Тип: Число
            -
                Ид: 441f366e-008f-4c88-9611-1fe85b7d7c3a
                Имя: Реквизит_справочник
                Тип: МойСправочник.Ссылка?Группа команд Создать на основании добавляется в дополнительные команды при создании новой формы объекта в среде разработки, а также в автоматическую форму объекта.

ДополнительныеКоманды:
    Тип: ФрагментКомандногоИнтерфейса<Команда>
    Элементы:
        - =Обновить
        - =СоздатьКопию
        - =СоздатьНаОсновании
При создании новой формы списка группа команд Создать на основании автоматически прописывается в YAML-файле новой формы в свойстве КомандыСтроки:
КомандыСтроки:
Тип: ФрагментКомандногоИнтерфейса<КомандаСПараметром<Массив<Сущность.Ключ>>|КомандаСПараметром<Сущность.Ключ>>
Элементы:
    - =Компоненты.ОсновнаяТаблица.СоздатьКопию
    - =Компоненты.ОсновнаяТаблица.СоздатьНаОсновании(ДанныеСтроки)@Обработчик
метод ПриСозданииНаОсновании(Основание: МойСправочник.Ссылка)
    // Создание документа МойДокумент на основании справочника МойСправочник
;
@Обработчик
метод ПриСозданииНаОсновании(Основание: МояСтруктура)
    // Создание документа МойДокумент на основании структуры МояСтруктура
;Использование механизма создания на основании в интерфейсе
- в свойствах создаваемой сущности укажите сущность-источник в качества источника создания на основании;
- в модуле компонента интерфейса получите ссылку на сущность-источник;
- откройте форму объекта и в качестве параметра Основание
                        укажите эту
                        ссылку.метод СоздатьПродажиНаОснованииКлиента(КлиентСсылка: Клиенты.Ссылка) ПродажиФормаОбъекта.ОткрытьВМодальномОкне(Основание = КлиентСсылка) ;
Использование механизма создания на основании в коде
В коде вы можете создавать объекты на основании других с помощью метода СоздатьНаОсновании, который в качестве параметра принимает ссылку на источник создания на основании или экземпляр структуры. Получив новый объект, вы можете поменять его реквизиты, а потом вызвать метод Записать.
метод СоздатьЗаказКлиента(КлиентСсылка: Клиенты.Ссылка): ЗаказКлиента.Ссылка
    пер Заказ = ЗаказКлиента.СоздатьНаОсновании(КлиентСсылка)
    Заказ.Записать()
    возврат Заказ.Ссылка
;