Имя: Пароль:
1C
1С v8
Обновить данные формы после процедуры Длительной операции
0 Orfin
 
16.03.23
21:11
Есть обработка, в модуле объекта есть процедура заполнения ТЗ обработки. Всё нормально работало.
Но после перевода выполнения этой процедуры на длительную операцию, делал на подобии как тут https://infostart.ru/1c/articles/1318934/
Появилась проблема, не обновляются данные формы. Т.е ТЗ на форме пустая.

Пробовал передавать в длительную операцию ДанныеФормыСтруктуру, что бы взять из неё введенные пользователем параметры, заполнить на сервере и вернуть обратно результат заполненный ТЗ на клиент, пишет ошибку: Параметр фонового задания не поддерживает сериализацию.

т.е СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ВыполняемыйМетод, Объект); //Объект это данные формы структура

Здесь написано https://master1c8.ru/biblioteka-standartnh-podsistem/10288/ что:
"Следует отметить, что в качестве параметра нужно передать параметры, которые поддерживают серализацию, иначе длительная операция не выполняется и выдается сообщение -“Параметр фонового задания не поддерживает сериализацию” .


Например, если параметр ТаблицаДанных имеет тип ДанныеФормыЭлементКоллекции, то нужно преобразовать на тип ТаблицаЗначений с помощью метода выгрузить таким образом

Тз =ТаблицаДанных.Выгрузить();
ПараметрыВызова = Новый Структура(“Параметр1,Параметр2,Таблица”, 10, 20,Тз);"


Я так и не понял ДанныеФормыСтруктура не поддерживает сериализацию? Судя по справке нет. Но я много раз передавал ДанныеФормыСтруктура на сервер и обратно, например в модуле формы:

&НаКлиенте
Процедура НаКлиенте()
   ВызватьНаСервере(Объект);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВызватьНаСервере(Знач ДанныеФормы)
   ...
КонецПроцедуры


Так будет работать. При передачи данных с клиента на сервер вроде происходит сериализация? значит есть поддержка сериализации.

В итоге только один способ есть что ли? В процедуре/функции длительной операции выгружать данные в ТЗ и в таком виде возвращать на клиент? :( не удобно.
Мне нужно 3 таблицы вернуть на клиент, еще перед этим на сервер передать заполненные на клиенте поля формы.
1 Мультук
 
16.03.23
21:22
(0)

В примере
Собирают все данные в структуру и вызывают процедуру


&НаСервере
Функция ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор)

У вас

&НаСервереБезКонтекста
Процедура ВызватьНаСервере(Знач ДанныеФормы)

И где тут "делал на подобии" ?
2 Orfin
 
16.03.23
21:50
У вас

&НаСервереБезКонтекста
Процедура ВызватьНаСервере(Знач ДанныеФормы)

Может не понятно написал, это просто отдельный пример передачи данных формы структура на сервер, который работает.
А через длительные операции не работает.
3 Orfin
 
16.03.23
21:51
СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ВыполняемыйМетод, Объект); //Объект это данные формы структура
Так не работает.
4 Мультук
 
16.03.23
22:04
(3)

Что мешает сделать так?

пСтр = Новый Структура;
пСтр.Вставить("Дата", Объект.Дата);
пСтр.Вставить("Организация", Объект.Организация);
пСтр.Вставить("мояТабл", Объект.ТабличнаяЧасть.выгрузить());

СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ВыполняемыйМетод, пСтр);
5 Orfin
 
16.03.23
22:19
Можно. Но это не удобно. Это единственный способ?