Как во всей конфигурации использовать значение реквизита как основное наименование

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и адаптации конфигураций под нужды конкретного бизнеса часто возникает ситуация, когда стандартное поле Наименование не удовлетворяет требованиям пользователей. Например, кладовщику удобнее видеть техническое описание товара, а бухгалтеру — юридически правильное название. В этой статье мы разберем, как централизованно подменить стандартное представление объекта на значение произвольного реквизита, не прибегая к массовому переписыванию форм и отчетов.

Метод 1: Использование обработчика ОбработкаПолученияПредставления

Это наиболее современный и правильный способ для платформы 1С:Предприятие 8.3. Он позволяет программно определить, что именно будет выводиться в полях ссылок, заголовках форм и динамических списках. Для реализации этого метода проанализируем модуль менеджера нашего справочника.

Рассмотрим по шагам, как настроить этот механизм:

  1. Откройте модуль менеджера нужного справочника (например, Номенклатура).
  2. Найдите или создайте процедуру ОбработкаПолученияПредставления.
  3. Напишите код, который будет подменять стандартный текст.

Пример программного кода для модуля менеджера:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	// Проверяем, заполнено ли наше специальное наименование
	Если ЗначениеЗаполнено(Данные.НаименованиеДляКладовщика) Тогда
		Представление = Данные.НаименованиеДляКладовщика;
	Иначе
		// Если спец. наименование пустое, выводим стандартное
		Представление = Данные.Наименование;
	КонецЕсли;
	
КонецПроцедуры

Важно помнить: чтобы этот обработчик работал корректно и не вызывал падения производительности, необходимо настроить состав полей. Выясним, почему это критично. Если система будет обращаться к базе данных за реквизитом НаименованиеДляКладовщика при выводе каждой строки в списке из 1000 элементов, это породит 1000 дополнительных запросов.

Для оптимизации выполним следующее: в окне редактирования метаданных справочника перейдем на закладку Данные и нажмем кнопку В состав представлений входят.... В открывшемся списке нужно отметить галочкой наш реквизит НаименованиеДляКладовщика. Теперь платформа будет считывать это значение заранее одним запросом вместе со ссылкой.

Метод 2: Динамическое представление в зависимости от роли пользователя

Часто требуется, чтобы подмена работала не для всех, а только для определенной группы сотрудников. Рассмотрим ситуацию, когда кладовщик должен видеть одно название, а все остальные — стандартное. Мы можем дополнить наш обработчик проверкой прав доступа.

Проанализируем пример реализации с учетом ролей:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	// Если пользователю доступна роль кладовщика, меняем представление
	Если РольДоступна("Кладовщик") Тогда
		СтандартнаяОбработка = Ложь;
		Представление = Данные.НаименованиеДляКладовщика;
	КонецЕсли;
	
	// Для остальных сработает СтандартнаяОбработка = Истина (по умолчанию)
	
КонецПроцедуры

Такой подход позволяет гибко управлять интерфейсом без создания дублирующих форм или сложных условий в каждом документе.

Метод 3: Синхронизация данных (для режима совместимости 8.2)

Как было отмечено в обсуждении, если ваша конфигурация работает в режиме совместимости с версией 8.2, обработчик ОбработкаПолученияПредставления не будет доступен. В этом случае придется использовать метод "физической" подмены данных.

Разберем алгоритм действий:

  1. Создаем подписку на событие ПередЗаписью для справочника или пишем код непосредственно в модуле объекта.
  2. При записи объекта копируем значение из НаименованиеДляКладовщика в стандартное поле Наименование.
  3. Для существующих записей запускаем обработку, которая выполнит разовую синхронизацию.

Пример кода в модуле объекта:


Процедура ПередЗаписью(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	// Синхронизируем основное наименование с наименованием для кладовщика
	Если ЗначениеЗаполнено(НаименованиеДляКладовщика) Тогда
		Наименование = НаименованиеДляКладовщика;
	КонецЕсли;
	
КонецПроцедуры

Важный нюанс: при таком подходе оригинальное наименование будет затерто. Если оно необходимо для печатных форм или отчетности, рекомендуется сначала перенести старые данные в другой технический реквизит.

Настройка поиска и ввода по строке

Просто изменить отображение недостаточно. Пользователи привыкли искать товар, набирая его название в поле ввода. Если мы изменили представление через модуль менеджера, стандартный поиск по полю Наименование может перестать быть интуитивно понятным, так как пользователь видит один текст, а искать должен по другому.

Посмотрим, как настроить ввод по строке:

  1. В свойствах справочника найдите поле Ввод по строке.
  2. Добавьте в список доступных полей НаименованиеДляКладовщика.
  3. Убедитесь, что для этого реквизита создано индексирование (свойство Индексировать), иначе поиск в больших справочниках будет медленным.

Также полезно задействовать обработчик ОбработкаПолученияДанныхВыбора в модуле менеджера. Он позволит переопределить список, который выпадает у пользователя при наборе первых букв, и сделать его максимально информативным.

Особенности работы в отчетах (СКД)

Проанализируем ситуацию с отчетами. Механизм ОбработкаПолученияПредставления отлично работает, когда в запросе выбирается поле типа Ссылка. В этом случае Система Компоновки Данных (СКД) автоматически обращается к модулю менеджера для получения текста.

Однако, если в схеме компоновки данных программист явно указал путь к полю Ссылка.Наименование, то будет выведено именно стандартное имя из базы данных, и наш обработчик будет проигнорирован. Совет: при проектировании отчетов всегда отдавайте предпочтение полю Ссылка. Для вывода строкового представления в настройках отчета достаточно выбрать поле Ссылка, и платформа сама преобразует его в нужный текст согласно вашему алгоритму в модуле менеджера.

Резюме

Для централизованного изменения наименования во всей системе:

Эти методы позволяют избежать модификации сотен форм и обеспечивают чистоту кода и удобство сопровождения конфигурации.

← На главную