Воспользуйтесь функцией
ЗаполнитьЗначенияСвойств(). Она имеет тот же синтаксис, что и одноименная в 1С:Предприятии 8.х. Позволяет использовать в качестве
Источника и
Приемника список значений и (или)
таблицу значений и сократить большой кусок кода буквально до
пары строк.
// Копирует свойства Источника в Приемник.
//
// Параметры:
// ДанныеПриемник - ТаблицаЗначений, СписокЗначений - объект-приемник.
// ДанныеИсточник - ТаблицаЗначений, СписокЗначений - объект-источник.
// СписокСвойствСтрока - Строка - перечень свойств приемника, разделенных запятой.
// ИсключаяСвойстваСтрока - Строка - перечень свойств приемника, разделенных запятой.
//
Процедура ЗаполнитьЗначенияСвойств(ДанныеПриемник, ДанныеИсточник, СписокСвойствСтрока = "", ИсключаяСвойстваСтрока = "")
СписокСвойств = Разложить(СписокСвойствСтрока);
ИсключаяСвойства = Разложить(ИсключаяСвойстваСтрока);
Если (ТипЗначенияСтр(ДанныеПриемник) = "ТаблицаЗначений")
И (ТипЗначенияСтр(ДанныеИсточник) = "ТаблицаЗначений") Тогда
Для Ном = 1 По ДанныеПриемник.КоличествоКолонок() Цикл
Колонка = ДанныеПриемник.ПолучитьПараметрыКолонки(Ном);
Если (ПустоеЗначение(СписокСвойствСтрока) = 0)
И (СписокСвойств.Принадлежит(Колонка) = 0) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(ИсключаяСвойстваСтрока) = 0)
И (ИсключаяСвойства.Принадлежит(Колонка) = 1) Тогда
Продолжить;
КонецЕсли;
Попытка
Значение = ДанныеИсточник.ПолучитьЗначение(ДанныеИсточник.НомерСтроки, Колонка);
ДанныеПриемник.УстановитьЗначение(ДанныеПриемник.НомерСтроки, Колонка, Значение);
Исключение
КонецПопытки;
КонецЦикла;
ИначеЕсли (ТипЗначенияСтр(ДанныеПриемник) = "СписокЗначений")
И (ТипЗначенияСтр(ДанныеИсточник) = "ТаблицаЗначений") Тогда
Для Ном = 1 По ДанныеИсточник.КоличествоКолонок() Цикл
Колонка = ДанныеИсточник.ПолучитьПараметрыКолонки(Ном);
Если (ПустоеЗначение(СписокСвойствСтрока) = 0)
И (СписокСвойств.Принадлежит(Колонка) = 0) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(ИсключаяСвойстваСтрока) = 0)
И (ИсключаяСвойства.Принадлежит(Колонка) = 1) Тогда
Продолжить;
КонецЕсли;
Значение = ДанныеИсточник.ПолучитьЗначение(ДанныеИсточник.НомерСтроки, Колонка);
ДанныеПриемник.Установить(Колонка, Значение);
КонецЦикла;
ИначеЕсли (ТипЗначенияСтр(ДанныеПриемник) = "ТаблицаЗначений")
И (ТипЗначенияСтр(ДанныеИсточник) = "СписокЗначений") Тогда
Для Ном = 1 По ДанныеИсточник.РазмерСписка() Цикл
Колонка = "";
Значение = ДанныеИсточник.ПолучитьЗначение(Ном, Колонка);
Если (ПустоеЗначение(СписокСвойствСтрока) = 0)
И (СписокСвойств.Принадлежит(Колонка) = 0) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(ИсключаяСвойстваСтрока) = 0)
И (ИсключаяСвойства.Принадлежит(Колонка) = 1) Тогда
Продолжить;
КонецЕсли;
Попытка
ДанныеПриемник.УстановитьЗначение(ДанныеПриемник.НомерСтроки, Колонка, Значение);
Исключение
КонецПопытки;
КонецЦикла;
ИначеЕсли (ТипЗначенияСтр(ДанныеПриемник) = "СписокЗначений")
И (ТипЗначенияСтр(ДанныеИсточник) = "СписокЗначений") Тогда
Для Ном = 1 По ДанныеИсточник.РазмерСписка() Цикл
Ключ = "";
Значение = ДанныеИсточник.ПолучитьЗначение(Ном, Ключ);
Если ПустоеЗначение(Ключ) = 1 Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(СписокСвойствСтрока) = 0)
И (СписокСвойств.Принадлежит(Ключ) = 0) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(ИсключаяСвойстваСтрока) = 0)
И (ИсключаяСвойства.Принадлежит(Ключ) = 1) Тогда
Продолжить;
КонецЕсли;
ДанныеПриемник.Установить(Ключ, Значение);
КонецЦикла;
КонецЕсли;
КонецПроцедуры // ЗаполнитьЗначенияСвойств
Чтобы использовать эту процедуру, нужна еще и функция, которая разложит строку с разделителями в список значений. Вот ее текст:
Функция Разложить(Знач Стр, Разделитель = ",")
СЗ = СоздатьОбъект("СписокЗначений");
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(СокрЛП(Стр));
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(СокрЛП(Лев(Стр,Поз-1)));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(СокрЛП(Стр));
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(СокрЛП(Лев(Стр,Поз-1)));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
Пример:ТаблицаИсточник = СоздатьОбъект("ТаблицаЗначений");
ТаблицаИсточник.НоваяКолонка("Контрагент");
ТаблицаИсточник.НоваяКолонка("Договор");
ТаблицаИсточник.НоваяКолонка("Сумма");
ТаблицаИсточник.НоваяСтрока();
ТаблицаИсточник.Контрагент = "Иванов";
ТаблицаИсточник.Договор = "Договор №1 от 01.02.2014";
ТаблицаИсточник.Сумма = 1000;
ТаблицаПриемник = СоздатьОбъект("ТаблицаЗначений");
ТаблицаПриемник.НоваяКолонка("Контрагент");
ТаблицаПриемник.НоваяКолонка("Договор");
ТаблицаПриемник.НоваяКолонка("Сумма");
ТаблицаПриемник.НоваяКолонка("Задолженность");
ТаблицаПриемник.НоваяСтрока();
ЗаполнитьЗначенияСвойств(ТаблицаПриемник, ТаблицаИсточник,, "Сумма,Договор");