|
Можно ли фоном выполнять процедуру модуля внешней обработки? | ☑ | ||
---|---|---|---|---|
0
OldCondom
30.06.23
✎
13:11
|
Обработка выполняется долго, не хочется блокировать работу пользователя. Если возможность запустить фоном процедуру модуля самой обработки?
Смотрю ДлительныеОперации.ВыполнитьВФоне(): // Параметры: // ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта // или модуля обработки, которую необходимо выполнить в фоне. // Например, "МойОбщийМодуль.МояПроцедура", "Отчет.ЗагруженныеДанные.Сформировать" // или "Обработка.ЗагрузкаДанных.МодульОбъекта.Загрузить". То есть только конфу менять? |
|||
1
RomanYS
30.06.23
✎
13:14
|
(0) судя по нижеследующему всё предусмотрено
Процедура ВызватьФункцию(ИмяФункции, ПараметрыПроцедуры, АдресРезультата) ЧастиИмени = СтрРазделить(ИмяФункции, "."); ЭтоПроцедураМодуляОбработки = (ЧастиИмени.Количество() = 4) И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА"; Если Не ЭтоПроцедураМодуляОбработки Тогда Результат = ОбщегоНазначения.ВызватьФункциюКонфигурации(ИмяФункции, ПараметрыПроцедуры); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); Возврат; КонецЕсли; ЭтоОбработка = ВРег(ЧастиИмени[0]) = "ОБРАБОТКА"; ЭтоОтчет = ВРег(ЧастиИмени[0]) = "ОТЧЕТ"; Если ЭтоОбработка Или ЭтоОтчет Тогда МенеджерОбъекта = ?(ЭтоОтчет, Отчеты, Обработки); ОбработкаОтчетОбъект = МенеджерОбъекта[ЧастиИмени[1]].Создать(); Результат = ОбщегоНазначения.ВызватьФункциюОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); Возврат; КонецЕсли; ЭтоВнешняяОбработка = ВРег(ЧастиИмени[0]) = "ВНЕШНЯЯОБРАБОТКА"; ЭтоВнешнийОтчет = ВРег(ЧастиИмени[0]) = "ВНЕШНИЙОТЧЕТ"; Если ЭтоВнешняяОбработка Или ЭтоВнешнийОтчет Тогда ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); МенеджерОбъекта = ?(ЭтоВнешнийОтчет, ВнешниеОтчеты, ВнешниеОбработки); ОбработкаОтчетОбъект = МенеджерОбъекта.Создать(ЧастиИмени[1], БезопасныйРежим()); Результат = ОбщегоНазначения.ВызватьФункциюОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); Возврат; КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяФункции, "ИмяФункции"); КонецПроцедуры |
|||
2
Garykom
30.06.23
✎
13:15
|
Обработку придется засовывать в дополнительные отчеты и обработки
Или помещать в доступное серверу место на файловой |
|||
3
Жан Пердежон
30.06.23
✎
13:15
|
Если конфа на БСП - можно выполнить в фоне метод доп.обработки
|
|||
4
RomanYS
30.06.23
✎
13:15
|
Вероятно обработку нужно подключить до вызова
|
|||
5
OldCondom
30.06.23
✎
13:16
|
Точно, можно через доп. обработки. Всем спасибо
|
|||
6
Garykom
30.06.23
✎
13:16
|
(2)+ на файловой системе
например часто обработку в каталог тем копируют чтобы оттуда фоновое могло |
|||
7
Garykom
30.06.23
✎
13:16
|
(6) *темп
|
|||
8
RomanYS
30.06.23
✎
13:16
|
(2) воззможно это необязательно и подключения достаточно
|
|||
9
Garykom
30.06.23
✎
13:17
|
(8) метод БСП возможно сам это может
|
|||
10
OldCondom
30.06.23
✎
15:54
|
Это какое-то издевательство.
Не получается передать параметр в команду, подскажите, кто как делает. &НаКлиенте Процедура ТЕСТФОН(Команда) ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(ПолучитьСсылкуНаОбработку()); ПараметрыКоманды.Вставить("ТестПарам", "Тест"); ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'"); Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияДлительнойОперации", ЭтотОбъект); ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне("ВыполнитьЭтап3", ПараметрыКоманды, Обработчик); КонецПроцедуры Модуль объекта обработки, которую вставил как внешнюю: Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения = Неопределено) Экспорт ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Начато фоном"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПараметрыВыполнения = Неопределено); Если ИмяКоманды = "ВыполнитьЭтап3" Тогда ВыполнитьЭтап3(); КонецЕсли; КонецПроцедуры Сообщает "ДА", то есть ПараметрыВыполнения = НЕопределено. Как туда что-то передать? Мне надо процедуру с параметрами выполнять, а не голую. |
|||
11
OldCondom
30.06.23
✎
15:55
|
Для ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне написано:
// Выполняет команду ИдентификаторКоманды в фоне с помощью механизма длительных операций. // Для использования в формах внешних отчетов и обработок. // // Параметры: // ИдентификаторКоманды - Строка - имя команды, как оно задано в функции СведенияОВнешнейОбработке модуля объекта. // ПараметрыКоманды - Структура - параметры выполнения команды. // Состав параметров описан в функции ПараметрыВыполненияКомандыВФоне. // Также включает в себя служебный параметр, зарезервированный подсистемой: // * ИдентификаторКоманды - Строка - имя выполняемой команды. Соответствует параметру ИдентификаторКоманды. // Помимо стандартных параметров может содержать пользовательские для использования в обработчике команды. // При добавлении собственных параметров рекомендуется использовать префикс в их именах, // исключающий конфликты со стандартными параметрами, например "Контекст...". Помимо стандартных параметров может содержать пользовательские для использования в обработчике команды - иии?? Как это использовать? |
|||
12
OldCondom
30.06.23
✎
16:00
|
Так тоже не хочет
ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(ПолучитьСсылкуНаОбработку()); ПараметрыКоманды.Вставить("ПараметрыВыполнения", Новый Структура("ТестПарам", "Тест")); ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'"); |
|||
13
OldCondom
30.06.23
✎
16:26
|
Бл*********************
В общем в дебрях общих модулей есть такая штука: ПередаватьПараметры = ( СведенияОВнешнемОбъекте.Свойство("ВерсияБСП") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СведенияОВнешнемОбъекте.ВерсияБСП, "1.2.1.4") >= 0); А у меня старый шаблон для внешних обработок, где я писал Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.1.1.1"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |