Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NotificationWindow - интерактивное окно уведомлений в 1С
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Хранилище: скачать бесплатно отчеты, обработки, конфигурации, программы, внешние компоненты, литературу > 1С: Предприятие 8 > Программы, внешние компоненты, прочее
Vofka
Нажмите для просмотра прикрепленного файла

Как в 1С уведомить пользователя о чём-то таком, на что ему надо обратить внимание? Из штатных простых возможностей есть 2 способа:
  1. Ещё с версии 7.7 есть метод Сообщить(), который выводит текст в специальное окошко. Недостатки:
    • это просто текст без какого-либо оформления;
    • его не видно, если у пользователя свёрнута 1С;
    • сообщение не интерактивно (на него нельзя пощелкать).
  2. В версии 8.2 добавили метод ПоказатьОповещениеПользователя(). Это уже на много лучше: можно и клацнуть, можно показать даже когда 1С свёрнута. Но и тут есть куда стремится:
    • нельзя управлять временем показа окна;
    • нельзя на 2 и более слов или выражений повесить разные обработчики событий;
    • это по прежнему просто текст без возможности его разукрасить, увеличить и т.п.
  3. В 8.3 появился новый объект ФорматированнаяСтрока. Я сам лично с 8.3 пока не работаю, но насколько я понял с его помощью можно разукрашивать текст в интерактивных уведомлениях типо того же ПоказатьОповещениеПользователя(), Предупреждение() и возможно ещё что-то. Если я не прав - поправьте, пожалуйста. Благодаря этому уходит последний недостаток, который был описан в пункте выше. Но остальные два по прежнему актуальны.

Что я предлагаю. Внешняя компонента, которая позволяет показывать окошко. Не просто окошко с текстом, а окошко с содержимым в формате html. Таким образом можно делать практически любое оформление сообщения (в т.ч. вставлять gif картинки). Но это ещё не все. В html-е можно вешать обработчики нажатия на элементы (ссылки, кнопки), которые можно отловить в 1С в обработке внешнего события. Об этом расскажу ниже.

Суть происходящего, надеюсь ясна. Теперь расскажу как пользоваться.

У окна есть 4 свойства:
  1. Title
    Использование: Чтение и запись
    Тип: Строка
    Описание: получает и устанавливает заголовок окошка.

    Body
    Использование: Только чтение
    Тип: Строка
    Описание: получает содержимое окна, которое было установлено методом Show().

  2. AllowDrag
    Использование: Чтение и запись
    Тип: Булево
    Описание: Истина - пользователь может перетягивать окошко в другое место, Ложь - окно не перетаскивается.

  3. 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С и файл, которым компоненту надо регистрировать. Регистрацию нужно запускать от имени администратора.

Вопросы, предложения, пожелания, благодарности можно оставлять тут smile.gif .

ПС. кто не видел, советую так же ознакомиться со старшим братом NotificationWindow-а - компонентой необходимо зарегистрироваться для просмотра ссылки smile.gif .

Сама компонента: Нажмите для просмотра прикрепленного файла
Регистратор компоненты (не забудьте поменять путь к компоненте; в моем случае это C:\Component\NotificationWindow.dll): Нажмите для просмотра прикрепленного файла
ЦФ-ник с примером использования: Нажмите для просмотра прикрепленного файла

© Моё.
Vofka
Неудачная была идея?
DartRomanius
Цитата(Vofka @ 20.08.14, 8:50) необходимо зарегистрироваться для просмотра ссылки
Неудачная была идея?


Не думаю, на досуге посмотрю.
Может будут идеи....
Batchir
Лично для меня было бы очень полезно ели бы сервер мог сгенерировать оповещение пользователю, а клиент его отловить и отобразить, а если как опция вместо оповещения пользователю просто генерировать внешнее событие, то вообще цены бы не было.
Но это мечты ...
Vofka
Цитата(Batchir @ 20.08.14, 19:59) необходимо зарегистрироваться для просмотра ссылки
Лично для меня было бы очень полезно ели бы сервер мог сгенерировать оповещение пользователю, а клиент его отловить и отобразить, а если как опция вместо оповещения пользователю просто генерировать внешнее событие, то вообще цены бы не было.
Но это мечты ...

Это не мечты. Есть у дяди Вовы "кое что" для решения и этого вопроса: с внешним событием и все такое 32542460.gif

Цитата(DartRomanius @ 20.08.14, 9:42) необходимо зарегистрироваться для просмотра ссылки
Может будут идеи....

Если что - пишите smile.gif
DartRomanius
Vofka, cvs используешь какой?
Batchir
Ну внешнее событие это как дополнение к хотелке.
Решение задачи передачи оповещения клиента с сервера - вот о чем я давно мечтаю.
т.е. что бы не клиент опрашивал, например, регистр сведений о том появились ли там записи,
а сервер делал записи в регистре и оповещал необходимого клиента о том что эти записи появились.
и вот тут если бы это оповещение было в виде внешнего события, то была бы сказка.
Vofka
Batchir, в моём решении так и есть: сервер может отправлять произвольные сообщения клиентам в виде внешних событий. Так же клиенты могут обмениваться произвольными сообщениями между собой, без записи и опроса в базе данных. Но это отдельное решение и отдельный программный комплекс, не касающийся этой темы smile.gif .
Batchir
А вот это действительно классная штука.

С удовольствием бы поюзал, недавно как раз очень нужно было.
УФ. Использовал новый механизм http-сервис 8.3.5, внешний источник слал пост запросы и в базе происходили изменения.
Причем необходимо было что б об этих изменениях сразу узнавал конкретный клиент.
Ничего подходящего не нашел и пришлось гкодить. А с твоей разработкой красота бы получилась.
bavkyz
Добрый, подскажите, а для x64 есть dll ?


Vofka Сама компонента: Прикрепленный файл NotificationWindow.zip необходимо зарегистрироваться для просмотра ссылки ,


Очень интересная разработка)))

А исходники можно как то получить ... для x64 сделать и прозрачность). Спасибо.
Vofka
bavkyz, это делалось 7 лет назад, поэтому я не уверен, что исходники где-то сохранились. По крайней мере что бы прямо сейчас их откуда-то достать - я не знаю откуда.
bavkyz
Vofka @ Сегодня, 14:13 необходимо зарегистрироваться для просмотра ссылки ,

Жалко, идея с html отличная.
Посмотрите может попадутся на глаза исходники или подскажите может видели что то похожее на Вашу разработку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.