|   |   | 
| 
 | Можно ли заставить управляемое приложение досрочно отобразить сообщения пользователю? | ☑ | ||
|---|---|---|---|---|
| 0
    
        TormozIT гуру 24.07.20✎ 22:18 | 
        Создай управляемую форму с командой 
 Для Счетчик = 1 По 20 Цикл ОбработкаПрерыванияПользователя(); Сообщить(Счетчик); Для Счетчик2 = 1 По 50000 Цикл Пустышка = 0; КонецЦикла; КонецЦикла; Открой ее в режиме клиентского приложения и выполни эту команду. Сообщения пользователю после задержки будут выведены все сразу, т.е. они выводятся после завершения выполнения обработчика, а не при каждом вызове Сообщить(). Иными словами они буферизуются. В обычном приложении они выводятся сразу при вызове метода Сообщить(). Можно ли как то в управляемом приложении тоже сделать, чтобы они выводились сразу при вызове Сообщить()? | |||
| 1
    
        NcSteel 24.07.20✎ 22:28 | 
        Асинхронные вызовы, посмотри как работают прогресбары в типовых     | |||
| 2
    
        TormozIT гуру 24.07.20✎ 22:30 | 
        Интересует синхронный вариант. С асинхронным все понятно.     | |||
| 3
    
        lEvGl гуру 24.07.20✎ 22:33 | 
        гггггг     | |||
| 4
    
        TormozIT гуру 24.07.20✎ 22:40 | 
        (3) А вот и тяжелая артилерия. Чувствую сейчас выкатит свое решение.     | |||
| 5
    
        Ёпрст гуру 24.07.20✎ 23:05 | 
        (0)
 Ну так, разве что..хз, не силён в УФ //Сообщить(Счетчик); ОтобразитьИзменениеДанных(Счетчик,ВидИзмененияДанных.Изменение); | |||
| 6
    
        acht 24.07.20✎ 23:07 | 
        (2) Нельзя. 
 Используй Состояние или ПоказатьОповещениеПользователя. Там есть целая концепция деления сообщений по категорям: https://its.1c.ru/db/pubv8devui/content/227/hdoc | |||
| 7
    
        acht 24.07.20✎ 23:10 | 
        (5) > ОтобразитьИзменениеДанных
 Аццкая конструкция с побочными эффектами: Доступность: ... Вызов метода выполняет обращение к серверу Примечание: В случае добавления или изменения данных вызов метода приводит к очистке кэшей на клиенте. В частности, очищается кэш представлений ссылок, кэш данных через точку, кэш данных быстрого выбора, кэш ограничений по типу. | |||
| 8
    
        TormozIT гуру 24.07.20✎ 23:15 | 
        (6) Все там классно, но только не рассмотрен вывод лога в реальном времени, т.е. относительно большого количества текстовой информации. Для вывода лога подходит никакой из перечисленных там вариантов. Состояние и ПоказатьОповещениеПользователя конечно тоже не подходят.     | |||
| 9
    
        acht 24.07.20✎ 23:21 | 
        (8) "Лог в реальном времени, т.е. относительно большое количества текстовой информации" надо выводить в файл.
 Желание программиста похвастатся всеми кишочками своего продукта перед пользователем, оно конечно похвально. Но только приводит к интерфейсу, которым невозможно пользоваться. Ты же сам из всего этого "лога" воспринимаешь только последние строчки 3. А для "расследования" начинаешь что-то делать, например проматывать окошко обратно. | |||
| 10
    
        acht 24.07.20✎ 23:31 | 
        (8) Попробуй с полем HTML документа извратится - положить внутрь js для добавления строки и дернуть его из потока выполнения 1С. Оно вроде в отдельном потоке отрисовывается.     | |||
| 11
    
        Ёпрст гуру 24.07.20✎ 23:51 | 
        да уж..даже заголовок не меняется в цикле.
 Это, так еще кто-то делал: https://habr.com/ru/post/278521/ | |||
| 12
    
        Ёпрст гуру 24.07.20✎ 23:55 | 
        а блин, это для оф     | |||
| 13
    
        acht 25.07.20✎ 00:03 | 
        (11) Ошметки общей архитектуры с веб-клиентом. Тихо заметается под ковер, в отличие от асинхронщины и немодальности =)     | |||
| 14
    
        Garykom гуру 25.07.20✎ 00:15 | 
        (0) По уму это делается выносом кода на сервер в фоновое, а на клиенте через обработчик ожидания сообщай прогресс периодически     | |||
| 15
    
        TormozIT гуру 25.07.20✎ 00:25 | 
        (14) А если у меня внешняя обработка, т.е. нужно обойтись без фонового задания?     | |||
| 16
    
        acht 25.07.20✎ 00:32 | 
        (15) > А если у меня внешняя обработка
 - Представь что тебе надо разгрузить машину, сколько времени это займет? - Пару часов - Это камаз - 8 часов - Камаз, груженый песком - 12 часов - У тебя нет лопаты и инструментов, только твои руки - 2 дня - На улице -40 - 4 дня - Камаз вообще под водой - Так же нечестно, ты постоянно придумываешь новые условия! К чему ты мне вообще все это рассказываешь? Вы, разработчики, вечно всякую херню рассказываете! =) | |||
| 17
    
        TormozIT гуру 25.07.20✎ 00:35 | 
        (16) Мимо. Про синхронность явно написано было уже в (2).     | |||
| 18
    
        acht 25.07.20✎ 00:40 | 
        (17) А. То есть ты в (15) уже знал про что идет речь, но решил таки полезть глубже.
 Ну ок, чо. | |||
| 19
    
        Bigcalm 25.07.20✎ 01:08 | 
        (8) Ну может тогда подготовить текст лога, и потом его выпиливать в текстовый файл, с помощью ВыполнитьКомандуСистемы, или как оно там называется.
 Читать, и дальше уже там по логике работы. | |||
| 20
    
        TormozIT гуру 25.07.20✎ 01:18 | 
        Нашел синхронное решение через вывод в свое поле текстового документа на управляемой форме и передергивание его видимости для перерисовки. Позже выложу готовое решение.     | |||
| 21
    
        acht 25.07.20✎ 09:08 | 
        (20) > передергивание его видимости
 Лучше не выкладывай, это сильно плохое решение. При изменении видимости элемента происходит неявный контекстный вызов сервера(что, собственно, и приводит к перерисовке формы), про это даже в СП написано. Отсюда немедлено следуют два момента: - При использовании своего "логгирования" из процедур, а которых контекстные серверные вызовы явно запрещены (см тот же СП, например, ПриАктивизацииЯчейки") ты разваливаешь работу формы. - При накоплении достаточного числа строк ("лог в реальном времени, т.е. относительно большое количества текстовой информации" и тыпы) приложение будет не выполнять полезную работу, а ждать сериализор и сеть. Сделай замер производительности. Использование подобных "хитровыдуманные" решений, оно попахивает. | |||
| 22
    
        TormozIT гуру 25.07.20✎ 09:32 | 
        (21) Спасибо. Все это учел. Форма используется отдельная и максимально легкая. Неявный серверный вызов конечно делается. Но он выполняется не чаще раза в 2 секунды. Лог не накапливается в этой форме, а хранится 10 последних строк. Полный лог копится отдельно и выводится в конце без участия в отображении реального времени.     | |||
| 23
    
        acht 25.07.20✎ 09:44 | 
        (22) > Полный лог копится отдельно
 Если "отдельно" находится в контексте этой же формы, то у меня для тебя плохие новости. | |||
| 24
    
        vde69 25.07.20✎ 09:54 | 
        Я подобное делал через
 Подключитьобработчикожидания С временем 0.1 | |||
| 25
    
        vde69 25.07.20✎ 09:55 | 
        (24) но это если итерраций не много     | |||
| 26
    
        TormozIT гуру 25.07.20✎ 16:24 | 
        (24) Опять асинхронный совет или слишком лаконичный.     | |||
| 27
    
        TormozIT гуру 27.07.20✎ 00:34 | 
        В ИР 5.45 реализовал (0) в 2-х вариантах:
 1. Обработка.ирПлатформа.Форма.ВременноеОкноСообщений - обычная форма, активный вариант, без серверных вызовов. 2. Обработка.ирПлатформа.Форма.ВременноеОкноСообщений2 - управляемая форма, пассивный вариант, с серверными вызовами, чуть менее универсальный из-за ошибки платформы http://www.hostedredmine.com/issues/882422 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |