Вход | Регистрация
 

Можно ли заставить управляемое приложение досрочно отобразить сообщения пользователю?

Можно ли заставить управляемое приложение досрочно отобразить сообщения пользователю?
Я
   TormozIT
 
24.07.20 - 22:18
Создай управляемую форму с командой
    Для Счетчик = 1 По 20 Цикл
        ОбработкаПрерыванияПользователя();
        Сообщить(Счетчик);
        Для Счетчик2 = 1 По 50000 Цикл
            Пустышка = 0;
        КонецЦикла;
    КонецЦикла;
Открой ее в режиме клиентского приложения и выполни эту команду. Сообщения пользователю после задержки будут выведены все сразу, т.е. они выводятся после завершения выполнения обработчика, а не при каждом вызове Сообщить(). Иными словами они буферизуются.
В обычном приложении они выводятся сразу при вызове метода Сообщить(). Можно ли как то в управляемом приложении тоже сделать, чтобы они выводились сразу при вызове Сообщить()?
   NcSteel
 
1 - 24.07.20 - 22:28
Асинхронные вызовы, посмотри как работают прогресбары в типовых
   TormozIT
 
2 - 24.07.20 - 22:30
Интересует синхронный вариант. С асинхронным все понятно.
   lEvGl
 
3 - 24.07.20 - 22:33
гггггг
   TormozIT
 
4 - 24.07.20 - 22:40
(3) А вот и тяжелая артилерия. Чувствую сейчас выкатит свое решение.
   Ёпрст
 
5 - 24.07.20 - 23:05
(0)
Ну так, разве что..хз, не силён в УФ
//Сообщить(Счетчик);

ОтобразитьИзменениеДанных(Счетчик,ВидИзмененияДанных.Изменение);
   acht
 
6 - 24.07.20 - 23:07
(2) Нельзя.
Используй Состояние или ПоказатьОповещениеПользователя.

Там есть целая концепция деления сообщений по категорям:
https://its.1c.ru/db/pubv8devui/content/227/hdoc
   acht
 
7 - 24.07.20 - 23:10
(5) > ОтобразитьИзменениеДанных
Аццкая конструкция с побочными эффектами:

Доступность:
...
Вызов метода выполняет обращение к серверу

Примечание:
В случае добавления или изменения данных вызов метода приводит к очистке кэшей на клиенте. В частности, очищается кэш представлений ссылок, кэш данных через точку, кэш данных быстрого выбора, кэш ограничений по типу.
   TormozIT
 
8 - 24.07.20 - 23:15
(6) Все там классно, но только не рассмотрен вывод лога в реальном времени, т.е. относительно большого количества текстовой информации. Для вывода лога подходит никакой из перечисленных там вариантов. Состояние и ПоказатьОповещениеПользователя конечно тоже не подходят.
   acht
 
9 - 24.07.20 - 23:21
(8) "Лог в реальном времени, т.е. относительно большое количества текстовой информации" надо выводить в файл.

Желание программиста похвастатся всеми кишочками своего продукта перед пользователем, оно конечно похвально. Но только приводит к интерфейсу, которым невозможно пользоваться. Ты же сам из всего этого "лога" воспринимаешь только последние строчки 3. А для "расследования" начинаешь что-то делать, например проматывать окошко обратно.
   acht
 
10 - 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
а блин, это для оф
   acht
 
13 - 25.07.20 - 00:03
(11) Ошметки общей архитектуры с веб-клиентом. Тихо заметается под ковер, в отличие от асинхронщины и немодальности =)
   Garykom
 
14 - 25.07.20 - 00:15
(0) По уму это делается выносом кода на сервер в фоновое, а на клиенте через обработчик ожидания сообщай прогресс периодически
   TormozIT
 
15 - 25.07.20 - 00:25
(14) А если у меня внешняя обработка, т.е. нужно обойтись без фонового задания?
   acht
 
16 - 25.07.20 - 00:32
(15) > А если у меня внешняя обработка

- Представь что тебе надо разгрузить машину, сколько времени это займет?
- Пару часов
- Это камаз
- 8 часов
- Камаз, груженый песком
- 12 часов
- У тебя нет лопаты и инструментов, только твои руки
- 2 дня
- На улице -40
- 4 дня
- Камаз вообще под водой
- Так же нечестно, ты постоянно придумываешь новые условия! К чему ты мне вообще все это рассказываешь? Вы, разработчики, вечно всякую херню рассказываете!

=)
   TormozIT
 
17 - 25.07.20 - 00:35
(16) Мимо. Про синхронность явно написано было уже в (2).
   acht
 
18 - 25.07.20 - 00:40
(17) А. То есть ты в (15) уже знал про что идет речь, но решил таки полезть глубже.

Ну ок, чо.
   Bigcalm
 
19 - 25.07.20 - 01:08
(8) Ну может тогда подготовить текст лога, и потом его выпиливать в текстовый файл, с помощью ВыполнитьКомандуСистемы, или как оно там называется.
Читать, и дальше уже там по логике работы.
   TormozIT
 
20 - 25.07.20 - 01:18
Нашел синхронное решение через вывод в свое поле текстового документа на управляемой форме и передергивание его видимости для перерисовки. Позже выложу готовое решение.
   acht
 
21 - 25.07.20 - 09:08
(20) > передергивание его видимости
Лучше не выкладывай, это сильно плохое решение.

При изменении видимости элемента происходит неявный контекстный вызов сервера(что, собственно, и приводит к перерисовке формы), про это даже в СП написано. Отсюда немедлено следуют два момента:
- При использовании своего "логгирования" из процедур, а которых контекстные серверные вызовы явно запрещены (см тот же СП, например, ПриАктивизацииЯчейки") ты разваливаешь работу формы.
- При накоплении достаточного числа строк ("лог в реальном времени, т.е. относительно большое количества текстовой информации" и тыпы) приложение будет не выполнять полезную работу, а ждать сериализор и сеть. Сделай замер производительности.

Использование подобных "хитровыдуманные" решений, оно попахивает.
   TormozIT
 
22 - 25.07.20 - 09:32
(21) Спасибо. Все это учел. Форма используется отдельная и максимально легкая. Неявный серверный вызов конечно делается. Но он выполняется не чаще раза в 2 секунды. Лог не накапливается в этой форме, а хранится 10 последних строк. Полный лог копится отдельно и выводится в конце без участия в отображении реального времени.
   acht
 
23 - 25.07.20 - 09:44
(22) > Полный лог копится отдельно
Если "отдельно" находится в контексте этой же формы, то у меня для тебя плохие новости.
   vde69
 
24 - 25.07.20 - 09:54
Я подобное делал через
Подключитьобработчикожидания
С временем 0.1
   vde69
 
25 - 25.07.20 - 09:55
(24) но это если итерраций не много
   TormozIT
 
26 - 25.07.20 - 16:24
(24) Опять асинхронный совет или слишком лаконичный.
   TormozIT
 
27 - 27.07.20 - 00:34
В ИР 5.45 реализовал (0) в 2-х вариантах:
1. Обработка.ирПлатформа.Форма.ВременноеОкноСообщений - обычная форма, активный вариант, без серверных вызовов.
2. Обработка.ирПлатформа.Форма.ВременноеОкноСообщений2 - управляемая форма, пассивный вариант, с серверными вызовами, чуть менее универсальный из-за ошибки платформы http://www.hostedredmine.com/issues/882422


Список тем форума
Рекламное место пустует  Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.