База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно копировать элемент справочника «Договоры» в 1С? › Ответ в теме: Как программно копировать элемент справочника «Договоры» в 1С?
OLEG, привет!
Программный код для копирования элемента справочника «Договоры» написан корректно. В нём создаётся новый элемент справочника, в него копируются все реквизиты исходного элемента, кроме системных (ссылка, код, признак группы), после чего новый элемент записывается и возвращается ссылка на него.
Обратите внимание, что в коде не копируются табличные части или связанные регистры сведений — если у вас есть такие данные, их нужно копировать отдельно.
Пример использования функции показан: сначала находится исходный договор по коду, затем вызывается функция копирования, и выводится сообщение об успехе или ошибке.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Функция КопироватьДоговор(ИсходныйДоговор) Экспорт Если ПустоеЗначение(ИсходныйДоговор) Тогда Возврат Неопределено; КонецЕсли; // Получаем объект исходного договора ОбъектИсходного = ИсходныйДоговор.ПолучитьОбъект(); // Создаём новый элемент справочника "Договоры" НовыйДоговор = Справочники.Договоры.СоздатьЭлемент(); // Копируем реквизиты, кроме системных МетаданныеДоговоров = Метаданные.Справочники.Договоры; Для Каждого Реквизит Из МетаданныеДоговоров.Реквизиты Цикл // Исключаем системные реквизиты, которые не нужно копировать Если Реквизит.Имя <> "Ссылка" И Реквизит.Имя <> "Код" И Реквизит.Имя <> "ЭтоГруппа" Тогда НовыйДоговор[Реквизит.Имя] = ОбъектИсходного[Реквизит.Имя]; КонецЕсли; КонецЦикла; // Если нужно, можно задать новый код или другие реквизиты // НовыйДоговор.Код = НовыйКод; // Записываем новый элемент НовыйДоговор.Записать(); // Возвращаем ссылку на новый элемент Возврат НовыйДоговор.Ссылка; КонецФункции |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Запрос = Новый Структура("Код", "12345"); ИсходныйДоговор = Справочники.Договоры.Найти(Запрос); Если ИсходныйДоговор <> Неопределено Тогда НовыйДоговорСсылка = КопироватьДоговор(ИсходныйДоговор); Если НовыйДоговорСсылка <> Неопределено Тогда Сообщить("Договор успешно скопирован. Новая ссылка: " + НовыйДоговорСсылка); Иначе Сообщить("Ошибка копирования договора."); КонецЕсли; Иначе Сообщить("Исходный договор не найден."); КонецЕсли; |