Создал обработку сравнения двух тз по отбору и если запускать обработку с отладчиком, то он быстро сравнивает, а если без отладчика, то он долго стоит загружает, в чем может быть проблема ?

1. lastjudgement 13.09.21 15:26 Сейчас в теме
	МассивУд1 = Новый массив();
	МассивУд2 = Новый массив();
	Для каждого стр из ТЗВД Цикл
		Отбор = Новый Структура();
		Отбор.Вставить("Комментарий",стр.Ссылка);
		Строки=ТабЗнач.НайтиСтроки(Отбор);
		Если Строки.Количество() = 1 Тогда								
				МассивУд1.Добавить(стр);
				МассивУд2.Добавить(Строки[0]);
		КонецЕсли;	
	КонецЦикла;

	
	Для Каждого Строка Из МассивУд1 Цикл
		ТЗВД.Удалить(Строка);
	КонецЦикла;
	
	Для Каждого Строка Из МассивУд2 Цикл
		ТабЗнач.Удалить(Строка);
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
21. Sashares 34 14.09.21 16:48 Сейчас в теме
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:

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

    ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТаблицаДляПоиска.Удалить(Строка);
    КонецЦикла;
    ТабЗнач.Загрузить(ТаблицаДляПоиска);
Показать
lastjudgement; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
13. Sashares 34 14.09.21 16:13 Сейчас в теме
(1) Вставь строку
ТабЗнач.Индексы.Добавить("Комментарий");

до циклов.
И будет выполняться меньше секунды.
15. lastjudgement 14.09.21 16:28 Сейчас в теме
16. Sashares 34 14.09.21 16:31 Сейчас в теме
(15)Покажите весь код и скрин замера
17. Sashares 34 14.09.21 16:37 Сейчас в теме
(15)
Попробуйте так:
МассивУд1 = Новый массив();
    МассивУд2 = Новый массив();
    ДобавленныйИндекс = ТабЗнач.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
    Для каждого стр из ТЗВД Цикл
        Отбор = Новый Структура();
        Отбор.Вставить("Комментарий",стр.Ссылка);
        Строки=ТабЗнач.НайтиСтроки(Отбор);
        Если Строки.Количество() = 1 Тогда                                
                МассивУд1.Добавить(стр);
                МассивУд2.Добавить(Строки[0]);
        КонецЕсли;    
    КонецЦикла;

    ТабЗнач.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТабЗнач.Удалить(Строка);
    КонецЦикла;
Показать
18. lastjudgement 14.09.21 16:39 Сейчас в теме
19. lastjudgement 14.09.21 16:42 Сейчас в теме
21. Sashares 34 14.09.21 16:48 Сейчас в теме
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:

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

    ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТаблицаДляПоиска.Удалить(Строка);
    КонецЦикла;
    ТабЗнач.Загрузить(ТаблицаДляПоиска);
Показать
lastjudgement; +1 Ответить
22. lastjudgement 14.09.21 16:53 Сейчас в теме
2. Lenten 25 13.09.21 17:09 Сейчас в теме
- размер таблиц сравнить
- замером производительности посмотреть где думает
5. lastjudgement 13.09.21 18:49 Сейчас в теме
(2)
 Строки=ТабЗнач.НайтиСтроки(Отбор);

вот здесь думает 90% времени
3. user790708 13.09.21 17:10 Сейчас в теме
А что говорит замер производительности?
4. lastjudgement 13.09.21 18:48 Сейчас в теме
(3)
 Строки=ТабЗнач.НайтиСтроки(Отбор);

вот здесь думает 90% времени
6. user790708 13.09.21 19:03 Сейчас в теме
(4) Какой размер таблиц? Индексировать по этому полю пробовали?
7. lastjudgement 13.09.21 19:06 Сейчас в теме
8. user790708 13.09.21 19:11 Сейчас в теме
(7) Поле типа строка? Какой длины?
11. lastjudgement 14.09.21 16:10 Сейчас в теме
(8) да, вдвоем строки, 70 символов
10. Lenten 25 14.09.21 09:52 Сейчас в теме
(4)попробовал у себя. 2 таблицы по 3000 строк. ищет меньше секунды. вы это на сервере. может сервер хилый хз
14. lastjudgement 14.09.21 16:21 Сейчас в теме
(10)хмм, нет, по идее не хилый
9. Dr.HiHi 3 14.09.21 08:14 Сейчас в теме
Комментарий - это строка или ссылка??
стр.Ссылка - это строка или ссылка??
а если таблице добавить индексацию??
а если делать через запрос??
12. lastjudgement 14.09.21 16:11 Сейчас в теме
(9) строки вдвоем
хмм, запрос ? как ?
20. Dr.HiHi 3 14.09.21 16:46 Сейчас в теме
(12)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗВД", ТЗВД);
Запрос.УстановитьПараметр("ТабЗнач", ТабЗнач);
Запрос.Текст =
"ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТЗВД
|ИЗ
|&ТЗВД КАК Таблица
|;
|ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Комментарий КАК Комментарий
|ПОМЕСТИТЬ ТабЗнач
|ИЗ
|&ТабЗначКАК Таблица
|;
|ВЫБРАТЬ
|ТЗВД.НомерСтроки КАК НомерСтроки1,
|МАКСИМУМ(ТабЗнач.НомерСтроки) КАК НомерСтроки2
|ПОМЕСТИТЬ Таблица
|ИЗ
|ТЗВД
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабЗнач
|ПО ТЗВД.Ссылка = ТабЗнач.Комментарий
|СГРУППИРОВАТЬ ПО
|ТЗВД.НомерСтроки
|ИМЕЮЩИЕ
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТабЗнач.НомерСтроки) = 1
|;
|ВЫБРАТЬ
|НомерСтроки1 КАК НомерСтроки,
|1 КАК id
|ИЗ
|Таблица
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|НомерСтроки2 КАК НомерСтроки,
|2 КАК id
|ИЗ
|Таблица
|УПОРЯДОЧИТЬ ПО
|НомерСтроки УБЫВ
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующая() Цикл
Если Выборка.id = 1 Тогда
Таб = ТЗВД;
Иначе
Таб = ТабЗнач;
КонецЕсли;
Таб.Удалить(Выборка.НомерСтроки-1];
КонецЦикла;
Показать


p.s. код написан от фонаря, так что нужен допил))) но думаю что суть передал
так же не знаю тип сравнивания... возможно нужно будет преобразовать в строку с определенным количество символов... только не в сравнении, а там где временная таблица (типа "|ВЫРАЗИТЬ(Таблица.Комментарий КАК СТРОКА(1000) КАК Комментарий")
возможно добавить индексацию для временных таблиц, которые будут сравниваться
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)