Уведомления в 1С 8.3: от сообщений на форме до писем и Telegram
Содержание
Самый простой способ показать уведомление в 1С 8.3 — всплывающее оповещение в правом нижнем углу: ПоказатьОповещениеПользователя("Документ проведён", , "Счёт №15 от контрагента ООО Ромашка"). Для внешних уведомлений (на почту, в мессенджер) платформа отправляет письма по SMTP через объект ИнтернетПочта, а в Telegram — обычным HTTP-запросом к Bot API. Ни то, ни другое не требует покупки дополнительных модулей — всё есть во встроенном языке.
Путаница начинается с того, что «уведомление» в 1С — это не одна функция. Сообщение на форме, модальное предупреждение, всплывающая подсказка, письмо на e-mail, сообщение в Telegram и напоминание из типовой конфигурации делаются по-разному и живут на разных уровнях: часть — средствами платформы, часть — через библиотеку стандартных подсистем (БСП). Ниже — все рабочие варианты от штатных сообщений до программной рассылки и расписания.
Чтобы не ошибиться с выбором, сверьтесь с таблицей: для каждой задачи — свой механизм.
| Задача | Механизм | Где увидит пользователь |
|---|---|---|
| Проверка заполнения поля | СообщениеПользователю | Окно сообщений, подсветка поля |
| Событие в фоне («проведено») | ПоказатьОповещениеПользователя | Всплывающая плашка в углу |
| Требуется ответ Да/Нет | ПоказатьВопрос | Модальный диалог |
| Письмо контрагенту/руководителю | ИнтернетПочта (SMTP) | Внешняя почта |
| Сигнал в чат/мессенджер | HTTPСоединение → Bot API | Telegram и т. п. |
| Поручение с контролем срока | Задачи и бизнес-процессы | Список «Мои задачи» |
| Рассылка по времени | Регламентное задание | Зависит от способа отправки |
Один механизм не отменяет другие: типовая рассылка часто сочетает регламентное задание (когда), формирование данных (что) и отправку по 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").
Настройка почты в типовой конфигурации
В «Бухгалтерии», «ЗУП», «Управлении торговлей» и других решениях на БСП руками код писать не нужно — почту настраивают в интерфейсе:
- Откройте
Администрирование → Органайзер. - Включите флажок отправки писем, перейдите по ссылке настройки системной учётной записи.
- Укажите адрес, сервер и порт SMTP, имя пользователя и пароль приложения, тип шифрования.
- Нажмите проверку настроек — 1С отправит тестовое письмо.
После этого рассылки из документов (печатные формы «по почте»), уведомления подсистемы и регламентные отчёты уходят через эту учётную запись. Отдельные ящики для разных задач заводят в справочнике учётных записей электронной почты.
Отправка уведомлений в Telegram и мессенджеры
Готового объекта «Telegram» в платформе нет, но Bot API — это обычный HTTPS, и 1С отправляет запрос через HTTPСоединение. Порядок такой:
- В Telegram напишите боту
@BotFather, командой/newbotсоздайте бота и получите токен вида123456:AA.... - Узнайте идентификатор чата (
chat_id): добавьте бота в нужный чат или напишите ему, затем откройте в браузереhttps://api.telegram.org/bot<токен>/getUpdatesи найдите полеchat.id. - Отправляйте сообщения методом
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 при отказе — его стоит разобрать из тела ответа и записать в журнал, иначе причину сбоя потом не найти.
-100. Проверьте, что на сервере 1С разрешён исходящий доступ к api.telegram.org:443.Частые вопросы
Чем отличается `Сообщить()` от `ПоказатьОповещениеПользователя()`?
Сообщить() выводит текст в окно сообщений внизу формы — он связан с текущей операцией и подходит для проверок заполнения. ПоказатьОповещениеПользователя() — это всплывающая плашка в углу экрана, она не привязана к форме и годится для фоновых событий вроде «документ проведён».Нужна ли отдельная лицензия или модуль, чтобы слать письма и сообщения в Telegram?
ИнтернетПочта и HTTPСоединение входят в платформу 1С:Предприятие 8.3. Нужны только рабочие учётные данные почтового ящика и токен Telegram-бота, а на сервере — разрешённый исходящий доступ в интернет.Почему рассылка работает днём, а ночью нет?
Можно ли отправить письмо с вложением из 1С?
Вложения.Добавить(ДвоичныеДанные, "имя.pdf") перед вызовом Послать(). В типовых конфигурациях вложение подхватывается автоматически при отправке печатной формы «по почте».Как не потерять сообщения об ошибках отправки?
Попытка … Исключение и пишите результат в журнал регистрации с отдельным именем события. Тогда отбор по этому имени покажет всю историю рассылки — и успехи, и сбои с текстом ошибки.