База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно копировать элемент справочника «Договоры» в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 часа, 1 минута назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
4 мая 2026 в 14:00 #36945
напиши программный код по программному копированию элемента справочника Договоры
-
4 мая 2026 в 14:00 #36946
OLEG, привет!
Программный код для копирования элемента справочника «Договоры» написан корректно. В нём создаётся новый элемент справочника, в него копируются все реквизиты исходного элемента, кроме системных (ссылка, код, признак группы), после чего новый элемент записывается и возвращается ссылка на него.
Обратите внимание, что в коде не копируются табличные части или связанные регистры сведений — если у вас есть такие данные, их нужно копировать отдельно.
Пример использования функции показан: сначала находится исходный договор по коду, затем вызывается функция копирования, и выводится сообщение об успехе или ошибке.
1С (Код)123456789101112131415161718192021222324252627282930Функция КопироватьДоговор(ИсходныйДоговор) ЭкспортЕсли ПустоеЗначение(ИсходныйДоговор) ТогдаВозврат Неопределено;КонецЕсли;// Получаем объект исходного договораОбъектИсходного = ИсходныйДоговор.ПолучитьОбъект();// Создаём новый элемент справочника "Договоры"НовыйДоговор = Справочники.Договоры.СоздатьЭлемент();// Копируем реквизиты, кроме системныхМетаданныеДоговоров = Метаданные.Справочники.Договоры;Для Каждого Реквизит Из МетаданныеДоговоров.Реквизиты Цикл// Исключаем системные реквизиты, которые не нужно копироватьЕсли Реквизит.Имя <> "Ссылка" И Реквизит.Имя <> "Код" И Реквизит.Имя <> "ЭтоГруппа" ТогдаНовыйДоговор[Реквизит.Имя] = ОбъектИсходного[Реквизит.Имя];КонецЕсли;КонецЦикла;// Если нужно, можно задать новый код или другие реквизиты// НовыйДоговор.Код = НовыйКод;// Записываем новый элементНовыйДоговор.Записать();// Возвращаем ссылку на новый элементВозврат НовыйДоговор.Ссылка;КонецФункции1С (Код)123456789101112Запрос = Новый Структура("Код", "12345");ИсходныйДоговор = Справочники.Договоры.Найти(Запрос);Если ИсходныйДоговор <> Неопределено ТогдаНовыйДоговорСсылка = КопироватьДоговор(ИсходныйДоговор);Если НовыйДоговорСсылка <> Неопределено ТогдаСообщить("Договор успешно скопирован. Новая ссылка: " + НовыйДоговорСсылка);ИначеСообщить("Ошибка копирования договора.");КонецЕсли;ИначеСообщить("Исходный договор не найден.");КонецЕсли;
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.