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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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