При разработке и адаптации конфигураций под нужды конкретного бизнеса часто возникает ситуация, когда стандартное поле Наименование не удовлетворяет требованиям пользователей. Например, кладовщику удобнее видеть техническое описание товара, а бухгалтеру — юридически правильное название. В этой статье мы разберем, как централизованно подменить стандартное представление объекта на значение произвольного реквизита, не прибегая к массовому переписыванию форм и отчетов.
Это наиболее современный и правильный способ для платформы 1С:Предприятие 8.3. Он позволяет программно определить, что именно будет выводиться в полях ссылок, заголовках форм и динамических списках. Для реализации этого метода проанализируем модуль менеджера нашего справочника.
Рассмотрим по шагам, как настроить этот механизм:
Номенклатура).ОбработкаПолученияПредставления.Пример программного кода для модуля менеджера:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Проверяем, заполнено ли наше специальное наименование
Если ЗначениеЗаполнено(Данные.НаименованиеДляКладовщика) Тогда
Представление = Данные.НаименованиеДляКладовщика;
Иначе
// Если спец. наименование пустое, выводим стандартное
Представление = Данные.Наименование;
КонецЕсли;
КонецПроцедуры
Важно помнить: чтобы этот обработчик работал корректно и не вызывал падения производительности, необходимо настроить состав полей. Выясним, почему это критично. Если система будет обращаться к базе данных за реквизитом НаименованиеДляКладовщика при выводе каждой строки в списке из 1000 элементов, это породит 1000 дополнительных запросов.
Для оптимизации выполним следующее: в окне редактирования метаданных справочника перейдем на закладку Данные и нажмем кнопку В состав представлений входят.... В открывшемся списке нужно отметить галочкой наш реквизит НаименованиеДляКладовщика. Теперь платформа будет считывать это значение заранее одним запросом вместе со ссылкой.
Часто требуется, чтобы подмена работала не для всех, а только для определенной группы сотрудников. Рассмотрим ситуацию, когда кладовщик должен видеть одно название, а все остальные — стандартное. Мы можем дополнить наш обработчик проверкой прав доступа.
Проанализируем пример реализации с учетом ролей:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
// Если пользователю доступна роль кладовщика, меняем представление
Если РольДоступна("Кладовщик") Тогда
СтандартнаяОбработка = Ложь;
Представление = Данные.НаименованиеДляКладовщика;
КонецЕсли;
// Для остальных сработает СтандартнаяОбработка = Истина (по умолчанию)
КонецПроцедуры
Такой подход позволяет гибко управлять интерфейсом без создания дублирующих форм или сложных условий в каждом документе.
Как было отмечено в обсуждении, если ваша конфигурация работает в режиме совместимости с версией 8.2, обработчик ОбработкаПолученияПредставления не будет доступен. В этом случае придется использовать метод "физической" подмены данных.
Разберем алгоритм действий:
ПередЗаписью для справочника или пишем код непосредственно в модуле объекта.НаименованиеДляКладовщика в стандартное поле Наименование.Пример кода в модуле объекта:
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Синхронизируем основное наименование с наименованием для кладовщика
Если ЗначениеЗаполнено(НаименованиеДляКладовщика) Тогда
Наименование = НаименованиеДляКладовщика;
КонецЕсли;
КонецПроцедуры
Важный нюанс: при таком подходе оригинальное наименование будет затерто. Если оно необходимо для печатных форм или отчетности, рекомендуется сначала перенести старые данные в другой технический реквизит.
Просто изменить отображение недостаточно. Пользователи привыкли искать товар, набирая его название в поле ввода. Если мы изменили представление через модуль менеджера, стандартный поиск по полю Наименование может перестать быть интуитивно понятным, так как пользователь видит один текст, а искать должен по другому.
Посмотрим, как настроить ввод по строке:
НаименованиеДляКладовщика.Также полезно задействовать обработчик ОбработкаПолученияДанныхВыбора в модуле менеджера. Он позволит переопределить список, который выпадает у пользователя при наборе первых букв, и сделать его максимально информативным.
Проанализируем ситуацию с отчетами. Механизм ОбработкаПолученияПредставления отлично работает, когда в запросе выбирается поле типа Ссылка. В этом случае Система Компоновки Данных (СКД) автоматически обращается к модулю менеджера для получения текста.
Однако, если в схеме компоновки данных программист явно указал путь к полю Ссылка.Наименование, то будет выведено именно стандартное имя из базы данных, и наш обработчик будет проигнорирован. Совет: при проектировании отчетов всегда отдавайте предпочтение полю Ссылка. Для вывода строкового представления в настройках отчета достаточно выбрать поле Ссылка, и платформа сама преобразует его в нужный текст согласно вашему алгоритму в модуле менеджера.
Для централизованного изменения наименования во всей системе:
ОбработкаПолученияПредставления в модуле менеджера для актуальных версий платформы.Эти методы позволяют избежать модификации сотен форм и обеспечивают чистоту кода и удобство сопровождения конфигурации.