Отправка сообщений пользователям



Предполагаю что в организациях где работает больше 10-15 человек, звонить каждому и сообщать пользователям какую либо информацию. Я обыскал на всех ресурсах так того что требуется не нашел.

Нашел более подходящее //infostart.ru/public/74444/. Но пришлось немного попотеть что-бы работало на 8.2. 

Итак приступим:

  1. В модуле обычного приложения в процеду ПриНачалеРаботыСистемы добавляем текст

          

          Форма = Обработки.ОповещенияПользователя.ПолучитьФорму(«Форма»);
         
Форма.Открыть();

     2.  Создаем ОбщийМодуль под названием «опМодуль» в модуле вставляем текст

         

     Функция ВывестиОповещение(ИмяОтчета);
   
     ИмяФайла = ПолучитьИмяВременногоФайла();
   
     Отчет = Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяОтчета);
   
     ДвоичныеДанные = Отчет.ХранилищеВнешнейОбработки.Получить();
   
     ДвоичныеДанные.Записать(ИмяФайла);
   
     опФорма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
   
     опФорма.Открыть();
   
     УдалитьФайлы(ИмяФайла);
    КонецФункции

    Процедура ПроверкаНовыхОповещений() Экспорт

         ОтборПользователей = Новый Структура(«Пользователь»);
   
     ОтборПользователей.Пользователь = ПараметрыСеанса.ТекущийПользователь;
   
     Оповещения = РегистрыСведений.ОповещениеПользователей.Выбрать(ОтборПользователей);
   
     КолОп = 0;
         Пока
Оповещения.Следующий() Цикл
            Если
Оповещения.Просмотрено Тогда
            Продолжить;
            КонецЕсли;
           
КолОп = КолОп + 1;
        КонецЦикла;  
         Если (
КолОп>0) Тогда
   
       ВывестиОповещение(«Оповещения пользователя»);
         КонецЕсли;
       КонецПроцедуры

       Процедура ЗадатьИнтервал(Интервал) Экспорт
   
      ПодключитьОбработчикОжидания(«ПроверкаНовыхОповещений»,Интервал,5);
       КонецПроцедуры

       Процедура ОчиститьИнтервал() Экспорт
         
ОтключитьОбработчикОжидания(«ПроверкаНовыхОповещений»);
       КонецПроцедуры

   3.  Создаем регистр сведений «ОповещениеПользователей». Добавляем измерения: «Пользователь» Тип:»СправочникСсылка.Пользователи», «Дата» Тип:»Дата», «Владелец»  Тип:»СправочникСсылка.Пользователи», Ресурсы: «Просмотрено» Тип: «Булево», «Оповещение» Тип: «Строка»

 

   4.  Добавляем в конфигурацию Обработки из файла и пользуемся.

 Принцип Работы:

  При запуске 1с справой стороны в трее открыто оповещение пользователей. Открываем обработку Оповестить, пишим текст сообщения и отметив получателей отправляем сообщение.

  Когда сообщение приходит получателю, то форма оповещени появляется с правой стороны. Что бы сообщение считалось прочитаным, его необходимо открыть двойным щелчком правой клавиши мыши и оно откроется в новом окне как показао на третем изображении. В дальнейшем эти сообщения можно будет просматривать во вкладке «Просмотреные» 

  PS Так же в архиве добавлен отчет для просмотра ознакомления с сообщением пользователей(спасибо за шаблон отчета //infostart.ru/public/20333/

53 Comments

  1. mtv:)

    (0) Идея заслуживает внимания.

    Reply
  2. kojinandrej

    (1) Спасибо

    Reply
  3. _LEV_

    Нужно будет посмотреть. Спасибо.

    Reply
  4. kojinandrej

    (3) _LEV_, не зачто пользуйтесь и не забудьте плюсовать

    Reply
  5. fomix

    Ломать ради оповещения типовую конфу — О-Д-Н-А-К-О!!!

    Reply
  6. kojinandrej

    (5) fomix, а у тебя есть другие варианты???

    Reply
  7. fomix

    (6) Да хотя бы через стандартный механизм оповещений

    Reply
  8. kojinandrej

    (7) fomix, пользуйся стандартом, если не хочишь пилять. Я выложил для тех, кого стандарт не устраивает!!!!

    Reply
  9. fomix

    (8) Так я не против )))

    Reply
  10. 105raz

    У кого замочек на конфе снят — конечно полезно. Меня, например, заколебало уже обзванивать пользователей с просьбой выйти из базы!

    Reply
  11. ADM1NZ

    Спасибо! Полезно

    Reply
  12. bahcha8

    Попробовала в УПП, работает хорошо, но если в списке Новые есть уже оповещение — то следующее новое пользователь не получает — никогда не получает.А так оч удобно

    Reply
  13. SergDi

    8.2 я правильно понял, управляемые формы тоже поддерживаются?

    Reply
  14. bahcha8

    8.2, управляемые формы поддерживаются, работаем в толстом клиенте

    Reply
  15. bahcha8

    Да, и время отправки всегда 00:00:00 — не удобно

    Reply
  16. kojinandrej

    Так, при получении показывает время отправления сообщения

    Reply
  17. Aleksey-29

    можно и так, только использовать типовое решение правильнее.

    Прикрути шаблоны оповещений, будет удобнее.

    Reply
  18. bahcha8

    так время отправление всегда разное, а показывает всегда нули

    Reply
  19. kojinandrej

    (18) bahcha8, не знаю как у тебя у меня показывает нормальное время не нули. проверял через какую либо консоль дата и время в регистр записуется?

    Reply
  20. MOHAX1905

    Конфа всёравно правленная, поэтому воспользуюсь. Спасибо)

    Reply
  21. Гость

    Спасибо. пригодится

    Reply
  22. Volga1904

    нужная вещь

    Reply
  23. Zoba

    Спасибо. Пригодится.

    Reply
  24. white125

    не знаю насколько целесообразно отправлять пользователям сообщения именно через 1с

    Reply
  25. white125

    а шаблоны сообщений можно добавить?

    Reply
  26. liveAp4u

    Обработка понравилась.

    Есть ряд минусов:

    1. Ставлю галочку отправить всем, пишу сообщение. В регистр они попадают на ожидаение. Потом еще раз отправляю всем другое сообщение. Весь свписок со старыми извещениями пропадает.

    2. Соответсвенно у пользователя та же проблема, что в пункте 1.

    Можно как-то решить?

    Reply
  27. rumik007

    мы у себя используем IChat v1.21 b6 + сервер(хотя мона и без него) для локальной сети уже очень давно, очень довольны.

    Есть вопросик, если пользователь не в базе, то как с ним связаться ???

    Reply
  28. asg1975

    На мой взгляд проще использовать для этого сторонние программы. Тот же IChat. Саму идею плюсую!

    Reply
  29. yalo

    Надо попробовать

    Reply
  30. Uncore

    (18) проверьте у измерения Дата в регистре сведений должен стоять состав даты: Дата и время. По умолчанию ставится просто Дата, поэтому и нули во времени.

    По поводу проблемы, описанной в (26), предлагаю автору добавить в регистр еще одно измерение НомерСообщения. При записи нового сообщения если уже существует для данного пользователя сообщение, увеличивать номер на 1. И тогда можно отправлять пользователям сколько угодно сообщений, ничего не пропадет 🙂

    Reply
  31. itar59

    обычный лив мессенджер прекрасно держит под 7 виндой.

    Reply
  32. bahcha8

    (30) Uncore, Про дату — Да, я уже поправила, а вот НомерСообщение — попробую, Спасибо

    Reply
  33. commo

    Спасибо. Буду пугать пользователей )

    Reply
  34. dryms

    Здравствуйте. обработка, конечно интересная, но зачем так ломать типовую конфу. Можно сделать внешнюю обработку, которая рассылает письма пользователям (в справочнике пользователи можно указать е-майл).

    Reply
  35. alma-soft

    спасибо автору за работу, идея хорошая попробуем использовать вот только не всем подойдет изменения в конфигурации ради сообщений хотя если текущих изменений и так много то почему бы не сделать еще одно.

    Reply
  36. SPonomareff

    День добрый.

    У меня вопрос по поводу следующей ошибки:

    {Обработка.ОповещенияПользователя.Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (Выбрать)

    Оповещения = РегистрыСведений.ОповещениеПользователей.Выбрать(ОтборПользователей);

    Что делать?

    Reply
  37. Al-77

    Я так понимаю если пользователь закроет форму тогда он не увидит сообщение?

    Reply
  38. slelvi

    Как раз нужно подобное реализовать у клиента! возьму идею на заметочку!!!

    Reply
  39. Altair777

    Интересно, кто автор этой разработки? Складывается впечатление что не автор публикации.

    Ни одного пожелания за полгода не было выполнено. И описание не вполне соответствует действительности.

    В частности, измерение «Дата» регистра сведений «ОповещениеПользователей» должен быть не просто «Дата», а «Дата и время».

    Reply
  40. Altair777

    Автор! Я тащусь с кода 🙂

     КолОп = 0;
    Пока Оповещения.Следующий() Цикл
    Если Оповещения.Просмотрено Тогда
    Продолжить;
    КонецЕсли;
    КолОп = КолОп + 1;
    КонецЦикла;
    Если (КолОп>0) Тогда
    ВывестиОповещение(«Оповещения пользователя»);
    КонецЕсли;
    

    Показать

    Найдите 10 отличий:

     ЕстьОповещение = Ложь;
    Пока Оповещения.Следующий() Цикл
    Если Не Оповещения.Просмотрено Тогда
    ЕстьОповещение = Истина;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если ЕстьОповещение Тогда
    ВывестиОповещение(«Оповещения пользователя»);
    КонецЕсли;
    

    Показать

    Reply
  41. Altair777

    0 > Создаем регистр сведений «ОповещениеПользователей». Добавляем измерения: «Пользователь» Тип:»СправочникСсылка.Пользователи»

    Автор не знает что для того чтобы сработал метод:

     ОтборПользователей = Новый Структура(«Пользователь»);
    ОтборПользователей.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    Оповещения = РегистрыСведений.ОповещениеПользователей.Выбрать(ОтборПользователей);
    

    должно быть так: в качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее».

    Reply
  42. Dr.DragoN

    А корпоративная почта нынче не почёте?)))

    Reply
  43. Altair777

    (43) Dr.DragoN, почта — это долго и не факт что будет прочитана. Ведь 1С может быть открыта в терминале, а почтовая программа на локальном компе. И у юзеров будет отмазка.

    Я сейчас тоже внедряю нечто подобное. Чтобы при нединамическом обновлении конфигурации разослать сообщения пользователям, а потом через пару минут с чистой совестью завершить их сеансы.

    И сообщения хочу принципиально выводить в 1С. Если пользоватль увидел сообщение и не отреагировал — это его проблемы.

    А если не увидел, значит он в этот момент не работал в базе и, опять же, это его проблемы 🙂

    Reply
  44. k352

    Вообще то хотелось бы не просто рассылать сообщения, а и закрывать корректно сеансы в 1С.

    Reply
  45. k352

    Так есть механизм закрытия сеансов?

    Reply
  46. kojinandrej

    http://infostart.ru/public/65484/ рекомендую

    Reply
  47. Tom1

    Проще для этих целей было бы использовать net send.

    Reply
  48. luchyk007

    Спасибо, оценим Вашу обработку.

    Reply
  49. Vovus

    А где <<?>>опМодуль.ОчиститьИнтервал();

    {Форма.Форма.Форма(74,2)}: Переменная не определена (опМодуль)

    <<?>>опМодуль.ЗадатьИнтервал(600);

    {Форма.Форма.Форма(79,2)}: Переменная не определена (опМодуль)

    <<?>>опМодуль.ЗадатьИнтервал(1200);

    Reply
  50. nail_90

    Добрый день! При отправлении массового сообщения сервер нагружается на 100 процентов пока большая часть пользователей не прочитает новое сообщение, как можно от этого избавиться ?

    Reply
  51. kojinandrej

    Надо время от времени чистить регистр, тогда не будет грузить

    Reply
  52. rom-x

    Есть ли какое-нибудь решение для РИБ ? я так понимаю данное не будет работать, просто у нас в справочнике пользователей 1044 записи, я думаю система нехило подвиснет.

    Reply
  53. yurets86

    можно попробывать снизить нагрузку на сервер путем чистки кеша, сделать обработку которая через 1 минуту после отправки сообщение -> очистит кеш базы, имхо, может помочь

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *