Обмен данными с процедурой-обработчиком оповещения (асинхронная работа)
Читал и форум, и методические рекомендации, но так до конца и не вкурил процесс. И похоже туплю на элементарных вещах.
Есть процедура выполнения команды на клиенте. Команда по большому счету занимается заполнением табличной части документа из внешнего XML-файла. Соответственно, мне нужно этот файл передать на сервер.
Использую метод , но адрес моего файла во временном хранилище я получаю только внутри процедуры-обработчика оповещения ВыполнитьЗагрузку. Далее подразумевается, что я из этого обработчика напрямую вызову уже серверную функцию, которой передам адрес, и в ней смогу получить исходный файл из временного хранилища.
А если я хочу этот адрес получить в изначальной процедуре выполнения команды? Я надеялся, что обработчик его по ссылке запишет в изначально пустую переменную АдресВХранилище, но нет, она после отработки метода так и остается пустой.
Ну или хорошо, я из обработчика вызову серверную функцию, получу в ней новое временное имя файла, но как мне дальше это имя опять-таки передать в изначальную процедуру выполнения команды, чтобы дальше потом опять на сервер передать уже в функцию, работающую с ИБ?
Т.е. у меня процедура-обработчик вызывается неявно (асинхронно), и я не понимаю, как из нее получить результат на уровне, где НачатьПомещениеФайла вызывалось.
Есть процедура выполнения команды на клиенте. Команда по большому счету занимается заполнением табличной части документа из внешнего XML-файла. Соответственно, мне нужно этот файл передать на сервер.
Использую метод
НачатьПомещениеФайла(Новый ОписаниеОповещения("ВыполнитьЗагрузку", ЭтаФорма), АдресВХранилище, ДиалогВыбора, Истина, УникальныйИдентификатор)
А если я хочу этот адрес получить в изначальной процедуре выполнения команды? Я надеялся, что обработчик его по ссылке запишет в изначально пустую переменную АдресВХранилище, но нет, она после отработки метода так и остается пустой.
Ну или хорошо, я из обработчика вызову серверную функцию, получу в ней новое временное имя файла, но как мне дальше это имя опять-таки передать в изначальную процедуру выполнения команды, чтобы дальше потом опять на сервер передать уже в функцию, работающую с ИБ?
Т.е. у меня процедура-обработчик вызывается неявно (асинхронно), и я не понимаю, как из нее получить результат на уровне, где НачатьПомещениеФайла вызывалось.
Найденные решения
В общем, пока что сделал так: вызов основной обрабатывающей файл и ТЧ серверной функции перенес из стартовой процедуры (Команда) в обработчик окончания помещения, чтобы оттуда ей Адрес в хранилище передать. А недостающие ей для работы другие данные передаю в тот же обработчик из стартовой процедуры через ДополнительныеПараметры.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вот пример из справки:
Вот как этот "Адрес" из обработчика вынуть?
&НаКлиенте
Процедура ПоместитьФайлИнтерактивно(Команда)
ОбработкаОкончанияПомещения = Новый ОписаниеОповещения
("ОбработчикОкончанияПомещения", ЭтотОбъект);
НачатьПомещениеФайла(ОбработкаОкончанияПомещения, , , Истина,
ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОкончанияПомещения(Результат, Адрес,
ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Результат Тогда
Сообщить(Адрес);
Иначе
Сообщить("Файл не был помещен.");
КонецЕсли
КонецПроцедуры
ПоказатьВот как этот "Адрес" из обработчика вынуть?
В общем, пока что сделал так: вызов основной обрабатывающей файл и ТЧ серверной функции перенес из стартовой процедуры (Команда) в обработчик окончания помещения, чтобы оттуда ей Адрес в хранилище передать. А недостающие ей для работы другие данные передаю в тот же обработчик из стартовой процедуры через ДополнительныеПараметры.
(3) так и предполагалось.
Вся обработка должна происходить в обработчике оповещения "ОбработчикОкончанияПомещения".
Если вы воспользуетесь отладчиком то вопрос "почему именно так" отпадет.
Система не останавливает выполнение кода в "ПоместитьФайлИнтерактивно".
т.е. весь код написанный после "НачатьПомещениеФайла" будет выполнен сразу же, а не после того как вы выбрали файл. Но вам то нужно чтобы файл был выбран, потому что без него остальная обработка бессмысленна
Вся обработка должна происходить в обработчике оповещения "ОбработчикОкончанияПомещения".
Если вы воспользуетесь отладчиком то вопрос "почему именно так" отпадет.
Система не останавливает выполнение кода в "ПоместитьФайлИнтерактивно".
т.е. весь код написанный после "НачатьПомещениеФайла" будет выполнен сразу же, а не после того как вы выбрали файл. Но вам то нужно чтобы файл был выбран, потому что без него остальная обработка бессмысленна
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот