Как программно изменить стандартное представление документа или справочника в 1С 8.3

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

В типовых конфигурациях 1С стандартное строковое представление документа обычно формируется по маблону "Тип Номер от Дата". Однако в реальных бизнес-задачах часто возникает необходимость отображать в списках, полях выбора или отчетах другую информацию. Например, вместо стандартного номера выводить специфический реквизит или добавлять поясняющий текст. Рассмотрим, как реализовать это правильно, эффективно и без потери производительности системы.

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

Основным инструментом для изменения отображаемого имени объекта является процедура ОбработкаПолученияПредставления, которая располагается в модуле менеджера конкретного объекта (документа или справочника). Разберем по шагам, как это работает.

Когда платформе требуется отобразить ссылку на объект в виде строки, она обращается к этому обработчику. Проанализируем пример кода, который позволяет подставить в заголовок документа пользовательский реквизит:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Формируем пользовательскую строку представления
    Представление = "Акт допуска прибора учета № " 
                    + Данные.НомерДокументаДляСквознойНумерации 
                    + " от " 
                    + Формат(Данные.Дата, "ДФ=dd.MM.yyyy"); 
        
КонецПроцедуры

В данном коде мы устанавливаем параметр СтандартнаяОбработка в значение Ложь. Это критически важно: таким образом мы сообщаем системе, что стандартный алгоритм формирования (Тип + Номер + Дата) использовать не нужно, а следует взять строку из параметра Представление.

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

Одной из самых распространенных ошибок начинающих разработчиков является игнорирование «парного» обработчика. Выясним причину, почему это опасно. Если мы просто пропишем формирование строки в ОбработкаПолученияПредставления, платформа при отрисовке динамического списка (например, списка из 50-100 документов) будет вынуждена делать отдельный запрос к базе данных для каждой строки, чтобы получить значения Дата или НомерДокументаДляСквознойНумерации. Это приведет к катастрофическим «тормозам» интерфейса.

Чтобы избежать этой проблемы, обязательно определим состав полей в процедуре ОбработкаПолученияПолейПредставления. Рассмотрим пример:


Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Указываем платформе, какие поля нужно прочитать из базы одним запросом
    Поля.Добавить("Дата");
    Поля.Добавить("НомерДокументаДляСквознойНумерации");
    
КонецПроцедуры

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

Реализация через расширение конфигурации

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

  1. Создаем новое расширение или используем существующее.
  2. Добавляем в расширение нужный документ и переходим в его модуль менеджера.
  3. Используем аннотацию &Вместо для перекрытия стандартных процедур.

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

Важные технические нюансы и ограничения

Разберем дополнительные аспекты, которые влияют на стабильность работы решения:

Работа с форматами дат и чисел

Посмотрим на пример форматирования. В сообщении форума предлагалось использовать Формат(Данные.Дата, "ДФ=dd.MM.yyyy"). Это хороший тон, так как стандартное представление даты в 1С включает время, которое в заголовке документа часто избыточно. Однако помните, что если ваша система мультиязычная или используется в разных регионах, жесткое форматирование может игнорировать системные настройки даты пользователя. В большинстве случаев для российских конфигураций использование "ДФ=dd.MM.yyyy" является оптимальным решением.

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

← На главную