|
v7: Долго ищет клиента, как оптимизировать запрос в ТиС, дисконт? | ☑ | ||
---|---|---|---|---|
0
Neg
20.03.15
✎
11:33
|
Функция глПриВыбореКлиента(Конт) Экспорт
Дкнт = Конт.Клиент; Если Дкнт.Выбран()=1 Тогда Сумма = глСуммаДисконта(Дкнт.ТекущийЭлемент()); КонецЕсли; Если ПустоеЗначение(Сумма)=1 Тогда Сумма=0; КонецЕсли; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Без итогов; |Минимум = Справочник.ШкалаДисконтов.Минимум; |Максимум = Справочник.ШкалаДисконтов.Максимум; |Скидка = Справочник.ШкалаДисконтов.Скидка; |ТекущийЭлемент = Справочник.ШкалаДисконтов.ТекущийЭлемент; |Группировка Скидка без Групп; |Условие(Минимум < Сумма); |Условие(Максимум > Сумма); |Условие(ТекущийЭлемент.ПометкаУдаления() = 0); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат 0; КонецЕсли; Пока Запрос.Группировка() = 1 Цикл Скидка_ = Запрос.Скидка; КонецЦикла; Возврат Скидка_; КонецФункции //глПриВыбореДисконта() Функция глНайтиКлиентаДисконт(Карта) Экспорт Кл=СоздатьОбъект("Справочник.КлиентДисконт"); Кд=Сред(Карта,1,13); Если Кл.НайтиПоРеквизиту("ШтрихкодК",Кд,1)=1 Тогда ВзКл=Кл.ТекущийЭлемент(); Возврат ВзКл; Иначе ВзКл=0; Возврат ВзКл; КонецЕсли; КонецФункции |
|||
1
Neg
20.03.15
✎
11:37
|
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
// Процедура разбирает штрих-код, считанный сканером // и заполняет строки накладной Перем Упаковка,ТекКоличество, Спецификация; Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена; Перем СтрокаВозврЦена; Если Событие = "BarCodeValue" Тогда ПредположимЧтоКарта=Сред(Данные,1,2); //+д; Если (ПредположимЧтоКарта="33") или(ПредположимЧтоКарта="30") Тогда // Это действительно карта клиента +д Карта=глНайтиКлиентаДисконт(Данные); //Ищем карту Если Карта=0 Тогда Сообщить("Клиента нет в базе!"); Иначе Клиент=Карта; ПриВыбореКлиента(); КонецЕсли; // Обработка закончена. Готовы к получению нового штрихкода. глСканерПосылкаДанных(1); Иначе // ищем товар |
|||
2
Neg
20.03.15
✎
11:41
|
товар ищет быстро, а вот клиента очень долго...
|
|||
3
Vladal
20.03.15
✎
11:49
|
Справочник ШкалаДисконтов - подчиненный клиентам?
|
|||
4
Vladal
20.03.15
✎
11:51
|
Попробуй переписать запрос на перебор элементов справочника. В 7.7 долго обрабатываются запросы.
Или используйте прямые запросы с помощью 1С++ |
|||
5
Neg
20.03.15
✎
11:51
|
(3) нет
|
|||
6
Fragster
гуру
20.03.15
✎
11:52
|
напротив ШтрихкодК в конфигураторе галка "индексировать" стоит?
|
|||
7
Vladal
20.03.15
✎
11:54
|
(6) В семерке?
|
|||
8
Neg
20.03.15
✎
11:56
|
(6) такого там нет :)
|
|||
9
asady
20.03.15
✎
11:57
|
(0) уточни что не устраивает по времени
Карта=глНайтиКлиентаДисконт(Данные); или ПриВыбореКлиента(); ?? |
|||
10
Neg
20.03.15
✎
12:09
|
Не могу сейчас точно замерить/сказать, касса кричит долго. :) Народ идет...
|
|||
11
Sserj
20.03.15
✎
12:12
|
(7)(8) Он просто неправильно выразился, у реквизита есть стоит флажок "Сортировка". Это тоже самое что индексировать по научному.
|
|||
12
Fragster
гуру
20.03.15
✎
12:13
|
(7)(8) последний раз клюшками занимался лет 7 назад, так что может и забыл чего. но ЕМНИП, было.
А если нет - то добавить индексы в скуле/ДБФе ручками можно. |
|||
13
Neg
20.03.15
✎
12:15
|
(11) (12) Сортировка стоит
|
|||
14
Fragster
гуру
20.03.15
✎
12:16
|
(13) попробуй сделать переиндексацию, или как там её в 7.7.
|
|||
15
Neg
20.03.15
✎
12:21
|
сейчас допустили, делаю.
|
|||
16
МихаилМ
20.03.15
✎
12:32
|
|Группировка Скидка без Групп;
+ без упорядовачивания. |
|||
17
Fragster
гуру
20.03.15
✎
12:47
|
(16) вот мне кажется, что справочник со шкалами - очень маленький, и тупит не из-за него
|
|||
18
МихаилМ
20.03.15
✎
13:12
|
(17)
даже если справочник маленький на каждый элемент будет сделано 2 отдельных запроса для упорядочивания и для ПометкаУдаления() |
|||
19
Злопчинский
20.03.15
✎
15:16
|
У товарища платный драйвер Атола, который дает задержку 10 сек...
не? |
|||
20
Злопчинский
20.03.15
✎
15:20
|
прямой запрос на склайт на справочник без индексов на туеву хучу тысяч строк - отрабатывал вполне терпимо, порядка 10-20 секунд (у меня это редкоиспользуемая операция).
так что 1Сный запрос на справочник дисконта должен отработать быстро. а если как написано - на группировку и пометку удаления два отдельных запроса (хотя мне это сомнительно), то проще получить выборку и пропустить удаленные при обходе выборки |
|||
21
Fragster
гуру
20.03.15
✎
15:45
|
(19) ну, если по номенклатуре ищет бысро, то дело не в этом должно быть.
|
|||
22
AliAksA
21.03.15
✎
14:02
|
вот это может тормозить запрос:
|Условие(ТекущийЭлемент.ПометкаУдаления() = 0); лучше проверять при обработке запроса |
|||
23
Абыр
21.03.15
✎
14:32
|
сперва замером выяснить какой именно кусок тупит
|
|||
24
Злопчинский
21.03.15
✎
22:15
|
Упростить запрос максимально
Ксложнять по шагам Смотреть как изменится время |
|||
25
Злопчинский
23.03.15
✎
23:13
|
Автор умер в есте с задачей?
|
|||
26
Neg
24.03.15
✎
02:49
|
(25) неее, просто на терминал перешел и проблема отпала. :)
|
|||
27
Neg
24.03.15
✎
02:53
|
а точнее он там и был, долбанные эксперементы...
|
|||
28
155153144627
24.03.15
✎
02:59
|
А почему поиск по шкале дисконта запросом, хотя я думаю там несколько элементов. А по клиентдисконт через найти реквизит?... Хотя наверняка количество дисконтных карт не одна сотня или тысяча.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |