|
Оптимизация кода | ☑ | ||
---|---|---|---|---|
0
deathogre
15.07.16
✎
08:39
|
Процедура ТоварыНоменклатураОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; Если НЕ ПустаяСтрока(Текст) Тогда Список = НайтиНоменклатуру(Текст); ДанныеВыбора = Новый СписокЗначений; Для Каждого ТекЗначение Из Список Цикл ДанныеВыбора.Добавить(ТекЗначение.Значение); КонецЦикла; КонецЕсли; КонецПроцедуры Список = НайтиНоменклатуру(Текст); - вот эта строка очень долго выполняется. Можете подсказать почему? |
|||
1
deathogre
15.07.16
✎
08:40
|
вызывается эта функция
&НаСервере Функция НайтиНоменклатуру(Текст) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Код ПОДОБНО &Код"; Запрос.УстановитьПараметр("Код", "%"+Текст+"%"); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Список = Новый СписокЗначений; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Список.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; Возврат Список; КонецФункции |
|||
2
Lama12
15.07.16
✎
08:40
|
(0) Смотри что это за функция.
|
|||
3
deathogre
15.07.16
✎
08:41
|
сама функция быстро выполняется
|
|||
4
catena
15.07.16
✎
08:42
|
Ленится
|
|||
5
floody
15.07.16
✎
08:42
|
Потому что ПОДОБНО. Перебор всей номенклатуры.
|
|||
6
deathogre
15.07.16
✎
08:43
|
(5) а чем можно заменить?
|
|||
7
MrStomak
15.07.16
✎
08:44
|
Потому что поиск идет по вхождению в любую часть кода, т.е. полный перебор всей номенклатуры.
|
|||
8
oslokot
15.07.16
✎
08:44
|
и еще, можно упростить:
Возврат Результат.Выбрать().Выгрузить().ВыгрузитьКолонку("Ссылка") |
|||
9
vicof
15.07.16
✎
08:45
|
Статистику на сервере обнови
|
|||
10
oslokot
15.07.16
✎
08:45
|
(8) * выбрать() убрать кнечно же
|
|||
11
vicof
15.07.16
✎
08:45
|
И индексы пересчитай
|
|||
12
DrZombi
гуру
15.07.16
✎
08:45
|
(6) Используй еще.
&НаСервереБезКонтекста Функция НайтиНоменклатуру(Знач Текст) |
|||
13
Asmody
15.07.16
✎
08:46
|
Я бы, для начала, условие поставил:
Если СтрДлина(Текст)>=3 Тогда |
|||
14
Beretta
15.07.16
✎
08:46
|
(0) &НаСервереБезКонтекста
|
|||
15
Beretta
15.07.16
✎
08:47
|
(13) +1
|
|||
16
MrStomak
15.07.16
✎
08:47
|
Если долго возврат на клиента происходит, то наверное очень много значений, ограничь список 20 где- нибудь, т.е. выбрать первые 20
|
|||
17
Гипервизор
15.07.16
✎
08:47
|
(0) ВЫБРАТЬ ПЕРВЫЕ 50
Посмотри как в типовых сделано |
|||
18
DrZombi
гуру
15.07.16
✎
08:49
|
(0)По коду
Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); Массив = ТЗ.ВыгрузитьКолонку("Ссылка"); Список = Новый СписокЗначений; Список.ЗагрузитьЗначения(Массив); Возврат Список; Убрать код: Список = НайтиНоменклатуру(Текст); ДанныеВыбора = Новый СписокЗначений; Для Каждого ТекЗначение Из Список Цикл ДанныеВыбора.Добавить(ТекЗначение.Значение); КонецЦикла; Оставить: ДанныеВыбора = НайтиНоменклатуру(Текст); |
|||
19
DrZombi
гуру
15.07.16
✎
08:56
|
(0) А так, тебя ждет еще разочарование. Список будет выпадать еще через менеджер справочника, к которому ты обращаешься "Номенклатура"
|
|||
20
бомболюк
15.07.16
✎
09:30
|
сам по себе вызов сервера дело весьма небыстрое.
|
|||
21
DrZombi
гуру
15.07.16
✎
09:40
|
(20) Через "НаСервереБезКонтекста" и не будет летать твоя форма туда обратно.
|
|||
22
DrZombi
гуру
15.07.16
✎
09:40
|
+ Если еще и переменные функции уложишь в "Знач", то и они не будут возвращаться обратно на клиент
|
|||
23
Chameleon1980
15.07.16
✎
10:12
|
(22) +
|
|||
24
deathogre
15.07.16
✎
10:16
|
Всем большое спасибо, особенно Зомби, быстрее стало работать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |