Объединить Таблицы значений

1. user1816391 15.01.24 16:31 Сейчас в теме
Привет, есть вот такие 2 таблицы, мне нужно их объединить, но чтобы если значения во второй идут несколько раз одинаковыми, на этой строке значение должно дублироваться.
Пример:

Таблица 1:

| Серия | Характеристика | Цена|
|-------|-----------------|
| 1 | Характеристика1 | 100
| 2 | Характеристика2 | 200
| 3 | Характеристика3 | 300


Таблица 2

| Серия | Характеристика |Количество|
|-------|-----------------|
| 1 | Характеристика1 | 1
| 1 | Характеристика1 | 1
| 2 | Характеристика2 | 2

Итоговая таблица:

| Серия | Характеристика |Цена| Количество|
|-------|-----------------|
| 1 | Характеристика1 |100 | 1
| 1 | Характеристика1 |100 | 1
| 2 | Характеристика2 |200|2

Как это можно реализовать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 15.01.24 16:47 Сейчас в теме
(1)Соединить таблицы запросом.
3. user1816391 15.01.24 16:48 Сейчас в теме
4. Sashares 33 15.01.24 16:49 Сейчас в теме
(3)Используйте цикл.
Тут как бы не так много вариантов.
7. Timur.V 82 15.01.24 17:05 Сейчас в теме
(3)
Пиши два раза цикл Для каждого вложенный.
будет
Для каждого СтрокаТаб Из Табл1 Цикл
Для каждого СтрокаТаблицы из Табл2 Цикл

....

Если Таблицы отсортированы предварительно, тогда получиться.
5. user1816391 15.01.24 16:50 Сейчас в теме
(4) Это понятно) Меня интересует сам алгоритм далее. Возможно стоит сделать через соответствие или ещё как-то..
6. Sashares 33 15.01.24 16:52 Сейчас в теме
(5) Добавить колонку с ценой в таблицу 2.
Обходить в цикле таблицу 2.
В цикле по текущей строке таблицы 2 искать нужную строку в таблице 1.
По найденной строке заполнить в текущей строке таблицы 2 колонку с ценой.
Какие тут сложности?
8. user1816391 15.01.24 17:10 Сейчас в теме
(7)
Функция ОбъединитьТаблицы(Таблица1, Таблица2)   
		Таблица2.Колонки.Добавить("Получатель");
	
	Для Каждого Элемент2 Из Таблица2 Цикл
		Для Каждого Элемент1 Из Таблица1 Цикл
			Если Элемент1["Серия"] = Элемент2["Серия"] И Элемент1["Характеристика"] = Элемент2["Характеристика"] Тогда
				Элемент2["Получатель"] = Элемент1["Получатель"];
				Прервать; // Прерываем цикл поиска, так как найден нужный элемент
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат Таблица2;
КонецФункции
Показать


Что-то типо того написал
9. Timur.V 82 15.01.24 17:17 Сейчас в теме
(8)
До циклов нужно отсортировать списки, наверно.
А внутри циклов, по условию, кидать в третью таблицу.

Смотрите сами, возможно мои советы для вас избыточны.
12. Sashares 33 15.01.24 17:24 Сейчас в теме
(8)Лучше конечно поиск, чем перебор строк.
Для поиска по нескольким полям используется метод таблицы НайтиСтроки.
10. user1816391 15.01.24 17:21 Сейчас в теме
(9) да, списки отсортировал. Пока в 3 таблицу кидать не буду, чуть позже это сделаю, для данного этапа хватает и этого
11. Said-We 15.01.24 17:24 Сейчас в теме
(1) Характеристика 3 куда делась?
Если такие данные на входе, то на выходе что?

Таблица 1:

| Серия | Характеристика | Цена|
|-------|-----------------|
| 1 | Характеристика1 | 110
| 2 | Характеристика1 | 120
| 3 | Характеристика2 | 200
| 4 | Характеристика3 | 300


Таблица 2

| Серия | Характеристика |Количество|
|-------|-----------------|
| 1 | Характеристика1 | 11
| 2 | Характеристика1 | 12
| 3 | Характеристика2 | 21

(12) Лучше запрос и не думать об алгоритме. :-)
(13) Цена у Характеристика3 есть - количества нет.
13. Sashares 33 15.01.24 17:32 Сейчас в теме
(11)
Характеристика 3 куда делась?

Да там и не цена заполняется)) Магия
14. I_train 15.01.24 18:08 Сейчас в теме
Есть типовой метод, как то так называется
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник);
15. Said-We 15.01.24 18:11 Сейчас в теме
(14) А там случайно таблицы не одинаковые должны быть по колонкам? У Автора колонки разные.
Прикрепленные файлы:
user1816391; +1 Ответить
16. I_train 15.01.24 23:49 Сейчас в теме
(15)Да, я ошибся, удалить не смог
user1816391; +1 Ответить
17. user1816391 16.01.24 08:30 Сейчас в теме
18. user1816391 16.01.24 12:35 Сейчас в теме
(9) а вот если записывать в 3 таблицу, то как это лучше сделать?
Просто бывает такое, когда в таблице 1 больше значений, чем в 2 и наоборот. А должно браться большее значение в итоговой таблице
19. Vlan 36 16.01.24 15:10 Сейчас в теме
(18)Сравните Количество() одной таблицы с другой
20. Said-We 16.01.24 15:14 Сейчас в теме
(18) Запросом делается через объединить и свернуть.
Какая разница где больше? В каждой из таблиц могут быть уникальные ключевые значения, которых нет в соседней таблице. И не важно больше записей или меньше или даже равное количество строк.
21. Vlan 36 17.01.24 07:18 Сейчас в теме
Если предположить, что в первой таблице собраны цены для характеристик, то возможен и такой вариант (сильно упрощенный):
Таб1.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
        Для каждого Строка Из Таб2 Цикл 
    	ЗаполнитьЗначенияСвойств(Таб1.Добавить(), Строка); 
	КонецЦикла;
	Таб1.Сортировать("Серия,Характеристика,Цена");
	Цена=0;
	Хар="";
	Для сч=1-Таб1.Количество()По 0 Цикл
		Стр=Таб1[-сч];
		Если ЗначениеЗаполнено(Стр.Цена) Тогда
			Цена=Стр.Цена;
			Хар=Стр.Характеристика;
			Таб1.Удалить(Стр);
		Иначе
			Если Стр.Характеристика=Хар Тогда
				Стр.Цена=Цена;
			КонецЕсли;
		КонецЕсли;
         КонецЦикла;
Показать
22. by_1Cnik 240 17.01.24 14:41 Сейчас в теме
// Параметры:
//  ТЗ1п - ТаблицаЗначений     - в эту таблицу, в начало (а не в конец) будут добавлены строки из ТЗ2в
//  ТЗ2в - ТаблицаЗначений     - таблица, строками которой требуется дополнить значение из параметра ТЗ1п
//
Процедура ДополнитьТЗ1ИзТЗ2(ТЗ1п, ТЗ2в) Экспорт

   Для Индекс = 1 По ТЗ2в.Количество() Цикл
       ТЗ1п.Вставить(0);
   КонецЦикла;

   Для Индекс = 0 По ТЗ2в.Колонки.Количество() - 1 Цикл
       ТЗ1п.ЗагрузитьКолонку(ТЗ2в.ВыгрузитьКолонку(Индекс), Индекс);
   КонецЦикла;

КонецПроцедуры
Показать
23. Vlan 36 17.01.24 14:56 Сейчас в теме
(22) А это точно работает?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот