Уважаемые коллеги помогите с решением задачи.
Исходные данные:
Конвертация данных. Необходимо прочитать внешний xml-файл.
Клиент-серверный вариант.
В правилах выгрузки данных в обработчике перед обработкой пытаюсь передать управление с сервера на клиент
Парсер = Новый ЧтениеXML;
ПолноеИмяФайла = Сд_Конвертация.ПолучитьИмяФайлаКлиент();
где Сд_Конвертация - это свой общий модуль из расширения.
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьИмяФайлаКлиент() Экспорт
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
ДиалогВыбораФайла.Расширение = "xml";
ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'");
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;
Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
Отказ = Истина;
КонецЕсли;
Возврат ДиалогВыбораФайла.ПолноеИмяФайла;
КонецФункции // ПолучитьИмяФайла()
Показать
При выгрузке сплошной мат: Метод объекта не обнаружен (ПолучитьИмяФайлаКлиент)
(3) передать можно. Но в особо извращенной форме. Например, пускать обработчик на клиенте и мониторить регистр где писать задания для клиентов уже сервером. Далее отправлять оповещения и отлавливать их формами например. Очень давно, я так реализовывал форму - задолбай пользователя, но сделай заявку.
Но если возникает такая ситуация, то скорее всего, архитектуру нужно продумывать.
(5) У меня готового решения нет. Могу подсказать куда копать:
1 Делаете регистр, Куда на сервере пишите название пользователя, его сессию, guid формы, что вы хотите вызвать и т.д.
2. Вешаете на ПриНачалеРаботыСистемы \ ПодключитьОбработчикОжидания обработку регистра.
3. На клиенте проверяете на соответствии пользователя и отправляете оповещение (если нужно в форме что то сделать).
4. В форме получаете оповещение и делаете что вам нужно.
- вот этого не надо, только клиент. Там нет ничего серверного по смыслу.
То есть если Вы хотите использовать выбранный файл в серверной процедуре, начните с выбора файла, поместите его во временное хранилище (лучше всего через НачатьПомещениеФайла) и потом работайте с ним на сервере. Ничего страшного если будет висеть в памяти всю процедуру, а воспользуетесь Вы им только в конце.
(6) НачатьПомещениеФайлов
Использование в версии:
Доступен, начиная с версии 8.3.6.
Не рекомендуется использовать, начиная с версии 8.3.15.
У нас как раз эта самая 8.3.15
(9) В обработке Универсальный обмен данными в формате XML после нажатия клавиши выгрузить когда уже загружены правила обмена
необходимо дать пользователю указать файл с данными внешнего источника. Файл произвольного имени и местоположения
в файловой системе. К моменту, когда происходит обработка события "Перед обработкой" правила выгрузки данных
управление происходит на сервере. Надо как-то вмешаться в этот процесс и перенаправить действия на клиент, чтобы
была возможность интерактивно выбрать нужный файл.
В файловом варианте было так:
ВыборкаДанных = Новый ТаблицаЗначений;
ВыборкаДанных.Очистить();
ВыборкаДанных.Колонки.Очистить();
НаборЗаписей = РегистрыСведений.ДанныеБилинговойСистемы.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Параметры.ПериодДокументов);
НаборЗаписей.Прочитать();
ТаблицаЗаписей = НаборЗаписей.ВыгрузитьКолонки();
Для каждого Колонка Из ТаблицаЗаписей.Колонки Цикл
ВыборкаДанных.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
ДиалогВыбораФайла.Расширение = "xml";
ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'");
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;
Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
Отказ = Истина;
КонецЕсли;
Показать
Остальное потом на сервере. Выбранный файл сохраните в реквизите объекта (если нужен адрес файл и его надо видеть в модуле объекта) или во временное хранилище как я писал выше если с ним надо дальше работать на сервере.
(11) Здесь и происходит затык. Процедуры выполняется на сервере "ПередОбработкой...." и при передаче из нее на клиентский модуль платформа говорит, что метод не обнаружен