ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ Первые 1001

1. zoeh 31 21.10.24 10:22 Сейчас в теме
Первые 1001 это значит что запрос обработает только 1001 из 10 000 контрагентов?
или до 1001 выведет в результат но обработает все?
По теме из базы знаний
Найденные решения
11. booksfill 21.10.24 15:25 Сейчас в теме
(1)
Первые 1001 это значит что запрос обработает только 1001 из 10 000 контрагентов?

Нет, Да.
Зависит от условий ( в т.ч. неявных, по RLS) в самом запросе, необходимости сортировки и кол-ва записей удовлетворяющих эти условиям.
Не говоря уж о том что "первые n", без сортировки, вам каждый раз могут возвращать разный результат.
Что не менее плохо, так это то, что и время выдачи иногда будет сильно разным.

Исходя из вашей фразы "УТ 10.3 индексы использует? ", краткий ответ - не делайте так.
============================================================­==========================


А теперь о главном: "Как вы в списке ДОКУМЕНТОВ, что-то ищите исключительно по справочник.Контрагенты. "?
Ведь это ваша фраза "Мой запрос в форме списка документов" ?.
Или вы решили "упростить", ну, чтобы никто не догадался?

"Штатный запрос поиска контрагентов из формы " - это скорее какой-то сервисный запрос с непонятной причиной своего создания. Никто ни будет искать по всей этой каше по условию ИЛИ.
Хотя бы потому, что, глядя на результат, будет нереально понять как все эти люди сюда попали.

Насколько я понял, проблема связана с использованием LIKE и вы хотите оставить, только кусок поиска по наименованию.
Вроде как, полнотекстовой поиск работает только со штатным механизмом платформы, а не с самопальным запросом - ибо MS SQL про таковой в 1С ничего не знает.

Но никто не мешает программно использовать объект ПолнотекстовыйПоиск (енто тот, где есть СоздатьСписок, ПерваяЧасть() и прочие интересные методы).
Поищите, возможно это спасет отца русской демократии. Только проверьте актуальность индекса и то, что ваше поле туда попадает.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. lmnlmn 69 21.10.24 10:31 Сейчас в теме
(1) Это значит только то что в выборке по результатам запроса будет 1001 запись. А вот что в СУБД платформа будет обрабатывать сильно зависит от самого запроса, настроек СУБД, индексов и статистики.
6. zoeh 31 21.10.24 10:35 Сейчас в теме
(5) т.е. все таки запрос обработает все записи?
УТ 10.3 индексы использует?
Есть полнотекстовый поиск с индексами(УТ 10.3 вроде как им не пользуется)
а Есть вроде как еще индексы которые перестраиваются при тестировании исправлении
наверное индексы к каждой таблице как было в 1С 7.7. состоящие из полей Наименование и те которые отмечены для индексного поиска
7. zoeh 31 21.10.24 10:38 Сейчас в теме
(5) Основная задача оптимизировать концепцию запроса %ПОДОБНО%



Мой запрос в форме списка документов(там же еще и RLS ограничения, в итоге выполнение доходит до 3-4 мин.)


Запрос.УстановитьПараметр("пНаименование", "%" + СокрЛП(ЭтаФорма.ИмяКонт) + "%");
	// нам нужна только ссылка для построения списка значений
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|   Ссылка
	|ИЗ
	|   Справочник.Контрагенты
	|
	|ГДЕ
	| // 2-ое условие
	|   ( Наименование ПОДОБНО &пНаименование)
	|   
	|";
Показать






Штатный запрос поиска контрагентов из формы

ВЫБРАТЬ  РАЗЛИЧНЫЕ  РАЗРЕШЕННЫЕ   Первые 1001 
СправочникКонтрагентыУникальноеИмя2.Ссылка КАК УникальныйОбъектПоиска 
 
 
 ИЗ 
 Справочник.Контрагенты КАК СправочникКонтрагентыУникальноеИмя2

 
ГДЕ 

	(СправочникКонтрагентыУникальноеИмя2.КОД  ПОДОБНО &ТекстАвтоПодбора + "" СПЕЦСИМВОЛ  "~" )
{ГДЕ СправочникКонтрагентыУникальноеИмя2.Ссылка.* КАК СправочникКонтрагенты }

 ОБЪЕДИНИТЬ 
 ВЫБРАТЬ  РАЗЛИЧНЫЕ  Первые 1001 
СправочникКонтрагентыУникальноеИмя2.Ссылка КАК УникальныйОбъектПоиска 
 
 
 ИЗ 
 Справочник.Контрагенты КАК СправочникКонтрагентыУникальноеИмя2

 
ГДЕ 

	(СправочникКонтрагентыУникальноеИмя2.НАИМЕНОВАНИЕ  ПОДОБНО &ТекстАвтоПодбора + "" СПЕЦСИМВОЛ  "~" )
{ГДЕ СправочникКонтрагентыУникальноеИмя2.Ссылка.* КАК СправочникКонтрагенты }

 ОБЪЕДИНИТЬ 
 ВЫБРАТЬ  РАЗЛИЧНЫЕ  Первые 1001 
СправочникКонтрагентыУникальноеИмя2.Ссылка КАК УникальныйОбъектПоиска 
 
 
 ИЗ 
 Справочник.Контрагенты КАК СправочникКонтрагентыУникальноеИмя2

 
ГДЕ 

	(СправочникКонтрагентыУникальноеИмя2.ИНН  ПОДОБНО &ТекстАвтоПодбора + "" СПЕЦСИМВОЛ  "~" )
{ГДЕ СправочникКонтрагентыУникальноеИмя2.Ссылка.* КАК СправочникКонтрагенты }

 ОБЪЕДИНИТЬ 
 ВЫБРАТЬ  РАЗЛИЧНЫЕ  Первые 1001 
СправочникКонтрагентыУникальноеИмя2.Ссылка КАК УникальныйОбъектПоиска 
 
 
 ИЗ 
 Справочник.Контрагенты КАК СправочникКонтрагентыУникальноеИмя2

 
ГДЕ 

	(СправочникКонтрагентыУникальноеИмя2.НАИМЕНОВАНИЕПОЛНОЕ  ПОДОБНО &ТекстАвтоПодбора + "" СПЕЦСИМВОЛ  "~" )
{ГДЕ СправочникКонтрагентыУникальноеИмя2.Ссылка.* КАК СправочникКонтрагенты }
Показать
8. lmnlmn 69 21.10.24 10:44 Сейчас в теме
(7) В динсписке с РЛС вы "ПЕРВЫМИ" не отделаетесь, с большой вероятностью.

P.S. Портянку запроса даже читать не буду.
9. zoeh 31 21.10.24 12:17 Сейчас в теме
(8) я хочу добавить в этот ПЕРВЫЕ 1001 + фильтр по помеченным на удаление
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ
| Справочник.Контрагенты
|
|ГДЕ
| // 2-ое условие
| ( Наименование ПОДОБНО &пНаименование)
|
|";
Показать
10. пользователь 21.10.24 12:19
Сообщение было скрыто модератором.
...
2. zoeh 31 21.10.24 10:25 Сейчас в теме
Ваще все понятно!!! А если честно ничего!

9. Ключевое слово ПЕРВЫЕ / TOP

Данное ключевое слово позволяет ограничить выборку несколькими первыми записями. Часто это ключевое слово применяется в комбинации с сортировкой (предложение УПОРЯДОЧИТЬ ПО).
Копировать в буфер обмена

ВЫБРАТЬ ПЕРВЫЕ 10 Номер, Дата, СуммаДокумента
ИЗ Документ.АвансовыйОтчет
УПОРЯДОЧИТЬ ПО СуммаДокумента УБЫВ
3. пользователь 21.10.24 10:26
Сообщение было скрыто модератором.
...
4. user1519152 21.10.24 10:30 Сейчас в теме
От запроса зависит. Если сортировки в запросе нет, то прочитает только те которые нужны. Если сортировка есть то надо все прочитать.
11. booksfill 21.10.24 15:25 Сейчас в теме
(1)
Первые 1001 это значит что запрос обработает только 1001 из 10 000 контрагентов?

Нет, Да.
Зависит от условий ( в т.ч. неявных, по RLS) в самом запросе, необходимости сортировки и кол-ва записей удовлетворяющих эти условиям.
Не говоря уж о том что "первые n", без сортировки, вам каждый раз могут возвращать разный результат.
Что не менее плохо, так это то, что и время выдачи иногда будет сильно разным.

Исходя из вашей фразы "УТ 10.3 индексы использует? ", краткий ответ - не делайте так.
============================================================­==========================


А теперь о главном: "Как вы в списке ДОКУМЕНТОВ, что-то ищите исключительно по справочник.Контрагенты. "?
Ведь это ваша фраза "Мой запрос в форме списка документов" ?.
Или вы решили "упростить", ну, чтобы никто не догадался?

"Штатный запрос поиска контрагентов из формы " - это скорее какой-то сервисный запрос с непонятной причиной своего создания. Никто ни будет искать по всей этой каше по условию ИЛИ.
Хотя бы потому, что, глядя на результат, будет нереально понять как все эти люди сюда попали.

Насколько я понял, проблема связана с использованием LIKE и вы хотите оставить, только кусок поиска по наименованию.
Вроде как, полнотекстовой поиск работает только со штатным механизмом платформы, а не с самопальным запросом - ибо MS SQL про таковой в 1С ничего не знает.

Но никто не мешает программно использовать объект ПолнотекстовыйПоиск (енто тот, где есть СоздатьСписок, ПерваяЧасть() и прочие интересные методы).
Поищите, возможно это спасет отца русской демократии. Только проверьте актуальность индекса и то, что ваше поле туда попадает.
12. zoeh 31 22.10.24 17:56 Сейчас в теме
(11) у меня получить оптимизировать код следующим:

УстановитьПривилегированныйРежим(Истина);
	СтандартнаяОбработка = Ложь;
	Запрос = Новый Запрос;
	
	// устанавливаем параметры запроса введенными критериями
	
	//Запрос.УстановитьПараметр("фНаименование", ЭтаФорма.ИмяКонт);
	Запрос.УстановитьПараметр("пНаименование", "%" + СокрЛП(ЭтаФорма.ИмяКонт1) + "%");
	Запрос.УстановитьПараметр("ОграничениеКА", ПараметрыСеанса.ОграничениеКА);
	Запрос.УстановитьПараметр("ОграничениеКА2", ПараметрыСеанса.ОграничениеКА2);
	
	// нам нужна только ссылка для построения списка значений
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ Первые 1001
	|   Ссылка
	|ИЗ
	|   Справочник.Контрагенты
	|
	|ГДЕ
	| // 2-ое условие
	|   ( Ссылка Не в Иерархии (&ОграничениеКА)) и( Ссылка Не в Иерархии (&ОграничениеКА2) ) и
	
	|   ( Наименование ПОДОБНО &пНаименование) 
	|   
	|";
	
	Результат = Запрос.Выполнить();
	
	// создаем новый список значений и выгружаем в него колонку «Ссылка» из  результата запроса
	сз = Новый СписокЗначений;
	сз.ЗагрузитьЗначения(Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"));
	ЭтаФорма.ДокументСписок.Отбор.Контрагент.ВидСравнения = ВидСравнения.ВСписке;
	ЭтаФорма.ДокументСписок.Отбор.Контрагент.Значение = сз;
	ЭтаФорма.ДокументСписок.Отбор.Контрагент.Использование = Истина;

	Если НЕ(РольДоступна("ДокиПоОтветственному")) Тогда
		СпрПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
		СписокПользователей = Новый СписокЗначений;
		СписокПользователей.Добавить(СпрПользователь);
		ЭтаФорма.ДокументСписок.Отбор.ДокументыПоОтветсвенному.ВидСравнения = ВидСравнения.ВСписке;
		ЭтаФорма.ДокументСписок.Отбор.ДокументыПоОтветсвенному.Значение = СписокПользователей;
		ЭтаФорма.ДокументСписок.Отбор.ДокументыПоОтветсвенному.Использование = Истина;
		//ЭлементыФормы.ДокументСписок.НастройкаОтбора.ДокументыПоОтветсвенному.Доступность = Ложь;
	КонецЕсли;

	
	УстановитьПривилегированныйРежим(Ложь);
Показать
13. zoeh 31 22.10.24 17:59 Сейчас в теме
т.о. перед запросом включаю Привилегированный,
RLS ограничение я применяю как фильтр в самом запросе и устанавливаю жесткий фильтр после его выполнения и потом выключаю Привилегированный

скорость выросла раз в 40, и пропали периодические лаги по 3-5 минут зависания в момент выполнения этого запроса.
Оставьте свое сообщение

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