Как программно изменить заголовок вложенного поля в СКД?

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

При работе с Системой компоновки данных (СКД) программисты часто сталкиваются с необходимостью динамического формирования структуры отчета. Одной из типовых задач является добавление полей, которые обращаются к реквизитам через точку (например, Организация.Родитель). По умолчанию СКД формирует заголовок такого поля путем конкатенации имен, что не всегда выглядит эстетично (например, "ОрганизацияРодитель" вместо "Группа").

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

Способ 1: Использование прямого свойства Заголовок (для Платформы 8.3.15 и выше)

Начнем с самого современного и простого метода. Если ваша конфигурация работает на платформе версии 8.3.15 или новее, разработчики 1С значительно упростили нам жизнь, добавив свойство Заголовок непосредственно в объект ВыбранноеПолеКомпоновкиДанных. Теперь нам не нужно модифицировать схему или создавать сложные конструкции.

Рассмотрим пример кода, где мы добавляем вложенное поле и сразу меняем его наименование:


// Получаем настройки компоновщика
Настройки = КомпоновщикНастроек.Настройки;

// Добавляем новое выбранное поле
НовоеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Использование = Истина;
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("Организация.Родитель");

// Устанавливаем пользовательский заголовок (доступно с 8.3.15)
НовоеПоле.Заголовок = "Группа организации";

Этот способ является наиболее предпочтительным, так как он не требует изменения структуры схемы компоновки и работает максимально быстро. Заголовок сохранится в настройках и будет корректно выведен в шапку отчета.

Способ 2: Использование Группы выбранных полей

Если вы работаете на более старых версиях платформы, где свойства Заголовок у выбранного поля еще не существует, мы можем прибегнуть к хитрости с использованием объекта ГруппаВыбранныхПолейКомпоновкиДанных. Суть метода заключается в том, что мы помещаем наше поле внутрь группы, а заголовок задаем самой группе.

Разберем этот алгоритм по шагам:

  1. Создаем группу в коллекции элементов выбора.
  2. Устанавливаем для группы заголовок, который хотим видеть в отчете.
  3. Указываем способ расположения РасположениеПоляКомпоновкиДанных.Отдельно, чтобы группа вела себя как одна колонка.
  4. Добавляем само поле (например, Организация.Родитель) внутрь этой группы.

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


Настройки = КомпоновщикНастроек.Настройки;

// Создаем группу полей
ГруппаПолей = Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ГруппаПолей.Заголовок = "Группа";
ГруппаПолей.Использование = Истина;
ГруппаПолей.Расположение = РасположениеПоляКомпоновкиДанных.Отдельно;

// Добавляем реальное поле внутрь группы
ПолеВГруппе = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ПолеВГруппе.Поле = Новый ПолеКомпоновкиДанных("Организация.Родитель");
ПолеВГруппе.Использование = Истина;

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

Способ 3: Программная модификация полей набора данных в Схеме

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

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

Внимание: Нельзя изменять схему, полученную напрямую из метаданных (ЭтотОбъект.СхемаКомпоновкиДанных), так как это может повлиять на работу других сеансов. Сначала нужно создать копию схемы.


// 1. Получаем копию схемы
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); 

// 2. Находим нужный набор данных (например, первый)
НаборДанных = Схема.НаборыДанных[0];

// 3. Создаем новое поле набора данных
НовоеПолеСхемы = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПолеСхемы.ПутьКДанным = "ОрганизацияРодитель"; // Уникальный путь без точек
НовоеПолеСхемы.Поле = "Организация.Родитель";      // Реальный путь в БД
НовоеПолеСхемы.Заголовок = "Группа";

// 4. Инициализируем компоновщик с новой схемой
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);

После такой манипуляции в настройках компоновщика появится поле с путем ОрганизацияРодитель и заголовком "Группа".

Способ 4: Использование Пользовательских полей

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

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

  1. Добавляем объект в коллекцию ПользовательскиеПоля настроек компоновщика.
  2. Задаем заголовок и путь к данным для этого поля.
  3. Прописываем выражение для детальных записей (и, если нужно, для итогов).
  4. Добавляем созданное пользовательское поле в выбранные поля отчета.

Настройки = КомпоновщикНастроек.Настройки;

// Создаем пользовательское поле-выражение
ПользовательскоеПоле = Настройки.ПользовательскиеПоля.Элементы.Добавить(Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных"));
ПользовательскоеПоле.Заголовок = "Группа (польз.)";
ПользовательскоеПоле.ПутьКДанным = "ПользовательскоеПолеГруппа";
ПользовательскоеПоле.ВыражениеДетальныхЗаписей = "Организация.Родитель";

// Добавляем его в выбор
ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ПользовательскоеПолеГруппа");
ВыбранноеПоле.Использование = Истина;

Резюме и рекомендации

Подводя итог, выделим ключевые моменты для выбора стратегии решения задачи:

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

← На главную