RE: Как создать фоновую обработку для уведомления об окончании договора?

#32442
bot_avaOdin — Одинэсник
Участник

    Привет, Vadym!

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

    1. Создайте новую обработку в конфигураторе 1С.
    2. Добавьте в обработку следующий код:

    1C
    &НаСервере
    Процедура Выполнить(Параметры)
        // Устанавливаем дату, за сколько дней до окончания договора отправляем уведомление
        КоличествоДней = 30;
        ДатаПроверки = ТекущаяДата() + КоличествоДней;
    
        // Получаем выборку договоров, срок действия которых истекает
        Запрос = Новый Запрос;
        Запрос.Текст = "
            ВЫБРАТЬ
                Договоры.Ссылка,
                Договоры.ДатаОкончания,
                Договоры.Контрагент
            ИЗ
                Документ.Договоры КАК Договоры
            ГДЕ
                Договоры.ДатаОкончания = ТекущаяДата()";
    
        Запрос.УстановитьПараметр("ДатаПроверки", ДатаПроверки);
        Выборка = Запрос.Выполнить().Выбрать();
    
        // Перебираем найденные договоры и отправляем уведомления
        Пока Выборка.Следующий() Цикл
            ОтправитьУведомление(Выборка.Контрагент, Выборка.ДатаОкончания);
        КонецЦикла;
    КонецПроцедуры
    
    &НаСервере
    Процедура ОтправитьУведомление(Контрагент, ДатаОкончания)
        // Формируем текст письма
        Тема = "Уведомление о скором окончании договора";
        Текст = "Уважаемый(ая) " + Контрагент.Наименование + ",n" +
                 "Обращаем ваше внимание, что срок действия вашего договора истекает " + Формат(ДатаОкончания, "ДЛФ") + ".n" +
                 "Пожалуйста, свяжитесь с нами для продления.";
    
        // Настройки почты
        Профиль = Новый ИнтернетПочтовыйПрофиль;
        Профиль.АдресСервераSMTP = "smtp.yandex.ru"; // Замените на ваш SMTP сервер
        Профиль.ПортSMTP = "465";
        Профиль.ПользовательSMTP = "ВАШАПОЧТА@yandex.ru"; // Замените на вашу почту
        Профиль.ПарольSMTP = "ВАШПАРОЛЬ"; // Замените на ваш пароль
        Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
        Профиль.ИспользоватьSSLSMTP = Истина;
    
        // Создаем почтовое сообщение
        ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
        ПочтовоеСообщение.Тема = Тема;
        ПочтовоеСообщение.ИмяОтправителя = "Ваша Компания";
        ПочтовоеСообщение.Отправитель = Профиль.ПользовательSMTP;
        ПочтовоеСообщение.Получатели.Добавить(Контрагент.Email); // Предполагается, что у контрагента есть поле Email
        ПочтовоеСообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.ПростойТекст);
        ПочтовоеСообщение.ОбработатьТексты();
    
        // Отправляем письмо
        Почта = Новый ИнтернетПочта;
        Почта.Подключиться(Профиль);
        Почта.Послать(ПочтовоеСообщение);
        Почта.Отключиться();
    КонецПроцедуры
    

    ### Описание кода:
    — В обработке мы создаем запрос для получения всех договоров, срок действия которых истекает в течение 30 дней.
    — Для каждого найденного договора вызывается процедура `ОтправитьУведомление`, которая формирует и отправляет письмо контрагенту.
    — Важно, чтобы у контрагента было поле `Email`, где хранится адрес электронной почты.

    ### Настройка фоновой обработки:
    — Не забудьте настроить расписание выполнения этой обработки, чтобы она запускалась, например, раз в день.

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

    База знаний 1С