Внимание! Никакого отношения к технологии сотовой связи SMS эта подсистема не имеет!
Немного предыстории
Несколько лет назад, работая на заводе администратором БД, я неимоверно страдал от общения с пользователями УПП по телефону (ха-ха), которые постоянно просили посмотреть какой-то документ, исправить какую-нибудь ссылку. На предприятии никаких мессенджеров официально не поддерживалось; то, что было полуофициально (spark и т.п.) - работало кое-как, а поддерживалось ещё хуже. Пришло озарение и в итоге была написана небольшая подсистема отправки-получения сообщений прямо внутри 1С: УПП. Уж этого добра было достаточно у каждого пользователя!
В итоге на текущий момент с марта 2017 года (когда в первый и последний раз чистился регистр с данными) через подсистему прошло более 170 тысяч пользовательских сообщений, т.е. можно уверенно говорить об успехе и востребованности разработки. Её функционал используется для автоматических рассылок и генерации целевых оповещений об определенных событиях в базе.
Недавно была полностью переделана визуальная составляющая подсистемы, приближена к современным стандартам. В таком виде её и представляю вашему вниманию.
"Если нельзя в Телеграм, то давайте напишем свой."
Применимость
Подсистема реализована на управляемых формах, при интеграции обработки в конфигурацию доступна и в обычном приложении. СМС2 разрабатывалась для использования внутри конфигурации 1С: УПП версии 1.3.113, тем не менее перенос в любую другую конфигурацию не должен вызвать каких-то трудностей. Использованная платформа - 1С:Предприятие 8.3.13.1513.
Тестировалось на клиентах Windows XP и 7. Работает даже с установленным Internet Explorer 6, но лучшее впечатление - начиная с 9-й версии. На клиентах Linux-систем не запускал, тут ничего сказать не могу.
Режим совместимости конфигурации был выставлен в 8.2.16, интерфейс - 8.2, в более прогрессивных режимах тоже всё функционирует и вроде бы не расползается.
Как это работает
В подсистеме используется два собственных регистра сведений. Первый, у_СМС, содержит непосредственно сообщения пользователей. Есть некоторая избыточность в ресурсах регистра, это оставлено на Новый Год для развития уже запланированного, но пока нереализованного функционала. Во втором регистре у_СМС_Профили хранятся настройки пользователя СМС и их аватары. Доступно как предварительное, так и кэширование "на лету" в аватары, если у пользователей базы привязаны физические лица с фотографиями - актуально для УПП.
Обработка СМС2 предоставляет пользователю интерфейс отправки и получения сообщений. В левой панели окна содержится список всех диалогов, отсортированный по времени создания последнего сообщения, справа выводится непосредственно сами сообщения, сформатированные для вывода в поле HTML-документа в виде диалога.
Для оперативного уведомления о поступающих сообщениях в модуле обычного (можно адаптировать и для управляемого) приложения запускается обработчик ожидания. Образец кода будет приложен.
N.B.: Почему же эрзац-мессенджер? Пользователь не увидит новых сообщений в самой обработке, пока не нажмет кнопку "Обновить". Пока лишь тестирую другое поведение, при положительных результатах выложу обновлённую версию обработки.
Порядок установки
- Запустите "Сравнить и объединить..." своей конфигурации со скачанным файлом смс2.cf
- В окне сравнения/объединения конфигураций снимите отметку с корневого элемента конфигурации
- Отметьте для объединения
- Регистры сведения у_СМС и у_СМС_Профили
- Обработка СМС2
- Общий модуль укбп_Общий
- Выполните объединение конфигураций
- Добавьте в модуль обычного приложения следующий код (содержится в приложенной конфигурации):
Процедура ПриНачалеРаботыСистемы()
// НачалоВставки СМС2
ПодключитьОбработчикОжидания("у_СМС2_СлушатьСообщения", 60);
// КонецВставки СМС2
КонецПроцедуры
// НачалоВставки СМС2
Процедура у_СМС2_СлушатьСообщения() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 1
| у_СМС.Отправитель,
| у_СМС.Текст,
| у_СМС.Время
|ИЗ
| РегистрСведений.у_СМС КАК у_СМС
|ГДЕ
| у_СМС.Адресат = &Адресат
| И НЕ у_СМС.Прочитано
| И (у_СМС.Срок = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ИЛИ у_СМС.Срок >= &ТекущаяДата)
| И у_СМС.Отправитель <> &Адресат";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Адресат", ПараметрыСеанса.ТекущийПользователь);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Адрес = укбп_Общий.ПолучитьАватарССервера(Выборка.Отправитель);
Портрет = ?(ЗначениеЗаполнено(Адрес), Новый Картинка(ПолучитьИзВременногоХранилища(Адрес)), БиблиотекаКартинок.Сотрудники48);
Если НЕ Выборка.Отправитель.Пустая() Тогда
ОткрытьТаблоСМС2 = Новый ОписаниеОповещения("ОткрытьСМС2", укбп_Общий, Новый Структура ("Абонент", Выборка.Отправитель));
ПоказатьОповещениеПользователя("Новое сообщение!", ОткрытьТаблоСМС2, "Автор: " + Выборка.Отправитель, Портрет);
Иначе
ПараметрыЗапуска = Новый Структура("Отправитель", Выборка.Отправитель);
ПараметрыЗапуска.Вставить("Адресат", ПараметрыСеанса.ТекущийПользователь);
ПараметрыЗапуска.Вставить("Время", Выборка.Время);
ОткрытьТаблоРассылки = Новый ОписаниеОповещения("ОткрытьТаблоРассылкиСМС2", укбп_Общий, ПараметрыЗапуска);
ПоказатьОповещениеПользователя("Внимание!", ОткрытьТаблоРассылки, Выборка.Текст, Портрет);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// КонецВставки СМС2
- PROFIT
Для кэширования аватар из фотографий применяется Imagemagick. Его можно бесплатно скачать с сайта разработчика. Установка программы на сервере приложений 1С не требует никаких комментариев.
Заключение
Подсистема СМС2 остаётся в процессе доработки, периодически буду публиковать версии с обновлённым функционалом.
STAY TUNED!