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



Предполагаю что в организациях где работает больше 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 не будет опубликован. Обязательные поля помечены *