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

Многие администраторы и разработчики сталкиваются с трудностями: как отфильтровать пользователя по логину, ФИО или роли? Как гарантировать доставку сообщения, если пользователь не в сети? Можно ли отправить уведомление в Telegram или на email напрямую из ? В этой статье мы разберём 5 проверенных способов — от простых (через встроенные обработки) до сложных (с использованием HTTP-запросов и внешних сервисов). Каждый метод проиллюстрирован рабочими примерами кода и пошаговыми инструкциями.

Особое внимание уделим безопасности: как избежать утечек данных при отправке сообщений, почему не стоит хранить пароли от почты в открытом виде в конфигурации, и как правильно логировать отправленные уведомления. Также вы узнаете, какие ограничения накладывает платформа 1С на работу с внешними сервисами (например, лимит на количество HTTP-запросов в облачных решениях) и как их обойти.

📊 Какой способ отправки сообщений вы используете чаще?
Встроенные уведомления 1С
Электронная почта
Мессенджеры (Telegram, WhatsApp)
Собственные обработки
Не отправляю сообщения

1. Стандартные уведомления 1С: как отправить сообщение через "ПоказатьОповещение"

Самый простой способ — использовать встроенный механизм оповещений платформы 1С:Предприятие 8.3. Он подходит для отправки сообщений пользователям, которые сейчас работают в системе. Метод ПоказатьОповещение() отображает всплывающее окно с текстом, но имеет важное ограничение: если пользователь не авторизован, он не увидит уведомление.

Чтобы отправить сообщение конкретному пользователю, нужно сначала получить его идентификатор. Для этого используем объект ПользователиИнформационнойБазы и фильтруем по логину или ФИО. Пример кода:

Пользователи = ПользователиИнформационнойБазы.СоздатьМенеджерВыбора();

Пользователи.Отбор.Логин.Установить("IvanovII"); // Логин пользователя

Если Пользователи.Выбрать() Тогда

ПоказатьОповещениеПользователю(

Пользователи.ТекущийДанные.Ссылка,

"Важное уведомление",

"Документ №123 требует вашего утверждения до 17:00",

10 // Время показа в секундах

);

КонецЕсли;

Где искать логины пользователей? Их можно посмотреть в справочнике Пользователи (раздел Администрирование → Пользователи) или через запрос к базе. Обратите внимание: если в системе включена ролевая модель доступа, уведомление увидит только пользователь с соответствующими правами.

⚠️ Внимание: Сообщения через ПоказатьОповещение() не сохраняются в базе. Если пользователь пропустил всплывающее окно, он не сможет прочитать текст позже. Для критичных уведомлений используйте альтернативные методы.

Преимущества этого способа:

  • 🔹 Мгновенная доставка — сообщение появляется сразу при активной сессии пользователя.
  • 🔹 Нет зависимости от внешних сервисов — работает даже без интернета.
  • 🔹 Простота реализации — не требует дополнительных настроек.

Недостатки:

  • 🚫 Не работает для офлайн-пользователей.
  • 🚫 Нет истории отправленных сообщений.
  • 🚫 Ограниченное форматирование текста (только простой текст).
💡

Метод ПоказатьОповещение() подходит для срочных уведомлений активным пользователям, но не заменяет почту или мессенджеры для долгосрочных напоминаний.

2. Отправка email через 1С: настройка SMTP и пример кода

Если пользователь должен получить сообщение вне зависимости от его статуса в системе (например, на корпоративную почту), используйте отправку через SMTP. Этот метод универсален и работает даже для внешних адресатов. Для настройки потребуется:

  1. Данные SMTP-сервера (адрес, порт, логи/пароль).
  2. Разрешение на отправку писем (на некоторых хостингах требуется активация).
  3. Шаблон письма (можно хранить в справочнике или константе).

Пример кода для отправки email через 1С:Предприятие 8.3:

// Настройки SMTP (лучше хранить в константах или справочнике)

АдресSMTP = "smtp.yandex.ru";

ПортSMTP = 465;

ИмяПользователяSMTP = "noreply@company.ru";

ПарольSMTP = ПолучаемПарольИзХранилища(); // Никогда не храните пароль в открытом виде!

// Формируем письмо

Почта = Новый ПочтаMailMsg;

Почта.Отправитель = "noreply@company.ru";

Почта.Получатели.Добавить("ivanov@company.ru"); // Email пользователя

Почта.Тема = "Уведомление из 1С: Требуется ваше действие";

Почта.Текст = "Уважаемый Иван Иванович!" + Символы.ПС +

"Документ Заказ покупателя №123 ожидает вашего утверждения." + Символы.ПС +

"Срок: до " + Формат(ТекущаяДата() + 86400, "ДФ='dd.MM.yyyy HH:mm'");

// Отправляем через SMTP

SMTPСоединение = Новый ПочтаSMTPСоединение(АдресSMTP, ПортSMTP, ИмяПользователяSMTP, ПарольSMTP, , , Истина);

SMTPСоединение.Отправить(Почта);

Как безопасно хранить пароли от SMTP? Используйте:

  • 🔐 Хранилище паролей 1С — встроенный механизм (ПолучитьИзХранилища()).
  • 🔐 Внешние системы аутентификации (например, OAuth 2.0 для Gmail).
  • 🔐 Шифрование — пароль хранится в базе в зашифрованном виде (используйте ШифроватьСтроку()).
⚠️ Внимание: При отправке писем на внешние адреса (например, Gmail или Mail.ru) ваш SMTP-сервер может быть заблокирован за спам. Используйте корпоративные почтовые домены и настраивайте SPF, DKIM.

Для массовой рассылки уведомлений можно создать обработку с параметрами:

  • 📌 Список получателей (из справочника Пользователи).
  • 📌 Шаблон письма (с поддержкой плейсхолдеров вроде {%Имя%}).
  • 📌 Логирование отправленных писем (например, в регистр сведений).

Получить данные SMTP у админа|Создать шаблон письма|Проверить права на отправку|Протестировать на тестовом ящике|Настроить логирование-->

3. Интеграция с Telegram: отправка сообщений через бота

Если ваша компания использует Telegram для корпоративной переписки, можно настроить отправку уведомлений через бота. Это удобно, потому что:

  • 📱 Сообщения приходят на мобильное устройство.
  • 🔄 Поддерживаются уведомления с кнопками (инлайн-клавиатура).
  • 📊 Можно вести историю переписки в чате.

Для этого потребуется:

  1. Создать бота в @BotFather и получить API-токен.
  2. Узнать chat_id пользователя (можно через бота @getidsbot).
  3. Написать код для отправки HTTP-запроса к API Telegram.

Пример кода для отправки сообщения в Telegram:

// Настройки бота

ТокенБота = "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"; // Замените на свой токен

ChatID = "123456789"; // ID чата пользователя

// Формируем URL для запроса

URL = "https://api.telegram.org/bot" + ТокенБота + "/sendMessage?chat_id=" + ChatID +

"&text=" + СтрЗначениеВВebЦвет("Документ №123 требует утверждения! Срок: сегодня до 18:00") +

"&parse_mode=HTML";

// Отправляем запрос

HTTPСоединение = Новый HTTPСоединение;

Ответ = HTTPСоединение.Получить(URL);

Если Ответ.КодСостояния <> 200 Тогда

ЗаписатьЛог("Ошибка отправки в Telegram: " + Ответ.ПолучитьТекст());

КонецЕсли;

Чтобы автоматически получать chat_id пользователей, можно:

  • 🤖 Запросить у пользователя через бота (команда /start).
  • 📋 Хранить соответствие логинов 1С и chat_id в справочнике.
  • 🔄 Обновлять ID при каждом взаимодействии с ботом.

Для расширенных уведомлений (с кнопками, изображениями) используйте метод sendMessage с параметром reply_markup. Пример инлайн-клавиатуры:

// JSON для кнопок

КнопкиJSON = "

{

""inline_keyboard"": [

[

{""text"": ""Утвердить"", ""callback_data"": ""approve_123""},

{""text"": ""Отклонить"", ""callback_data"": ""reject_123""}

]

]

}";

// Добавляем кнопки в запрос

URL = URL + "&reply_markup=" + СтрЗначениеВВebЦвет(КнопкиJSON);

⚠️ Внимание: В облачных решениях 1С (1C:Fresh) действуют ограничения на количество HTTP-запросов. При массовых рассылках используйте Фоновые задания или внешние сервисы.
Как получить chat_id пользователя без сторонних ботов?

1. Отправьте сообщение боту от пользователя (например, "Привет").

2. Перейдите по URL: https://api.telegram.org/bot{ТОКЕН}/getUpdates.

3. В ответе найдите поле "chat":{"id":-123456789} — это и есть chat_id.

4. Использование регистра сведений для хранения и отображения сообщений

Если вам нужно не только отправить сообщение, но и сохранить его в базе для дальнейшего анализа, создайте регистр сведений. Это позволит:

  • 📝 Вести историю уведомлений.
  • 🔍 Отслеживать, какие сообщения были прочитаны.
  • 📊 Формировать отчёты по активности пользователей.

Пример структуры регистра сведений УведомленияПользователям:

Измерение/Ресурс Тип данных Описание
Пользователь СправочникСсылка.Пользователи Кому адресовано сообщение
ДатаВремя Дата Когда создано уведомление
ТекстСообщения Строка (неограниченная) Содержимое уведомления
Прочитано Булево Статус прочтения
СсылкаНаОбъект Произвольный Документ или элемент, к которому относится уведомление

Код для записи уведомления в регистр:

// Получаем пользователя по логину

Пользователь = ПользователиИнформационнойБазы.НайтиПоЛогину("PetrovPP");

// Записываем уведомление в регистр

НаборЗаписей = РегистрыСведений.УведомленияПользователям.СоздатьНаборЗаписей();

НоваяЗапись = НаборЗаписей.Добавить();

НоваяЗапись.Пользователь = Пользователь.Ссылка;

НоваяЗапись.ДатаВремя = ТекущаяДата();

НоваяЗапись.ТекстСообщения = "Ваша заявка на отпуск №456 одобрена. Подробности в документе.";

НоваяЗапись.Прочитано = Ложь;

НоваяЗапись.СсылкаНаОбъект = Документы.ЗаявкиНаОтпуск.НайтиПоНомеру("000000456");

НаборЗаписей.Записать();

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

// Получаем непрочитанные уведомления текущего пользователя

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| УведомленияПользователям.ТекстСообщения КАК Текст,

| УведомленияПользователям.СсылкаНаОбъект КАК Ссылка

|ИЗ

| РегистрСведений.УведомленияПользователям КАК УведомленияПользователям

|ГДЕ

| УведомленияПользователям.Пользователь = &Пользователь

| И УведомленияПользователям.Прочитано = ЛОЖЬ";

Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь());

Результат = Запрос.Выполнить();

// Отображаем в таблице формы

ТаблицаУведомлений.Очистить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

НоваяСтрока = ТаблицаУведомлений.Добавить();

НоваяСтрока.Текст = Выборка.Текст;

НоваяСтрока.Ссылка = Выборка.Ссылка;

КонецЦикла;

Преимущества этого подхода:

  • 📎 Сообщения хранятся в базе и доступны в любой момент.
  • 🔍 Можно отслеживать, кто и когда прочитал уведомление.
  • 🔄 Легко интегрировать с другими механизмами (например, отправлять напоминания о непрочитанных сообщениях).
💡

Чтобы уменьшить нагрузку на базу, архивируйте старые уведомления (старше 30 дней) в отдельный регистр или удаляйте их автоматически.

5. Фоновые задания для отложенной отправки сообщений

Если сообщение нужно отправить в определённое время (например, напоминание за день до дедлайна), используйте фоновые задания. Они позволяют планировать выполнение кода без участия пользователя.

Пример создания фонового задания для отправки email через 24 часа:

// Создаём задание

Задание = ФоновыеЗадания.СоздатьНовоеЗадание();

Задание.Имя = "ОтправитьНапоминаниеОДедлайне";

Задание.Метод = "ОбщийМодуль.УведомленияСервер.ОтправитьEmailНапоминание";

Задание.Параметры.Установить("Пользователь", Пользователь.Ссылка);

Задание.Параметры.Установить("Текст", "Напоминаем: завтра истекает срок утверждения документа №123");

// Планируем выполнение через 24 часа

Задание.ВремяВыполнения = ТекущаяДата() + 86400; // 86400 секунд = 24 часа

Задание.ЗапуститьАсинхронно();

В общем модуле УведомленияСервер должен быть метод ОтправитьEmailНапоминание, который принимает параметры и отправляет письмо (аналогично примеру из раздела 2).

Особенности работы с фоновыми заданиями:

  • ⏳ В облачных решениях (1C:Fresh) фоновые задания выполняются с задержкой до 5 минут.
  • 🔄 В файловом варианте требуется запущенный агент сервера 1С.
  • 📝 Логи выполнения заданий можно просматривать в журнале регистрации.

Для периодических уведомлений (например, еженедельных отчётов) используйте регламентные задания. Они настраиваются в конфигураторе (Общие → Регламентные задания) и запускаются по расписанию.

⚠️ Внимание: В версиях 1С младше 8.3.18 фоновые задания не поддерживают передачу сложных параметров (например, объектов). Используйте примитивные типы (строка, число) или сериализуйте данные в JSON.

6. Альтернативные способы: SMS, WhatsApp, корпоративные мессенджеры

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

Отправка SMS через сервисы вроде SMS.ru или Twilio:

  • 📱 Подходит для срочных уведомлений (например, о сбоях в системе).
  • 💰 Платный тариф (стоимость ~1-3 рубля за SMS).
  • 🔧 Требуется HTTP-запрос к API сервиса.

Пример кода для отправки SMS через SMS.ru:

// Настройки API

API_ID = "12345678-9ABC-DEF0-1234-56789ABCDEF0"; // Ваш API-ключ

НомерТелефона = "79123456789"; // Номер в формате 7XXXXXXXXXX

ТекстSMS = "1С: Ваша смена начинается в 14:00. Не опаздывайте!";

// Формируем запрос

URL = "https://sms.ru/sms/send";

Запрос = Новый HTTPЗапрос(URL);

Запрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

ТелоЗапроса = "api_id=" + API_ID +

"&to=" + НомерТелефона +

"&text=" + СтрЗначениеВВebЦвет(ТекстSMS) +

"&json=1"; // Формат ответа JSON

Запрос.УстановитьТекст(ТелоЗапроса);

HTTPСоединение = Новый HTTPСоединение;

Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос);

Если Ответ.КодСостояния = 200 Тогда

Результат = JSON.Прочитать(Ответ.ПолучитьТекст());

Если Результат.Свойство("status") = "OK" Тогда

Сообщить("SMS отправлено успешно!");

Иначе

Сообщить("Ошибка: " + Результат.Свойство("status_text"));

КонецЕсли;

Иначе

Сообщить("Ошибка HTTP: " + Ответ.КодСостояния);

КонецЕсли;

Интеграция с WhatsApp возможна через:

  • 🤖 Официальный WhatsApp Business API (платно, требует одобрения).
  • 📱 Неофициальные библиотеки (например, whatsapp-web.js для Node.js).
  • 🔗 Сервисы-посредники вроде Twilio или MessageBird.

Корпоративные мессенджеры (Microsoft Teams, Slack, Битрикс24):

  • 💼 Подходят для внутренних уведомлений.
  • 🔗 Интеграция через Webhook или API.
  • 📌 Пример для Microsoft Teams:
// URL вебхука канала в Teams

WebhookURL = "https://company.webhook.office.com/...";

// Формируем сообщение в формате карточки

Тело = "

{

""@type"": ""MessageCard"",

""@context"": ""http://schema.org/extensions"",

""themeColor"": ""0076D7"",

""summary"": ""Уведомление из 1С"",

""sections"": [{

""activityTitle"": ""Документ на утверждение"",

""activitySubtitle"": ""Заказ покупателя №123"",

""facts"": [{

""name"": ""Срок"",

""value"": ""до 17:00""

}],

""markdown"": true

}]

}";

// Отправляем запрос

Запрос = Новый HTTPЗапрос(WebhookURL);

Запрос.Заголовки.Вставить("Content-Type", "application/json");

Запрос.УстановитьТекст(Тело);

HTTPСоединение.ОтправитьДляОбработки(Запрос);

⚠️ Внимание: При интеграции с внешними сервисами учитывайте требования ФЗ-152 "О персональных данных". Не передавайте конфиденциальную информацию (например, зарплаты) через незащищённые каналы.

Сравнение способов: какой выбрать для вашей задачи

Чтобы определиться с методом отправки сообщений, оцените ваши требования по следующим критериям:

Критерий Всплывающие уведомления Email Telegram Регистр сведений SMS/WhatsApp
Доставка офлайн-пользователям ❌ Нет ✅ Да ✅ Да ✅ Да (при входе) ✅ Да
Требует интернет ❌ Нет ✅ Да ✅ Да ❌ Нет ✅ Да
Поддержка форматирования ❌ Нет ✅ Да (HTML) ✅ Да (Markdown) ✅ Да (произвольный текст) ❌ Ограничено
Стоимость ✅ Бесплатно ✅ Бесплатно (корп. почта) ✅ Бесплатно ✅ Бесплатно 💰 Платно (~1-5 руб/сообщение)
Сложность реализации ⭐ Очень низкая ⭐⭐ Низкая ⭐⭐⭐ Средняя ⭐⭐⭐ Средняя ⭐⭐⭐⭐ Высокая

Рекомендации по выбору:

  • 🔹 Для внутренних уведомлений активным пользователямПоказатьОповещение().
  • 🔹 Для документации и историирегистр сведений + email.
  • 🔹 Для мгновенных уведомлений на мобильныеTelegram или SMS.
  • 🔹 Для периодических отчётовфоновые задания + email.
💡

Комбинируйте способы для надёжности. Например, отправляйте уведомление через ПоказатьОповещение() + дублируйте email. Так пользователь получит сообщение даже если не был в системе.

FAQ: Частые вопросы по отправке сообщений в 1С

Можно ли отправить сообщение пользователю, который не в сети?

Да, но не через ПоказатьОповещение(). Используйте:

  • 📧 Email — универсальный способ.
  • 📱 Telegram/SMS — для мобильных уведомлений.
  • 📝 Регистр сведений — пользователь увидит сообщение при следующем входе.

Для гарантированной доставки комбинируйте несколько каналов.

Как получить список всех активных пользователей в 1С?

Используйте запрос к системному справочнику ПользователиИнформационнойБазы:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПользователиИнформационнойБазы.Ссылка КАК Ссылка,

| ПользователиИнформационнойБазы.Логин КАК Логин,

| ПользователиИнформационнойБазы.Наименование КАК ФИО

|ИЗ

| Справочник.Пользователи КАК ПользователиИнформационнойБазы

|ГДЕ

| НЕ ПользователиИнформационнойБазы.ПометкаУдаления";

Результат = Запрос.Выполнить();

Для получения текущих активных сессий используйте объект СеансыИнформационнойБазы.

Как отправить сообщение с вложением (файлом)?

Для email используйте метод Вложения.Добавить():

Почта = Новый ПочтаMailMsg;

Почта.Вложения.Добавить("C:\Отчеты\отчет.xlsx"); // Путь к файлу

// Или из временного хранилища:

ДанныеФайла = ПолучаемДанныеФайлаИзБазы(); // Массив байт

Почта.Вложения.