Создание копированием и создание на основании
Создание копированием
Чтобы упростить работу пользователей приложения и ускорить ввод данных в систему, «1С:Исполнитель» предоставляет возможность создавать новый экземпляр объекта путем копирования данных существующего экземпляра. Создавать копированием можно следующие типы объектов:
- элементы справочников,
- экземпляры документов,
- узлы планов обмена,
- записи регистров сведений,
- элементы хранилищ настроек.
Системная команда Создать копию автоматически добавляется в формы списка и объекта для справочников, документов, планов обмена и регистров сведений при их создании. При вызове этой команды выполняется копирование исходного объекта и открывается форма объекта копии. Далее пользователь может отредактировать данные копии и сохранить изменения.
Команда Создать копию автоматически добавляется в дополнительные команды при создании новой формы объекта в среде разработки, а также в автоматическую форму объекта при ее создании.
При создании новой формы объекта команда Создать копию автоматически прописывается в ее YAML-файле в свойстве ДополнительныеКоманды:
ДополнительныеКоманды:
Тип: ФрагментКомандногоИнтерфейса<Команда>
Элементы:
- =Обновить
- =СоздатьКопию
В формах списка команда Создать копию автоматически добавляется в команды строки:
При создании новой формы списка команда Создать копию автоматически прописывается в ее YAML-файле в свойстве КомандыСтроки:
КомандыСтроки:
Тип: ФрагментКомандногоИнтерфейса<КомандаСПараметром<Массив<Сущность.Ключ>>|КомандаСПараметром<Сущность.Ключ>>
Элементы:
- =Компоненты.ОсновнаяТаблица.СоздатьКопию
Использо вание механизма создания копированием в интерфейсе
Вы можете создать новый экземпляр сущности на клиенте из формы или другого компонента интерфейса. Для этого:
-
в модуле компонента интерфейса получите ссылку на сущность-источник;
-
откройте форму объекта и в качестве параметра
КлючИсточникаКопирования: имя-сущности.Ссылка
укажите эту ссылку.метод ОткрытьКопиюМоегоСправочника(Ссылка: МойСправочник.Ссылка)
Открыть(КлючИсточникаКопирован ия = Ссылка)
;
Использование механизма создания копированием в коде
Чтобы создать копию экземпляра справочника, документа или плана обмена в коде на сервере:
-
получите ссылку на копируемый объект и воспользуйтесь методом
имя-сущности.Ссылка.СоздатьКопиюОбъекта()
. Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметра ми, аналогично конструктору экземпляра сущности:метод СкопироватьБезНаименования(Ссылка: МойСправочник.Ссылка): МойСправочник.Объект
возврат Ссылка.СоздатьКопиюОбъекта(Наименование = "")
; -
получите копируемый объект и воспользуйтесь методом
имя-сущности.Объект.СоздатьКопию()
. Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметрами, аналогично конструктору экземпляра сущности:метод СкопироватьБезНаименования(Источник: МойСправочник.Объект): МойСправочник.Объект
возврат Источник.СоздатьКопию(Наименование = "")
;
Чтобы создать копию экземпляра регистра сведений в коде на сервере:
-
получите ключ копируемой записи регистра сведений и воспользуйтесь методом
имя-регистра-сведений.КлючЗаписи.СоздатьКопиюЗаписи()
. Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметрами, аналогично конструктору экземпляра сущности:метод СкопироватьЗаписьСКлючом(Парам: Строка)
пер Запрос = Запрос{ВЫБРАТЬ КлючЗаписи ИЗ МойРегистрСведений ГДЕ Измерение1 == %Парам}
исп Результат = Запрос.Выполнить()
для Строка из Результат
пер Ключ = Строка.КлючЗаписи
пер НоваяЗапись = Ключ.СоздатьКопиюЗаписи()
// Меняем значения ресурсов, измерений или реквиз итов и записываем новую запись
;
; -
получите копируемую запись регистра сведений и воспользуйтесь методом
имя-регистра-сведений.Запись.СоздатьКопию()
. Чтобы сразу переопределить значения реквизитов, метод можно вызвать с параметрами, аналогично конструктору экземпляра сущности:метод СкопироватьЗапись(Парам: Стро ка)
пер Запрос = Запрос{ВЫБРАТЬ КлючЗаписи ИЗ МойРегистрСведений ГДЕ Измерение1 == %Парам}
исп Результат = Запрос.Выполнить()
для Строка из Результат
пер Ключ = Строка.КлючЗаписи
пер Запись = Ключ.ЗагрузитьЗапись()
пер НоваяЗапись = Запись.СоздатьКопию()
// Меняем значения ресурсов, измерений или реквизитов и записываем новую запись
;
;
Настройка создания копированием
Вы можете изменить процесс создания копированием в обработчике события ПриСозданииКопии
в модуле объекта сущности. В параметре Источник этого обработчика находятся данные копируемого объекта. Вы можете перезаписать значения нужных вам реквизитов в соответствии с бизнес-логикой. Пример:
@Обработчик
метод ПриСозданииКопии(Источник: МойСправочник.Данные)
если Источник.Реквизит1 == 1
Реквизит2 = "Значение Реквизита2, соответству ющее бизнес-логике"
;
;
На момент вызова обработчика ПриСозданииКопии
значения всех реквизитов уже будут скопированы, за исключением следующих:
- реквизит Код для справочников, потому что он всегда вычисляется или задается по прикладной логике;
- реквизиты Дата и Номер для документов;
- реквизиты Код, НомерОтправленного, НомерПринятого, ЭтотУзел для планов обмена;
- стандартное поле Период для периодических регистров сведений.
При создании копированием событие ПриЗаполнении
вызывается так же, как и при обычном создании:
- пользователь нажимает на соответствующий компонент интерфейса;
- открывается форма объекта сущности с переданным параметром КлючИсточникаКопирования;
- форма отправляет запрос на сервер, который формирует данные источника копирования;
- на сервере происходит создание нового экземпляра сущности:
- вызывается обработчик события
ПриЗаполнении
; - вызывается обработчик события
ПриСозданииКопии
;
- вызывается обработчик события
- получившийся экземпляр возвращается в форму.