В процессе работы с программой 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с ситуацией, когда системная учетная запись почты настроена корректно и проходит все тесты, но реальные письма (например, расчетные листки) не доходят до адресатов. Рассмотрим подробно, почему это происходит в клиент-серверных базах, где искать «зависшие» письма и как автоматизировать очистку базы от старых сообщений, чтобы они не увеличивали объем данных.
Проанализируем ситуацию: в файловой версии 1С отправка почты часто инициируется непосредственно в момент нажатия кнопки пользователем. Однако в клиент-серверном режиме за это отвечает регламентное задание. Если письмо «исчезает» из интерфейса, но не приходит получателю, первым делом необходимо проверить состояние серверных процессов.
Выясним причину: в типовых конфигурациях на базе БСП (Библиотеки стандартных подсистем) отправка писем происходит асинхронно. Программа помещает письмо в очередь, а специальное задание на сервере должно его подхватить и отправить. Если это задание выключено, письма будут накапливаться в базе бесконечно.
Для решения проблемы выполним следующие шаги:
Отправка и получение сообщений электронной почты (в некоторых версиях может называться Получение и отправка почты).Рассмотрим вопрос о том, где хранятся письма, которые уже созданы, но еще не были отправлены или были отправлены ранее. В 1С:ЗУП нет отдельного ярлыка «Исходящие» на рабочем столе, поэтому проанализируем структуру хранения данных.
Все электронные письма являются документами. Чтобы увидеть их список, можно воспользоваться следующими способами:
ЭлектронноеПисьмоИсходящее. В открывшемся списке можно увидеть статус каждого письма. Если статус «Отправлено» — значит, сервер 1С успешно передал его почтовому серверу (например, Yandex или Mail.ru).При массовой рассылке расчетных листков база данных начинает стремительно расти из-за вложений в формате PDF или Excel. Разберем, как реализовать механизм автоматической очистки писем старше 7 дней. Поскольку конфигурация ЗУП часто находится на поддержке (на «замке»), лучше всего использовать расширение конфигурации.
Посмотрим на пример кода, который выполняет удаление устаревших документов. Нам необходимо создать процедуру в общем модуле расширения:
Процедура УдалениеУстаревшихПисем() Экспорт
// Вычисляем дату, старше которой письма будут удалены (7 дней назад)
ДатаОкончания = ТекущаяДата() - 7 * 86400;
// Выбираем документы, созданные ранее этой даты
Выборка = Документы.ЭлектронноеПисьмоИсходящее.Выбрать(, ДатаОкончания);
Пока Выборка.Следующий() Цикл
ТекущийОбъект = Выборка.ПолучитьОбъект();
// Используем непосредственное удаление для очистки базы
Попытка
ТекущийОбъект.Удалить();
Исключение
ЗаписьЖурналаРегистрации("ОчисткаПочты", УровеньЖурналаРегистрации.Ошибка,,, "Не удалось удалить письмо: " + ТекущийОбъект.Ссылка);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Проанализируем важный нюанс: удаление самого документа ЭлектронноеПисьмоИсходящее не всегда автоматически очищает физические файлы из справочника присоединенных файлов. Чтобы база не «раздувалась», нужно очистить и их. Разберем, как дополнить наш алгоритм запросом:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы КАК Файлы
|ГДЕ
| Файлы.ДатаСоздания < &ДатаОкончания";
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
ТекущийОбъект = РезультатЗапроса.Ссылка.ПолучитьОбъект();
ТекущийОбъект.Удалить();
КонецЦикла;
Иногда возникают сложности с добавлением новых объектов РегламентноеЗадание через расширение (например, если версия платформы ниже 8.3.12). В такой ситуации рассмотрим альтернативный метод — «подписку» на уже существующее задание.
Найдем в системе задание, которое выполняется часто (например, Загрузка курсов валют или Классификаторы). С помощью механизма расширений добавим процедуру &После к основному методу этого задания. Таким образом, каждый раз после загрузки курсов валют система будет проверять и удалять старые письма.
Если регламентное задание включено, но письма все равно не уходят, проанализируем следующие факторы:
агент сервера 1С (обычно это USR1CV8). Убедимся, что у этого пользователя есть доступ в интернет и антивирус не блокирует его активность.Используя данные методы, мы обеспечим стабильную работу почтового модуля в 1С:ЗУП 3.1 и предотвратим избыточный рост базы данных за счет своевременного удаления ненужной информации.