gifts2017

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

Опубликовал Константин Исиченко (IsiKosta) в раздел Программирование - Практика программирования

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

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

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

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

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецЕсли;

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. defini (defini) 24.07.07 08:53
Не хочу обидеть, но складывается впечатление, что автор просто выдрал кусок кода из типовой конфиги.
2. Poppy (poppy) 24.07.07 12:17
Ни здрасте, ни до свидания.
Код не отформатирован. Зачем все это?

Короче, низачот!
3. Константин Исиченко (IsiKosta) 25.07.07 06:24
Это мой лично написанный код ! Форматирование исчезло почему-то само по себе.
4. Аркадий Кучер (Abadonna) 25.07.07 09:56
>Форматирование исчезло почему-то само по себе.
Там надо в закладке Текс поставить тэги
Код
тут твой код
Показать полностью

и будет полное счастье.
Непонятно одно: кто не знает, как программно создать элемент справочника?
5. Аркадий Кучер (Abadonna) 25.07.07 09:58
Тфу, блин, поставил тэги (4) оно их автоматом заменило
Напишу со звездочками (их не учитывать)
[*code]
твой код
[*/code]
6. Дмитрий (zbug) 25.07.07 10:09
Жалко, что приведенный код не будет давать ошибки контроля уникальности в конфигурации, где используются префиксы автонумерации (например, в бюджетной).
7. Poppy (poppy) 25.07.07 12:05
(3) Очень хорошо что ты умеешь писать код и готов им поделиться с товарищами.

Если уж оформляещь код в виде статьи, то напиши еще введение и заключение. А то не понятно, откуда взялся код? Зачем он написан? Для кого предназначена статья? Где его можно использовать? Где его нельзя (нежелательно) использовать? и т.д.
8. Аркадий Кучер (Abadonna) 25.07.07 15:33
(7) "Очень хорошо что ты умеешь писать код и готов им поделиться с товарищами."
Почему-то училка вспомнилась... или пионервожатая ;) :)
9. Poppy (poppy) 25.07.07 19:04
(8)
Наверно, накладывет отпечаток моя основная работа... ;)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа