|
УФ: Обновление формы и фоновые задания | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
03.04.20
✎
15:33
|
Есть УФ. На ней есть независимое дерево. Которое при необходимости заполняется в процедуре типа &НаСервере ЗаполнитьДерево() в модуле формы.
Последнее время обновление дерева начало занимать заметное время, что иногда напрягает. Решил вынести заполнение дерева в фоновое задание. Взял бспшные длительные операции. Написал процедурку... Хочу передать туда то самое дерево... Процедура выполняется на сервере и в массиве параметров туда в результате прилетает неопределено. Как можно обойти это? |
|||
1
RomaH
naïve
03.04.20
✎
16:06
|
(0) покажи как второй параметр заполняешь
|
|||
2
RomaH
naïve
03.04.20
✎
16:07
|
ПараметрыПроцедуры - Структура - произвольные параметры вызова процедуры ИмяПроцедуры.
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперации.ВыполнитьВФоне", "ПараметрыВыполнения", ПараметрыВыполнения, Тип("Структура")); |
|||
3
ДенисЧ
03.04.20
✎
16:13
|
(1)
ПараметрыПроцедуры = Новый Массив; ПараметрыПроцедуры.Добавить(Заказ); ПараметрыПроцедуры.Добавить(ЭтаФорма); ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("РегистрыСведений.ЗаказыИСтатусы.ОбновитьРасшифровкуПоЗаказуФон", ПараметрыПроцедуры, ПараметрыВыполнения); |
|||
4
RomaH
naïve
03.04.20
✎
16:19
|
ПараметрыПроцедуры - Структура - произвольные параметры вызова процедуры ИмяПроцедуры.
|
|||
5
ДенисЧ
03.04.20
✎
16:21
|
(4) Да ты что... А я-то думал... Что это за фигня такая, зачем я туда пихаю свой заказ и форму...
А это оказывается, чтобы передать их в процедуру... |
|||
6
RomaH
naïve
04.04.20
✎
08:37
|
да и неговори, зачем ты там что-то пихаешь в массив, когда надо в структуру
|
|||
7
ДенисЧ
04.04.20
✎
08:46
|
(6) То есть если я запихну в структуру - прилетит форма? Ой, врёшь...
А так - массив тоже структура. И он успешно прилетает в процедуру. Но без формы. |
|||
8
Мигрень
04.04.20
✎
08:48
|
в бсп всегда пихается в структуру, пора бы привыкнуть
|
|||
9
ДенисЧ
04.04.20
✎
08:49
|
(8) Один овосЧь. Всё равно форма не прилетит ))
|
|||
10
Cyberhawk
04.04.20
✎
10:24
|
Форму с клиента на сервер передать никак не получится
|
|||
11
SleepyHead
гуру
04.04.20
✎
10:56
|
(8) ты еще учитывай, что фактически в фоновом задании запускается второй экземпляр твоей обработки.Поэтому все исходные данные бери из параметров, которые передаешь в фоновое задание..
|
|||
12
SleepyHead
гуру
04.04.20
✎
10:56
|
Уточняю - это не (8), это автору в (9)
|
|||
13
ДенисЧ
04.04.20
✎
11:17
|
(11) Хорошо. Тогда как мне передать из серверной (!) на форме процедуры настройки компоновщика в фоновое задание? Иду на сервер, получаю настройки, пихаю их в ВХ с ид формы. Получившуюся структуру передаю в процедуру задания - и там неопределено... ((
|
|||
14
SleepyHead
гуру
04.04.20
✎
11:52
|
(13) Начинаешь же все равно на клиенте? Вот пример, как я делаю. но учти, у меня этот код работает в форме внешнего отчета. Если твоя форма в конфе, надо будет допилить или использовать другой метод, но общий принцип такой - начинаешь на клиенте, собираешь исходные данные для длительной операции (можно на сервере), а сам запуск фонового выполнения на сервере.
&НаКлиенте Процедура НачатьФоновоеЗадание() // тут структура, в ней все данные для фонового задания ПараметрыЗапуска = ПодготовитьДанныеДляДлительнойОперации(); // подготовить фоновое задание на сервере и запомнить его идентификатор в реквизите формы "ИдентификаторЗадания" СтруктураФоновогоЗадания = ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор); ИдентификаторЗадания = СтруктураФоновогоЗадания.ИдентификаторЗадания; ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; ПараметрыОжидания.Интервал = 2; ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ФоновоеЗаданиеЗавершение", ЭтотОбъект), ПараметрыОжидания); ПодключитьОбработчикОжидания("ОбработчикОжиданияИндикатор", 2); КонецПроцедуры // а тут выполняется подготовка задания на сервере &НаСервере Функция ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор) НаименованиеЗадания = НСтр("ru = 'Запуск длительной операции'"); ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОтчета"; ПараметрыЗадания = Новый Структура; ПараметрыЗадания.Вставить("БезопасныйРежим", Ложь); ПараметрыЗадания.Вставить("ИмяОтчета", ПараметрыЗапуска.ИспользуемоеИмяФайла); // имя файла этого отчета или "ВнешнийОтчет.ПроверкаБазКлиентов" ПараметрыЗадания.Вставить("ИмяМетода", "ОбойтиСписокБаз"); ПараметрыЗадания.Вставить("ПараметрыВыполнения", ПараметрыЗапуска); ПараметрыЗадания.Вставить("ЭтоВнешнийОтчет", Истина); ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", ПараметрыЗапуска.ДополнительнаяОбработкаСсылка); // СправочникСсылка.ДополнительныеОтчетыИОбработки (может быть пустой ссылкой) ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; ПараметрыВыполнения.ЗапуститьВФоне = Истина; ПараметрыВыполнения.Вставить("ИдентификаторФормы", УникальныйИдентификатор); СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения); Возврат СтруктураФоновогоЗадания; КонецФункции |
|||
15
ДенисЧ
04.04.20
✎
11:54
|
(14) Ну так у меня то же самое.
Простые (это дубли у нас...) данные передаются. Даже ссылка на документ. А вот настройки компоновки... |
|||
16
SleepyHead
гуру
04.04.20
✎
11:58
|
(15) Придется придумать, как их отразить в что-то передаваемое, типа структур и потом загрузить в компоновщик второго экземпляра.
|
|||
17
ДенисЧ
04.04.20
✎
12:01
|
(16) В том и вопрос, как...
А там ещё не только настройки, но и схема... Не руками же всё перебирать и восстанавливать... Тогда весь смысл задумки изчезнет... |
|||
18
pechkin
04.04.20
✎
12:02
|
Так можно в хз все положить
|
|||
19
ДенисЧ
04.04.20
✎
12:03
|
(18) читай (13)
|
|||
20
Сияющий в темноте
04.04.20
✎
12:20
|
(13) передать можно только то,что сериализуется.
а настройки лучше сериализовать самому. у меня,например,настройки компоновки успешно во внешнее соединение передаются,а тут даже с фоновым затык. |
|||
21
ДенисЧ
04.04.20
✎
12:21
|
(20) ну так покажи пример...
|
|||
22
vde69
04.04.20
✎
12:32
|
вообще деревья в 1с не заточены на большие данные...
по этому есть следующие варианты 1. перейти на динамический список в виде дерева и подгрузка будет происходить автоматом, но это не всегда реализуемо, зависит от хотелок автора... 2. в регламентом задании формировать промежуточные таблицыо только с базовыми отборами формы (которые передавать в виде структуры) а потом на форме уже строить то, что хочется 3. обновлять не все дерево - а только текущую ветку |
|||
23
vde69
04.04.20
✎
12:34
|
(22) +
п.2 выглядит так, в регламентом задании делаем табличы а компоновщик пихаем их как источник данных, в типовых есть такие примеры |
|||
24
ДенисЧ
04.04.20
✎
13:19
|
(22) ЧТобы в регламенте подготовить таблицы - туда нужно отдать настройки компоновщика и схему... В этом и загвоздка...
Всё, что можно было сделать вне зависимости от юзверя - уже сделал... А тут.. Зверь настраивает отборы... И данные получать нужно по этому отбору. Без фоновых - это работает. Но блокирует интерфейс... |
|||
25
vde69
04.04.20
✎
13:25
|
(24) передавай текст запроса и одни отборы и все...
кстати посмотри как сделаны типовые бух отчеты, они примерно так и сделаны, в каждом отчете есть пустая схема именно ее и использует форма, а вторую схему использует регламентное задание и потом результат копируется как источник в первую. то есть там нет передачи компоновщика... |
|||
26
ДенисЧ
04.04.20
✎
13:28
|
(25) А отборы как передать? Они так же в неопределено сваливаются. Или руками перебирать?
Насчёт отдельной схему - нужно подумать... Может, и получится... |
|||
27
vde69
04.04.20
✎
13:30
|
(26) там есть функция преобразования отбора в структуру и обратно
|
|||
28
ДенисЧ
04.04.20
✎
13:32
|
(27) Там - это где? не помню. Подскажешь - благодарен буду
|
|||
29
vde69
04.04.20
✎
13:34
|
(28) в типовых отчетах, возьми оборотку и трасерни ее до запуска фонового задания, там не так много...
|
|||
30
ДенисЧ
04.04.20
✎
13:46
|
(29) Да, спасибо. И вам туда же идти.... В Южную Америку.
Ну это приблизительно то же направление, что трассировать типовые... |
|||
31
Сияющий в темноте
04.04.20
✎
21:04
|
(30) не знаю,у меня отладка фоновых-это обычное дело.
|
|||
32
Сияющий в темноте
04.04.20
✎
21:08
|
дерево в таблицу элементарно преобразуется
вводим ид строки и ид родителя и вот таблица становится деревом. хотя и в xml дерево сериализуется на ура. бсп длительныеоперации и там все есть даже для запуска фонового из внешней обработки. |
|||
33
ДенисЧ
04.04.20
✎
21:12
|
(31) Отладка фоновых, или отладка фоновых в типовых? Это две большие разницы...
(32) Ты немного притормозил, речь уже не о дереве ))0 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |