Как отобразить принадлежность номенклатуры к группе в скобках в табличной части?

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

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

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

Наиболее фундаментальным и системным подходом является использование механизма ОбработкаПолученияПредставления. Этот механизм позволяет переопределить то, как именно платформа «видит» строковое представление ссылки на объект справочника во всей системе.

Рассмотрим, как это работает на практике:

  1. В конфигураторе переходим в ветку Подписки на события.
  2. Создаем новую подписку, где в качестве события выбираем ОбработкаПолученияПредставления.
  3. В качестве источника указываем наш справочник Номенклатура.
  4. В обработчике события мы пишем код, который формирует нужное нам строковое представление.

Пример программной реализации:


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

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

Создание дополнительного реквизита в табличной части

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

  1. Добавьте в табличную часть документа новый реквизит, например, ПредставлениеНоменклатуры с типом Строка.
  2. В модуле формы документа, в событии ПриИзменении колонки Номенклатура, пропишите логику формирования строки.

Рассмотрим этот алгоритм пошагово:


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

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

Использование оформления при выводе (для списков)

Если задача относится не к документу, а к списку (например, списку выбора в форме), вы можете использовать событие ПриПолученииДанных у элемента формы. В этом событии мы работаем с параметром ОформлениеСтрок.

Мы можем программно изменить свойство Текст для ячейки, не меняя при этом само значение ссылки:


Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого Оформление Из ОформленияСтрок Цикл
        ДанныеСтроки = Оформление.ДанныеСтроки;
        Оформление.Ячейки.Номенклатура.Текст = ДанныеСтроки.Номенклатура.Наименование + " (" + ДанныеСтроки.Номенклатура.Родитель.Наименование + ")";
    КонецЦикла;
КонецПроцедуры

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

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

← На главную