Разграничение почты по организациям. УНФ 1.6

Клиент подключил к 1С учетные записи электронной почты. Разграничил доступ менеджеров к учетным записям.

Но т.к. менеджеры обычно имеют доступ к нескольким организация, чтобы они не ошибались при отправке писем, потребовалась доработка, контролирующая, что документ по организации отправляется с учетной записи электронной почты организации.

Добавляю в справочник учетных записей почты организацию, прямо в конфигурацию, а не в расширение:

В расширении формы учетной записи ЭП добавляю вывод этого поля:


&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	ГруппаЭлемента = Элементы.Шапка;
    Элемент = Элементы.Добавить("дор_Организация", Тип("ПолеФормы"), ГруппаЭлемента);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = "Объект.дор_Организация";
КонецПроцедуры

Можно было бы еще и в список, но ладно, я не перфекционист.

В модуль документа «Событие» добавляем контроль соответствия учетной записи документу (расширением):


&После("ПередЗаписью")
Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;  

	Если ЭтотОбъект.ТипСобытия = Перечисления.ТипыСобытий.ЭлектронноеПисьмо Тогда
		ТекОрганизация = дор_Сервер.ПолучитьОрганизациюСобытия(ЭтотОбъект);
		Если НЕ дор_Сервер.УчетнаяЗаписьЭлектроннойПочтыСоответствуетОрганизации(ЭтотОбъект.УчетнаяЗапись, ТекОрганизация) Тогда
			Сообщить("Учетная запись электронной почты: " + Ссылка + " не соответствует организации: " + ТекОрганизация, СтатусСообщения.Важное);
			Отказ = истина;
			Возврат;
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

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

Дополнительно корректируем учетную запись, которая устанавливается по умолчанию при создании нового письма, расширяем форму ФормаЭлектронногоПисьма документа Событие:


&НаСервере
&После("ЗаполнитьНовоеПисьмоПоУмолчанию")
Процедура дор_ЗаполнитьНовоеПисьмоПоУмолчанию(Параметры)
	
	ТекОрганизация = дор_Сервер.ПолучитьОрганизациюСобытияПоМассивуДокументов(Параметры.ДокументыОснования); 
	
	
	Если ЗначениеЗаполнено(ТекОрганизация) Тогда
		Объект.УчетнаяЗапись = дор_Сервер.ПолучитьУчетнуюЗаписьПоОрганизации(ТекОрганизация, Объект.УчетнаяЗапись);
		Возврат;
	КонецЕсли;

КонецПроцедуры

Я передаю текущую учетную запись на случай, ели будет несколько учеток для организации, чтобы оставить текущую, если она совпадает. Но это с прицелом на будущее, сейчас не актуально.

Функции из дор_Сервер которые используются в вызовах из расширений:

Функция ПолучитьОрганизациюСобытия(СобытиеСсылка) Экспорт
	Если ЗначениеЗаполнено(СобытиеСсылка.ДокументОснование) Тогда
		Возврат СобытиеСсылка.ДокументОснование.Организация;
	Иначе
		Для Каждого Строка ИЗ СобытиеСсылка.ДокументыОснования Цикл
			Если ЗначениеЗаполнено(Строка.ДокументОснование) Тогда
				Возврат Строка.ДокументОснование.Организация;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецФункции                    

Функция ПолучитьОрганизациюСобытияПоМассивуДокументов(М) Экспорт
	Для Каждого Док ИЗ М Цикл                 
		Попытка
			Возврат Док.Организация;
		Исключение
		КонецПопытки;
	КонецЦикла;
КонецФункции                    

Функция УчетнаяЗаписьЭлектроннойПочтыСоответствуетОрганизации(УчетнаяЗапись, Организация) Экспорт
	Возврат УчетнаяЗапись.дор_Организация = Организация ИЛИ Не ЗначениеЗаполнено(УчетнаяЗапись.дор_Организация) ИЛИ Не ЗначениеЗаполнено(Организация);
КонецФункции                                

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

Среда: УНФ 1.6.25.152 Объем: 1.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *