ещё вариант
Функция ПеременнаяКонтекста(Конт, ИмяПеременной) Экспорт
ТекстМодуля = "
|Функция ЗначениеПеременной(Источник)
| Возврат Источник."+ИмяПеременной+";
|КонецФункции
|";
Модуль = Фаб.Модуль(Конт, ТекстМодуля);
Возврат Модуль.ЗначениеПеременной(Конт);
КонецФункции
Функция УстановитьПеременную(Конт, ИмяПеременной, Значение) Экспорт
ТекстМодуля = "
|Функция УстЗнач(з)
| "+ИмяПеременной+" = з;
| Возврат "+ИмяПеременной+";
|КонецФункции
|";
Модуль = Фаб.Модуль(Конт, ТекстМодуля);
Возврат Модуль.УстЗнач(Значение);
КонецФункции
в качестве рыбы для копирования всякого
Процедура КопироватьРеквизиты_Значение(Приемник, Имя, Зн, фТолькоНеПустые, фТолькоПустыеПриемника)
Если фТолькоНеПустые = 1 Тогда
Если ПустоеЗначение(Зн) = 1 Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если фТолькоПустыеПриемника = 1 Тогда
ЗнП = ПеременнаяКонтекста(Приемник, Имя);
Если ПустоеЗначение(ЗнП) = 0 Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если ТипЗначенияСтр(Приемник) = "СписокЗначений" Тогда
Приемник.Установить(Имя, Зн);
Иначе
Попытка
УстановитьПеременную(Приемник, Имя, Зн);
Исключение
Если глФлагОтладки = 1 Тогда
Сообщить("Копир.рекв.: ошибочка: в "+Приемник+" нет "+Имя);
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Процедура КопироватьРеквизиты(Приемник, Источник, стрРекв, фТолькоНеПустые = 0, фТолькоПустыеПриемника = 0) Экспорт
Если ТипЗначенияСтр(стрРекв) = "СписокЗначений" Тогда
сзРекв = стрРекв;
ИначеЕсли стрРекв = "*" Тогда
сзРекв = СоздатьОбъект("СписокЗначений");
ТипИст = ТипЗначенияСтр(Источник);
Если ТипИст = "СписокЗначений" Тогда
Для н = 1 По Источник.РазмерСписка() Цикл
Имя = "";
Источник.ПолучитьЗначение(н, Имя);
сзРекв.ДобавитьЗначение(Имя);
КонецЦикла;
ИначеЕсли ТипИст = "ТаблицаЗначений" Тогда
Для н = 1 По Источник.КоличествоКолонок() Цикл
Имя = "";
Имя = Источник.ПолучитьПараметрыКолонки(н);
сзРекв.ДобавитьЗначение(Имя);
КонецЦикла;
ИначеЕсли ТипИст = "Структура" Тогда
Для н = 1 По Источник.Количество() Цикл
Имя = "";
Источник.Получить(н, Имя);
сзРекв.ДобавитьЗначение(Имя);
КонецЦикла;
КонецЕсли;
Иначе
сзРекв = СтрокуВСписок(стрРекв, ",", 1);
КонецЕсли;
Если ТипЗначенияСтр(Источник) = "СписокЗначений" Тогда
Для нИст = 1 По Источник.РазмерСписка() Цикл
Имя = "";
Зн = Источник.ПолучитьЗначение(нИст, Имя);
Если стрРекв <> "" Тогда
Если сзРекв.НайтиЗначение(Имя) = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КопироватьРеквизиты_Значение(Приемник, Имя, Зн, фТолькоНеПустые, фТолькоПустыеПриемника);
КонецЦикла;
Иначе
Для н = 1 По сзРекв.РазмерСписка() Цикл
Имя = сзРекв.ПолучитьЗначение(н);
Зн = ПеременнаяКонтекста(Источник, Имя);
КопироватьРеквизиты_Значение(Приемник, Имя, Зн, фТолькоНеПустые, фТолькоПустыеПриемника);
КонецЦикла;
КонецЕсли;
КонецПроцедуры