Загрузка внешних обработок

Автор АЛьФ, 17 февраля 2024, 11:09

« назад - далее »

АЛьФ

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

Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert")

Стоит ли продолжать обдумывать это дело?

Djelf

#1
Зачем это нужно, если уже есть ПриЗагрузкеФормы?
Где, как и зачем это предполагается использовать? /* нужны предварительные примеры */
> чтобы она воспринималась, как внутренняя.
А это зачем?

P.S. при редактировании сообщения отваливается продвинутый редактор, остается только текстовой. Не критично...

АЛьФ

Дело в том, что запуск внешнего отчета очень затратен по времени. Внутренний отчет уже загружен и обращение к нему идет намного быстрей.
Например, у нас внесены некоторые расчеты во внешние обработки. Так исторически сложилось. Если запускать расчет в большом цикле, то потеря времени существенна. Можно попробовать вынести в класс. А можно попробовать сделать внешний отчет внутренним.
Если я правильно помню, в ПриЗагрузкеФормы моно только изменить объект, из которого загружается форма. И объект этот должен быть внутри md.

Можно подробней про отваливание редактора? И желательно в специальный раздел, чтобы у меня не потерялось.

АЛьФ

Цитата: Djelf от 17 февраля 2024, 14:13P.S. при редактировании сообщения отваливается продвинутый редактор, остается только текстовой. Не критично...

Похоже, что при нажатии кнопки "редактировать" запускается упрощенный редактор. А если нажать "ещё"-"изменить", то в полном редакторе. Не знаю доступно ли это меню у пользователей или только у админа.

Djelf

#4
А!!! Чуток понял, типа кэш внешних обработок внутри системы 7.7?
Это будет супер круто, и еще круче если печатные формы внешние (+5-10% к печати минимум).

Это не потеряется, тыкаю редактировать и редактора сверху уже нет, чего уж проще (ты уже все нашел, должна быть галочка).

АЛьФ

Цитата: Djelf от 17 февраля 2024, 15:37Это не потеряется, тыкаю редактировать и редактора сверху уже нет, чего уж проще (ты уже все нашел, должна быть галочка).

У пользователей меню "еще " нет?

Djelf

Цитата: АЛьФ от 17 февраля 2024, 15:52
Цитата: Djelf от 17 февраля 2024, 15:37Это не потеряется, тыкаю редактировать и редактора сверху уже нет, чего уж проще (ты уже все нашел, должна быть галочка).

У пользователей меню "еще " нет?
Очередная 8ка, чтоб ее... там есть...

MWW_Ruza

Кнопка Ещё есть. А а ней изменить, когда в своём сообщении нажимаешь. В чужом - только пожаловаться.

Злоп

Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert")
.
Вот у меня есть диспетчер процесса, который в зависимости от процесса передает управление между внешними обработками-формами (вызываются модально). Ускорение загрузки это хорошо, м.б. моргать будет быстрее экран (на одну обработку на разные слои весь процесс вешать не хочется, получается монструозный код, да и мало повторноиспользуемый).
.
Но тут вот какой ВОПРОС1:
допустим:
12:30:00 Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert"); // первый вызов
.. прошло сколько-то минут, ходили-бродили по обработкам
12:40:00 Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert"); // второй вызов
.
на втором вызове - будет ПОВТОРНО ЗАГРУЖЕНА ВНЕШНЯЯ ОБРАБОТКА или будет использоваться уже ранее загруженная...?
если будет использоваться ранее загруженная - это не всегда есть комильфо, потому что на этапе отладки исправляется код/косяки внешней обработки и надо чтобы она ПОДГРУЖАЛАСЬ ПОВТОРНО...
Поэтому если такая повторная подгрузка не происходит - тогда нужен типа третий параметр
Параметр: Режим,
- 0 // по умолчанию, используется ранее подгруженная
- 1 // подгружается заново

Злоп

Вопрос2: как будут работать отладка с такими "превращенными" внешними обработками?

Злоп

Вопрос3: (допник к Вопрос1): Допустим есть разные локальные Сервис'ы, доступные в одном и том же контексте
Сервис1.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
Сервис2.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
- обработка будет загружена повторно или как?

Злоп

Вопрос4 (доп. к ВОпрос1):
сделали Сервис1.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
- Сервис1 уничтожился (закончился контекст видимости Сервис1) - что стало с загруженной обработкой?
сделали в другом контексте Сервис2.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
или повторно зашли в контекст где Сервис1.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
- будет повторно загружена или как?

АЛьФ

Цитата: Злоп от 21 февраля 2024, 21:23Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert")
.
Вот у меня есть диспетчер процесса, который в зависимости от процесса передает управление между внешними обработками-формами (вызываются модально). Ускорение загрузки это хорошо, м.б. моргать будет быстрее экран (на одну обработку на разные слои весь процесс вешать не хочется, получается монструозный код, да и мало повторноиспользуемый).
.
Но тут вот какой ВОПРОС1:
допустим:
12:30:00 Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert"); // первый вызов
.. прошло сколько-то минут, ходили-бродили по обработкам
12:40:00 Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert"); // второй вызов
.
на втором вызове - будет ПОВТОРНО ЗАГРУЖЕНА ВНЕШНЯЯ ОБРАБОТКА или будет использоваться уже ранее загруженная...?
если будет использоваться ранее загруженная - это не всегда есть комильфо, потому что на этапе отладки исправляется код/косяки внешней обработки и надо чтобы она ПОДГРУЖАЛАСЬ ПОВТОРНО...
Поэтому если такая повторная подгрузка не происходит - тогда нужен типа третий параметр
Параметр: Режим,
- 0 // по умолчанию, используется ранее подгруженная
- 1 // подгружается заново

Задумка в том и состоит, что при вызове ЗагрузитьВнешнююОбработку она будет загружена и дальше ты работаешь с ней, как со встроенной. При повторном вызове она загружается опять. Соответственно, если ты в первом параметре указываешь имя встроенной обработки, то она будет заменена.
Значит надо будет делать какую-то систему мониторинга, которая покажет, что внешний файл изменился и надо повторно вызвать метод ЗагрузитьВнешнююОбработку. Т.е. фактически твой флаг и используется у тебя в коде как-то так:
Если НадоЗагрузить = 1 Тогда
Сервис.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
КонецЕсли;

АЛьФ

Цитата: Злоп от 21 февраля 2024, 21:24Вопрос2: как будут работать отладка с такими "превращенными" внешними обработками?
Отладчик не поймет откуда исходный код брать. Обработки же нет фактически в MD.
Может быть получится подсовывать отладчику параметры внешней обработки, чтобы он из нее грузил. Но это надо будет уже по ходу дела разбираться.
Пока считаем, что модули такие отладки не подлежат.

АЛьФ

Цитата: Злоп от 21 февраля 2024, 21:27Вопрос3: (допник к Вопрос1): Допустим есть разные локальные Сервис'ы, доступные в одном и том же контексте
Сервис1.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
Сервис2.ЗагрузитьВнешнююОбработку("Отчет.ОстаткиТовара", КаталогИБ()+"\ExtForms\ОстаткиТовара.ert");
- обработка будет загружена повторно или как?
Повторно. Загрузка никак к объекту не привязана.
Вообще многие (если не все) методы объекта Сервис - это фактически глобальные процедуры типа ОткрытьФорму().