В процессе работы с конфигурацией 1С:Зарплата и Управление Персоналом 3 (и другими решениями на базе Библиотеки стандартных подсистем — БСП) пользователи часто сталкиваются с ситуацией, когда уже отправленное электронное письмо необходимо переслать еще раз. Однако при открытии документа Исходящее электронное письмо обнаруживается, что кнопка «Отправить» неактивна (серая), а редактирование документа запрещено. Это не ошибка программы, а заложенная разработчиками логика защиты от случайного дублирования писем.
В этой статье мы подробно разберем, как обойти это ограничение, проанализируем программный код, отвечающий за доступность кнопок, и рассмотрим несколько способов решения задачи: от простых манипуляций в интерфейсе до административных методов.
Прежде всего, давайте выясним причину такого поведения системы. Разберем программный фрагмент, который управляет формой исходящего письма. В типовых конфигурациях логика проверки доступности кнопки выглядит следующим образом:
Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")
И (НЕ ИнформационнаяБазаФайловая
ИЛИ (Объект.ДатаКогдаОтправить <> Дата(1,1,1) И Объект.ДатаКогдаОтправить > ОбщегоНазначенияКлиент.ДатаСеанса())
ИЛИ (Объект.ДатаАктуальностиОтправки <> Дата(1,1,1) И Объект.ДатаАктуальностиОтправки < ОбщегоНазначенияКлиент.ДатаСеанса())) Тогда
Элементы.Отправить.Доступность = Ложь;
Иначе
Элементы.Отправить.Доступность = Истина;
КонецЕсли;
Проанализируем этот код подробнее. Система блокирует кнопку в нескольких случаях:
Исходящее или Отправлено, программа считает задачу выполненной.ДатаКогдаОтправить и это время еще не наступило, кнопка может быть неактивна.ДатаАктуальностиОтправки и она уже прошла, система блокирует отправку, считая сообщение устаревшим.Это наиболее правильный и безопасный метод для администратора или опытного пользователя, позволяющий «вернуть к жизни» отправленное письмо без программирования. Рассмотрим его пошагово:
Исходящее электронное письмо.Ссылке, выбрав конкретное нужное нам письмо, или по Теме/Дате). Это критически важно, чтобы не изменить все письма в базе сразу!Статус.После выполнения этих действий статус письма изменится, и при открытии документа кнопка «Отправить» снова станет активной. Мы сможем отредактировать письмо или отправить его в неизменном виде.
Иногда простого изменения статуса недостаточно, особенно если письмо уже было физически передано на почтовый сервер, но по какой-то причине его нужно продублировать. В структуре объекта существует скрытый реквизит ИдентификаторСообщения. Рассмотрим ситуацию, когда это важно:
Если в письме заполнен технический идентификатор, который присвоил почтовый сервер, то при попытке повторной отправки сервер может распознать сообщение как дубль и отклонить его. Для «чистой» переотправки рекомендуется очищать это поле программно или через ту же обработку Групповое изменение реквизитов (если поле выведено в состав доступных для редактирования).
Часто пользователи пытаются использовать клавишу F9 (копирование). Однако в 1С:ЗУП 3 при копировании отправленного письма в новый документ могут перекочевать и признаки «отправленности». Чтобы этого избежать, проанализируем следующий алгоритм действий:
Разберем важный технический нюанс. В файловых базах отправка чаще всего происходит в тот момент, когда пользователь нажимает кнопку. В клиент-серверных базах нажатие кнопки лишь переводит статус письма в Исходящее. Фактическую передачу данных в интернет осуществляет регламентное задание Отправка и получение сообщений электронной почты.
Если вы нажали «Отправить», кнопка стала неактивной, но письмо «зависло», выясним причину:
Таким образом, мы выяснили, что блокировка кнопки «Отправить» — это механизм контроля состояний объекта в 1С. Использование штатной обработки Групповое изменение реквизитов для перевода письма в статус Черновик является самым эффективным способом решения данной проблемы без необходимости доработки программного кода конфигурации.