В типовых конфигурациях 1С стандартное строковое представление документа обычно формируется по маблону "Тип Номер от Дата". Однако в реальных бизнес-задачах часто возникает необходимость отображать в списках, полях выбора или отчетах другую информацию. Например, вместо стандартного номера выводить специфический реквизит или добавлять поясняющий текст. Рассмотрим, как реализовать это правильно, эффективно и без потери производительности системы.
Основным инструментом для изменения отображаемого имени объекта является процедура ОбработкаПолученияПредставления, которая располагается в модуле менеджера конкретного объекта (документа или справочника). Разберем по шагам, как это работает.
Когда платформе требуется отобразить ссылку на объект в виде строки, она обращается к этому обработчику. Проанализируем пример кода, который позволяет подставить в заголовок документа пользовательский реквизит:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формируем пользовательскую строку представления
Представление = "Акт допуска прибора учета № "
+ Данные.НомерДокументаДляСквознойНумерации
+ " от "
+ Формат(Данные.Дата, "ДФ=dd.MM.yyyy");
КонецПроцедуры
В данном коде мы устанавливаем параметр СтандартнаяОбработка в значение Ложь. Это критически важно: таким образом мы сообщаем системе, что стандартный алгоритм формирования (Тип + Номер + Дата) использовать не нужно, а следует взять строку из параметра Представление.
Одной из самых распространенных ошибок начинающих разработчиков является игнорирование «парного» обработчика. Выясним причину, почему это опасно. Если мы просто пропишем формирование строки в ОбработкаПолученияПредставления, платформа при отрисовке динамического списка (например, списка из 50-100 документов) будет вынуждена делать отдельный запрос к базе данных для каждой строки, чтобы получить значения Дата или НомерДокументаДляСквознойНумерации. Это приведет к катастрофическим «тормозам» интерфейса.
Чтобы избежать этой проблемы, обязательно определим состав полей в процедуре ОбработкаПолученияПолейПредставления. Рассмотрим пример:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Указываем платформе, какие поля нужно прочитать из базы одним запросом
Поля.Добавить("Дата");
Поля.Добавить("НомерДокументаДляСквознойНумерации");
КонецПроцедуры
Благодаря этому коду, система заранее подготовит нужные данные, и формирование представления будет происходить мгновенно в памяти клиента без дополнительных обращений к серверу БД.
Если мы работаем с типовой конфигурацией, которую нельзя снимать с поддержки, используем механизм расширений. Проанализируем ситуацию: нам нужно перехватить формирование представления, не меняя основной код.
&Вместо для перекрытия стандартных процедур.Важно помнить: при использовании &Вместо мы полностью берем на себя ответственность за формирование строки. Если в основной конфигурации уже была сложная логика, ее стоит учитывать или аккуратно дополнять через &После, если это позволяют параметры метода.
Разберем дополнительные аспекты, которые влияют на стабильность работы решения:
Запрос или обращаться к данным через точку от ссылочных полей (например, Данные.Склад.Наименование). Все необходимые поля должны быть добавлены в ОбработкаПолученияПолейПредставления.Данные может вызвать исключение. Проанализируем безопасный подход: желательно убедиться, что реквизиты заполнены, прежде чем конструировать строку.Посмотрим на пример форматирования. В сообщении форума предлагалось использовать Формат(Данные.Дата, "ДФ=dd.MM.yyyy"). Это хороший тон, так как стандартное представление даты в 1С включает время, которое в заголовке документа часто избыточно. Однако помните, что если ваша система мультиязычная или используется в разных регионах, жесткое форматирование может игнорировать системные настройки даты пользователя. В большинстве случаев для российских конфигураций использование "ДФ=dd.MM.yyyy" является оптимальным решением.
Таким образом, правильное изменение представления документа — это всегда работа с двумя методами модуля менеджера. Такой подход гарантирует, что ваше приложение будет работать быстро, а пользователи получат максимально информативный и понятный интерфейс.