Уведомления в 1С 8.3: от сообщений на форме до писем и Telegram

· 9 мин

Содержание

Самый простой способ показать уведомление в 1С 8.3 — всплывающее оповещение в правом нижнем углу: ПоказатьОповещениеПользователя("Документ проведён", , "Счёт №15 от контрагента ООО Ромашка"). Для внешних уведомлений (на почту, в мессенджер) платформа отправляет письма по SMTP через объект ИнтернетПочта, а в Telegram — обычным HTTP-запросом к Bot API. Ни то, ни другое не требует покупки дополнительных модулей — всё есть во встроенном языке.

Путаница начинается с того, что «уведомление» в 1С — это не одна функция. Сообщение на форме, модальное предупреждение, всплывающая подсказка, письмо на e-mail, сообщение в Telegram и напоминание из типовой конфигурации делаются по-разному и живут на разных уровнях: часть — средствами платформы, часть — через библиотеку стандартных подсистем (БСП). Ниже — все рабочие варианты от штатных сообщений до программной рассылки и расписания.

Чтобы не ошибиться с выбором, сверьтесь с таблицей: для каждой задачи — свой механизм.

ЗадачаМеханизмГде увидит пользователь
Проверка заполнения поляСообщениеПользователюОкно сообщений, подсветка поля
Событие в фоне («проведено»)ПоказатьОповещениеПользователяВсплывающая плашка в углу
Требуется ответ Да/НетПоказатьВопросМодальный диалог
Письмо контрагенту/руководителюИнтернетПочта (SMTP)Внешняя почта
Сигнал в чат/мессенджерHTTPСоединение → Bot APITelegram и т. п.
Поручение с контролем срокаЗадачи и бизнес-процессыСписок «Мои задачи»
Рассылка по времениРегламентное заданиеЗависит от способа отправки

Один механизм не отменяет другие: типовая рассылка часто сочетает регламентное задание (когда), формирование данных (что) и отправку по SMTP или в Telegram (как).

Сообщения и оповещения средствами платформы

Это самый быстрый путь: показать текст пользователю прямо в интерфейсе, без почты и интеграций.

Сообщение в окно сообщений. В управляемом приложении используют объект СообщениеПользователю:

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнена дата договора";
Сообщение.Поле = "Объект.ДатаДоговора";
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();

Привязка через Поле и УстановитьДанные подсвечивает проблемное поле красным — это удобно для проверки заполнения в обработчике ПередЗаписью. Старый вызов Сообщить("текст") тоже работает, но без привязки к полю и считается устаревшим.

Всплывающее оповещение. Короткое ненавязчивое уведомление в правом нижнем углу экрана:

ПоказатьОповещениеПользователя(
    "Проведено",
    ПолучитьНавигационнуюСсылку(Объект.Ссылка),
    "Реализация №" + Объект.Номер,
    БиблиотекаКартинок.Информация32);

Второй параметр — навигационная ссылка: по клику пользователь откроет сам документ. Это уведомление не блокирует работу и само исчезает.

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

Оповещение = Новый ОписаниеОповещения("ПослеВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Пометить документ на удаление?", РежимДиалогаВопрос.ДаНет);

Обработчик ПослеВопроса получит выбор пользователя параметром и продолжит логику. По той же схеме работает ПоказатьПредупреждение(Оповещение, "Срок действия договора истёк") — простое информационное окно с кнопкой «ОК». Если реакция пользователя не важна, второй параметр оповещения можно не задавать.

В тонком и веб-клиенте синхронные Вопрос() и Предупреждение() по умолчанию запрещены — используйте Показать... с обработчиком. Так уведомление корректно работает и в браузере.

Строка состояния. Метод Состояние("Идёт загрузка...") выводит текст в нижнюю строку окна — подходит для индикации длительных операций. Для наглядного прогресса длинного цикла применяют объект ИндикаторВыполнения или обновляют Состояние с процентом.

Выбор между этими способами простой: мешать работе нельзя — берите всплывающее оповещение или строку состояния; нужна гарантированная реакция — модальный ПоказатьВопрос; сообщение относится к конкретному полю документа — СообщениеПользователю с привязкой.

Как отправить письмо на e-mail через SMTP

Чтобы 1С сама слала письма (например, акт сверки контрагенту или отчёт руководителю), настраивают исходящую почту по протоколу SMTP.

Минимальный код отправки без типовой конфигурации выглядит так:

Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.СерверИсходящейПочты = "smtp.example.ru";
Профиль.ПортИсходящейПочты = 587;
Профиль.ИспользоватьSSLИсходящейПочты = Ложь;   // STARTTLS на 587
Профиль.Пользователь = "robot@example.ru";
Профиль.Пароль = "пароль_приложения";

Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Акт сверки";
Письмо.Отправитель = "robot@example.ru";
Письмо.Получатели.Добавить("client@mail.ru");
Письмо.Тексты.Добавить("Акт сверки во вложении.");

Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();

Порты зависят от провайдера: для 465 ставьте ИспользоватьSSLИсходящейПочты = Истина, для 587 обычно STARTTLS, 25 — без шифрования и чаще всего заблокирован хостингами. Для почтовых сервисов с двухфакторной аутентификацией (Яндекс, Gmail, Mail.ru) обычный пароль не подойдёт — в настройках почтового ящика нужно создать отдельный пароль приложения.

Вложение добавляют методом Письмо.Вложения.Добавить(ДвоичныеДанные, "sverka.pdf").

Настройка почты в типовой конфигурации

В «Бухгалтерии», «ЗУП», «Управлении торговлей» и других решениях на БСП руками код писать не нужно — почту настраивают в интерфейсе:

  1. Откройте Администрирование → Органайзер.
  2. Включите флажок отправки писем, перейдите по ссылке настройки системной учётной записи.
  3. Укажите адрес, сервер и порт SMTP, имя пользователя и пароль приложения, тип шифрования.
  4. Нажмите проверку настроек — 1С отправит тестовое письмо.

После этого рассылки из документов (печатные формы «по почте»), уведомления подсистемы и регламентные отчёты уходят через эту учётную запись. Отдельные ящики для разных задач заводят в справочнике учётных записей электронной почты.

Проверка перед первой рассылкой
Выполнено: 0 / 5

Отправка уведомлений в Telegram и мессенджеры

Готового объекта «Telegram» в платформе нет, но Bot API — это обычный HTTPS, и 1С отправляет запрос через HTTPСоединение. Порядок такой:

  1. В Telegram напишите боту @BotFather, командой /newbot создайте бота и получите токен вида 123456:AA....
  2. Узнайте идентификатор чата (chat_id): добавьте бота в нужный чат или напишите ему, затем откройте в браузере https://api.telegram.org/bot<токен>/getUpdates и найдите поле chat.id.
  3. Отправляйте сообщения методом sendMessage.
Соединение = Новый HTTPСоединение("api.telegram.org", 443, , , , , Новый ЗащищённоеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/bot123456:AA.../sendMessage");
Запрос.Заголовки.Вставить("Content-Type", "application/json");

ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("chat_id", "-1001234567890");
ПараметрыЗапроса.Вставить("text", "Поступила заявка №" + НомерЗаявки);
Запрос.УстановитьТелоИзСтроки(
    ЗаписатьJSON(ПараметрыЗапроса), КодировкаТекста.UTF8);

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

Токен бота — это доступ к рассылке от вашего имени. Не храните его в коде модуля и не выгружайте в общий репозиторий — держите в константе или защищённом хранилище настроек базы.

Тот же подход (HTTP-запрос к API) работает для любого мессенджера или сервиса с webhook — Mattermost, корпоративных ботов, SMS-шлюзов. Для исходящего подключения к внешнему адресу на сервере 1С должен быть открыт порт 443; в кластере проверьте, что профиль безопасности разрешает работу с интернет-ресурсами.

Уведомления через задачи и бизнес-процессы

Когда уведомить нужно не технически (письмо), а организационно — «поручить сотруднику и проконтролировать срок», — используют механизм задач.

  • Задача — это объект, адресованный исполнителю или роли. Пользователь видит свои задачи в списке «Мои задачи» и получает их при входе в программу.
  • Бизнес-процесс связывает задачи в маршрут: согласование, исполнение, проверка. Карта маршрута рисуется в конфигураторе.
  • Адресация позволяет назначать задачу не конкретному человеку, а роли или подразделению — тогда её возьмёт любой свободный исполнитель.

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

Отдельно стоит механизм напоминаний: пользователь (или код) ставит напоминание на документ или дату, и в назначенное время 1С показывает всплывающее окно. В типовых решениях напоминания доступны через главное меню и по правому клику на документе — «Напомнить». Напоминание можно привязать к реквизиту-дате: тогда за несколько дней до события (окончание договора, срок оплаты счёта) программа сама подаст сигнал.

Разница между задачей и напоминанием простая. Напоминание — личное и живёт внутри базы: оно сработает, только когда адресат откроет программу. Задача формальнее: её видно в общем списке, по ней считается срок и факт выполнения, а при настроенной почте исполнитель получит ещё и письмо. Для контроля поручений между сотрудниками берут задачи, для «не забыть самому» — напоминания.

Расписание: регламентные и фоновые задания

Чтобы уведомления уходили сами по времени (ежедневный отчёт в 9:00, контроль просроченной задолженности), настраивают регламентное задание.

Регламентное задание — это процедура общего модуля, которую сервер запускает по расписанию. Фоновое задание — разовый запуск такой процедуры (в том числе вручную или из кода). Схема рассылки обычно одна: регламентное задание по расписанию вызывает метод, который формирует данные и отправляет письмо или сообщение в Telegram описанными выше способами.

Включают и настраивают их в типовой конфигурации здесь:

Администрирование → Обслуживание → Регламентные и фоновые задания

В списке найдите нужное задание, откройте его, включите флажок «Включено» и задайте расписание (вкладка с настройкой периодичности — каждый день, раз в N минут, по дням недели).

В клиент-серверной базе регламентные задания выполняет сервер автоматически. В файловой базе они работают только пока открыт хотя бы один сеанс, где включено их выполнение, либо через отдельный запущенный сеанс-агент. Если рассылка «молчит» по вечерам — почти всегда дело в этом.

Собственное регламентное задание создают в конфигураторе: ветка «Регламентные задания», указать имя метода и расписание по умолчанию. Код метода должен быть серверным и не обращаться к формам и интерактивным диалогам — на сервере интерфейса нет.

Контроль доставки: журнал регистрации и логирование

Рассылка, о статусе которой ничего не известно, рано или поздно подведёт. Поэтому факт и результат отправки стоит фиксировать.

Штатный инструмент — журнал регистрации. Записать в него событие из кода можно так:

ЗаписьЖурналаРегистрации(
    "Рассылка.Telegram",
    УровеньЖурналаРегистрации.Информация,
    , ,
    "Отправлено сообщение в чат " + ИдентификаторЧата);

При ошибке отправки перехватывайте исключение и пишите в журнал с уровнем «Ошибка»:

Попытка
    Почта.Послать(Письмо);
Исключение
    ЗаписьЖурналаРегистрации("Рассылка.Почта",
        УровеньЖурналаРегистрации.Ошибка, , ,
        ОписаниеОшибки());
КонецПопытки;

Просмотреть результат — в конфигураторе через Администрирование → Журнал регистрации, либо в самой программе: Администрирование → Обслуживание → Журнал регистрации. Отбор по имени события («Рассылка.*») быстро покажет, что и когда ушло, а что упало с ошибкой.

Для внешних API полезно сохранять и код ответа: Telegram Bot API возвращает ok: true при успехе и описание в поле description при отказе — его стоит разобрать из тела ответа и записать в журнал, иначе причину сбоя потом не найти.

Диагностика: выберите симптом

Частые вопросы

Чем отличается `Сообщить()` от `ПоказатьОповещениеПользователя()`?
Сообщить() выводит текст в окно сообщений внизу формы — он связан с текущей операцией и подходит для проверок заполнения. ПоказатьОповещениеПользователя() — это всплывающая плашка в углу экрана, она не привязана к форме и годится для фоновых событий вроде «документ проведён».
Нужна ли отдельная лицензия или модуль, чтобы слать письма и сообщения в Telegram?
Нет. Объекты ИнтернетПочта и HTTPСоединение входят в платформу 1С:Предприятие 8.3. Нужны только рабочие учётные данные почтового ящика и токен Telegram-бота, а на сервере — разрешённый исходящий доступ в интернет.
Почему рассылка работает днём, а ночью нет?
Так ведёт себя файловая база: регламентные задания выполняются только при активном сеансе. Решения два — оставить работающий сеанс-агент с включённым выполнением заданий или перейти на клиент-серверный вариант, где задания запускает сервер.
Можно ли отправить письмо с вложением из 1С?
Да. Сформируйте файл в двоичные данные (например, печатную форму) и добавьте его методом Вложения.Добавить(ДвоичныеДанные, "имя.pdf") перед вызовом Послать(). В типовых конфигурациях вложение подхватывается автоматически при отправке печатной формы «по почте».
Как не потерять сообщения об ошибках отправки?
Оборачивайте вызовы отправки в Попытка … Исключение и пишите результат в журнал регистрации с отдельным именем события. Тогда отбор по этому имени покажет всю историю рассылки — и успехи, и сбои с текстом ошибки.