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