Функции "слоупока": как заставить открываться "Все функции" в 97 раз быстрее!

09.03.22

Разработка - Инструментарий разработчика

Наверное, каждый программист 1С (да и не только программист), открывая «Функции для технического специалиста» (ранее «Все функции») на массивных конфигурациях вроде ERP 2.4 и т.п., в своей жизни много раз задавался вопросом – почему же они так долго открываются?? Действительно, в зависимости от мощностей сервера «Все функции» могут открываться от 20 секунд до 2 минут! «Ну, слишком много объектов в конфигурации, огромное количество констант, справочников, документов, регистров… – Отвечали себе страдающие пользователи. – Пока программа обойдёт в цикле все метаданные, пока построит дерево… Тут ничего не поделаешь…». И все они были не правы! Я провёл собственное расследование, которое показало, что 97% времени построения дерева метаданных тратится на…

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расширение конфигурации с исправленными "Функциями для технического специалиста", оптимизированными под релизы платформы с 8.3.14 по 8.3.20, открывающиеся по горячим клавишам Ctrl+Shift + Q
.cfe 18,59Kb ver:1.0
64
64 Скачать (1 SM) Купить за 1 850 руб.
Исправленные "Функции для технического специалиста" (из платформы 8.3.18.1363)
.epf 15,10Kb ver:1.0
45
45 Скачать (1 SM) Купить за 1 850 руб.

 

Наверное, каждый программист 1С (да и не только программист), открывая «Функции для технического специалиста» (ранее «Все функции») на массивных конфигурациях вроде ERP 2.4 и т.п., в своей жизни много раз задавался вопросом – почему же они так долго открываются??

Действительно, в зависимости от мощностей сервера «Все функции» могут открываться от 20 секунд до 2 минут!

«Ну, слишком много объектов в конфигурации, огромное количество констант, справочников, документов, регистров… – Отвечали себе страдающие пользователи. – Пока программа обойдёт в цикле все метаданные, пока построит дерево… Тут ничего не поделаешь…».

И все они были не правы! Я провёл собственное расследование, которое показало, что 97% времени построения дерева метаданных тратится на…  Однако давайте сохраним интригу. Устраивайтесь поудобнее, нас ждёт интересное расследование, в результате которого, исправив один маленький косяк разработчиков платформы 1С, мы сократим открытие «Всех функций» с 2 минут до 3 секунд!

Поехали!

И первый вопрос, который нам предстоит решить, – как достать исходный код обработки «Функции для технического специалиста», ведь это системная обработка, которая зашита где-то внутри платформы.

К счастью, в этом нам помогла данная публикация: Недокументированное использование стандартных форм.

Воспользовавшись обработкой из данной статьи, я извлёк «Функции для технического специалиста» из платформы 8.3.18.1363 во внешнюю обработку.

Открываем извлечённую обработку в конфигураторе и восстанавливаем связь между реквизитами формы и элементами (в приведённой статье это описывается).

И смотрим код формы. Первое, что бросается в глаза, – весь код написан на английском языке, что довольно непривычно наблюдать 1С-никам. Но для нас это сейчас не играет роли.

Признаться честно, я не стал сразу искать в коде ошибку, вызывающую тормоза. Я был, как и многие, уверен, что ошибки там никакой нет, и дело просто в большом количестве метаданных (не могли же мудрые мужи совершить какой-то очевидный косяк в обработке, которой пользуются миллионы каждый день на протяжении последних лет 10, правда?), и возможно, нерациональной реализации обхода метаданных на уровне платформы.

Поэтому сразу бросился оптимизировать обработку другими способами. Ниже опишу свои потуги на данном поприще:

Проблема:

Запуская «Все функции», чаще всего нам надо открыть объект какой-то определённой ветки. Справочник/документ/регистр…  При этом при открытии каждый раз подгружаются ВСЕ объекты метаданных, 90% которых нам изначально не нужно.

Решение:

При открытии обработки заполняем только верхний уровень метаданных. Открытие происходит мгновенно, затем пользователь разворачивает конкретную ветку метаданных, например «Справочники», и именно в этот момент программа подгружает все справочники в дерево. Да, программа подвисает в момент раскрытия ветки, но отрабатывает в 10 раз быстрее, потому что тратит время на подгрузку именно той ветки, которая нам нужна, а не всех.

Минусы решения:

Воспользоваться поиском можно только по подгруженным веткам метаданных. Если по привычке пользователь начнёт сразу вводить название объекта в поиск, не развернув ни одной ветки метаданных, он вообще ничего не найдёт.

 

Проблема:

Чаще всего мы используем «Все функции» для доступа к одним и тем же объектам, которые неудобно запускать из интерфейса подсистем (либо мы не знаем, где лежат эти объекты в подсистемах, либо объекты вообще не выведены в интерфейс). Суть в том, что, работая с программой, мы и сегодня, и завтра, и через неделю, скорее всего, будем запускать одни и те же объекты, которые вряд ли изменятся. Тогда зачем каждый раз при перезапуске 1С мы заново перечитываем все метаданные?

Решение:

Можно 1 раз считать метаданные, построить дерево и сохранить его в кэш, воспользовавшись хранилищем настроек пользователей. А при открытии «Всех функций» просто подгружать дерево метаданных из кэша. Скорость открытия обработки в таком случае сокращается до 2 секунд! При этом поиск по метаданным работает сразу, как мы привыкли.

Минусы решения:

При изменении метаданных, добавлении/удалении/переименовке объектов нам будут отображаться устаревшие данные из кэша. Частично можно обойти этот момент, добавив на форму кнопку «Перечитать». Либо делать перечитку метаданных и актуализацию кэша при запуске системы в фоновом задании. В принципе, с натяжкой можно считать это решение оптимальным, но оно требует много танцев с бубном и мало кто захочет так заморачиваться.

 

И тут мне в голову начинают закрадываться сомнения, что типовой код построения дерева метаданных так уж непогрешим. Виной всему популярная обработка «Администратор 1С (редактор объектов)».

Ведь при выборе там объекта для редактирования открывается по сути то же самое дерево метаданных, и открывается оно всего за пару секунд.

 

 

Как же так?

Давайте разбираться…  С этого момента, собственно, начинается наше РАССЛЕДОВАНИЕ! Запустим «Замер производительности» на фрагменте кода, который заполняет ветку метаданных «Справочники», и посмотрим, куда система тратит наши ресурсы.

Результаты, думаю, поразят многих:

 

 

Действительно, почти 97% времени система тратит на ВСТАВКУ ИКОНКИ справочника в каждую строку дерева! Собственно, всё… РАССЛЕДОВАНИЕ ЗАВЕРШЕНО!

Стоп... Но почему так много?

А вот почему: каждый раз в цикле мы обращаемся к библиотеке картинок, а затем через точку уже к её элементу «Справочник». И так тысячи раз в цикле…

Но ведь… Можно один раз считать из библиотеки картинок иконку справочника в переменную, а в цикле просто вставлять значение из этой переменной?

Оптимизируем наш код:

 

 

Результаты шокируют: вместо 11 секунд ветка метаданных «Справочники» считывается меньше чем за секунду!

Проделаем эту операцию с каждым объектом метаданных. В самом начале процедуры считаем единожды нужные нам картинки из БиблиотекиКартинок и в цикле вставляем уже данные из этих переменных.

 

 

Результат: вместо 2 минут дерево метаданных строится 3 секунды!

Спасибо вам, уважаемые разработчики платформы. Суммарно сотни тысяч часов разработчиков и консультантов за все эти годы потрачены на неоптимальное доставание картинок из библиотеки в цикле…

P.S. Уважаемое сообщество, большая просьба, у кого есть возможность – донесите этот откровенный баг до разработчиков платформы, чтобы в новом релизе это пофиксили. Мы уже достаточно натерпелись!

P.P.S. А теперь небольшие мысли по поводу того, как жить дальше. В голову приходят 3 варианта:

1) Открывать «Все функции» каждый раз из внешней обработки.

2) Добавить расширение конфигурации, в него поместить подсистему «Все функции» и исправленную обработку.

 

 

Ну, либо в «НСИ и администрирование» добавить одним из пунктов. Суть в том, чтобы максимально быстро обеспечить открытие из интерфейса. Также можно назначить, например, чтобы подсистема отображалась только под полными правами.

3) Как мы знаем из обработки «Преобразование стандартных форм» (та самая статья, которая упоминалась в начале), обработка «ВсеФункции» хранится в этом ресурсном файле:

 

 

Если каким-то образом исправить код обработки в этом файле, а затем подменить файл в папке с установленной программой на клиентской машине, то типовая платформенная кнопка «Функции для технического специалиста» будет открывать нашу исправленную обработку вместо типовой. Пока не разбирался с реализацией данного варианта. Возможно, вскоре статья будет дополнена.

В приложении к данному материалу прикрепляю исправленную обработку «Функции для технического специалиста» из платформы 8.3.18.1363.

Спасибо за внимание! Берегите своё время! J

-------------------------------------------------

UPD: Дорогие коллеги, спасибо большое всем вам за то, что так тепло встретили данную публикацию. Честно говоря, даже в самых смелых мечтах не думал, что она вызовет здесь такой резонанс. Мне очень приятно! Также это внушает некую надежду на то, что в будущих релизах платформы данный косяк будет оперативно исправлен.

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

Поэтому я разработал расширение, в котором находится наша исправленная обработка "Все функции" и общая команда, которая открывает её при нажатии на горячие клавиши Ctrl + Shift + Q (клавиши можно заменить на любые другие).

Так же, как справедливо заметили в комментариях, данная обработка зависит от релиза платформы, поэтому, например, выдранная из версии 8.3.18, она не запустится на 8.3.14, а на 8.3.20 не будет отображать новых системных команд.

Я это исправил. Вытащил обработку из последнего на сегодняшний день релиза - 8.3.20.1710 и добился её корректного открытия на платформах, начиная с 8.3.14. Возможно в более ранних версиях она тоже будет работать, дайте знать в комментариях)

На сегодняшний день решение с расширением протестировано на следующих релизах:

  • 8.3.14.1976
  • 8.3.15.1747
  • 8.3.16.1063
  • 8.3.18.1363
  • 8.3.20.1710  

Надеюсь, это кому-то будет полезным) Всем ещё раз спасибо и удачи!)

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159655    875    399    

862

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7860    58    23    

69

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23491    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10460    36    25    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15426    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188043    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17317    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7717    8    35    

23
Вознаграждение за ответ
Показать полностью
Отзывы
5. laperuz 47 09.03.22 09:52 Сейчас в теме
Спасибо за расследование. Написал на партнерский https://partners.v8.1c.ru/forum/topic/2051177
ixijixi; user1654204; user591389_aska_rabota; tormozit; A.ts; Дмитрий74Чел; tulakin_s; sttt; mark_oilbass; michmich; Brawler; AlexK_2012; Oleg_nsk; Рамзес; Alien_RS_Forever; KoC_one; user666919_budulau; Dach; Tavalik; marku; antonius888; t.v.s.; VAAngelov; maksa2005; Cat43r; Andy_NTG; Batman; SerVer1C; shapoval; Jeka44; ssh_analit; yak127; mrChOP93; alk; PowerBoy; shard; RustIG; mmch; JohnyDeath; kser87; Samarin; Somebody1; rpgshnik; +43 Ответить
20. ixijixi 1913 09.03.22 11:28 Сейчас в теме
А теперь небольшие мысли по поводу того, как жить дальше. В голову приходят 3 варианта:

Есть 4-й вариант - https://infostart.ru/public/1370492/
ivnik; KoC_one; Denium79; sapervodichka; XilDen; 0x00; +6 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kozusenok 54 09.03.22 08:36 Сейчас в теме
Интересно как разработчики упустили этот момент.
35. Darklight 33 10.03.22 14:21 Сейчас в теме
(1)Хм... странно.... очень странно.... Неужели получение картинок из библиотеки картинок настолько затратно? Это же статичные данные. Тупо поиск по хеш-имени в очень небольшом списке (не говоря уже о том, что там вообще можно было бы сразу при компиляции статический адрес подставлять - список то фиксированный на стадии компиляции... хотя есть ещё динамические расширения - но это уже отдельная тема - можно и перекомпилировать при динамическом подключении расширения с библиотекой картинок) + кеширование двоичных данных картинки на клиенте/на сервере. Ведь эта операция происходит не только в этом диалоге. А во множестве других (в т.ч. не типовых) обработках со списками, которые тягают картинку из библиотеки картинок в свои элементы строк.

Ну а если уж совсем оптимизировать - то нужно динамически заполнять ещё ни разу не раскрытые ветки дерева - а не всё дерево сразу! Будет совсем моментально открываться!
Эх.... вот если бы ещё многопоточность была....
anatoliy.kichuk; +1 Ответить
61. Brawler 458 19.03.22 20:22 Сейчас в теме
(35) тогда с быстрым поиском будут проблемы думаю
65. Darklight 33 21.03.22 10:27 Сейчас в теме
(61)Да, поиск придётся свой делать - но по идеи - его можно сделать быстрее штатного. Ну и не так уж часто нужно искать прям по всем вида метаданных - обычно ищут имя конкретного вида - можно раскрыть ветку этих видов и выполнить по ним поиск.

Ещё одним вариантом оптимизации является такой подход:
- Сначала открыть дерево с заполненным только верхним уровнем (т.е. только узлы видов метаданных)
- Соответственно при раскрытии узлов - заполнять по факту раскрытия
- Сразу перед открытием формы - затем запустить фоновый процесс - который уже заполнит всё дерево метаданных (более того - как дерево, так и линейный список - в виде соответствия коротких имён, пересечение коротки имён - в виде ещё вложенного соответствия уже длинных имён) - со значениями - идентификаторами строк дерева.
- По результату заполнения дерево загрузить в дерево формы.
- При поиске сначала делать быстрый поиск в соответствии по (короткому) имени - затем уже перебором по вхождению подстроки (можно тоже запустить фоновый процесс)

Если бы можно было бы хранить временную SQL таблицу всё время пока открыта форма (если можно - укажите как - может можно закешировать объект "МенеджерВременныхТаблиц", чтобы он не терял таблицы, которыми владеет - я не пробовал) - то проще было бы сделать поиск во временной таблице (через оператор "ПОДОБНО") прям запросом на сервере. Возможно это можно было бы сделать грубее - не средствами 1С - а напрямую - через внешний клиент SQL, ну или через внешние данные - создав просто свою таблицу в СУБД.

Ещё один хитрый вариант - это формирования сводной строки, содержащей все наименования (так же как в указанном соответствии, включая вложенное соответствие, без дублей наименований) - только в виде одной большой строки (вложенные сроки будут внутри тоже - просто отделены от верхнего уровня скобочками, например таким Номенклатура"{Справочник.Номенклатура=121,Документ.РеализацияТоваровУслуг.Товары.Номенлкатура=2876,Документ.ПоступлениеТоваровУслуг.Товары.Номенлкатура=3541,}" и т.п. (вложений будет много)) - тут формат строки можно ещё оптимизировать. Знак "="отделяем идентификатор строки в дереве. Тогда можно делать поиск через "СтрНайти" (или даже через RegEx - ВК или скоро обещали-таки наивная поддержка в платформе 1С Предприятие 8) искать по подстроке - а затем определять все идентификаторы срок, которые соответствуют найденной подстроке. Можно отдельно (или сразу только такие) ещё сделать строки для каждой групы видов метаданных - когда поиск будет идти по элементов раскрытой группы видов метаданных (а если нужно по всем, а консолидированной строки нет - то нужно будет в цикле все строки групп видов метаданных перебрать) - это тоже можно делать на сервере, и даже в фоне.

Фоновые процессы, правда, будут требовать интеграции в конфигурацию (хотя есть способы запуска в фоне методов внешних обработок в БСП 3.x без интеграции в конфигурацию)

А поиск по строке через RegEx будет не только самым быстрым - но и даст особые возможности паттерном поиска!
2. John_d 5891 09.03.22 09:17 Сейчас в теме
Спасибо, за проделанный труд! Запрос в цикле, а сколько еще таких запросов в цикле в остальных местах платформы. Только наверное писатели платформы не читают инфостарт, сообщите об этом 1с может в каком-нибудь будущем релизе исправят.
simuljakr; m1_1976; KoC_one; rpgshnik; +4 Ответить
4. muskul 09.03.22 09:45 Сейчас в теме
(2)Причем в достаточно "критичных" например при пересчете строк в документе на каждую строчку вызывается запрос получения единицы измерения
36. Darklight 33 10.03.22 14:28 Сейчас в теме
(2)Вообще хороший вопрос на засыпку (для собеседования) - на тему того, что обращение к коллекции библиотеки картинок - порождают запросы к СУБД и передачу объёмных данных (1С есть и zip коллекции картинок под одним именем с разным dpi - они могут быть весьма тяжёлыми). Я вот об этом не задумывался - думал это всё метаданные - они кэшируются на стороне клиента/сервера при первом обращении и до момента изменения объекта владельца этих метаданных.
Наверное и обращение к объекту "ОбъектМетаданных" тоже порождает запросы к СУБД!
3. kser87 2470 09.03.22 09:25 Сейчас в теме
Даааа уж. Видимо все привыкли и всех все устраивает
15. RustIG 1747 09.03.22 10:41 Сейчас в теме
(3) к такому нельзя привыкнуть, но это можно обойти - я к примеру создал внешнюю обработку, куда закидываю все , с чем работаю - так называемый рабочий стол создал для себя
Прикрепленные файлы:
idjumatov; +1 Ответить
16. kser87 2470 09.03.22 10:51 Сейчас в теме
(15) а где же "Все функции"?
21. RustIG 1747 09.03.22 11:47 Сейчас в теме
(16) все что нужно мне - я вытаскиваю по своим кнопкам - поскольку "Все функции" работает тормознуто...
За редким исключением открываю "Все функции..." - за редким исключением - речь о том, что для постоянной работы не нужно использовать ни "Все функции", ни стандартный интерфейс конфигурации - он, между нами говоря, запутанный и неудобный - при чем ни в УНФ , ни в КА до сих пор не придумали, как использовать интерфейс, чтобы был френдли.
Kolesonik; +1 Ответить
22. kser87 2470 09.03.22 12:00 Сейчас в теме
(21) честно говоря, постоянно использую интерфейс в ERP. В какой-то момент решил просто выучить расположение всех нужных команд и получилось. Что-то конечно пришлось вытаскивать.
Azamatex; +1 Ответить
26. RustIG 1747 09.03.22 12:32 Сейчас в теме
(22)
честно говоря, постоянно использую интерфейс в ERP. В какой-то момент решил просто выучить расположение всех нужных команд и получилось. Что-то конечно пришлось вытаскивать.


Я не про это. Вы пишите про вынужденную меру - многие так делают - просто выучивают расп....

Я про то, что лично мне не удобно учить расположение всех нужных команд, и я предложил свое видение...
38. Darklight 33 10.03.22 14:37 Сейчас в теме
(22)в ERP работает глобальный поиск по метаданным
37. Darklight 33 10.03.22 14:36 Сейчас в теме
(21)Ну... интерфейс в Такси действительно не ахти.... но я уже привык - главное вынести главное меню разделов вверх горизонтально (что более привычно и по месту экономично) и не забывать что по интерфейсу есть поиск (работает по всем разделам, а не только по текущему). А некоторые типовые поддерживают поиск по метаданным прям в поле глобального поиска - без открытия всех функций (в других конфах тоже можно это сделать - главное чтобы платформа была не ниже 8.3.14, кажется, и в конфигураторе в корне метаданных нужно отключить встроенную в конфигурацию форму поиска - она давно в таких конфах устарела и мешает использовать платформенный более продвинутый механизм)
40. RustIG 1747 10.03.22 14:53 Сейчас в теме
45. RustIG 1747 11.03.22 12:07 Сейчас в теме
(37)
главное вынести главное меню разделов вверх горизонтально

как это делается?
46. XilDen 489 11.03.22 12:38 Сейчас в теме
Вот тут:
Прикрепленные файлы:
Darklight; +1 Ответить
5. laperuz 47 09.03.22 09:52 Сейчас в теме
Спасибо за расследование. Написал на партнерский https://partners.v8.1c.ru/forum/topic/2051177
ixijixi; user1654204; user591389_aska_rabota; tormozit; A.ts; Дмитрий74Чел; tulakin_s; sttt; mark_oilbass; michmich; Brawler; AlexK_2012; Oleg_nsk; Рамзес; Alien_RS_Forever; KoC_one; user666919_budulau; Dach; Tavalik; marku; antonius888; t.v.s.; VAAngelov; maksa2005; Cat43r; Andy_NTG; Batman; SerVer1C; shapoval; Jeka44; ssh_analit; yak127; mrChOP93; alk; PowerBoy; shard; RustIG; mmch; JohnyDeath; kser87; Samarin; Somebody1; rpgshnik; +43 Ответить
29. shard 281 09.03.22 16:42 Сейчас в теме
(5) а еще возникло подозрение что при открытии конфигурации в конфигураторе аналогичный подход к картинкам применяется, но это проверить отладчиком уже не выйдет
michmich; 2007lex; evn-zorin; +3 Ответить
39. Darklight 33 10.03.22 14:38 Сейчас в теме
(29)Можно в СУБД потрассировать запросы
47. XilDen 489 11.03.22 12:40 Сейчас в теме
(5) Спасибо! Надеюсь, какая-то реакция последует)
71. Marat2001 07.07.22 14:28 Сейчас в теме
не удалось подключить расширение на 1С:ERP рел. 2.5.8.207, платформа 8.3.20.1613
см скрин
Прикрепленные файлы:
72. XilDen 489 08.07.22 06:19 Сейчас в теме
6. Somebody1 69 09.03.22 10:11 Сейчас в теме
Отличное расследование! Спасибо.
7. tormozit 7230 09.03.22 10:16 Сейчас в теме
Скорее тут баг/неоптимальность в платформе, а не в коде формы. Не должно так долго выполняться обращение к картинке.
VKislitsin; Brawler; Darklight; +3 Ответить
57. Olenevod 33 14.03.22 18:29 Сейчас в теме
(7) Так может это первый раз обращение к библиотеке долгое. Наблюдал такое когда картинку кнопки с клиента менял.
62. Brawler 458 19.03.22 20:23 Сейчас в теме
(57) судя по всему с кэшем там траблы
69. tormozit 7230 14.06.22 15:12 Сейчас в теме
(7) Неоптимальность платформы обращения к картинкам библиотеки в 8.3.22 вроде как исправили.
"Ускорено обращение к свойствам объекта БиблиотекаКартинок (в том числе последовательные обращения к одному и тому же свойству)"
Дмитрий74Чел; XilDen; Evg-Lylyk; +3 Ответить
70. XilDen 489 15.06.22 10:28 Сейчас в теме
(69) Слава богу, услышали...
74. Дмитрий74Чел 239 24.08.22 12:41 Сейчас в теме
(5), (69) протестировал на 8.3.22 - исправили
75. XilDen 489 25.08.22 06:44 Сейчас в теме
8. SlavaKron 09.03.22 10:21 Сейчас в теме
Если каким-то образом исправить код обработки в этом файле
Только непосредственное изменение в файлах mngbase_root.res и mngbase_ru.res, но это вроде как нарушает лицензионное соглашение.
9. Alias 176 09.03.22 10:26 Сейчас в теме
Сталкивался с этой ситуацией совсем недавно, когда рисовал в своей обработке собственное дерево метаданных.
Точно так же как и здесь, был озадачен почему оно очень долго строится, сделал замер, и точно так же как здесь увидел что 95% тратится на установку картинки.

Плюнул на "красивости" и просто убрал иконки :) для MVP этого было достаточно.

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

Спасибо за внимательность.
triviumfan; JohnConnor; Kolesonik; +3 Ответить
13. SlavaKron 09.03.22 10:30 Сейчас в теме
(9) Тоже был удивлён, что первое обращение не кешируется на уровне платформы.
triviumfan; +1 Ответить
14. RustIG 1747 09.03.22 10:31 Сейчас в теме
(9)
Привык слишком доверять разработчикам платформы.

всегда писал на ИС, что платформа и стандартные функции платформы - это черный ящик, мы не знаем насколько корректно и оптимально написаны алгоритмы. Периодически кто-то устраивает замеры, какой метод работает быстрее. Последний раз сравнивали запись текста в 1000 строк через разные объекты: ЗаписьТекста, Хмл и т.д.
10. user779117 09.03.22 10:27 Сейчас в теме
11. RustIG 1747 09.03.22 10:28 Сейчас в теме
12. ubnkfl 09.03.22 10:30 Сейчас в теме
Хорошо, спасибо, рассмотрим.
Прикрепленные файлы:
17. VKislitsin 1013 09.03.22 11:04 Сейчас в теме
И тут мне вспомнилась какая-то публикация, где автор сообщал о том, что выполнение типовых отчетов "с котиком" существенно ускоряется если отключить отображение котика. Тогда я подумал: "Да ладно, не может такого быть. Наверняка это просто субъективное восприятие". А теперь, с учетом этой публикации и высказывания Сергея Старых в (7), мне уже так не думается.
корум; Darklight; +2 Ответить
18. shard 281 09.03.22 11:11 Сейчас в теме
и эти люди запрещают мне ковыряться в носу... winhex'ом...
ixijixi; bulpi; eViLL; mrChOP93; +4 Ответить
19. s22 22 09.03.22 11:19 Сейчас в теме
не в 97, а 60 )
и пошлите статью в 1с )
20. ixijixi 1913 09.03.22 11:28 Сейчас в теме
А теперь небольшие мысли по поводу того, как жить дальше. В голову приходят 3 варианта:

Есть 4-й вариант - https://infostart.ru/public/1370492/
ivnik; KoC_one; Denium79; sapervodichka; XilDen; 0x00; +6 Ответить
48. XilDen 489 11.03.22 12:47 Сейчас в теме
(20) Точно! Шикарное решение) Как-то упустил, что на общую команду можно назначать горячие клавиши)
Тогда самое идеальное сейчас - создать расширение, В него поместить исправленную обработку и общую команду, которая открывает эту обработку. Команде назначить горячую клавишу. Это будет даже быстрее, чем тянуться в меню "Все функции" через интерфейс))
Сейчас набросаю и выложу расширение сюда, кому-нибудь пригодится)
0x00; ixijixi; +2 Ответить
23. TimurD 6 09.03.22 12:18 Сейчас в теме
Я с подобным уже сталкивался, в ERP 2.4. Подсистема Бюджетирования. При открытии формы выбора какого-то объекта, происходит рисования дерева, где в качестве источника выступают реквизиты составного типа. К примеру, реквизит какойнить Аналитика1, там соответственно составной тип, и пошел рекурсивно строить дерево. И для каждой ветки таким же образом (как описано в статье) происходила вставка картинки. И так же на месте вставки картинки было самое большее время выполнения. Правда мне танцы с картинками не особо помогли, в итоге закоментил код (для теста) присваивания картинки - алгоритм хоть стал работать чуть быстрее, но все равно работал очень долго. Нужно было какойнить кэш использовать. Но аналитики завернули исправление, типа и так сойдет((
Wilka; &rew; +2 Ответить
28. &rew 52 09.03.22 15:58 Сейчас в теме
(23)Бюджетирование - это вообще феерия неоптимальности. Один только механизм сбора фактических данных чего стоит. Правила в хранилище лежат, и чтобы отчёт с отбором сформировать один фиг всё статьи бюджетов перебрать надо. И чем детальнее бюджет тем дольше работает оборотная ведомость по статьям и по показателям. А! и да-в цикле!
24. sapervodichka 6915 09.03.22 12:22 Сейчас в теме
Была в 2021 году публикация универсального расширения, где комбинацией быстрых клавиш открывалась строка с быстрым поиском и открытием форм объектов, я ей пользуюсь вместо Все функции (которая реально затормаживает).
Прикрепленные файлы:
25. sapervodichka 6915 09.03.22 12:27 Сейчас в теме
(24) плюс в новых платформах сверху окно поиска появилось, также заменяет все функции
Прикрепленные файлы:
abcopel; Darklight; user1216454; +3 Ответить
27. sapervodichka 6915 09.03.22 12:54 Сейчас в теме
(24) нашел ))) у Колкина Максима было https://infostart.ru/public/1370492/ (я смотрю "рожа" знакомая выше пишет)
30. CheBurator 2712 09.03.22 18:19 Сейчас в теме
Баг - это когда деление на ноль типа.
а так - ну писали код "оглоеды" какие-то? чего уж проще - перебрать да вывести. Вот и посадили "студента". Когда конфиги были простые - никого не напрягало, стали объемные - до оптимизации руки не дошли, да и никто и не задумывался об оптимизации. В принципе, имхо, классический пример когда код пишет "студент", а верификации хотя бы на уровне выбранного решения (по коду) - никто не делает. Программа - промышленная, а подходы - как у фикса/фрилансера... написал и забыл...
Могу ошибаться, конечно.
username23; Lemmonbri; &rew; +3 Ответить
31. PerlAmutor 155 09.03.22 19:16 Сейчас в теме
Было бы неплохо добавить на уровне платформы сбор аналитической информации об использовании. Которую можно было включать отдельным или всем пользователям и отправлять замеры производительности в компанию 1С. А на сайте 1С сделать возможность загружать (или делиться) обезличенные данные показателей производительности с графиками, чтобы клиенты компании 1С могли сравнить общую производительность каждой версии платформы относительно друг друга.
nekit_rdx; Lemmonbri; RustIG; Drivingblind; sapervodichka; +5 Ответить
67. Дмитрий74Чел 239 24.03.22 13:27 Сейчас в теме
(31) на сколько помню, в ERP уже есть встроенный сбор статистики фирмой 1С. Отключаемый. Но результаты этого сбора данных в открытом доступе боюсь никогда не увидим.
32. AP_ROSTOV 10.03.22 08:50 Сейчас в теме
"Кстати, «1С» было вначале названием нашей поисковой программы: не более 1С (секунды) требовалось для получения требуемой информации"(с) Борис Нуралиев (пруф)
Дмитрий74Чел; nekit_rdx; PowerBoy; Yashazz; tormozit; plmshka; Darklight; +7 Ответить
42. CheBurator 2712 11.03.22 00:26 Сейчас в теме
(32) ага, а 8-ая версия - это повернутая бесконечность ожидания
username23; unknown181538; Дмитрий74Чел; +3 Ответить
33. Evg-Lylyk 4842 10.03.22 09:19 Сейчас в теме
Несколько раз сталкивался что БиблиотекаКартинок не кэшируется и обращение к нему может быть долгим.
Стандартная форма все функции это форма которая не закрывается при закрытии, поэтому она всегда помнит свое состояние даже запущенный поиск. Кэширование есть.
Еще обратите внимание что вшитые в платформу обработки платформозависимые т.е. в каждой новой платформе они могут отличаться и если вы хотите подменять стандартную нужно это учитывать. К примеру в 8.3.20 появилось много новых стандартных обработок. Еще могут быть проблемы с языком представлений.

В Infostart Toolkit есть аналогичная обработка в которой все эти проблема решены. Открывается она в любой конфигурации за 0,1 с. работает по динамическому считыванию как вы обдумывали, проблема поиска решена своим поиском. В момент ввода строки поиска происходит первое полное считывание.
Дополнительно сделано: Быстрый вызов Alt + A, Представление: Имя или Синоним, Поиск по имени и синониму одновременно, Запуск стандартных обработок заменен своими когда они есть, работает во всех платформах
34. triviumfan 97 10.03.22 14:04 Сейчас в теме
(33) Когда доллар станет стоить 1000 рублей, то, возможно, я куплю ваши ИР, а пока "дорохо-богато".
76. starik-2005 3088 25.10.22 11:50 Сейчас в теме
(34)
Когда доллар станет стоить 1000 рублей
Тоже жду, но нет...
41. cdiamond 235 10.03.22 17:24 Сейчас в теме
Эх, сломайте пожалуйста обработку удаления помеченных, чтоб в 1 секунду и при этом не DR OP DATABASE
43. puzo50 11.03.22 07:10 Сейчас в теме
Спасибо большое за статью. Только теперь заметил обратный эффект - если раньше просто сидел и ждал, когда откроется "эта медленная форма все функции", то теперь каждый раз вспоминаю этого разработчика непарламентскими словами и улыбаюсь, что как же так можно было сделать )
44. aleksey2 88 11.03.22 09:16 Сейчас в теме
в каком релизе это исправят?
49. ZhokhovM 755 11.03.22 15:21 Сейчас в теме
Респект автору публикации!
50. Fox-trot 163 12.03.22 20:34 Сейчас в теме
возможно я что-то не так делаю, но никакой разницы не заметил
52. XilDen 489 13.03.22 13:55 Сейчас в теме
(50) на какой конфигурации проверяли?
53. Fox-trot 163 13.03.22 14:06 Сейчас в теме
(52) Розница 2.2 на 8.3.20.1674 как было пару-тройку секунд так и осталось
пысы по логике автора иконок быть не должно тогда, а они есть
54. XilDen 489 13.03.22 14:25 Сейчас в теме
(53) это довольно маленькая конфигурация, там не так много объектов, чтобы заметить особую разницу.
Разница ощущается на ЕРП, где десятки тысяч объектов, там все функции открываются 2 минуты.
Касательно иконок - читайте материал внимательней, я не отключал иконки, а оптимизировал их получение из библиотеки картинок. Именно обращение к библиотеки картинок в цикле вешало построение дерево на больших объёмах. Мы же получаем картинки из библиотеки единожды, перед циклом. Тем самым экономя ресурсы.
60. FReIM 9 17.03.22 08:48 Сейчас в теме
(54)
Разработчики 1С допустили ошибку за которую выгоняют с экзамена Специалист.
Запрос в цикле.
Картинки так же хранятся в базе данных причем требуется время для получения двоичных данных.
simuljakr; +1 Ответить
64. Brawler 458 20.03.22 10:14 Сейчас в теме
(60) Если картинка и хранится в базе, то это совершенно не очевидный факт для конечного программиста.
Да и не должно его телепать от мысли, а как же это там оно хранится.
Принципы ООП в 1С тоже действуют, и программист использующий экземпляр объекта БиблиотекаКартинок не может знать его внутреннюю реализацию. А вот автор класса БиблиотекаКартинок на основании которого создается экземпляр БиблиотекаКартинок, а может и не создается, если класс статический, должен побеспокоится над тем чтобы картинки хотя бы кэшировались, в хотя бы аля модулях повторного использования, ну или иными способами в платформе, которые нам недоступны ибо мы более высокоуровневые вещи используем.
Не должен я как программист 1С самостоятельно кэшировать вообще все, чтобы не получил от типовых объектов платформы. Я могу что-то закэшировать, а это что-то станет не актуальным потому как там где-то в платформе своё видение данного вопроса.
51. Yashazz 4791 13.03.22 13:33 Сейчас в теме
Не удивлён. Ни картинки, ни метаданные нормально не кэшируются, перечитываются везде максимально по-идиотский и наиболее ресурсоёмко. Ну что ж, ещё заметочка к вопросу о Такси и его "оптимальности"...

А была ж вроде публикация, как стандартную обработку обратно в платформу запихать, нэ?
56. SlavaKron 14.03.22 12:26 Сейчас в теме
(51) Стандартную обработку - да, можно программно подменить, но в данном случае стандартная форма, а стандартные формы подменять пока не научились.
ОткрытьФорму("sysForm:AllFunctionsForm");
63. Brawler 458 20.03.22 10:08 Сейчас в теме
(51) Вот как-то думается мне, что библиотека картинок существовала еще до появления Такси.
Так что нечего сразу в адрес Такси катить бочку, хотя правильнее будет сказать в адрес Управляемых форм.
55. Oleg_nsk 279 13.03.22 19:10 Сейчас в теме
Не могут профессиональные разработчики так ошибаться и не исправлять очевидный баг так долго. Закрадывается параноидальная мысль, что все тормоза платформы, начавшиеся с "Такси", - это какая-то запланированная диверсия с целью вынудить клиентов закупать новое дорогое серверное оборудование.
Hogyoku; nekit_rdx; PowerBoy; shard; Azamatex; +5 Ответить
58. пользователь 15.03.22 19:10
Сообщение было скрыто модератором.
...
59. ADirks 187 16.03.22 11:07 Сейчас в теме
(55) Иной раз пофигизм бывает страшнее осознанных диверсий.
PowerBoy; Brawler; +2 Ответить
66. Дмитрий74Чел 239 24.03.22 13:25 Сейчас в теме
Спасибо! Герои не носят плащей!
68. ipoloskov 164 25.03.22 10:00 Сейчас в теме
Испанский стыд
PowerBoy; Brawler; +2 Ответить
73. Дмитрий74Чел 239 22.07.22 14:30 Сейчас в теме
@XilDen, может глянете еще и "Регламентные и фоновые задания"? Тоже ведь неприлично медленная форма.
77. starik-2005 3088 25.10.22 11:52 Сейчас в теме
(73)
Тоже ведь неприлично медленная форма.
https://infostart.ru/public/371622/
78. adapter 418 31.08.23 15:44 Сейчас в теме
Добрый день. Версия платформы 8.3.21.1393 - не работает расширение. Также медленно формируется как и стандартная форма. Только стандартная после первого открытия кешируется, а из публикации все время тормозит. Да и некоторых пунктов нет. Можете обновить расширение?
79. Serg2000mr 683 21.10.23 04:21 Сейчас в теме
Платформа 8.3.22 - проблема решена. На конфигурации ERP "Функции для технического специалиста" открываются за несколько секунд.
Оставьте свое сообщение