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