Обмен данными с процедурой-обработчиком оповещения (асинхронная работа)

1. Seraph6 01.04.20 12:01 Сейчас в теме
Читал и форум, и методические рекомендации, но так до конца и не вкурил процесс. И похоже туплю на элементарных вещах.

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

Использую метод
НачатьПомещениеФайла(Новый ОписаниеОповещения("ВыполнитьЗагрузку", ЭтаФорма), АдресВХранилище, ДиалогВыбора, Истина, УникальныйИдентификатор)
, но адрес моего файла во временном хранилище я получаю только внутри процедуры-обработчика оповещения ВыполнитьЗагрузку. Далее подразумевается, что я из этого обработчика напрямую вызову уже серверную функцию, которой передам адрес, и в ней смогу получить исходный файл из временного хранилища.

А если я хочу этот адрес получить в изначальной процедуре выполнения команды? Я надеялся, что обработчик его по ссылке запишет в изначально пустую переменную АдресВХранилище, но нет, она после отработки метода так и остается пустой.

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

Т.е. у меня процедура-обработчик вызывается неявно (асинхронно), и я не понимаю, как из нее получить результат на уровне, где НачатьПомещениеФайла вызывалось.
Найденные решения
3. Seraph6 01.04.20 13:16 Сейчас в теме
В общем, пока что сделал так: вызов основной обрабатывающей файл и ТЧ серверной функции перенес из стартовой процедуры (Команда) в обработчик окончания помещения, чтобы оттуда ей Адрес в хранилище передать. А недостающие ей для работы другие данные передаю в тот же обработчик из стартовой процедуры через ДополнительныеПараметры.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Seraph6 01.04.20 17:53 Сейчас в теме
(5) Я видел вашу статью. Она, несомненно, полезна, но в моем случае крайне избыточна. Мне в итоге хватило примера из встроенной справки - (2). :)
7. Xershi 1484 01.04.20 17:57 Сейчас в теме
(6) ну вы задали вопрос как это работает. Там есть обработка, которая показывает "КАК"!
2. Seraph6 01.04.20 12:03 Сейчас в теме
Вот пример из справки:

&НаКлиенте
Процедура ПоместитьФайлИнтерактивно(Команда)
    ОбработкаОкончанияПомещения = Новый ОписаниеОповещения
        ("ОбработчикОкончанияПомещения", ЭтотОбъект);

    НачатьПомещениеФайла(ОбработкаОкончанияПомещения, , , Истина,     
        ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОкончанияПомещения(Результат, Адрес, 
        ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    Если Результат Тогда
        Сообщить(Адрес);
    Иначе
        Сообщить("Файл не был помещен.");
    КонецЕсли 
КонецПроцедуры
Показать


Вот как этот "Адрес" из обработчика вынуть?
3. Seraph6 01.04.20 13:16 Сейчас в теме
В общем, пока что сделал так: вызов основной обрабатывающей файл и ТЧ серверной функции перенес из стартовой процедуры (Команда) в обработчик окончания помещения, чтобы оттуда ей Адрес в хранилище передать. А недостающие ей для работы другие данные передаю в тот же обработчик из стартовой процедуры через ДополнительныеПараметры.
4. DanDy 52 01.04.20 15:12 Сейчас в теме
(3) так и предполагалось.
Вся обработка должна происходить в обработчике оповещения "ОбработчикОкончанияПомещения".
Если вы воспользуетесь отладчиком то вопрос "почему именно так" отпадет.
Система не останавливает выполнение кода в "ПоместитьФайлИнтерактивно".
т.е. весь код написанный после "НачатьПомещениеФайла" будет выполнен сразу же, а не после того как вы выбрали файл. Но вам то нужно чтобы файл был выбран, потому что без него остальная обработка бессмысленна
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот