Как настроить и программно создавать оповещения в УТ11 с использованием Системы взаимодействия?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с "1С:Управление торговлей 11" (УТ11) часто возникает необходимость информировать пользователей о различных событиях, таких как изменения статуса заказа, оплата счета или любые другие изменения, происходящие в информационной базе. Механизм оповещений в УТ11, основанный на "Системе взаимодействия 1С:Предприятие", предоставляет мощный инструментарий для этих целей. Рассмотрим, как решить типичные проблемы, связанные с участием пользователей в обсуждениях, и как программно создавать автоматические оповещения, например, при изменении заказа регламентным заданием.

Настройка Системы взаимодействия и участие пользователей в обсуждениях

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

  1. Проверка регистрации информационной базы: Для полноценной работы с Системой взаимодействия, включая обсуждения и оповещения, информационная база должна быть зарегистрирована в сервере взаимодействия. Перейдите в раздел "НСИ и администрирование – Интернет-поддержка и сервисы – Обсуждения" и убедитесь, что подключение к серверу системы взаимодействия настроено.
  2. Перезаход пользователя: Часто простая перезагрузка клиентского приложения (перезаход пользователя в базу) помогает решить проблему с участием в обсуждениях. Когда пользователь заходит в базу после её регистрации на сервере взаимодействия, система инициализирует его участие. Если пользователи долго не выходили из программы после активации функционала, их текущая сессия могла не обновить настройки.
  3. Флажок участия: Хотя в явном виде "флажка участия" в обсуждениях может быть и не видно пользователю, система внутренней проверки прав и статуса подключения к серверу взаимодействия работает таким образом. Если пользователь работает с информационной базой, которая зарегистрирована в сервере взаимодействия, его участие в обсуждениях становится возможным.

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

Программное создание автоматических оповещений

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

Рассмотрим сценарий: нам нужно, чтобы при изменении заказа регламентным заданием появлялось оповещение. Для реализации этой задачи мы будем использовать объекты Системы взаимодействия и специальный привилегированный режим.

Подготовка и общие принципы

Механизм оповещений в "1С:Предприятии" хранит информацию не в обычных справочниках или документах конфигурации, а в специальной базе Системы взаимодействия (СВ). Это отдельный компонент, который обеспечивает кроссплатформенную и кросс-базовую коммуникацию. Для программной работы с ним используются методы и объекты, предоставляемые платформой 1С.

Основные шаги для программного создания оповещения:

  1. Установка привилегированного режима: Поскольку регламентные задания могут выполняться от имени пользователя с ограниченными правами, а также для обеспечения прямого доступа к функциям Системы взаимодействия без проверок прав, нам необходимо установить привилегированный режим. Метод УстановитьПривилегированныйРежим(Истина) позволяет выполнять операции с данными от лица пользователей, которым данные недоступны, и ускоряет работу, так как не накладываются ограничения на доступ к данным. Код, исполняющийся в привилегированном режиме на сервере, не проверяет права доступа.
  2. Получение менеджера Системы взаимодействия: Для работы с СВ нам понадобится объект МенеджерСистемыВзаимодействия.
  3. Поиск или создание темы обсуждения: Оповещения обычно отправляются в конкретные темы обсуждений. Нам потребуется найти существующую тему (например, с заголовком "Тест") или создать новую.
  4. Создание и запись сообщения: После того как тема найдена, мы создаем новое сообщение, заполняем его текст, дату, автора и записываем его в СВ.

Пример программного кода для создания оповещения

Рассмотрим пример процедуры, которая демонстрирует, как создать оповещение при изменении объекта. В данном случае, мы будем имитировать оповещение об изменении номенклатуры в рамках заказа, отправляя его в заранее созданную тему обсуждения с заголовком "Тест".


Процедура СистемаВзаимодействия_СоздатьОповещение(Номенклатура, Заказ)
    Попытка
        // 1. Устанавливаем привилегированный режим для выполнения операций с Системой взаимодействия.
        // Это необходимо, так как регламентное задание может выполняться от имени пользователя
        // с ограниченными правами, а также для обхода проверок прав при работе с СВ.
        УстановитьПривилегированныйРежим(Истина);

        // 2. Создаем экземпляр МенеджераСистемыВзаимодействия.
        // Этот объект предоставляет методы для работы с обсуждениями и сообщениями.
        МенеджерСВ = Новый МенеджерСистемыВзаимодействия;

        // 3. Подготавливаем отбор для поиска нужной темы обсуждения.
        // В данном случае, мы ищем групповое обсуждение.
        Отбор = Новый ОтборОбсужденийСистемыВзаимодействия;
        Отбор.Групповое = Истина;

        // 4. Получаем список всех групповых обсуждений, соответствующих отбору.
        Обсуждения = МенеджерСВ.ПолучитьОбсуждения(Отбор);

        // 5. Ищем конкретное обсуждение по его заголовку (например, "Тест").
        // В реальных условиях можно использовать идентификатор или более сложный отбор.
        ОбсуждениеТест = Неопределено;
        Для Каждого о Из Обсуждения Цикл
            Если о.Заголовок = "Тест" Тогда
                ОбсуждениеТест = о;
                Прервать; // Обсуждение найдено, выходим из цикла
            КонецЕсли;
        КонецЦикла;

        // Проверяем, найдено ли обсуждение. Если нет, можно его создать или выйти.
        Если ОбсуждениеТест = Неопределено Тогда
            Сообщить("Обсуждение с заголовком 'Тест' не найдено. Оповещение не отправлено.");
            Возврат;
        КонецЕсли;

        // 6. Создаем новое сообщение в найденном обсуждении.
        // Идентификатор обсуждения используется для привязки сообщения.
        НовСообщ = МенеджерСВ.СоздатьСообщение(ОбсуждениеТест.Идентификатор);

        // 7. Заполняем свойства нового сообщения.
        // Дата сообщения.
        НовСообщ.Дата = ТекущаяДата();
        // Текст сообщения. Используем навигационную ссылку для удобства перехода к объекту.
        НовСообщ.Текст = ПолучитьНавигационнуюСсылку(Номенклатура) + ": отредактировать";

        // 8. Устанавливаем автора сообщения.
        // Для этого нужно получить идентификатор пользователя Системы взаимодействия по его имени в ИБ.
        // Предполагается, что существует пользователь с именем "Тест" в информационной базе,
        // который также является пользователем Системы взаимодействия.
        ИдентификаторПользователяСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(Пользователи.НайтиПоИмени("Тест").ИдентификаторПользователяИБ);
        НовСообщ.Автор = ИдентификаторПользователяСВ;

        // 9. Записываем сообщение в Систему взаимодействия.
        НовСообщ.Записать();

        Сообщить("Оповещение успешно отправлено в обсуждение 'Тест'.");

    Исключение
        // Обрабатываем возможные ошибки, например, если сервер СВ недоступен или пользователь не найден.
        Сообщить("Ошибка при отправке оповещения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Разбор программного кода по шагам

  1. УстановитьПривилегированныйРежим(Истина);
    Эта строка критически важна, особенно если код выполняется в фоновом режиме (например, регламентным заданием) или от имени пользователя с ограниченными правами. Она временно отключает проверки прав доступа для текущего сеанса на сервере, позволяя выполнить операции с Системой взаимодействия, которые иначе могли бы быть заблокированы.

  2. МенеджерСВ = Новый МенеджерСистемыВзаимодействия;
    Мы создаем экземпляр объекта МенеджерСистемыВзаимодействия. Это основной объект для работы с функционалом СВ, предоставляющий методы для управления обсуждениями, сообщениями, пользователями и другими аспектами взаимодействия.

  3. Отбор = Новый ОтборОбсужденийСистемыВзаимодействия; и Отбор.Групповое = Истина;
    Для поиска конкретного обсуждения мы используем объект ОтборОбсужденийСистемыВзаимодействия. Здесь мы устанавливаем свойство Групповое = Истина, чтобы искать только групповые обсуждения, а не контекстные (привязанные к конкретному объекту информационной базы).

  4. Обсуждения = МенеджерСВ.ПолучитьОбсуждения(Отбор);
    Метод ПолучитьОбсуждения возвращает коллекцию всех обсуждений, соответствующих заданному отбору. В нашем случае это все групповые обсуждения.

  5. Поиск обсуждения по заголовку:
    Мы перебираем полученную коллекцию Обсуждения в цикле и ищем обсуждение, у которого свойство Заголовок соответствует строке "Тест". В реальных системах для повышения надежности и производительности часто используются заранее известные идентификаторы обсуждений, которые можно хранить, например, в константах или параметрах программы.

  6. НовСообщ = МенеджерСВ.СоздатьСообщение(ОбсуждениеТест.Идентификатор);
    Как только целевое обсуждение найдено, мы создаем новое сообщение, передавая в метод СоздатьСообщение его уникальный Идентификатор. Это гарантирует, что сообщение будет привязано именно к этой теме.

  7. НовСообщ.Дата = ТекущаяДата(); и НовСообщ.Текст = ПолучитьНавигационнуюСсылку(Номенклатура) + ": отредактировать";
    Мы заполняем свойства нового сообщения. Текст сообщения может быть любой строкой. Здесь использована функция ПолучитьНавигационнуюСсылку(), которая возвращает ссылку на объект информационной базы. Это очень удобно, так как получатель оповещения может просто кликнуть по ссылке и сразу перейти к измененному объекту (в данном случае, к Номенклатура).

  8. ИдентификаторПользователяСВ = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(Пользователи.НайтиПоИмени("Тест").ИдентификаторПользователяИБ); и НовСообщ.Автор = ИдентификаторПользователяСВ;
    Каждое сообщение в СВ должно иметь автора. Мы получаем идентификатор пользователя СВ, сначала найдя пользователя в информационной базе по его имени (Пользователи.НайтиПоИмени("Тест")), затем получив его идентификатор пользователя ИБ (.ИдентификаторПользователяИБ), и уже по нему получаем идентификатор пользователя в Системе взаимодействия. Важно, чтобы такой пользователь существовал и был зарегистрирован в СВ.

  9. НовСообщ.Записать();
    После того как все свойства сообщения заполнены, мы вызываем метод Записать(), который сохраняет сообщение в базе Системы взаимодействия.

  10. Блок Попытка...Исключение...КонецПопытки;
    Использование блока обработки исключений является хорошей практикой. В случае возникновения ошибок (например, не найдено обсуждение, отсутствует связь с сервером СВ, не найден пользователь) программа не прекратит работу аварийно, а сообщит об ошибке, что позволит администратору или разработчику оперативно ее устранить.

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

Настройка регламентных заданий для отправки оповещений

Для того чтобы процедура СистемаВзаимодействия_СоздатьОповещение выполнялась автоматически при изменении заказа или другого объекта, ее необходимо интегрировать в регламентное задание. Регламентные задания в 1С:Предприятии отвечают за выполнение различных фоновых операций по расписанию.

Рассмотрим шаги по интеграции:

  1. Создание процедуры для регламентного задания: Если ваша логика изменения заказа находится в модуле объекта или в обработчике события, вы можете вызвать измененную процедуру оповещения. Если же само изменение заказа происходит в регламентном задании, то вы можете встроить вызов процедуры оповещения непосредственно в код этого регламентного задания.
  2. Настройка регламентного задания: Откройте форму "Регламентные и фоновые задания" в режиме администратора (обычно через "НСИ и администрирование – Обслуживание – Регламентные операции").
    • Найдите или создайте регламентное задание, которое отслеживает изменения заказов.
    • В настройках задания укажите метод (функцию или процедуру), которая будет вызывать вашу процедуру СистемаВзаимодействия_СоздатьОповещение, передавая в нее необходимые параметры (например, измененный документ "Заказ").
    • Настройте расписание выполнения задания в соответствии с требуемой частотой проверки изменений.

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

Дополнительные возможности и настройка оповещений в УТ11

Помимо программного создания, УТ11 предлагает универсальный механизм оповещения пользователей о системных событиях с широкими возможностями настройки:

Для настройки этих функций в УТ11 мы переходим в раздел "НСИ и администрирование – Администрирование – Органайзер" после регистрации базы в системе взаимодействия. Здесь мы можем включить функциональность оповещений и настроить список активных оповещений.

Правила формирования оповещений настраиваются в справочнике "Виды оповещений пользователей". Здесь мы можем:

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

Таким образом, комбинируя типовые настройки оповещений и программный подход через Систему взаимодействия, мы можем создать комплексную и эффективную систему информирования пользователей в УТ11 о любых значимых событиях.

← На главную