В крупных организациях с разветвленной инфраструктурой часто возникает задача оперативного оповещения всех работающих пользователей о предстоящих технических работах, обновлении конфигурации или необходимости экстренно покинуть программу. Когда количество информационных баз исчисляется десятками, ручной обход каждой базы становится неэффективным. Рассмотрим различные архитектурные решения этой задачи, проанализируем их преимущества, недостатки и особенности лицензирования.
Это классический подход, который часто выбирают из-за простоты реализации. Суть заключается в создании «административной» базы, которая поочередно подключается к каждой целевой базе и вносит записи в специальный регистр сведений.
Разберем по шагам логику реализации:
ОповещенияПользователей), который мониторится обработчиком ожидания на стороне клиента.Проанализируем пример кода для подключения через COM-объект:
// Пример подключения к целевой базе через COM
Коннектор = Новый COMОбъект("v83.COMConnector");
СтрокаПодключения = "Srvr='Server1C';Ref='Trade_Base';Usr='Admin';Pwd='Password123';";
Попытка
Соединение = Коннектор.Connect(СтрокаПодключения);
// Работаем с объектами метаданных целевой базы
МенеджерРегистра = Соединение.РегистрыСведений.ОповещенияПользователей;
НоваяЗапись = МенеджерРегистра.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.ТекстСообщения = "Внимание! База будет закрыта через 15 минут.";
НоваяЗапись.Срочность = Истина;
НоваяЗапись.Записать();
Соединение = Неопределено; // Разрываем соединение
Исключение
Сообщить("Не удалось подключиться к базе: " + ОписаниеОшибки());
КонецПопытки;
Важные нюансы:
comcntr.dll. На 64-битных серверах могут возникнуть сложности с настройкой компонентов COM+.COMConnector может работать медленно при установке соединения, но для разовых рассылок этот фактор не критичен.Более современный и масштабируемый способ — использование веб-технологий. Вместо «тяжелого» COM-подключения мы можем передать данные через легкий HTTP-запрос.
Рассмотрим вариант с публикацией HTTP-сервиса. В каждой целевой базе создается сервис с методом POST, который принимает текст оповещения и записывает его в базу.
Преимущества этого подхода:
Если нет желания писать свой сервис, можно воспользоваться стандартным интерфейсом OData. Однако, как справедливо замечено в дискуссии, это потребует публикации каждой информационной базы на веб-сервере, что увеличивает нагрузку на администрирование.
Проанализируем встроенный механизм платформы — Сервер взаимодействия (СВ). Это штатный инструмент для мгновенного обмена сообщениями между пользователями 1С.
Как это работает:
Вы можете программно создавать обсуждения и отправлять сообщения конкретным пользователям или группам. Платформа сама позаботится о доставке «push-уведомления», которое появится в интерфейсе пользователя.
Тонкости лицензирования (ПРОФ vs КОРП):
Выясним причину споров о лицензиях. Для версий платформы начиная с 8.3.14 использование собственного локального Сервера взаимодействия требует наличия лицензий уровня КОРП, если количество пользователей или функционал выходят за рамки базовых возможностей. Однако использование публичного облачного сервиса 1с-dialog.com доступно всем пользователям с действующим договором ИТС без дополнительных затрат на КОРП-лицензии.
Если задача стоит не просто «показать сообщение», а гарантированно завершить работу пользователей, эффективнее использовать средства администрирования кластера.
Рассмотрим использование утилиты rac. Она позволяет управлять сеансами без входа в саму базу. С помощью скрипта (на 1С или PowerShell) можно:
Пример вызова системной команды для отправки сообщения через rac:
// Команда для отправки сообщения пользователю через консоль администрирования
Команда = "rac session --cluster=" + ID_Кластера + " send-message --message='Сохраните данные!' " + ID_Сеанса;
ЗапуститьПриложение(Команда);
В обсуждении упоминалась возможность записи напрямую в базу данных. Хотя это не рекомендуется делать в обход объектной модели 1С, существует «легальный» способ — Внешние источники данных.
Проанализируем ситуацию: в административной базе вы настраиваете подключение к таблицам PostgreSQL других баз. Это позволяет использовать стандартный синтаксис 1С СоздатьМенеджерЗаписи(), но при этом данные будут физически попадать в другую базу через механизм ODBC/Native Client. Это самый быстрый способ массовой записи в 20+ баз одновременно, так как исключается накладной расход на запуск сеансов 1С в целевых базах.
Подведем итог и выберем оптимальный путь в зависимости от условий:
Помните, что при реализации любого метода с «опросом» (polling) через обработчик ожидания (например, раз в 1-5 минут), важно минимизировать нагрузку на сервер. Проверяйте наличие новых записей в регистре максимально легким запросом, чтобы не снижать производительность системы в целом.