СкопироватьДокумент, Копирование документа

Razlomalo 19 1 1
// Выполняет копирование документа.
//
// Параметры:
//  Приемник					 - Объект	 - Документ, в который копируются данные.
//  Источник					 - Ссылка	 - Документ, из которого копируются данные.
//  ИсключаемыеСвойства			 - Строка	 - Имена свойств, разделенные запятыми, которые необходимо исключить из заполнения.
//  ИсключаемыеТабличныеЧасти	 - Строка	 - Имена табличных частей, разделенные запятыми, которые необходимо исключить из заполнения.
//  ДанныеЗаполнения			 - Структура - Значение параметра процедуры ОбработкаЗаполнения, используется как основание для заполнения документа.
//
Процедура СкопироватьДокумент(Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт
	
	ДанныеДокумента = Источник.Скопировать();
	МетаданныеДокумента = Приемник.Метаданные();
	
	ЗаполнитьЗначенияСвойств(Приемник, ДанныеДокумента, , ИсключаемыеСвойства);
	
	// ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
	
	ЭлектронныеТрудовыеКнижкиРасширенный.ПриЗаполненииДокументаИсправления(Приемник, Источник);
	
	// Конец ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
	
	Если ИсключаемыеТабличныеЧасти = "" Тогда
		ИменаИсключаемыхТабличныхЧастей = Новый Массив;
	Иначе
		ИменаИсключаемыхТабличныхЧастей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаемыеТабличныеЧасти, , , Истина);
	КонецЕсли;
	
	Для каждого ТабличнаяЧастьДокумента Из МетаданныеДокумента.ТабличныеЧасти Цикл
		Если ИменаИсключаемыхТабличныхЧастей.Найти(ТабличнаяЧастьДокумента.Имя) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Для Каждого СтрокаДокумента Из Источник[ТабличнаяЧастьДокумента.Имя] Цикл
			НоваяСтрока = Приемник[ТабличнаяЧастьДокумента.Имя].Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДокумента);
		КонецЦикла;
	КонецЦикла;
	
	Если ДанныеЗаполнения = Неопределено Тогда
		ДанныеЗаполнения = Новый Структура;
		ИсправлениеВТекущемПериоде = Ложь;
	Иначе
		ИсправлениеВТекущемПериоде = ДанныеЗаполнения.Свойство("ДопустимоИсправлениеВТекущемПериоде")
			И ДанныеЗаполнения.ДопустимоИсправлениеВТекущемПериоде
			И ВозможноИсправлениеТекущимПериодом(Источник);
	КонецЕсли;

	Если Не ИсправлениеВТекущемПериоде Тогда
		// Период регистрации документа исправления необходимо увеличить.
		Если ДанныеЗаполнения.Свойство("ИмяПериодРегистрации") Тогда
			ИмяПериодРегистрации = ДанныеЗаполнения.ИмяПериодРегистрации;
			ПериодРегистрацииИсправленногоДокумента = ДанныеЗаполнения.ПериодРегистрацииИсправленногоДокумента;
		Иначе
			МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("ПериодРегистрации");
			Если МетаданныеРеквизита = Неопределено Тогда
				МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("МесяцНачисления");
			КонецЕсли;
			
			Если МетаданныеРеквизита <> Неопределено Тогда
				ИмяПериодРегистрации = МетаданныеРеквизита.Имя;
				ПериодРегистрацииИсправленногоДокумента = ДанныеДокумента[ИмяПериодРегистрации];
			Иначе
				ИмяПериодРегистрации = Неопределено;
				ПериодРегистрацииИсправленногоДокумента = Дата(1, 1, 1);
			КонецЕсли;
		КонецЕсли;
		
		Если ИмяПериодРегистрации <> Неопределено Тогда
			Значения = Новый Структура("Месяц");
			ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(Значения);
			
			Приемник[ИмяПериодРегистрации] = Макс(ДобавитьМесяц(ПериодРегистрацииИсправленногоДокумента, 1), Значения.Месяц);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
0

См. также

Выполнить копирование документа

Скопировать содержимое документа из Источник в Приемник

Функции копирования настроек компоновки данных

СкопироватьСтруктуру (БСП)

СкопироватьСоответствие (БСП)

СкопироватьМассив (БСП)

СкопироватьРекурсивно (БСП)

СкопироватьСписокЗначений (БСП)

Копирование файлов

Модератору