Здравствуйте. Столкнулся с проблемой: в выпадающем списке поля ввода выпадают ненужные данные.
Сразу оговорюсь: это не попытка подсунуть свои значения в выпадающий список, это попытка заставить работать стандартную обработку.
Во всех (в т.ч. составных) полях ввода, к примеру с данными типа СправочникСсылка.Пользователи , при наборе текста выпадает список с пользователями с Недействителен=Истина. Залез в Модуль менеджера Справочника Пользователи, там чётко указано:
Конфигуратором вывел значение Параметры, в Отбор действительно попадает Недействителен. Попробовал добавить в отбор ещё и ПометкаУдаления=Ложь, результат тот же: отбор полностью игнорируется в выпадающем списке. Попробовал добавить в ПараметрыВыбора у поля ввода нужный отсев - в отборе он появился, но результат тот же. Вызвал ПолучитьДанныеВыбора(), дабы убедиться, что это не какой-нибудь другой код, нет - именно ПолучитьДанныеВыбора с данными Параметры выдают такой список.
Самое интересное в этой ситуации то, что в выпадающем списке поля ввода отбор игнорируется, а в списке выбора (F4) у того же самого поля отбор работает.
Вопрос: как заставить выпадающий список или ПолучитьДанныеВыбора() понимать отбор?
Может где-то есть переопределение этой функции или что-то подобное?
Всем спасибо заранее.
Модуль 1С:CRM 3 (3.1.28.14) + 1С:Комплексная автоматизация 2 (2.5.16.107)
Сразу оговорюсь: это не попытка подсунуть свои значения в выпадающий список, это попытка заставить работать стандартную обработку.
Во всех (в т.ч. составных) полях ввода, к примеру с данными типа СправочникСсылка.Пользователи , при наборе текста выпадает список с пользователями с Недействителен=Истина. Залез в Модуль менеджера Справочника Пользователи, там чётко указано:
Если НЕ Параметры.Отбор.Свойство("Недействителен") Тогда
Параметры.Отбор.Вставить("Недействителен", Ложь);
КонецЕсли;
Конфигуратором вывел значение Параметры, в Отбор действительно попадает Недействителен. Попробовал добавить в отбор ещё и ПометкаУдаления=Ложь, результат тот же: отбор полностью игнорируется в выпадающем списке. Попробовал добавить в ПараметрыВыбора у поля ввода нужный отсев - в отборе он появился, но результат тот же. Вызвал ПолучитьДанныеВыбора(), дабы убедиться, что это не какой-нибудь другой код, нет - именно ПолучитьДанныеВыбора с данными Параметры выдают такой список.
Самое интересное в этой ситуации то, что в выпадающем списке поля ввода отбор игнорируется, а в списке выбора (F4) у того же самого поля отбор работает.
Вопрос: как заставить выпадающий список или ПолучитьДанныеВыбора() понимать отбор?
Может где-то есть переопределение этой функции или что-то подобное?
Всем спасибо заранее.
Модуль 1С:CRM 3 (3.1.28.14) + 1С:Комплексная автоматизация 2 (2.5.16.107)
По теме из базы знаний
- Переопределение ввода по строке в управляемой форме 1С
- Очень быстрый поиск номенклатуры в РМК
- Код для поиска номенклатуры в конфигурациях 1С. Использование мнемоники по первым буквам как вариант применения
- Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах
- Автоподстановка, автоподбор города из адресного классификатора
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Пока решил так:
Но это для конкретного справочника (модуль менеджера), а не для всех сразу.
К сожалению, в выпадающих списках выпадают и данные Истории выбора (помимо данных из ПолучитьДанныеВыбора) - с этим придется бороться отдельно (к примеру, очистить пользователям).
&После("ОбработкаПолученияДанныхВыбора")
Процедура XD_ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если НЕ Параметры.Свойство("Рекурсия") Тогда
Параметры.Вставить("Рекурсия");
Если Параметры.Свойство("Отбор") Тогда
СтандартнаяОбработка = Ложь;
СтандартныйСписок = ПолучитьДанныеВыбора(Параметры);
Индекс = СтандартныйСписок.Количество() - 1;
Пока Индекс >= 0 Цикл
Эл = СтандартныйСписок.Получить(Индекс);
Для Каждого ЭлОтбора Из Параметры.Отбор Цикл
Если НЕ Эл.Значение[ЭлОтбора.Ключ] = ЭлОтбора.Значение Тогда
СтандартныйСписок.Удалить(Эл);
Прервать;
КонецЕсли;
КонецЦикла;
Индекс = Индекс - 1;
КонецЦикла;
ДанныеВыбора = СтандартныйСписок;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьНо это для конкретного справочника (модуль менеджера), а не для всех сразу.
К сожалению, в выпадающих списках выпадают и данные Истории выбора (помимо данных из ПолучитьДанныеВыбора) - с этим придется бороться отдельно (к примеру, очистить пользователям).
(2) Вы что-то перепутали, полагая, что платформа игнорирует свойство Отбор. В конфигурации нет других расширений, которые могли бы переопределить ОбработкаПолученияДанныхВыбора?
В любом случае, ваше решение выглядит дико, особенно в строке Вы же понимаете, что каждый элемент из списка будет полностью считан из БД и сериализован в прикладной объект? Не слишком ли жирно для такого действия? Я уже не говорю, что значением отбора может выступать массив и ваш код не сработает.
В любом случае, ваше решение выглядит дико, особенно в строке
Если НЕ Эл.Значение[ЭлОтбора.Ключ] = ЭлОтбора.Значение Тогда
(4) Дело именно в ПолучитьДанныеВыбора(), он уже с такими параметрами/отбором возвращает совершенно не отобранный список. ОбработкаПолученияДанныхВыбора всего лишь передаёт это дальше.
К сожалению, я пишу то, что вижу: если использовать код без доработки, то возвращаются, к примеру, пользователи с любым значением Недействителен, хотя в отборе Недействителен=Ложь. Добавляются ли в ПолучитьДанныеВыбора() данные из истории выбора - я не знаю, поэтому и спрашиваю опытных программистов.
По поводу жирности - подскажите, как это написать проще? Кажется, читал где-то, что выборка в этот список всё равно невелика.
По поводу массива в Отбор - благодарю, что подсказали, посмотрел справку, действительно там всё, что угодно.
К сожалению, я пишу то, что вижу: если использовать код без доработки, то возвращаются, к примеру, пользователи с любым значением Недействителен, хотя в отборе Недействителен=Ложь. Добавляются ли в ПолучитьДанныеВыбора() данные из истории выбора - я не знаю, поэтому и спрашиваю опытных программистов.
По поводу жирности - подскажите, как это написать проще? Кажется, читал где-то, что выборка в этот список всё равно невелика.
По поводу массива в Отбор - благодарю, что подсказали, посмотрел справку, действительно там всё, что угодно.
(5) Надо искать не пути обхода, а разобраться, почему не работает платформенный механизм.
История выбора не добавляется в ПолучитьДанныеВыбора(). Ограничение истории выбора решается через ПараметрыВыбора поля ввода.
Покажите в отладке, где в параметрах есть отбор ("Недействителен", Ложь), а в ПолучитьДанныеВыбора есть недействительный пользователь.
История выбора не добавляется в ПолучитьДанныеВыбора(). Ограничение истории выбора решается через ПараметрыВыбора поля ввода.
Покажите в отладке, где в параметрах есть отбор ("Недействителен", Ложь), а в ПолучитьДанныеВыбора есть недействительный пользователь.
ОбработкаПолученияДанныхВыбора всего лишь передаёт это дальше.
При желании ПолучитьДанныеВыбора() может быть переопределен в расширении через ОбработкаПолученияДанныхВыбора, поэтому и спросил про другие расширения.
(10) Большое спасибо, что подсказали. С помощью F11 понял, что Модуль CRM полон вызываемых в данном случае функций, в которых ещё предстоит разобраться, но судя по первому взгляду, отбор на пользователей вполне может тут совсем другим параметром регулироваться ("CRM_...").
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот