Как привязать пользователя к учетной записи электронной почты в 1С:Бухгалтерии 3.0

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Выясним причину такого поведения системы и подробно разберем все способы решения этой задачи — от штатной настройки прав доступа до доработки через расширение конфигурации.

Почему 1С выбирает первый попавшийся ящик

Проанализируем архитектуру подсистемы работы с почтой в типовых решениях 1С. В конфигурациях уровня ERP, «Управление торговлей» (начиная с релиза 11.2) или «Комплексная автоматизация» присутствует подсистема Взаимодействия — полноценный встроенный почтовый клиент. Там учетные записи жестко закрепляются за конкретными пользователями, для них настраиваются папки, правила обработки и подписи.

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

  1. Адрес электронной почты, указанный в контактной информации карточки пользователя (справочник Пользователи), не связан с исходящей почтой и служит лишь контактными данными.
  2. При открытии формы ОбщаяФорма.ОтправкаСообщения система выполняет выборку всех доступных текущему пользователю учетных записей из справочника УчетныеЗаписиЭлектроннойПочты.
  3. Наивысший приоритет в запросе отдается элементу Системная учетная запись электронной почты, а остальные элементы сортируются по наименованию. Первая запись из сформированного списка автоматически подставляется в поле отправителя.

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

Решение 1. Штатное разграничение видимости учетных записей

Разберем официальную рекомендацию разработчиков фирмы 1С. Если каждому бухгалтеру или менеджеру требуется работать только со своим персональным адресом, достаточно ограничить доступность ящиков на уровне прав.

Выполним следующие действия:

  1. Войдем в информационную базу под учетной записью того пользователя, для которого настраивается личная почта.
  2. Перейдем в раздел Администрирование — Органайзер — Настройка почты (или откроем справочник УчетныеЗаписиЭлектроннойПочты).
  3. Откроем нужную учетную запись сотрудника.
  4. В настройках доступа переключим параметр доступности учетной записи в положение Только для меня (или Только автору).
  5. Сохраним изменения.

В результате такого разделения каждый пользователь будет видеть в списке выбора только свою учетную запись. Поскольку доступный ящик окажется единственным, алгоритм БСП автоматически подставит именно его при открытии формы отправки сообщения.

Важное замечание по системной учетной записи: если системный почтовый ящик используется только для служебных рассылок сервиса и регламентных заданий, откроем его карточку и снимем флажок Использовать для отправки (или настроим ограничение доступа). Это исключит системный адрес из списка подстановки в интерактивных сеансах пользователей.

Решение 2. Доработка через расширение конфигурации

Рассмотрим ситуацию, когда пользователям по роду деятельности необходим доступ ко всем почтовым ящикам базы (например, для подмены коллег), но по умолчанию в поле «От кого» должен подставляться их личный ящик. Для реализации такого сценария не требуется изменять основную конфигурацию и снимать базу с поддержки — задачу можно решить с помощью расширения.

Разберем по шагам создание расширения:

  1. В конфигураторе добавим новое расширение с назначением Адаптация или Дополнение.
  2. Добавим в расширение справочник УчетныеЗаписиЭлектроннойПочты и создадим в нем новый реквизит Ответственный с типом СправочникСсылка.Пользователи.
  3. Добавим в расширение форму ОбщаяФорма.ОтправкаСообщения.
  4. В модуле формы перехватим процедуру ПриСозданииНаСервере или ПриОткрытии с помощью директивы &После.

Посмотрим на пример серверного кода, выполняющего поиск и установку учетной записи текущего пользователя:


&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ТекущийПользовательБазы = Пользователи.ТекущийПользователь();
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	УчетныеЗаписи.Ссылка КАК УчетнаяЗапись
        |ИЗ
        |	Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписи
        |ГДЕ
        |	УчетныеЗаписи.Ответственный = &ТекущийПользователь
        |	И НЕ УчетныеЗаписи.ПометкаУдаления";
    
    Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользовательБазы);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если НЕ РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        ЭтаФорма.УчетнаяЗапись = Выборка.УчетнаяЗапись;
    КонецЕсли;
    
КонецПроцедуры

Если требуется запретить рядовым сотрудникам изменять выбранного отправителя, добавим проверку административных прав:


Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
    Элементы.УчетнаяЗапись.Доступность = Ложь;
КонецЕсли;

Решение 3. Автоматическое сохранение последнего выбора пользователя

Существует еще один удобный вариант доработки, не требующий создания дополнительных реквизитов в справочниках — использование системного механизма ХранилищеОбщихНастроек. Принцип работы заключается в том, что программа запоминает последний выбранный пользователем ящик и восстанавливает его при следующем открытии формы.

Разберем реализацию этого механизма в расширении формы ОтправкаСообщения:

При успешной отправке письма сохраняем выбор:


&После("ВыполнитьОтправкуСообщения")
Процедура Расш_ВыполнитьОтправкуСообщения()
    Если ЗначениеЗаполнено(ЭтаФорма.УчетнаяЗапись) Тогда
        ХранилищеОбщихНастроек.Сохранить(
            "НастройкиОтправкиПисем", 
            "ОсновнаяУчетнаяЗапись", 
            ЭтаФорма.УчетнаяЗапись
        );
    КонецЕсли;
КонецПроцедуры

При открытии формы считываем сохраненное значение:


&После("ПриСозданииНаСервере")
Процедура Расш_ВосстановитьУчетнуюЗапись(Отказ, СтандартнаяОбработка)
    СохраненнаяУЗ = ХранилищеОбщихНастроек.Загрузить(
        "НастройкиОтправкиПисем", 
        "ОсновнаяУчетнаяЗапись"
    );
    
    Если ЗначениеЗаполнено(СохраненнаяУЗ) И НЕ СохраненнаяУЗ.ПометкаУдаления Тогда
        ЭтаФорма.УчетнаяЗапись = СохраненнаяУЗ;
    КонецЕсли;
КонецПроцедуры

Такой способ универсален: он не меняет структуру метаданных, не требует ручного сопоставления пользователей с ящиками в справочниках и позволяет каждому сотруднику один раз выбрать свой рабочий адрес, после чего 1С будет подставлять его автоматически.

← На главную