Разграничение почты по организациям. УНФ 1.6
Клиент подключил к 1С учетные записи электронной почты. Разграничил доступ менеджеров к учетным записям.
Но т.к. менеджеры обычно имеют доступ к нескольким организация, чтобы они не ошибались при отправке писем, потребовалась доработка, контролирующая, что документ по организации отправляется с учетной записи электронной почты организации.
Добавляю в справочник учетных записей почты организацию, прямо в конфигурацию, а не в расширение:
В расширении формы учетной записи ЭП добавляю вывод этого поля:
&НаСервере Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) ГруппаЭлемента = Элементы.Шапка; Элемент = Элементы.Добавить("дор_Организация", Тип("ПолеФормы"), ГруппаЭлемента); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Объект.дор_Организация"; КонецПроцедуры
Можно было бы еще и в список, но ладно, я не перфекционист.
В модуль документа «Событие» добавляем контроль соответствия учетной записи документу (расширением):
&После("ПередЗаписью") Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если Отказ Тогда Возврат; КонецЕсли; Если ЭтотОбъект.ТипСобытия = Перечисления.ТипыСобытий.ЭлектронноеПисьмо Тогда ТекОрганизация = дор_Сервер.ПолучитьОрганизациюСобытия(ЭтотОбъект); Если НЕ дор_Сервер.УчетнаяЗаписьЭлектроннойПочтыСоответствуетОрганизации(ЭтотОбъект.УчетнаяЗапись, ТекОрганизация) Тогда Сообщить("Учетная запись электронной почты: " + Ссылка + " не соответствует организации: " + ТекОрганизация, СтатусСообщения.Важное); Отказ = истина; Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры
Тут объект еще не записан, но можно обращаться к свойствам объекта, еще не имеющего ссылку, т.к. на вход поступает не ссылка, а объект.
Дополнительно корректируем учетную запись, которая устанавливается по умолчанию при создании нового письма, расширяем форму ФормаЭлектронногоПисьма документа Событие:
&НаСервере &После("ЗаполнитьНовоеПисьмоПоУмолчанию") Процедура дор_ЗаполнитьНовоеПисьмоПоУмолчанию(Параметры) ТекОрганизация = дор_Сервер.ПолучитьОрганизациюСобытияПоМассивуДокументов(Параметры.ДокументыОснования); Если ЗначениеЗаполнено(ТекОрганизация) Тогда Объект.УчетнаяЗапись = дор_Сервер.ПолучитьУчетнуюЗаписьПоОрганизации(ТекОрганизация, Объект.УчетнаяЗапись); Возврат; КонецЕсли; КонецПроцедуры
Я передаю текущую учетную запись на случай, ели будет несколько учеток для организации, чтобы оставить текущую, если она совпадает. Но это с прицелом на будущее, сейчас не актуально.
Функции из дор_Сервер которые используются в вызовах из расширений:
Функция ПолучитьОрганизациюСобытия(СобытиеСсылка) Экспорт Если ЗначениеЗаполнено(СобытиеСсылка.ДокументОснование) Тогда Возврат СобытиеСсылка.ДокументОснование.Организация; Иначе Для Каждого Строка ИЗ СобытиеСсылка.ДокументыОснования Цикл Если ЗначениеЗаполнено(Строка.ДокументОснование) Тогда Возврат Строка.ДокументОснование.Организация; КонецЕсли; КонецЦикла; КонецЕсли; КонецФункции Функция ПолучитьОрганизациюСобытияПоМассивуДокументов(М) Экспорт Для Каждого Док ИЗ М Цикл Попытка Возврат Док.Организация; Исключение КонецПопытки; КонецЦикла; КонецФункции Функция УчетнаяЗаписьЭлектроннойПочтыСоответствуетОрганизации(УчетнаяЗапись, Организация) Экспорт Возврат УчетнаяЗапись.дор_Организация = Организация ИЛИ Не ЗначениеЗаполнено(УчетнаяЗапись.дор_Организация) ИЛИ Не ЗначениеЗаполнено(Организация); КонецФункции Функция ПолучитьУчетнуюЗаписьПоОрганизации(ТекОрганизация, ТекущаяУчетнаяЗапись = Неопределено) Экспорт З = Новый Запрос( "ВЫБРАТЬ | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты |ГДЕ | УчетныеЗаписиЭлектроннойПочты.дор_Организация = &Организация | И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления" ); З.УстановитьПараметр("Организация", ТекОрганизация); Выборка = З.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Ссылка; КонецЕсли; КонецФункции
Среда: УНФ 1.6.25.152 Объем: 1.5 час.
Свежие комментарии