Как изменить порядок и группировку полей в выбранных полях СКД

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

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

Порядок полей: Доступные vs Выбранные

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

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

Разберем причины неактивности кнопок перемещения

Часто разработчики замечают, что кнопки «вверх» и «вниз» в выбранных полях становятся серыми. Выясним основные причины этого поведения:

  1. Наследование настроек: Если отчет имеет сложную структуру (например, дерево из группировок), настройки могут наследоваться от родительского элемента. Если вы пытаетесь изменить порядок на уровне конкретной группировки, но там установлен флаг использования настроек вышестоящего уровня, редактирование будет заблокировано. Проанализируем дерево настроек: убедитесь, что вы выбрали нужный узел (отчет или конкретную группировку).
  2. Использование элемента «Автополе»: Этот элемент автоматически подтягивает поля, определенные на уровне выше. Если в списке выбранных полей присутствует только Автополе, вы не сможете менять порядок внутри него. Чтобы получить полный контроль, необходимо либо удалить Автополе и добавить нужные элементы вручную, либо добавлять свои поля выше или ниже него. Поля, расположенные выше Автополе, всегда будут выводиться первыми.
  3. Особенности платформы: В старых версиях (например, 8.3.10) иногда встречается баг интерфейса, когда фокус ввода «залипает». Попробуйте переключиться между закладками «Наборы данных» и «Настройки» или развернуть окно конфигуратора на весь экран, чтобы обновить состояние элементов управления.

Группировка полей и создание «папок»

Чтобы отчет не выглядел как бесконечная простыня колонок, их полезно объединять в логические группы. Рассмотрим, как это сделать в СКД. Для этого используется механизм Группировать поля.

При создании группы в выбранных полях вы можете выбрать один из трех типов расположения:

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

Управление иерархией через путь к данным

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

В колонке Путь для каждого поля можно указать иерархию через точку. Например, если мы укажем для поля «ИНН» путь ДанныеКлиента.Реквизиты.ИНН, а для поля «КПП» — ДанныеКлиента.Реквизиты.КПП, СКД автоматически создаст вложенные папки «Данные клиента» и «Реквизиты» в дереве доступных полей. Это значительно упрощает навигацию в сложных отчетах с сотнями реквизитов.

Программное управление выбранными полями

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


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

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

Почему изменения в конфигураторе не видны пользователю?

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

Чтобы применить новые настройки разработчика, пользователю необходимо:

  1. Открыть настройки отчета.
  2. Найти кнопку Установить стандартные настройки (в некоторых интерфейсах это кнопка «Еще» — «Установить стандартные настройки»).
  3. После этого текущие настройки пользователя будут сброшены и заменены на те, которые вы жестко задали в схеме СКД.

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

← На главную