Перенести коллекцию КлючИЗначение

SDV 101 4 10

Дополняет коллекцию КлючИЗначение Приемник (Структура, Соответствие) из коллекции Источник. Можно использовать при копировании Структура или Соответствие.

// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - Заменять [Значение] при наличии [Ключ] в [Приемник], иначе пропустить
Процедура ПеренестиКлючиИЗначения(Приемник, Источник, Заменять = Истина) Экспорт     
	
	ТипПриемника = ТипЗнч(Приемник);

	Для каждого Элемент из Источник Цикл
		
		ЕстьКлюч = Ложь;
				
		Если ТипПриемника = Тип("Соответствие") Тогда
			ЕстьКлюч = Приемник.Получить(Элемент.Ключ) <> Неопределено;
		ИначеЕсли ТипПриемника = Тип("Структура") Тогда  
			ЕстьКлюч = Приемник.Свойство(Элемент.Ключ);
		КонецЕсли;
		
		Если ЕстьКлюч И Заменять тогда
			Приемник[Элемент.Ключ] = Элемент.Значение
		Иначе
			Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
3

Комментарии

Дмитрий Титов
#1, 22 апреля 2020 05:04

  1. Предлагаю переименовать параметри в соответствии со стилем 1С, а именно "Цель" переименовать в "Приемник".
  2. Если цель - соответствие эта функция работать не будет, т.к. у соответствия нет метода "Свойство".
  3. Заменять надо вынести вперед в условии

Общее предложение к FastCode - обязательно к функциям прикладывать модульные тесты


bolsun
#2, ред. 23 апреля 2020 11:56

(1) Дмитрий Титов, вы можете в комментарии добавить свою версию шаблона и пользователи смогут выбрать какой им больше подходит.

// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - При наличии переносимого свойства в Приемнике, заменить значение. По умолчанию Истина

Процедура ПеренестиКлючиИЗначения(Приемник, Источник, Заменять = Истина)     
     Для каждого Элемент из Источник Цикл
          Если Заменять И Приемник.Свойство(Элемент.Ключ) Тогда
               Приемник[Элемент.Ключ] = Элемент.Значение
          Иначе
               Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
          КонецЕсли;
     КонецЦикла;
КонецПроцедуры


SDV
#3, 23 апреля 2020 11:30

(1) Дмитрий Титов, спасибо за конструктивную критику. Справедливые замечания.


См. также

ПеренестиЗначенияИзРеквизитовФормыВОбъект (БСП)

ДопустимыеТипыЗначенийКлючейДоступа (БСП)

ТаблицаЗначенийВМассив

Функции преобразования ЗаписьJSON

ЗаполнитьМассивУникальнымиЗначениями

СтруктураЗначенийПолей (БСП)

Возвращает сумму значений в поле [ИмяПоля] всех элементов коллекции

УдалитьИзФиксированногоСоответствия (БСП)

Модератору