Замена основного менеджера по группе доступа
Отбор партнеров производится по реквизиту «Группа доступа». Если группа не выбрана, тогда партнеры подобраны не будут. При изменении группы доступа таблица с партнерами очищается.
По кнопке «Подобрать клиентов» заполняется таблица всеми партнерами выбранной группы. В колонке «Новый менеджер» устанавливается значение из поля «Менеджер по умолчанию».
Если выбран менеджер в поле «Дополнительный отбор», тогда будут подобраны только те клиенты, у которых выбранный сотрудник указан в качестве основного менеджера.
В полях «По менеджеру» и «Менеджер по умолчанию» доступны для выбора только те сотрудники, для которых разрешена работа с выбранной группой доступа по партнерам.
При нажатии кнопки «Выполнить замену» обрабатываются только те строки, в которых стоит отметка в колонке «Изменить». Если колонка «Новый менеджер» в строке заполнена, тогда в карточку партнера будет записан указанный новый менеджер. Если значение колонки пустое, тогда в карточку партнера будет записан менеджер по умолчанию из шапки формы.
Заполнение списка выбора менеджеров:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступаПользователи.Пользователь КАК Ссылка
|ИЗ
| Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ПО ГруппыДоступаЗначенияДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка
|ГДЕ
| ГруппыДоступаЗначенияДоступа.ЗначениеДоступа = &ГруппаДоступа
| ";
Запрос.УстановитьПараметр("ГруппаДоступа", Объект.ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Объект.ДоступныеМенеджеры.ЗагрузитьЗначения(РезультатЗапроса.ВыгрузитьКолонку("Ссылка"));
СписокАктуальных = Новый Массив;
Для Каждого Стр Из РезультатЗапроса Цикл
Если Стр.Ссылка.Недействителен Тогда
//пропуск
Иначе
СписокАктуальных.Добавить(Стр.Ссылка);
КонецЕсли;
КонецЦикла;
Запрос по партнерам:
Запрос.Текст =
"ВЫБРАТЬ
| Партнеры.Ссылка КАК Партнер,
| Партнеры.ОсновнойМенеджер КАК Менеджер,
| Партнеры.ОсновнойМенеджер.Недействителен КАК Недействителен,
| &НовыйМенеджер КАК НовыйМенеджер
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.ОсновнойМенеджер В(&Менеджеры)
| И ВЫБОР
| КОГДА &ПоМ
| ТОГДА Партнеры.ОсновнойМенеджер = &ПоМенеджеру
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И Партнеры.ГруппаДоступа = &ГруппаДоступа";
Изменение основного менеджера:
&НаСервере
Процедура ПоменятьОсновногоМенеджераНаСервере()
СколькоИзменили = 0;
Для Каждого Стр Из Объект.Клиенты Цикл
Если Стр.Изменить Тогда
Если ЗначениеЗаполнено(Стр.НовыйМенеджер) Тогда
СпрОбъект = Стр.Партнер.ПолучитьОбъект();
СпрОбъект.ОсновнойМенеджер = Стр.НовыйМенеджер;
СпрОбъект.Записать();
ИначеЕсли ЗначениеЗаполнено(Объект.МенеджерПоУмолчанию) Тогда
СпрОбъект = Стр.Партнер.ПолучитьОбъект();
СпрОбъект.ОсновнойМенеджер = Объект.МенеджерПоУмолчанию;
СпрОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗаполнитьДоступныхКлиентов();
КонецПроцедуры
Протестировано на Управление торговлей, редакция 11 (11.4.13.227) и 1С:ERP Управление предприятием 2 (2.5.7.324), платформа 1С:Предприятие 8.3 (8.3.20.1789).
Подключается как дополнительная внешняя обработка через БСП.