Создал обработку сравнения двух тз по отбору и если запускать обработку с отладчиком, то он быстро сравнивает, а если без отладчика, то он долго стоит загружает, в чем может быть проблема ?
МассивУд1 = Новый массив();
МассивУд2 = Новый массив();
Для каждого стр из ТЗВД Цикл
Отбор = Новый Структура();
Отбор.Вставить("Комментарий",стр.Ссылка);
Строки=ТабЗнач.НайтиСтроки(Отбор);
Если Строки.Количество() = 1 Тогда
МассивУд1.Добавить(стр);
МассивУд2.Добавить(Строки[0]);
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из МассивУд1 Цикл
ТЗВД.Удалить(Строка);
КонецЦикла;
Для Каждого Строка Из МассивУд2 Цикл
ТабЗнач.Удалить(Строка);
КонецЦикла;
ПоказатьПо теме из базы знаний
Найденные решения
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:
Тогда так:
МассивУд1 = Новый массив();
МассивУд2 = Новый массив();
ТаблицаДляПоиска = ТабЗнач.Выгрузить();
ДобавленныйИндекс = ТаблицаДляПоиска.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
Для каждого стр из ТЗВД Цикл
Отбор = Новый Структура();
Отбор.Вставить("Комментарий",стр.Ссылка);
Строки=ТаблицаДляПоиска.НайтиСтроки(Отбор);
Если Строки.Количество() = 1 Тогда
МассивУд1.Добавить(стр);
МассивУд2.Добавить(Строки[0]);
КонецЕсли;
КонецЦикла;
ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса
Для Каждого Строка Из МассивУд1 Цикл
ТЗВД.Удалить(Строка);
КонецЦикла;
Для Каждого Строка Из МассивУд2 Цикл
ТаблицаДляПоиска.Удалить(Строка);
КонецЦикла;
ТабЗнач.Загрузить(ТаблицаДляПоиска);
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(15)
Попробуйте так:
Попробуйте так:
МассивУд1 = Новый массив();
МассивУд2 = Новый массив();
ДобавленныйИндекс = ТабЗнач.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
Для каждого стр из ТЗВД Цикл
Отбор = Новый Структура();
Отбор.Вставить("Комментарий",стр.Ссылка);
Строки=ТабЗнач.НайтиСтроки(Отбор);
Если Строки.Количество() = 1 Тогда
МассивУд1.Добавить(стр);
МассивУд2.Добавить(Строки[0]);
КонецЕсли;
КонецЦикла;
ТабЗнач.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса
Для Каждого Строка Из МассивУд1 Цикл
ТЗВД.Удалить(Строка);
КонецЦикла;
Для Каждого Строка Из МассивУд2 Цикл
ТабЗнач.Удалить(Строка);
КонецЦикла;
Показать
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:
Тогда так:
МассивУд1 = Новый массив();
МассивУд2 = Новый массив();
ТаблицаДляПоиска = ТабЗнач.Выгрузить();
ДобавленныйИндекс = ТаблицаДляПоиска.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
Для каждого стр из ТЗВД Цикл
Отбор = Новый Структура();
Отбор.Вставить("Комментарий",стр.Ссылка);
Строки=ТаблицаДляПоиска.НайтиСтроки(Отбор);
Если Строки.Количество() = 1 Тогда
МассивУд1.Добавить(стр);
МассивУд2.Добавить(Строки[0]);
КонецЕсли;
КонецЦикла;
ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса
Для Каждого Строка Из МассивУд1 Цикл
ТЗВД.Удалить(Строка);
КонецЦикла;
Для Каждого Строка Из МассивУд2 Цикл
ТаблицаДляПоиска.Удалить(Строка);
КонецЦикла;
ТабЗнач.Загрузить(ТаблицаДляПоиска);
Показать
(12)
p.s. код написан от фонаря, так что нужен допил))) но думаю что суть передал
так же не знаю тип сравнивания... возможно нужно будет преобразовать в строку с определенным количество символов... только не в сравнении, а там где временная таблица (типа "|ВЫРАЗИТЬ(Таблица.Комментарий КАК СТРОКА(1000) КАК Комментарий")
возможно добавить индексацию для временных таблиц, которые будут сравниваться
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗВД", ТЗВД);
Запрос.УстановитьПараметр("ТабЗнач", ТабЗнач);
Запрос.Текст =
"ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТЗВД
|ИЗ
|&ТЗВД КАК Таблица
|;
|ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Комментарий КАК Комментарий
|ПОМЕСТИТЬ ТабЗнач
|ИЗ
|&ТабЗначКАК Таблица
|;
|ВЫБРАТЬ
|ТЗВД.НомерСтроки КАК НомерСтроки1,
|МАКСИМУМ(ТабЗнач.НомерСтроки) КАК НомерСтроки2
|ПОМЕСТИТЬ Таблица
|ИЗ
|ТЗВД
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабЗнач
|ПО ТЗВД.Ссылка = ТабЗнач.Комментарий
|СГРУППИРОВАТЬ ПО
|ТЗВД.НомерСтроки
|ИМЕЮЩИЕ
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТабЗнач.НомерСтроки) = 1
|;
|ВЫБРАТЬ
|НомерСтроки1 КАК НомерСтроки,
|1 КАК id
|ИЗ
|Таблица
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|НомерСтроки2 КАК НомерСтроки,
|2 КАК id
|ИЗ
|Таблица
|УПОРЯДОЧИТЬ ПО
|НомерСтроки УБЫВ
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующая() Цикл
Если Выборка.id = 1 Тогда
Таб = ТЗВД;
Иначе
Таб = ТабЗнач;
КонецЕсли;
Таб.Удалить(Выборка.НомерСтроки-1];
КонецЦикла;
Показатьp.s. код написан от фонаря, так что нужен допил))) но думаю что суть передал
так же не знаю тип сравнивания... возможно нужно будет преобразовать в строку с определенным количество символов... только не в сравнении, а там где временная таблица (типа "|ВЫРАЗИТЬ(Таблица.Комментарий КАК СТРОКА(1000) КАК Комментарий")
возможно добавить индексацию для временных таблиц, которые будут сравниваться
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот