Автор: Vofka 03.08.14, 19:33
Как в 1С уведомить пользователя о чём-то таком, на что ему надо обратить внимание? Из штатных простых возможностей есть 2 способа:
- Ещё с версии 7.7 есть метод Сообщить(), который выводит текст в специальное окошко. Недостатки:
- это просто текст без какого-либо оформления;
- его не видно, если у пользователя свёрнута 1С;
- сообщение не интерактивно (на него нельзя пощелкать).
- В версии 8.2 добавили метод ПоказатьОповещениеПользователя(). Это уже на много лучше: можно и клацнуть, можно показать даже когда 1С свёрнута. Но и тут есть куда стремится:
- нельзя управлять временем показа окна;
- нельзя на 2 и более слов или выражений повесить разные обработчики событий;
- это по прежнему просто текст без возможности его разукрасить, увеличить и т.п.
- В 8.3 появился новый объект ФорматированнаяСтрока. Я сам лично с 8.3 пока не работаю, но насколько я понял с его помощью можно разукрашивать текст в интерактивных уведомлениях типо того же ПоказатьОповещениеПользователя(), Предупреждение() и возможно ещё что-то. Если я не прав - поправьте, пожалуйста. Благодаря этому уходит последний недостаток, который был описан в пункте выше. Но остальные два по прежнему актуальны.
Что я предлагаю. Внешняя компонента, которая позволяет показывать окошко. Не просто окошко с текстом, а окошко с содержимым в формате html. Таким образом можно делать практически любое оформление сообщения (в т.ч. вставлять gif картинки). Но это ещё не все. В html-е можно вешать обработчики нажатия на элементы (ссылки, кнопки), которые можно отловить в 1С в обработке внешнего события. Об этом расскажу ниже.
Суть происходящего, надеюсь ясна. Теперь расскажу как пользоваться.
У окна есть 4 свойства:- Title
Использование: Чтение и запись
Тип: Строка
Описание: получает и устанавливает заголовок окошка.
Body
Использование: Только чтение
Тип: Строка
Описание: получает содержимое окна, которое было установлено методом Show().
- AllowDrag
Использование: Чтение и запись
Тип: Булево
Описание: Истина - пользователь может перетягивать окошко в другое место, Ложь - окно не перетаскивается.
- AllowHide
Использование: Чтение и запись
Тип: Булево
Описание: Истина - окно можно закрыть интерактивно, Ложь - интерактивно окно закрыть нельзя. Если свойство установлено в Истина, то справа вверху есть кнопка закрытия, если в Ложь - то кнопки закрытия нету.
Поддерживаемые методы:- Show(<Тело>, <Время>)
Параметры:
<Тело>
Тип: Строка
Это html, который отобразится в окошке. Так же это то, что будет получено в свойстве Body. Пример:
Тело = "
|<a href=""#"" onclick=""ExternalEvent('ЩелчокПоСсылке', 'Данные')""><b>Ссылка</b></a>
|<br />
|<input type=""button"" value=""Кнопка"" onclick=""ExternalEvent('ЩелчокПоКпопке', 'Данные')"" />
|";
Обработчик ExternalEvent('Параметр1', 'Параметр2') говорит окошку о том, что при щелчке нужно запустить внешнее событие в 1С. Внешнее событие будет приходить от NotificationWindow, имя события задается в первом параметре, данные можно передать во втором.
<Время> (необязательный)
Тип: Число
Количество секунд после которых окошко само закроется. Если не надо, чтобы само закрывалось - параметр можно не указывать либо указать 0.
Если время больше 0, то окно само закроется и сгенерирует в 1С внешнее событие от NotificationWindow с именем события WindowHide и в данных передаст Body. Body можно сохранить где-то для подальшей обработки (в примере приложенной конфигурации можно посмотреть что имелось ввиду).
- ShowFromUrl(<Урл>)
Параметры:
<Урл>
Тип: Строка
Адрес веб страницы, которую надо отобразить в окне
- Hide()
Спрятать окошко
- SetBackground(<R>, <G>, <B>)
Параметры:
<R>, <G>, <B>
Тип: Число
Значения параметров R, G, B в представлении цвета в виде RGB
- SetHeight(<Высота>)
Параметры:
<Высота>
Тип: Число
Высота окошка
- SetWidth(<Ширина>)
Параметры:
<Ширина>
Тип: Число
Ширина окошка
- BottomRight()
Устанавливает окошко в правом нижнем углу экрана
Для работы нужен .Net Framework 4.
Работоспособность проверялась на ОС Windows 7 (x32) и платформе 1С:Предприятие 8.2 (8.2.19.90) в режиме управляемого приложения. Должно работать и в обычном приложении и на платформе 8.1 и 7.7 (но я это не проверял).
Прилагаю к посту саму компоненту, пример использования в виде конфигурации 1С и файл, которым компоненту надо регистрировать. Регистрацию нужно запускать от имени администратора.
Вопросы, предложения, пожелания, благодарности можно оставлять тут
.
ПС. кто не видел, советую так же ознакомиться со старшим братом NotificationWindow-а - компонентой http://pro1c.org.ua/index.php?showtopic=13022
.
Сама компонента:
NotificationWindow.zip ( 13,34 килобайт )
: 80Регистратор компоненты (не забудьте поменять путь к компоненте; в моем случае это C:\Component\NotificationWindow.dll):
RegAddIn.zip ( 376 байт )
: 52ЦФ-ник с примером использования:
NotificationWindow_Demo.zip ( 11,56 килобайт )
: 72© Моё.
Автор: DartRomanius 20.08.14, 8:42
Цитата(Vofka @ 20.08.14, 8:50)
Неудачная была идея?
Не думаю, на досуге посмотрю.
Может будут идеи....
Автор: Batchir 20.08.14, 18:59
Лично для меня было бы очень полезно ели бы сервер мог сгенерировать оповещение пользователю, а клиент его отловить и отобразить, а если как опция вместо оповещения пользователю просто генерировать внешнее событие, то вообще цены бы не было.
Но это мечты ...
Автор: Vofka 20.08.14, 19:26
Цитата(Batchir @ 20.08.14, 19:59) http://pro1c.org.ua/index.php?act=findpost&pid=90416
Может будут идеи....
Если что - пишите
Автор: DartRomanius 21.08.14, 8:46
Vofka, cvs используешь какой?
Автор: Batchir 21.08.14, 14:08
Ну внешнее событие это как дополнение к хотелке.
Решение задачи передачи оповещения клиента с сервера - вот о чем я давно мечтаю.
т.е. что бы не клиент опрашивал, например, регистр сведений о том появились ли там записи,
а сервер делал записи в регистре и оповещал необходимого клиента о том что эти записи появились.
и вот тут если бы это оповещение было в виде внешнего события, то была бы сказка.
Автор: Vofka 21.08.14, 21:55
Batchir, в моём решении так и есть: сервер может отправлять произвольные сообщения клиентам в виде внешних событий. Так же клиенты могут обмениваться произвольными сообщениями между собой, без записи и опроса в базе данных. Но это отдельное решение и отдельный программный комплекс, не касающийся этой темы .
Автор: Batchir 22.08.14, 19:08
А вот это действительно классная штука.
С удовольствием бы поюзал, недавно как раз очень нужно было.
УФ. Использовал новый механизм http-сервис 8.3.5, внешний источник слал пост запросы и в базе происходили изменения.
Причем необходимо было что б об этих изменениях сразу узнавал конкретный клиент.
Ничего подходящего не нашел и пришлось гкодить. А с твоей разработкой красота бы получилась.
Автор: bavkyz 20.09.21, 6:56
Добрый, подскажите, а для x64 есть dll ?
Vofka Сама компонента: Прикрепленный файл NotificationWindow.zip
,
Очень интересная разработка)))
А исходники можно как то получить ... для x64 сделать и прозрачность). Спасибо.
Автор: Vofka 20.09.21, 9:13
bavkyz, это делалось 7 лет назад, поэтому я не уверен, что исходники где-то сохранились. По крайней мере что бы прямо сейчас их откуда-то достать - я не знаю откуда.
Автор: bavkyz 20.09.21, 9:30
Vofka @ Сегодня, 14:13
,
Жалко, идея с html отличная.
Посмотрите может попадутся на глаза исходники или подскажите может видели что то похожее на Вашу разработку.