// создает новый элемент и копирует в его реквизиты значения реквизитов источника
// Параметры:
// элИсточник - источник
// КопироватьИсторию - для периодических реквизитов копируется история: 0 - не копируется, 1 - полностью, 2 - только последнее значение реквизита
// ОткрытьНовый - открыть на экране
Функция СкопироватьЭлемент(элИсточник, КопироватьИсторию = 0, ОткрытьНовый = 0)
Перем спр;
Перем спрМД;
Если ПустоеЗначение(элИсточник) = 1 Тогда
Возврат 0;
КонецЕсли;
спр = СоздатьОбъект("Справочник." + элИсточник.Вид());
спр.ИспользоватьРодителя(элИсточник.Родитель);
спр.ИспользоватьВладельца(элИсточник.Владелец);
спр.Новый();
спрМД = Метаданные.Справочник(элИсточник.Вид());
Для н = 1 По спрМД.Реквизит() Цикл
рек = спрМД.Реквизит(н);
Если рек.Периодический = 0 Тогда
рек = рек.Идентификатор;
зн = элИсточник.ПолучитьАтрибут(рек);
спр.УстановитьАтрибут(рек, зн);
КонецЕсли;
КонецЦикла;
спр.Наименование = элИсточник.Наименование;
Попытка
спр.Записать();
ЗаписьЖурналаРегистрации(, "Записан новый элемент справочника", "Записан новый элемент справочника", спр.ТекущийЭлемент(), 2);
Исключение
Возврат 0;
КонецПопытки;
Если КопироватьИсторию > 0 Тогда
перИст = СоздатьОбъект("Периодический");
перПри = СоздатьОбъект("Периодический");
Для н = 1 По спрМД.Реквизит() Цикл
рек = спрМД.Реквизит(н);
Если рек.Периодический = 1 Тогда
рек = рек.Идентификатор;
перПри.ИспользоватьОбъект(рек, спр.ТекущийЭлемент());
перИст.ИспользоватьОбъект(рек, элИсточник);
Если КопироватьИсторию = 2 Тогда
перИст.ОбратныйПорядок(1);
КонецЕсли;
перИст.ВыбратьЗначения();
Пока перИст.ПолучитьЗначение() = 1 Цикл
перПри.Значение = перИст.Значение;
перПри.ДатаЗнач = перИст.ДатаЗнач;
перПри.Записать();
Если КопироватьИсторию = 2 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ОткрытьНовый = 1 Тогда
ОткрытьФорму(спр.ТекущийЭлемент());
КонецЕсли;
Возврат спр.ТекущийЭлемент();
КонецФункции