Замена значений одной таблцы на значения другой
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Коллекция колонок в ТЗ есть. Там есть все имена колонок. Запрос динамический и вперед.
Но можно проще, но будет работать медленнее. Добавляете к ТЗ_1 "колонку3", которой точно нет в ТЗ_1. Как угодно её назовите. И в цикле сидите и меняйте значение в известной колонке2 на значение из добавленной "колонки3".
Но можно проще, но будет работать медленнее. Добавляете к ТЗ_1 "колонку3", которой точно нет в ТЗ_1. Как угодно её назовите. И в цикле сидите и меняйте значение в известной колонке2 на значение из добавленной "колонки3".
По-моему, если у вас не гигантские таблицы, то мучить запрос, да и вводить доп. колонки не надо.
Например, вот это вот на 100 000 записей дает у меня 2,6 сек. (Core i5 - 7400, RAM 16Gb, Win10).
Например, вот это вот на 100 000 записей дает у меня 2,6 сек. (Core i5 - 7400, RAM 16Gb, Win10).
Процедура Замер()
тз1 = Новый ТаблицаЗначений();
пСтрока = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная));
тз1.Колонки.Добавить("Колонка1", пСтрока);
тз1.Колонки.Добавить("Колонка2", пСтрока);
тз1.Колонки.Добавить("Колонка3", пСтрока);
тз2 = Новый ТаблицаЗначений();
тз2.Колонки.Добавить("Колонка1", пСтрока);
тз2.Колонки.Добавить("Колонка22", пСтрока);
тз2.Колонки.Добавить("Колонка33", пСтрока);
Для i = 0 По 100000 Цикл
новСтр = тз1.Добавить();
новСтр.Колонка1 = "Колонка1 " + i;
новСтр.Колонка2 = "Колонка2 " + i;
новСтр.Колонка3 = "Колонка3 " + i;
КонецЦикла;
ГЕН = Новый ГенераторСлучайныхЧисел();
Для i = 8 По 90000 Цикл
новСтр = тз2.Добавить();
новСтр.Колонка1 = "Колонка1 " + ГЕН.СлучайноеЧисло(8, 90000);
новСтр.Колонка22 = "Колонка22 " + i;
новСтр.Колонка33 = "Колонка33 " + i;
КонецЦикла;
тз2.Индексы.Добавить("Колонка1");
пМиллисек1 = ТекущаяУниверсальнаяДатаВМиллисекундах();
Сообщить("Начало " + ТекущаяДатаСеанса() + " мс= " + пМиллисек1);
Для каждого Стр Из тз1 Цикл
пСтрокаТЗ2 = тз2.Найти(Стр.Колонка1, "Колонка1");
Если пСтрокаТЗ2 <> Неопределено Тогда
Стр.Колонка2 = пСтрокаТЗ2.Колонка22;
КонецЕсли;
КонецЦикла;
пМиллисек2 = ТекущаяУниверсальнаяДатаВМиллисекундах();
Сообщить("Окончание " + ТекущаяДатаСеанса() + " мс=" + пМиллисек2);
Сообщить("Итого время выполнения, мс = " + (пМиллисек2 - пМиллисек1));
КонецПроцедуры
Показать
(8) Код как в 1С 7.7 получается. Ностальгия. Хотя код современных типовых на 1С 8.3 - это как раз 1С 77 чистой воды. Если смотреть на полезный код, а не на переходы и переливания с пустого в порожнее.
Не сильно принципиально, но в вашем варианте Колонка1 во второй таблице может повторятся. Как результат установится первое попавшееся значение из таблицы 2 по значению в Колонке1.
С другой стороны это даже хорошо. А то автор свои старания так ни разу и не показал. По факту Вы за него сделали всё. Ну, почти сделали.
Не сильно принципиально, но в вашем варианте Колонка1 во второй таблице может повторятся. Как результат установится первое попавшееся значение из таблицы 2 по значению в Колонке1.
С другой стороны это даже хорошо. А то автор свои старания так ни разу и не показал. По факту Вы за него сделали всё. Ну, почти сделали.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот