fix(bitra-patch): email через JOIN к ТЧ.КонтактнаяИнформация.АдресЭП (кастомное поле BIT.RA)
This commit is contained in:
@@ -25,13 +25,15 @@
|
||||
|
||||
// GET /v1/employees
|
||||
//
|
||||
// Email получаем через стандартную БСП-функцию УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(),
|
||||
// которая делает один массовый запрос на массив ссылок (не N+1).
|
||||
// Email — через JOIN к табличной части КонтактнаяИнформация.
|
||||
// В BIT.RA у ТЧ есть кастомное поле АдресЭП (адрес электронной почты) —
|
||||
// это специфика данной БСП, заполняется при сохранении объекта.
|
||||
//
|
||||
Функция EmployeesGet(Запрос) Экспорт
|
||||
|
||||
Попытка
|
||||
Запрос1С = Новый Запрос;
|
||||
Запрос1С.УстановитьПараметр("ТипEmail", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
|
||||
Запрос1С.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| Пользователи.Ссылка КАК Ссылка,
|
||||
@@ -41,51 +43,42 @@
|
||||
| Пользователи.Подразделение КАК Подразделение,
|
||||
| Пользователи.Ставка КАК Ставка,
|
||||
| Пользователи.Недействителен КАК Недействителен,
|
||||
| Пользователи.ДолженЗаполнятьОтчет КАК ДолженЗаполнятьОтчет
|
||||
| Пользователи.ДолженЗаполнятьОтчет КАК ДолженЗаполнятьОтчет,
|
||||
| МАКСИМУМ(КИ.АдресЭП) КАК Email
|
||||
|ИЗ
|
||||
| Справочник.Пользователи КАК Пользователи
|
||||
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК КИ
|
||||
| ПО КИ.Ссылка = Пользователи.Ссылка
|
||||
| И КИ.Тип = &ТипEmail
|
||||
|ГДЕ
|
||||
| НЕ Пользователи.ПометкаУдаления
|
||||
|СГРУППИРОВАТЬ ПО
|
||||
| Пользователи.Ссылка,
|
||||
| Пользователи.Наименование,
|
||||
| Пользователи.EVA_ID,
|
||||
| Пользователи.Офис,
|
||||
| Пользователи.Подразделение,
|
||||
| Пользователи.Ставка,
|
||||
| Пользователи.Недействителен,
|
||||
| Пользователи.ДолженЗаполнятьОтчет
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| Пользователи.Наименование";
|
||||
|
||||
ТаблицаПользователей = Запрос1С.Выполнить().Выгрузить();
|
||||
|
||||
// Массовый запрос email через БСП.
|
||||
МассивСсылок = ТаблицаПользователей.ВыгрузитьКолонку("Ссылка");
|
||||
ТипEmail = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
|
||||
EmailПоПользователю = Новый Соответствие;
|
||||
Попытка
|
||||
ТЗКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивСсылок, ТипEmail);
|
||||
Для Каждого СтрКИ Из ТЗКИ Цикл
|
||||
// у разных версий БСП колонка может называться 'Объект' / 'СсылкаНаОбъект' / 'Объект'.
|
||||
// Достаём через структурный доступ безопасно:
|
||||
Объект = ?(СтрКИ.Колонки.Найти("Объект") <> Неопределено, СтрКИ.Объект, Неопределено);
|
||||
Если Объект = Неопределено И СтрКИ.Колонки.Найти("СсылкаНаОбъект") <> Неопределено Тогда
|
||||
Объект = СтрКИ.СсылкаНаОбъект;
|
||||
КонецЕсли;
|
||||
Представление = ?(СтрКИ.Колонки.Найти("Представление") <> Неопределено, СтрКИ.Представление, "");
|
||||
Если Объект <> Неопределено И НЕ ПустаяСтрока(Представление) И EmailПоПользователю.Получить(Объект) = Неопределено Тогда
|
||||
EmailПоПользователю.Вставить(Объект, Представление);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Исключение
|
||||
// Если у БСП другая сигнатура — оставляем email пустыми (не критично для MVP).
|
||||
КонецПопытки;
|
||||
|
||||
Выборка = Запрос1С.Выполнить().Выбрать();
|
||||
Результат = Новый Массив;
|
||||
Для Каждого СтрПольз Из ТаблицаПользователей Цикл
|
||||
Email = EmailПоПользователю.Получить(СтрПольз.Ссылка);
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Email = ?(Выборка.Email = Null, "", Строка(Выборка.Email));
|
||||
Запись = Новый Структура;
|
||||
Запись.Вставить("id", bfd_IntegrationAPIHelpers.UUID(СтрПольз.Ссылка));
|
||||
Запись.Вставить("full_name", СтрПольз.ФИО);
|
||||
Запись.Вставить("email", ?(Email = Неопределено, "", НРег(Строка(Email))));
|
||||
Запись.Вставить("eva_id", СтрПольз.EvaID);
|
||||
Запись.Вставить("office", Строка(СтрПольз.Офис));
|
||||
Запись.Вставить("department", Строка(СтрПольз.Подразделение));
|
||||
Запись.Вставить("rate", СтрПольз.Ставка);
|
||||
Запись.Вставить("is_active", НЕ СтрПольз.Недействителен);
|
||||
Запись.Вставить("should_fill_report", СтрПольз.ДолженЗаполнятьОтчет);
|
||||
Запись.Вставить("id", bfd_IntegrationAPIHelpers.UUID(Выборка.Ссылка));
|
||||
Запись.Вставить("full_name", Выборка.ФИО);
|
||||
Запись.Вставить("email", НРег(Email));
|
||||
Запись.Вставить("eva_id", Выборка.EvaID);
|
||||
Запись.Вставить("office", Строка(Выборка.Офис));
|
||||
Запись.Вставить("department", Строка(Выборка.Подразделение));
|
||||
Запись.Вставить("rate", Выборка.Ставка);
|
||||
Запись.Вставить("is_active", НЕ Выборка.Недействителен);
|
||||
Запись.Вставить("should_fill_report", Выборка.ДолженЗаполнятьОтчет);
|
||||
Результат.Добавить(Запись);
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user