УТ 11: Ускоряем форму подбора номенклатуры

Опубликовал Сергей Царегородцев (TSSV) в раздел Программирование - Практика программирования

При внедрении УТ 11 столкнулся с медленной работой формы подбора. А именно - список сильно тормозил при его прокрутке - после каждой прокрутки колесика мышки список задумывался на несколько секунд. В связи с тем, что компания, в которой происходило внедрение, торгующая, то под угрозой стала эффективность ее работы и здесь я не преувеличиваю.
При этом усиление железной части (было закуплено новое серверное оборудование) проблему не решило, верней решило частично - вместо 3-х секунд между движениями колесиком мышки список стал думать 2 секунды, что было по прежнему неприемлемо, хотя админы гордо заявляли о беспрецедентных 30 процентах прироста производительности.

   При внедрении УТ 11 столкнулся с медленной работой формы подбора. А именно - список сильно тормозил при его прокрутке - после каждой прокрутки колесика мышки список задумывался на несколько секунд. В связи с тем, что компания, в которой происходило внедрение, торгующая, то под угрозой стала эффективность ее работы и здесь я не преувеличиваю.
При этом усиление железной части (было закуплено новое серверное оборудование) проблему не решило, верней решило частично - вместо 3-х секунд между движениями колесиком мышки список стал думать 2 секунды, что было по прежнему неприемлемо, хотя админы гордо заявляли о беспрецедентных 30 процентах прироста производительности!


   Осознав важность этой задачи, я предложил срочную временную меру - пожертвовать выводимой в форму подбора информацией (обычный список номенклатуры вертелся довольно шустро), на что руководство компании ответило категорическим отказом, желая обладать всей полнотой информации, предоставляемой формой подбора - остатки, резервы, цены и пр. ("...за что тогда мы заплатили такие бабки?!!!").


   Немного предыстории - я подключился к проекту через 1.5 месяца после начала промышленной эксплуатации УТ 11, придя работать в штат торговой компании. Буквально сразу я обратил внимание на большой поток негатива в адрес 1С в целом и УТ 11 особенно и со стороны руководства и со стороны буквально всех пользователей. Каждый считал своим долгом высказать мне все что он думает о новой программе. Исключение казалось бы должны составлять уборщицы и охранники, но и они были крайне мной недовольны в связи с тем, что я постоянно задерживался до ночи и мешал им убираться и спать. В общем фирма буквально стояла на ушах и вопила, кроя продукт инженерной мысли на чем свет стоит. До этого компания работала на 7.7, которая "была доведена до совершенства" и всех устраивала.


   УТ 11 готовила к внедрению фирма-франчайзи, которая по слухам не предоставила удовлетворительный результат и попыталась ретироваться, но на нее подали в суд и опять же по слухам в связи с этим франчайзи даже пришлось сменить вывеску. В общем, к моему приходу стремительный обвал радужных надежд на светлое будущее шел полным ходом. И медленная работа списка стала как бы олицетворением всего зла, которое привнесла УТ 11 в спокойную и размеренную жизнь компании.


  Пришлось все бросить и срочно заняться этим вопросом. Анализ проблемы показал, что  основной причиной является довольно тяжелый запрос списка (если кто не в курсе - источником данных списков в УФ может быть произвольный запрос). Но, как я говорил уже, отказываться от функциональности формы подбора было нельзя, поэтому я стал искать и удалять из запроса только то, что не используется в данном конкретном внедрении.


   Во первых, в компании не использовались характеристики, во вторых - вид цены нужен был только тот, что указан в шапке документа в соглашении, в третьих, графики движения тоже оказались ни к чему, так как в момент подбора товара в КП или заказ клиента интересуют только остатки на сейчас и т.д. (я говорю сейчас только об информации списка номенклатуры, все остальное, в том числе детальная информация по текущей позиции, выводимая ниже, где есть информация о планируемых поступлениях с детализацией по складам, на исследуемый процесс существенного влияния не оказывала и деструкции естественно не подвергалось). В результате это позволило существенно "облегчить" запрос и "о чудо!" список "полетел"! Прокрутка мышкой, стрелками и PgDn-ом стала приводить к равномерному мельканию строк.
   Кому то это покажется полной ерундой, но поверьте, а лучше попробуйте набить документ в 300 строк и вы все поймете. Вобщем, фирма дружно сказала "ВАУ!!!" ... Слышать это было конечно же приятно.

   Во вложении вы найдете измененную обработку подбора и отчет о сравнении объектов. Суть описанных изменений воспроизведена мной специально для данной публикации в релизе УТ 11.1.2.10. Надеюсь кому нибудь мой опыт будет интересен.

Скачать файлы

Наименование Файл Версия Размер
Архив УТ 11 Ускорение подбора
.rar 98,58Kb
29.08.13
294
.rar 98,58Kb 294 Скачать

См. также

Комментарии
1. Александр Анисков (vandalsvq) 686 30.08.13 22:11 Сейчас в теме
Достаточно давно делал аналогичную работу, заменил типовую форму на свою, повесил на хоткей + немного перебрал некоторые методы и их вызов (Клиент, Сервер и т.д.). Также была изменена методика подбора, и некоторые вещи вроде порядка обхода, пропусков при обходе.
Получилось все очень хорошо, мы специально замеряли скорость набора пользователями на типовой и "облегченной", результат явно превысил ожидания. Еще кстати помогло изучение специфики, например некоторые менеджеры специализировались только на определенных группах товаров, после анализа их расположения было понятно какие склады чаще нужны, как осуществляется подбор.
И очень критично было добавить вес, поскольку клиентам было важно чтобы машины по грузоподъемности проходили.
В общем на самом деле, казалось бы достаточно простая работа, не требует каких-то супер подходов и знаний, просто здравый смысл и секундомер.
2. Александр Анисков (vandalsvq) 686 30.08.13 22:11 Сейчас в теме
А плюс за то, что заботишься о простых смертных :)
3. Tsaregorodtsev (TSSV) 30.08.13 22:24 Сейчас в теме
(2) vandalsvq, спасибо! Да, согласен, ничего особо сложного в этом нет, меня попросили просто подробней рассказать об изменениях в запросе (я как то об этом упомянул в одном своем комментарии), вот и решил - может еще кому нибудь пригодится.
4. Евгений Пономаренко (Evgen.Ponomarenko) 498 31.08.13 20:23 Сейчас в теме
Автору - респект и уважуха, Статье - плюс, Пользователям - радость, 1С - повод задуматься. Помнится давича кто-то, жаловался, что УТ-11 тормозит в файловой версии при работе в локальной сети в режиме подбора. А ведь просто стоило запустить "Отладка/Замер производительности".
5. rasswet (rasswet) 80 04.09.13 08:27 Сейчас в теме
спасибо за статью. прочитал с интересом
6. Николай Зайков (Mortiferus) 250 05.09.13 08:29 Сейчас в теме
Релиз УТ 11.1.2.13 - подбор не работает. При двойном клике на строке с номенклатурой не открывается форма выбора количества и цены. Соответственно в корзину ничего не переносится.
7. Александр Перевислый (sashapere) 141 05.09.13 10:20 Сейчас в теме
+ , мне тоже порой кажется, что типовая конфа становится всё дальше и дальше от реальной жизни.
8. Александр Перевислый (sashapere) 141 05.09.13 10:20 Сейчас в теме
+ , мне тоже порой кажется, что типовая конфа становится всё дальше и дальше от реальной жизни.
9. Сергей Боровик (BorovikSV) 1110 05.09.13 14:56 Сейчас в теме
Этот подбор стыд да позор 1С. Оптимизация запроса,отключение сегментов и прочей лабуды перестает помогать когда появляется много номенклатуры, много складов и много типов цен
10. Сергей Боровик (BorovikSV) 1110 05.09.13 15:02 Сейчас в теме
в нашем случае пришлось добавлять отдельный подбор для "оперативных" операций. реализовали несколько кеширующих таблиц (например оперативные показатели на текущий момент - остатки, резерв, транзит). Добавили подписки на события, для обновления этих таблиц.И подстроили запрос под использование этих таблиц.

В результате запрос стал выполнятся за 50-100 мс, даже на "холодной" базе. Соответственно вопрос с тормозами решился радикально.
11. Константин Хрипков (mbreaker) 1073 06.09.13 10:42 Сейчас в теме
Любителям попинать жёлтую тушку компании, обеспечивающей вас работой, напомню: 1С никогда не претендовал на коробочное решение для крупных внедрений. Вариант "из коробки" подходит только для компаний с малым оборотом (речь идёт в первую очередь о системах оперативного учета: УТ, КА, УПП). Немудрено, что "напичканный" функциональностью подбор будет тормозить на больших объемах. Так на то Вы, "скульпторы", и нужны - чтобы отсечь всё лишнее и представить клиенту шедевр. А жаловаться на то, что "из коробки" система плохо работает - оставьте клиентам тех недалёких франчей, которые обещают "золотые горы" сразу лишь бы впарить коробку.
12. Александр Синцов (Sintson) 333 10.09.13 10:22 Сейчас в теме
Добавлю свои 5 копеек.
Автор абсолютно прав, запрос списка номенклатуры "не вывозит" тему, когда много складов, номенклатуры, ограничение прав пользователей на уровне РЛС.
РЛС трогать мне было нельзя, сильно убивать сервис - обработку, как сделал автор, тоже не хотелось.
Убрал выбор свободных остатков с учетом планов движения товаров (просто свободный остаток - резерв), он особо тормозил, список номенклатуры и иерархия считываются сразу, убрал динамическое считывание базы (лучше день потерять, затем за пять мин. долететь - для тех кто понимает), иерархический список теперь произвольный запрос, без отбора, - отбор работает медленнее.
Кто будет курить УТ дальше, рекомендую в общем модуле подбора номенклатуры, там где устанавливается отбор по иерархии в списке, - лучше устанавливать параметр запроса... короче копать сюда...

в прикрепленном файле кастрированная мной обработка из УТ 11.1.1.17
Прикрепленные файлы:
_ПодборТоваровВДокументПродажи.epf
Bor_ka; vytegra; +2 Ответить
13. Александр Синцов (Sintson) 333 10.09.13 10:57 Сейчас в теме
(10) BorovikSV, Вы не могли бы более подробно рассказать об организации кэширующих таблиц, хотелось бы применить подобный подход.
14. Александр Федоров (Sasha255n) 13.09.13 21:00 Сейчас в теме
Сталкивался с такой же проблемой примерно года 2 назад решением на тот момент так и не нашел. Теперь некторые моменты проясняются автору однозначно плюс и спасибо. Есть чему поучиться и где применнить.
15. Eugeneer (Eugeneer) 20.09.13 14:04 Сейчас в теме
Заранее прошу прощения у автора.
Есть решение, которое я начал делать с первого дня выхода УТ11. Тк по сути столкнулся с этой проблемой и осознал ее сразу как только запустил новую редакцию.
И смотреть я начал эту задачу сразу, тк по сути много лет на УТ10 разрабатывался свой подбор.
Все верно описано.
Методом полугодовой разработки, а далее постоянной - под все новые релизы и так далее. Плюс к этому присоединились люди в виде клиентов было выработано решение
http://infostart.ru/public/102048/

Только тут еще незадача - потребовалось еще больше информациивыводимой и в списке и в дополнительной инфо. Тем не менее разработка показывает гораздо лучше результаты типового, а информации в ней больше.
16. Владимир Аникин (Vo-Va) 91 22.09.13 19:02 Сейчас в теме
Тоже столкнулся с этой проблемой. Только у меня запрос еще сложнее, чем типовой поэтому от динамического списка вообще отказался. Использую простую таблицу. Возникали проблемы при ее заполнении, как оказалось передавать результат запроса или саму таблицу с сервера на клиент очень долго. Выполнение запроса 2-3 сек, а переход с сервера на клиент порядка 20 сек. Не знаю с чем это связано, но пока весь код исполняю на клиенте в толстом клиенте управляемого приложения, в таком варианте все летает.
17. Tsaregorodtsev (TSSV) 23.09.13 10:23 Сейчас в теме
(16) Vo-Va,
но пока весь код исполняю на клиенте в толстом клиенте управляемого приложения, в таком варианте все летает.
А сама форма видимо обычная (не управляемая), вставленная через буфер из другой конфигурации с основным режимом запуска "Обычное приложение"?
18. Владимир Аникин (Vo-Va) 91 23.09.13 13:00 Сейчас в теме
(17) Tsaregorodtsev, нет режим запуска толстый клиент управляемое приложение, форма тоже управляемая. Запрос исполняется &НаКлиенте, чтобы форма проходила синтаксический контроль, это участок кода надо в зять в условие
#Если ТолстыйКлиентУправляемоеПриложение Тогда

&НаКлиенте
Процедура ЗаполнитьТаблицу()

......

КонецПроцедуры

#КонецЕсли
...Показать Скрыть
19. Tsaregorodtsev (TSSV) 23.09.13 13:22 Сейчас в теме
(18) Vo-Va, спасибо, это ценно - не знал.
20. Росинфо 1 (rosinfo1) 27.09.13 01:19 Сейчас в теме
А мы после танцев с подборами, сделали проще, ставим 10.3 и не парим мозги не себе не людям... Помимо подборов там еще очень много веселых вещей, одна синхронизация с БП чего стоит.
21. Росинфо 1 (rosinfo1) 27.09.13 01:34 Сейчас в теме
Хорошо тем, кто в штате крупной компании, поставил замер производительности и пару дней копания методом тыка в трехэтажном запросе, зарплату то, все равно получит. А меня заказчик не поймет если я ему выставлю счет, за доработку типового решения, которое по логике должно и так работать. Особенно если у заказчика всего два ноутбука в сети. А работать неделями за бесплатно особо не прильщает, коллекционируя письма с зарегистрированными багами от тех поддержки 1С, семья и дети не поймут. К сожалению, я получаю свои деньги только за доработку типового функционала, а не за исправление чужих косяков. Спасибо инфостарту и ребятам коллегам, массу времени экономите :-))
zexpress; Flashback1979SE; Yakud3a; zzz_natali; +4 Ответить
22. Иван Лашин (SCSI) 1 09.10.13 11:17 Сейчас в теме
Уважаемый Tsaregorodtsev, Ваша форма подбора подключается как внешняя обработка?
23. Tsaregorodtsev (TSSV) 09.10.13 12:11 Сейчас в теме
(22) SCSI, В архиве 2 файла. Первый - отчет о сравнении объектов, в нем изменения, которые нужно внести в общий модуль - там пара строк. Второй - сама обработка, которой нужно заменить типовую через "Заменить на внешнюю обрабтку, отчет". Так же предполагается, что в настройках номенклатуры включен стандратный режим поиска в списках.
24. Klesk666 Klesk666 (Klesk666) 13 17.10.13 12:59 Сейчас в теме
а в какую процедуру пихать:

"·Если Форма.КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма" Тогда"
"··Возврат;"
"·КонецЕсли;"

релиз не 11.1.2.10
25. Tsaregorodtsev (TSSV) 17.10.13 13:16 Сейчас в теме
(24) Klesk666,
Процедура УстановитьТекстыЗапросовСписковФормыПодбора(Форма)

Если Форма.КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма" Тогда
Возврат;
КонецЕсли;
26. Tsaregorodtsev (TSSV) 17.10.13 13:17 Сейчас в теме
(24) Klesk666, в общем модуле ПодборТоваровСервер
27. Klesk666 Klesk666 (Klesk666) 13 17.10.13 13:49 Сейчас в теме
28. Павел (sidka89) 24.10.13 13:12 Сейчас в теме
предыстории позавидовал бы сам Толстой, но за идею благодарность
29. Нина (нинас) 12.11.13 05:19 Сейчас в теме
Спасибо за идею. Попробую ее применить в КА
30. alnovin (alnovin) 213 12.11.13 10:37 Сейчас в теме
Я в свое время избрал другой путь решения: внедрения обычной формы в УТ 11. решается дополнительная задача с вводом по строке в списке справочника. И не надо про тонкие клиенты и т.д. Сам все знаю )
А "скорострельность" решили путем введения кэш таблицы.
http://infostart.ru/public/159749/
31. Tsaregorodtsev (TSSV) 12.11.13 11:31 Сейчас в теме
(30) alnovin, быстрый поиск по первым символам - возможен и в тонком клиенте, вот ссылка на публикацию:http://infostart.ru/public/188259/
Мы работаем в тонком клиенте. Решение на которое ссылаетеь Вы, рассматривалось и даже приобреталось если не ошибаюь, но нас не устроило.
И не надо про тонкие клиенты и т.д.

Что на это ответить?...пожалуй цитатой из одного известного фильма: "Надо, Федя, надо!"
32. Стас Стас (glime) 41 12.11.13 14:05 Сейчас в теме
спасибо большое, счас пробовать буду
33. Татьяна Фролова (Мать Тереза) 12.12.13 22:32 Сейчас в теме
А для УТ 11.0.9.12 будет работать?
34. Tsaregorodtsev (TSSV) 13.12.13 07:18 Сейчас в теме
(33) Мать Тереза, конкретно обработка из вложения - не думаю. Я изначально делал ускорение списка подбора в 11.0. Суть в том, что нужно изменить запрос формы подбора.
35. Михаил Григорьев (Mails79) 12 26.12.13 12:33 Сейчас в теме
УТ 11.1 на 8.3 (конфа типовая) Подбор товара в документы закупа вообще не открывается. В отладчике ПриСозданииНаСервере, форма подбора, отрабатывается, но в ПриОткрытии не переходит. Виснет.
Попробовал отключить динамические запросы не помогло. Подскажите кто ни будь, куда копать?
36. Tsaregorodtsev (TSSV) 26.12.13 13:04 Сейчас в теме
(35) Mails79, Между ПриСозданииНаСервере и ПриОткрытии вызывается ИерархияНоменклатурыПриАктивизацииСтроки
37. Dima Dima (bayce) 18 08.01.14 01:31 Сейчас в теме
А как быть с обновлениями конфигурации?
38. Tsaregorodtsev (TSSV) 09.01.14 00:41 Сейчас в теме
(37) bayce, про обновления придется забыть ... - это шутка ) Если серьезно, то существуют методики доработки, оптимизированные под удобство обновления. Вот публикация на эту тему: http://infostart.ru/public/170935/
39. Александр Кислицин (alekckuc) 14.02.14 09:30 Сейчас в теме
Почему то сравнение выложенного файла с типовым подбором не находит существенных изменений. Может конечно я что то делаю не так подскажите плиз.
40. Tsaregorodtsev (TSSV) 15.02.14 10:41 Сейчас в теме
(39) alekckuc, Самое главное - это изменение текста запроса. Вы можете сравнить запросы, сохранив предварительно их тексты в текстовые файлы и далее сравнить сами файлы. При этом, в типовой конфигурации текст запроса строится динамически и его текст можно получить только в отладчике. После изменения текста запроса и его размещение в качестве источника данных списка, нужно будет отключить динамическое формирование запроса списка в типовой конфигурации, для этого, в процедуре:
Процедура УстановитьТекстыЗапросовСписковФормыПодбора(Форма)

в самом начале добавить код:

Если Форма.КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма" Тогда
Возврат;
КонецЕсли;

Так же у меня есть текстовые файлы исходного и измененного запросов для УТ 11.0, могу прислать, пишите свою почту в личку.
41. Владимир Жуков (V_Zhukov) 4 20.05.14 23:15 Сейчас в теме
На 11.0 заработало сходу, только в запросе пришлось убрать строку справочник.свойства, т.к. в нашем релизе этого реквизита в справочнике товаров нет. А так всё норм.
42. OBEH (OBEH) 08.08.14 02:54 Сейчас в теме
Интересно, а для последних версий, например Управление торговлей, редакция 11.1 (11.1.6.20), эта обработка актуальна?
43. Ruslan Chekushko (2casp) 9 02.10.14 16:40 Сейчас в теме
(42) OBEH, На 11.1.6.24 не работает

Из "коробки" выдает ошибку:
{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(1858)}: Ошибка при получении значения атрибута контекста (КомпоновщикНастроек)
		ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
по причине:
Ошибка при выполнении запроса. Ошибка при выполнении запроса.
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(79, 62)}: Поле не найдено "СвободныеОстатки.ВРезервеОстаток"
СУММА(СвободныеОстатки.ВНаличииОстаток - СвободныеОстатки.<<?>>ВРезервеОстаток) КАК Доступно
...Показать Скрыть
44. 6y6ka_gop Robinovich (6y6ka_gop) 27.11.14 16:34 Сейчас в теме
Добрый день! Тоже столкнулся с данной проблемой в подборе. прошу подсказки. Вы говорите главное - это изменение текста запроса. Залез в модуль вижу что для обработки формируются три запроса: по списку номенклатуры, по списку характеристики и по списку номенклатуры поставщика. выходит надо изменить все три? также был бы очень признателен если есть возможность прислать тект запроса мне на почту: fenix933@mail.ru
45. Илья (SOAD) 23.03.15 09:58 Сейчас в теме
Индексы полнотекстового поиска (ППД) эта обработка использует?
46. Илья (SOAD) 19.06.15 06:26 Сейчас в теме
Статья и проделанная работа исходя из статьи хороша, но вот то - что выложил автор для скачивания, половинчатая если не сказать грубо фигня. Во первых зачем то выложил обработку которая идентична типовой. Во вторых если уж сделал оптимизированный запрос - то и выкладывай его. К сожаление запрос автор не выложил. Зато выложил найденное место, где нужно отключить одну процедуру - ту саму которая подтягивает текст запроса для динамического списка формы подбора.

Вопрос автору - зачем было выкладывать обработку которая идентична типовой? Почему не выложил оптимизированный запрос?
47. Гость 19.06.15 10:07 Сейчас в теме
SOAD,
В публикации сказано:
"Во вложении вы найдете измененную обработку подбора и отчет о сравнении объектов. Суть описанных изменений воспроизведена мной специально для данной публикации в релизе УТ 11.1.2.10."
Во вложении 2 файла:
1) Отчет о сравнении конфигураций - очевидно типовой УТ 11.1.2.10 и измененной.
2) Измененная обработка подбора. Измененный запрос вам следует искать в свойствах динамического списка СписокНоменклатура, это видно из отчета о сравнении.