Каталог решений - Программное создание элемента справочника

Программное создание элемента справочника

Программное создание элемента справочника

В наличии

Пример функции

Категория:

Описание

// Описание:
// создает новый элемент и копирует в его реквизиты значения реквизитов источника
// Параметры:
// элИсточник — источник
// КопироватьИсторию — для периодических реквизитов копируется история: 0 — не копируется, 1 — полностью, 2 — только последнее значение реквизита
// ОткрытьНовый — открыть на экране
Функция СкопироватьЭлемент(элИсточник, КопироватьИсторию = 0, ОткрытьНовый = 0)

Перем спр;
Перем спрМД;

Если ПустоеЗначение(элИсточник) = 1 Тогда
Возврат 0;
КонецЕсли;

спр = СоздатьОбъект(«Справочник.» + элИсточник.Вид());
спр.ИспользоватьРодителя(элИсточник.Родитель);
спр.ИспользоватьВладельца(элИсточник.Владелец);
спр.Новый();
спрМД = Метаданные.Справочник(элИсточник.Вид());

Для н = 1 По спрМД.Реквизит() Цикл
рек = спрМД.Реквизит(н);

Если рек.Периодический = 0 Тогда
рек = рек.Идентификатор;
зн = элИсточник.ПолучитьАтрибут(рек);
спр.УстановитьАтрибут(рек, зн);
КонецЕсли;

КонецЦикла;

спр.Наименование = элИсточник.Наименование;

Попытка
спр.Записать();
ЗаписьЖурналаРегистрации(, «Записан новый элемент справочника», «Записан новый элемент справочника», спр.ТекущийЭлемент(), 2);
Исключение
Возврат 0;
КонецПопытки;

Если КопироватьИсторию > 0 Тогда
перИст = СоздатьОбъект(«Периодический»);
перПри = СоздатьОбъект(«Периодический»);

Для н = 1 По спрМД.Реквизит() Цикл
рек = спрМД.Реквизит(н);

Если рек.Периодический = 1 Тогда
рек = рек.Идентификатор;
перПри.ИспользоватьОбъект(рек, спр.ТекущийЭлемент());
перИст.ИспользоватьОбъект(рек, элИсточник);

Если КопироватьИсторию = 2 Тогда
перИст.ОбратныйПорядок(1);
КонецЕсли;

перИст.ВыбратьЗначения();

Пока перИст.ПолучитьЗначение() = 1 Цикл
перПри.Значение = перИст.Значение;
перПри.ДатаЗнач = перИст.ДатаЗнач;
перПри.Записать();

Если КопироватьИсторию = 2 Тогда
Прервать;
КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Если ОткрытьНовый = 1 Тогда
ОткрытьФорму(спр.ТекущийЭлемент());
КонецЕсли;

Возврат спр.ТекущийЭлемент();

КонецФункции

has been added to your cart:
Оформление заказа