diff --git a/bitra-patch/HTTPServices/bfd_IntegrationAPI/Module.bsl b/bitra-patch/HTTPServices/bfd_IntegrationAPI/Module.bsl index e898ec7..aefb7b0 100644 --- a/bitra-patch/HTTPServices/bfd_IntegrationAPI/Module.bsl +++ b/bitra-patch/HTTPServices/bfd_IntegrationAPI/Module.bsl @@ -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", Выборка.ДолженЗаполнятьОтчет); Результат.Добавить(Запись); КонецЦикла;