// Копирует свойства Источника в Приемник. // // Параметры: // ДанныеПриемник - ТаблицаЗначений, СписокЗначений - объект-приемник. // ДанныеИсточник - ТаблицаЗначений, СписокЗначений - объект-источник. // СписокСвойствСтрока - Строка - перечень свойств приемника, разделенных запятой. // ИсключаяСвойстваСтрока - Строка - перечень свойств приемника, разделенных запятой. // Процедура ЗаполнитьЗначенияСвойств(ДанныеПриемник, ДанныеИсточник, СписокСвойствСтрока = "", ИсключаяСвойстваСтрока = "") СписокСвойств = Разложить(СписокСвойствСтрока); ИсключаяСвойства = Разложить(ИсключаяСвойстваСтрока); Если (ТипЗначенияСтр(ДанныеПриемник) = "ТаблицаЗначений") И (ТипЗначенияСтр(ДанныеИсточник) = "ТаблицаЗначений") Тогда Для Ном = 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; ТаблицаПриемник = СоздатьОбъект("ТаблицаЗначений"); ТаблицаПриемник.НоваяКолонка("Контрагент"); ТаблицаПриемник.НоваяКолонка("Договор"); ТаблицаПриемник.НоваяКолонка("Сумма"); ТаблицаПриемник.НоваяКолонка("Задолженность"); ТаблицаПриемник.НоваяСтрока(); ЗаполнитьЗначенияСвойств(ТаблицаПриемник, ТаблицаИсточник,, "Сумма,Договор");
Вступайте в нашу телеграмм-группу Инфостарт