|   |   | 
| 
 | Можно ли фоном выполнять процедуру модуля внешней обработки? | ☑ | ||
|---|---|---|---|---|
| 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"); | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |