Передача управления с сервера на клиент

1. Notella 32 08.09.19 09:38 Сейчас в теме
Уважаемые коллеги помогите с решением задачи.
Исходные данные:
Конвертация данных. Необходимо прочитать внешний xml-файл.
Клиент-серверный вариант.
В правилах выгрузки данных в обработчике перед обработкой пытаюсь передать управление с сервера на клиент
Парсер = Новый ЧтениеXML;
ПолноеИмяФайла = Сд_Конвертация.ПолучитьИмяФайлаКлиент();
где Сд_Конвертация - это свой общий модуль из расширения.

&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьИмяФайлаКлиент() Экспорт
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
	ДиалогВыбораФайла.Расширение = "xml";
	ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'");
	ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
	ДиалогВыбораФайла.ИндексФильтра = 0;
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;
	
	Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
		Отказ = Истина;
	КонецЕсли;
	
    Возврат ДиалогВыбораФайла.ПолноеИмяФайла;

КонецФункции // ПолучитьИмяФайла()
Показать


При выгрузке сплошной мат: Метод объекта не обнаружен (ПолучитьИмяФайлаКлиент)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Notella 32 08.09.19 09:39 Сейчас в теме
Причем в файловом варианте работает Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
3. nomad_irk 72 08.09.19 10:44 Сейчас в теме
В файловом варианте ВЕСЬ код выполняется на клиентской машине.
С сервера невозможно передать выполнение на клиент, только с клиента на сервер.
4. 2tvad 70 08.09.19 13:54 Сейчас в теме
(3) передать можно. Но в особо извращенной форме. Например, пускать обработчик на клиенте и мониторить регистр где писать задания для клиентов уже сервером. Далее отправлять оповещения и отлавливать их формами например. Очень давно, я так реализовывал форму - задолбай пользователя, но сделай заявку.

Но если возникает такая ситуация, то скорее всего, архитектуру нужно продумывать.
5. Notella 32 09.09.19 07:54 Сейчас в теме
7. 2tvad 70 09.09.19 11:31 Сейчас в теме
(5) У меня готового решения нет. Могу подсказать куда копать:

1 Делаете регистр, Куда на сервере пишите название пользователя, его сессию, guid формы, что вы хотите вызвать и т.д.
2. Вешаете на ПриНачалеРаботыСистемы \ ПодключитьОбработчикОжидания обработку регистра.
3. На клиенте проверяете на соответствии пользователя и отправляете оповещение (если нужно в форме что то сделать).
4. В форме получаете оповещение и делаете что вам нужно.

Есть еще способ - https://wonderland.v8.1c.ru/blog/peredacha-informatsii-s-servera/
6. zarankony 305 09.09.19 09:29 Сейчас в теме
Убедитесь что общий модуль клиентский.
&НаКлиентеНаСервереБезКонтекста
- вот этого не надо, только клиент. Там нет ничего серверного по смыслу.
То есть если Вы хотите использовать выбранный файл в серверной процедуре, начните с выбора файла, поместите его во временное хранилище (лучше всего через НачатьПомещениеФайла) и потом работайте с ним на сервере. Ничего страшного если будет висеть в памяти всю процедуру, а воспользуетесь Вы им только в конце.
8. Notella 32 10.09.19 07:18 Сейчас в теме
(6) НачатьПомещениеФайлов
Использование в версии:
Доступен, начиная с версии 8.3.6.
Не рекомендуется использовать, начиная с версии 8.3.15.
У нас как раз эта самая 8.3.15
9. zarankony 305 10.09.19 09:00 Сейчас в теме
(8) Ну тогда ПоместитьФайл (то же самое, но модально) или вручную
ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранныйФайл);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
СервернаяПроцедура(Адрес);

Главное интерактивные действия выполнить на клиенте, потом вызывать сервер.
10. Notella 32 10.09.19 09:09 Сейчас в теме
(9) В обработке Универсальный обмен данными в формате XML после нажатия клавиши выгрузить когда уже загружены правила обмена
необходимо дать пользователю указать файл с данными внешнего источника. Файл произвольного имени и местоположения
в файловой системе. К моменту, когда происходит обработка события "Перед обработкой" правила выгрузки данных
управление происходит на сервере. Надо как-то вмешаться в этот процесс и перенаправить действия на клиент, чтобы
была возможность интерактивно выбрать нужный файл.
В файловом варианте было так:

ВыборкаДанных = Новый ТаблицаЗначений;
ВыборкаДанных.Очистить();
ВыборкаДанных.Колонки.Очистить();

НаборЗаписей = РегистрыСведений.ДанныеБилинговойСистемы.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Параметры.ПериодДокументов);
НаборЗаписей.Прочитать();
ТаблицаЗаписей = НаборЗаписей.ВыгрузитьКолонки();
Для каждого Колонка Из ТаблицаЗаписей.Колонки Цикл
ВыборкаДанных.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;

ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
ДиалогВыбораФайла.Расширение = "xml";
ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'");
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;

Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
Отказ = Истина;
КонецЕсли;
11. zarankony 305 10.09.19 09:43 Сейчас в теме
(10)Вот это на клиенте
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
ДиалогВыбораФайла.Расширение = "xml";
ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'");
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;

Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
Отказ = Истина;
КонецЕсли;
Показать

Остальное потом на сервере. Выбранный файл сохраните в реквизите объекта (если нужен адрес файл и его надо видеть в модуле объекта) или во временное хранилище как я писал выше если с ним надо дальше работать на сервере.
12. Notella 32 10.09.19 10:04 Сейчас в теме
(11) Передача с сервера на клиент не происходит.
Если в свойствах модуля указать только Клиент Функция не видна. Метод не обнаружен.
13. Notella 32 10.09.19 10:06 Сейчас в теме
(11) Здесь и происходит затык. Процедуры выполняется на сервере "ПередОбработкой...." и при передаче из нее на клиентский модуль платформа говорит, что метод не обнаружен
14. zarankony 305 10.09.19 10:17 Сейчас в теме
(13) Да там и не будет передачи, перепишите функцию так чтобы сначала отрабатывала клиентская часть, потом серверная.
Оставьте свое сообщение

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