Как объединить две таблицы значений в системе 1С:Предприятие 8?

Слияние, объединение двух таблиц значений в одну в системе 1C8

Здравствуйте, уважаемые читатели! Эта одна из статей, касающаяся темы программирования с таблицей значений в системе 1С:Предприятие 8. В этой статье приведена функция для слияния двух таблиц значений в одну с неповторяющимися строками.


Слияние, объединение двух таблиц значений в одну в системе 1C8

Функция СлитьТЗ(ТЗ1, ТЗ2, КолонкаПоиска) возвращает таблицу значений в которой обединены все элементы
из таблиц значений ТЗ1 и ТЗ2 по полю КолонкаПоиска.

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

Напрмер, создадим две таблицы значений ТаблицаЗначений1 и ТаблицаЗначений2 и заполним их значениями.

	ТаблицаЗначений1 = Новый ТаблицаЗначений;
	ТаблицаЗначений2 = Новый ТаблицаЗначений;

// Создать нужные колонки.
ТаблицаЗначений1.Колонки.Добавить(«НомерПоступления»);
ТаблицаЗначений1.Колонки.Добавить(«НомерДокумента»);

// Добавить новую строку и задать значения в колонках таблицы.
НоваяСтрока = ТаблицаЗначений1.Добавить();
НоваяСтрока.НомерПоступления = «08090/0053975»;
НоваяСтрока.НомерДокумента = «23»;

// Добавить новую строку и задать значения в колонках таблицы.
НоваяСтрока = ТаблицаЗначений1.Добавить();
НоваяСтрока[«НомерПоступления»] = «GAI0363031»;
НоваяСтрока[«НомерДокумента»] = «24»;

НоваяСтрока = ТаблицаЗначений1.Добавить();
НоваяСтрока[«НомерПоступления»] = «GAI0363032»;
НоваяСтрока[«НомерДокумента»] = «25»;

// Создать нужные колонки.
ТаблицаЗначений2.Колонки.Добавить(«НомерПоступления»);
ТаблицаЗначений2.Колонки.Добавить(«НомерДокумента»);

// Добавить новую строку и задать значения в колонках таблицы.
НоваяСтрока = ТаблицаЗначений2.Добавить();
НоваяСтрока[«НомерПоступления»] = «GAI0363031»;
НоваяСтрока[«НомерДокумента»] = «24»;

НоваяСтрока = ТаблицаЗначений2.Добавить();
НоваяСтрока[«НомерПоступления»] = «GAI0363032»;
НоваяСтрока[«НомерДокумента»] = «251»;

НоваяСтрока = ТаблицаЗначений2.Добавить();
НоваяСтрока[«НомерПоступления»] = «GAI0363032»;
НоваяСтрока[«НомерДокумента»] = «205»;

// Создадим новую обработку и вставим на форму
// три табличных поля, затем отобразим на них наши таблицы
ЭлементыФормы.ТабличноеПоле1.Значение = ТаблицаЗначений1;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

ЭлементыФормы.ТабличноеПоле2.Значение = ТаблицаЗначений2;
ЭлементыФормы.ТабличноеПоле2.СоздатьКолонки();

ЭлементыФормы.ТабличноеПоле3.Значение =
СлитьТЗ(ТаблицаЗначений1, ТаблицаЗначений2, «НомерДокумента»);
ЭлементыФормы.ТабличноеПоле3.СоздатьКолонки();

Рзультат ТаблицаЗначений1:

НомерПоступления НомерДокумента
08090/0053975 23
GAI0363031 24
GAI0363032 25

Рзультат ТаблицаЗначений2:

НомерПоступления НомерДокумента
GAI0363031 24
GAI0363032 251
GAI0363032 205

Рзультат объединения:

НомерПоступления НомерДокумента
08090/0053975 23
GAI0363031 24
GAI0363032 25
GAI0363032 251
GAI0363032 205

Как видим, после выполнения этой функции произошло объединение двух таблиц значений. Хотя в таблицах встречаются как разные, так и одинаковые элементы в результирующей таблице совпадающие элементы не повторяются.

Этот блог читают уже более 3000 человек
- читай и ТЫ!
2 ответы

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *