Передача параметров из фонового задания 8.2
По теме из базы знаний
- Подсистема "Инструменты разработчика" v7.13.2
- Многопоточность. Универсальный «Менеджер потоков» 2.1
- Эволюция расширения конфигурации
- Эффективное управление фоновыми заданиями и коммуникация сеансов сервера с Фоном с помощью Структуры обмена (ноу-хау) + Бонус: Альтернативный вариант через Хранилище настроек
- Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(4) Andrey, дайте пожалуйста весь связанный код. Например, откуда вызывается ПолучитьСлово(), где вы пытаетесь достаеть результат?
Короче, сможете сделать конкретный пример воспроизведения в виде обработки, чтобы не тратить время на подготовку к поиску проблемы?
Короче, сможете сделать конкретный пример воспроизведения в виде обработки, чтобы не тратить время на подготовку к поиску проблемы?
(10) Evil Beaver,вот мой пример кода:
(Конфигурация УПП релиз 1.3.45.2, платформа 8.3.4.465, база файловая)
(Конфигурация УПП релиз 1.3.45.2, платформа 8.3.4.465, база файловая)
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбработчикОжидания_ОбновитьИндикаторыВыполненияЭтапов", 5);
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор);
ИдентификаторЗадания = "ДействияПоЗавершениюПервичногоОсомтра_" + АктТехническогоОсмотра.УникальныйИдентификатор();
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(АктТехническогоОсмотра);
ПараметрыЗадания.Добавить(АдресВременногоХранилища);
ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗадания, ИдентификаторЗадания);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжидания_ОбновитьИндикаторыВыполненияЭтапов()
СтруктураПараметровВыполнения = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); //ПолучитьСтруктуруПараметровВыполненияФоновогоЗаданияНаСерв ере();
. . .
// Далее на форму выводятся полученные результаты
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗадания, ИдентификаторЗадания)
ВыполнитьОбработкуЗаданий();
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ЮИК_РаботаСФоновымиЗаданиями.ВыполнитьДействияПоЗавершениюПервичногоОсомтра", ПараметрыЗадания, ИдентификаторЗадания);
// Пробовал и с ожиданием завершения, и без
Попытка
ФоновоеЗадание.ОжидатьЗавершения(2);
Исключение
КонецПопытки;
КонецПроцедуры
// Модуль выполнения фонового задания
Процедура ВыполнитьДействияПоЗавершениюПервичногоОсомтра(АктТехническогоОсмотра, АдресВременногоХранилища) Экспорт
СтруктураПараметровВыполнения = Новый Структура("ИндексЭтапа, ИндикаторЭтапа1МаксимальноеЗначение, ИндикаторЭтапа1ТекущееЗначение,
|ИндикаторЭтапа2МаксимальноеЗначение, ИндикаторЭтапа2ТекущееЗначение,
//|ИндикаторЭтапа3МаксимальноеЗначение, ИндикаторЭтапа3ТекущееЗначение,
|ИндикаторЭтапа3,
|ИндикаторЭтапа4МаксимальноеЗначение, ИндикаторЭтапа4ТекущееЗначение",
0,0,0,0,0,0,0,0,0);
СтруктураПараметровВыполнения.ИндексЭтапа = 1;
ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
ВыполнитьПервыйВторойЭтап(СтруктураПараметровВыполнения, АдресВременногоХранилища);
СтруктураПараметровВыполнения.ИндексЭтапа = 3;
ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
СсылкаНаДокументОПЗС = ВыполнитьТретийЭтап(СтруктураПараметровВыполнения, АдресВременногоХранилища);
СтруктураПараметровВыполнения.ИндексЭтапа = 4;
ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
ВыполнитьЧетвертыйЭтап(СсылкаНаДокументОПЗС, СтруктураПараметровВыполнения, АдресВременногоХранилища);
КонецПроцедуры
Показать
В описании функции "ПоместитьВоВременноеХранилище" есть интересное примечание:
"Примечание:
Также позволяет поместить данные из фонового задания в родительский сеанс. Для этого следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание."
Сколько не бьюсь - реализовать не получается. Хотя вроде все по инструкции. Может кто уже пробовал реализовать?
"Примечание:
Также позволяет поместить данные из фонового задания в родительский сеанс. Для этого следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание."
Сколько не бьюсь - реализовать не получается. Хотя вроде все по инструкции. Может кто уже пробовал реализовать?
из справочника запускаю процедуру
АдресДанных - строковой реквизит формы
в глоб. модуле (галки сервер и вызов сервера):
Теперь в том же справочнике
&НаСервере
Процедура ЗапуститьФоновоеЗадание()
АдресДанных= ПоместитьВоВременноеХранилище("", ЭтаФорма.УникальныйИдентификатор);
Ключ = Новый УникальныйИдентификатор;
МассивПараметров = Новый Массив(1);
МассивПараметров[0] = АдресДанных;
ФоновыеЗадания.Выполнить("ИнформационныеБазыСервер.ТЕСТ", МассивПараметров, Ключ, "Получение параметра");
КонецПроцедуры
ПоказатьАдресДанных - строковой реквизит формы
в глоб. модуле (галки сервер и вызов сервера):
Процедура ТЕСТ(АдресДанных) Экспорт
стр2 = ПоместитьВоВременноеХранилище("ТестовоеСлово", АдресДанных);
КонецПроцедуры
Теперь в том же справочнике
&НаСервере
Процедура ПолучитьСлово()
Слово = ПолучитьИзВременногоХранилища(АдресДанных);
//Тут должно вернуться "ТестовоеСлово" а на самом деле ""....
КонецПроцедуры
Тогда, думаю все дело в
"стр2 = ПоместитьВоВременноеХранилище("ТестовоеСлово", АдресДанных);"
Новый адрес хранилища - стр2, по нему и надо получать значение. А адрес данных служит для уникальной идентификации значения, чтобы оно не очищалось.
"стр2 = ПоместитьВоВременноеХранилище("ТестовоеСлово", АдресДанных);"
Новый адрес хранилища - стр2, по нему и надо получать значение. А адрес данных служит для уникальной идентификации значения, чтобы оно не очищалось.
Так весь фокус в том что в родительском сеансе мы знаем адрес в котором будут лежать данные из фонового задания. Если адрес получается при помещении в хранилище в задании то как его передать родителю? :-)
Ps: Кстати, перед тем как добавить тему, я подозревал процентов на 90, что общение по этим вопросам будет только с тобой. :)
Ps: Кстати, перед тем как добавить тему, я подозревал процентов на 90, что общение по этим вопросам будет только с тобой. :)
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)