Как в 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-а - компонентой необходимо зарегистрироваться для просмотра ссылки .
Сама компонента: Нажмите для просмотра прикрепленного файла
Регистратор компоненты (не забудьте поменять путь к компоненте; в моем случае это C:\Component\NotificationWindow.dll): Нажмите для просмотра прикрепленного файла
ЦФ-ник с примером использования: Нажмите для просмотра прикрепленного файла
© Моё.