1С 8.3 Копирование данных документа из источника в приемник
Данные > Примеры кода 1С > 1С 8.3 Документы
Перейти в раздел примеры кода 1С 8.3:
Процедура предназначена для программного копирования содержимого реквизитов и/или табличных частей из одного документа (источника) в другой документ (приёмник). В параметры процедуры передаем документ-приёмник (из которого будем копировать реквизиты и/или табличные части) и документ-источник (куда будем вставлять реквизиты и/или табличные части).
В параметр СвойстваВключаемые можно передать строку с перечнем имён реквизитов (через запятую) которые будут скопированы, если параметр оставить пустым - то будут скопированы все реквизиты/табличные части.
В параметр СвойстваИсключаемые можно передать строку с перечнем имён реквизитов (через запятую) которые будут исключены (не будут скопированы), если параметр оставить пустым - то будут скопированы все реквизиты/табличные части без исключений.
Копирование данных документа из источника в приемник 1С 8.3:
&НаСервере
Процедура КопированиеДанныхДокумента(ДокументПриемник, ДокументИсточник, СвойстваВключаемые="", СвойстваИсключаемые="")
//МетаданныеДокумента = ДокументИсточник.Метаданные();
Попытка
МетаданныеДокумента = ДокументИсточник.Метаданные();
Исключение
МетаданныеДокумента = ДокументПриемник.Метаданные();
КонецПопытки;
ЗаполнитьЗначенияСвойств(ДокументПриемник, ДокументИсточник, СвойстваВключаемые, СвойстваИсключаемые);
Для Каждого ТаблЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
ИмяТаблЧасти = ТаблЧасть.Имя;
ДокументПриемник[ИмяТаблЧасти].Очистить();
Для Каждого ТекСтрИсточника Из ДокументИсточник[ИмяТаблЧасти] Цикл
НоваяСтрокаПриемника = ДокументПриемник[ИмяТаблЧасти].Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПриемника, ТекСтрИсточника, СвойстваВключаемые, СвойстваИсключаемые)
КонецЦикла
КонецЦикла
// Объект копируемого документа не записывается, действия по записи и проведению документа производятся вне процедуры
КонецПроцедуры
Процедура КопированиеДанныхДокумента(ДокументПриемник, ДокументИсточник, СвойстваВключаемые="", СвойстваИсключаемые="")
//МетаданныеДокумента = ДокументИсточник.Метаданные();
Попытка
МетаданныеДокумента = ДокументИсточник.Метаданные();
Исключение
МетаданныеДокумента = ДокументПриемник.Метаданные();
КонецПопытки;
ЗаполнитьЗначенияСвойств(ДокументПриемник, ДокументИсточник, СвойстваВключаемые, СвойстваИсключаемые);
Для Каждого ТаблЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
ИмяТаблЧасти = ТаблЧасть.Имя;
ДокументПриемник[ИмяТаблЧасти].Очистить();
Для Каждого ТекСтрИсточника Из ДокументИсточник[ИмяТаблЧасти] Цикл
НоваяСтрокаПриемника = ДокументПриемник[ИмяТаблЧасти].Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПриемника, ТекСтрИсточника, СвойстваВключаемые, СвойстваИсключаемые)
КонецЦикла
КонецЦикла
// Объект копируемого документа не записывается, действия по записи и проведению документа производятся вне процедуры
КонецПроцедуры
1
комментарий
Илья
03 май 2024
Оно конечно да... Вот только СвойстваВключаемые по умолчанию должны быть Неопределено, иначе по умолчанию ничего копироваться не будет, что не логично.
СвойстваИсключаемые тоже не всегда будут работать, потому что если указать, например "Номер" (ну, для документа) то при копировании табличных частей вылезет исключение - в ТЧ "номера" нет.
Как скелет для своей процедуры - хорошо, но это не готовый кусок кода.
СвойстваИсключаемые тоже не всегда будут работать, потому что если указать, например "Номер" (ну, для документа) то при копировании табличных частей вылезет исключение - в ТЧ "номера" нет.
Как скелет для своей процедуры - хорошо, но это не готовый кусок кода.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник