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