|   |   | 
| 
 | УФ: Обновление формы и фоновые задания | ☑ | ||
|---|---|---|---|---|
| 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 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |