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

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 71 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 304 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 304 10.09.19 09:00 Сейчас в теме
(8) Ну тогда ПоместитьФайл (то же самое, но модально) или вручную
ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранныйФайл);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
СервернаяПроцедура(Адрес);

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

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

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

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

Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
Отказ = Истина;
КонецЕсли;
11. zarankony 304 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 304 10.09.19 10:17 Сейчас в теме
(13) Да там и не будет передачи, перепишите функцию так чтобы сначала отрабатывала клиентская часть, потом серверная.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)