gifts2017

УТ 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
284
.rar 98,58Kb 284 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

в прикрепленном файле кастрированная мной обработка из УТ 11.1.1.17
Прикрепленные файлы:
_ПодборТоваровВДокументПродажи.epf
Bor_ka; vytegra; +2 Ответить
13. Александр Синцов (Sintson) 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) 22.09.13 19:02
Тоже столкнулся с этой проблемой. Только у меня запрос еще сложнее, чем типовой поэтому от динамического списка вообще отказался. Использую простую таблицу. Возникали проблемы при ее заполнении, как оказалось передавать результат запроса или саму таблицу с сервера на клиент очень долго. Выполнение запроса 2-3 сек, а переход с сервера на клиент порядка 20 сек. Не знаю с чем это связано, но пока весь код исполняю на клиенте в толстом клиенте управляемого приложения, в таком варианте все летает.
17. Tsaregorodtsev (TSSV) 23.09.13 10:23
(16) Vo-Va,
но пока весь код исполняю на клиенте в толстом клиенте управляемого приложения, в таком варианте все летает.
А сама форма видимо обычная (не управляемая), вставленная через буфер из другой конфигурации с основным режимом запуска "Обычное приложение"?
18. Владимир Аникин (Vo-Va) 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) 09.10.13 11:17
Уважаемый Tsaregorodtsev, Ваша форма подбора подключается как внешняя обработка?
23. Tsaregorodtsev (TSSV) 09.10.13 12:11
(22) SCSI, В архиве 2 файла. Первый - отчет о сравнении объектов, в нем изменения, которые нужно внести в общий модуль - там пара строк. Второй - сама обработка, которой нужно заменить типовую через "Заменить на внешнюю обрабтку, отчет". Так же предполагается, что в настройках номенклатуры включен стандратный режим поиска в списках.
24. Klesk666 Klesk666 (Klesk666) 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) 17.10.13 13:49
28. Павел (sidka89) 24.10.13 13:12
предыстории позавидовал бы сам Толстой, но за идею благодарность
29. Нина (нинас) 12.11.13 05:19
Спасибо за идею. Попробую ее применить в КА
30. alnovin (alnovin) 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) 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) 26.12.13 12:33
УТ 11.1 на 8.3 (конфа типовая) Подбор товара в документы закупа вообще не открывается. В отладчике ПриСозданииНаСервере, форма подбора, отрабатывается, но в ПриОткрытии не переходит. Виснет.
Попробовал отключить динамические запросы не помогло. Подскажите кто ни будь, куда копать?
36. Tsaregorodtsev (TSSV) 26.12.13 13:04
(35) Mails79, Между ПриСозданииНаСервере и ПриОткрытии вызывается ИерархияНоменклатурыПриАктивизацииСтроки
37. Dima Dima (bayce) 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) 20.05.14 23:15
На 11.0 заработало сходу, только в запросе пришлось убрать строку справочник.свойства, т.к. в нашем релизе этого реквизита в справочнике товаров нет. А так всё норм.
42. OBEH (OBEH) 08.08.14 02:54
Интересно, а для последних версий, например Управление торговлей, редакция 11.1 (11.1.6.20), эта обработка актуальна?
43. Ruslan (2casp) 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) Измененная обработка подбора. Измененный запрос вам следует искать в свойствах динамического списка СписокНоменклатура, это видно из отчета о сравнении.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа