BlizD / Tasks

Трекер задач. Конфигурация 1с: канбан доска, загрузка изменений из хранилища, выпуск релизов, учет времени
http://infostart.ru/public/552480/
Apache License 2.0
283 stars 174 forks source link

При создании нового письма выбирается учетка для уведомлений #211

Open DenisZuyev opened 4 years ago

DenisZuyev commented 4 years ago

Добрый день!

Я использую УЗ как почтовый клиент, это ещё с ITIL пришло. Но вот этот код всё портит, он не логичен для общения с сотрудниками внутри компании. Переделаем?

//+ #286 Иванов А.Б. 2017-12-17 Если Объект.Ссылка.Пустая() Тогда пСтараяУчетнаяЗапись = Объект.УчетнаяЗапись; пНоваяУчетнаяЗапись = узОбщийМодульСервер.ПолучитьУчетнуюЗаписьДляОтправкиУведомленийДляКонтрагентов(); Если пСтараяУчетнаяЗапись <> пНоваяУчетнаяЗапись Тогда Объект.УчетнаяЗапись = пНоваяУчетнаяЗапись; ИзменитьПодпись(пСтараяУчетнаяЗапись, пНоваяУчетнаяЗапись); ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(пНоваяУчетнаяЗапись); Если ЭлементСписка <> Неопределено Тогда Объект.ОтправительПредставление = ЭлементСписка.Представление; КонецЕсли;
Конецесли;

DenisZuyev commented 4 years ago

//+ #211 Зуев Д.С 04.06.2020 пСтараяУчетнаяЗапись = Объект.УчетнаяЗапись; пНоваяУчетнаяЗапись = узОбщийМодульСервер.ПолучитьЛичнуюУчетнуюЗапись(); Если пСтараяУчетнаяЗапись <> пНоваяУчетнаяЗапись Тогда Объект.УчетнаяЗапись = пНоваяУчетнаяЗапись; ИзменитьПодпись(пСтараяУчетнаяЗапись, пНоваяУчетнаяЗапись); ЭлементСписка = Элементы.ОтправительПредставление.СписокВыбора.НайтиПоЗначению(пНоваяУчетнаяЗапись); Если ЭлементСписка <> Неопределено Тогда Объект.ОтправительПредставление = ЭлементСписка.Представление; КонецЕсли;
Конецесли; //- #211 Зуев Д.С 04.06.2020

DenisZuyev commented 4 years ago

//+ #211 Зуев Д.С 04.06.2020 Функция ПолучитьЛичнуюУчетнуюЗапись() Экспорт

Перем пУчетнаяЗапись;

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

Результат = Запрос.Выполнить().Выбрать();

Если Результат.Следующий() Тогда
    пУчетнаяЗапись = Результат.Ссылка;
КонецЕсли;

Возврат пУчетнаяЗапись;

КонецФункции

d-hurricane commented 4 years ago

Есть же типовой метод, лучше использовать его. РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи()

Ну и нет смысла слать сюда куски кода. Подготовьте Pull request.

DenisZuyev commented 4 years ago

Типовой метод который вернет таблицу значений... знаете толк в извращениях.

d-hurricane commented 4 years ago

Не понял, в чем проблема?

DenisZuyev commented 4 years ago

в лишних манипуляциях, проверках.

BlizD commented 4 years ago

@DenisZuyev Добрый день. Можете сделать доработку как описано в задаче и прислать изменения? #215

d-hurricane commented 4 years ago

Не согласен с представленной реализацией функции получения личной учетной записи.

Во-первых, никаких лишних манипуляций и проверок я не предлагал. Напротив, код функции станет заметно лаконичнее:

Функция ПолучитьЛичнуюУчетнуюЗапись() Экспорт

    УчетныеЗаписи = РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина, Ложь);

    Возврат ?(ЗначениеЗаполнено(УчетныеЗаписи), УчетныеЗаписи[0].Ссылка, Неопределено);

КонецФункции

Считаю типовые проверки совсем не лишними. Как проверку на заполненность учетки, таки и на установку флага "Для отправки". Плюс включение сюда системной учетной записи также не лишнее, если учетка всего одна для всех.

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

DenisZuyev commented 4 years ago

@d-hurricane если не сложно сделай CF, у меня с этим проблема, я живу на продакшн конфе XD

d-hurricane commented 4 years ago

@DenisZuyev Ок, но чуть позже. Может к концу недели. Открой обратно задачу, а то я могу забыть совсем про нее.

DenisZuyev commented 4 years ago

@d-hurricane теперь что-то делается не так. При отправке письма пишет "Выбранная учетная запись не доступна для отправки писем"

DenisZuyev commented 4 years ago

Надо так УчетныеЗаписи = РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина, ,Ложь);

DenisZuyev commented 4 years ago

А проверка на заполнено там ни о чем, там всегда возвращается таблица. Её по количеству надо проверить.

d-hurricane commented 4 years ago

Возможно, я действительно пропустил запятую. На вскидку не помню параметры функции. Что же касается проверки заполнения, то она корректна. Функция "ЗначениеЗаполнено" вернет "Ложь", если в указанной таблице значений нет строк.