При работе с Системой Компоновки Данных (СКД) в 1С, разработчики и пользователи часто сталкиваются с необходимостью настройки внешнего вида отчетов. Одними из самых распространенных задач являются переименование полей для более понятного отображения и скрытие или удаление ненужных колонок. В этом руководстве мы подробно рассмотрим различные подходы к решению этих вопросов, а также проанализируем распространенную ошибку, связанную с передачей параметров настроек.
Переименование полей позволяет сделать отчеты более информативными и удобными для восприятия пользователями. Мы рассмотрим несколько способов, как это можно осуществить. Для улучшения визуального оформления отчетов можно использовать готовые приемы для создания красивых заголовков колонок.
Через псевдонимы в запросе на вкладке "Набор данных"
Наиболее гибкий и рекомендуемый способ — задать псевдоним полю прямо в тексте запроса, который формируется на вкладке "Набор данных" конструктора СКД. Это делается с помощью конструкции ПОЛЕ КАК ПсевдонимПоля. Псевдонимы, заданные в запросе, становятся базовыми наименованиями полей, которые затем можно использовать во всех последующих настройках СКД. Это особенно удобно, когда требуется изменить имя поля на самом низком уровне данных.
ВЫБРАТЬ
Таблица.Поле1 КАК НовоеНаименованиеПоля,
Таблица.Поле2 КАК ДругоеИмяПоля,
Таблица.Сумма КАК СуммаПродаж
ИЗ
Справочник.Товары КАК Таблица
В этом примере Поле1 будет отображаться как "НовоеНаименованиеПоля", Поле2 как "ДругоеИмяПоля", а Сумма как "СуммаПродаж".
Через свойство "Автозаголовок" или "Заголовок" в наборе данных
В конструкторе СКД, на вкладке "Наборы данных", после формирования запроса, система автоматически определяет поля. Для каждого поля можно вручную изменить его "Автозаголовок" или "Заголовок". Если "Автозаголовок" включен, система попытается сформировать заголовок на основе имени поля из запроса. Если нам нужен специфический заголовок, мы можем отключить "Автозаголовок" и вручную указать "Заголовок" поля. Этот метод позволяет быстро корректировать названия полей без изменения текста запроса.
Через установку заголовка в настройках отчета (Выбранные поля)
Если нам нужно изменить заголовок поля для конкретного варианта отчета или предоставить пользователю такую возможность, это можно сделать в пользовательских настройках отчета. Откройте настройки отчета, перейдите в раздел "Выбранные поля", найдите нужное поле, кликните по нему правой кнопкой мыши и выберите пункт "Установить заголовок". Это изменение будет применено только к текущему варианту отчета и может быть сохранено пользователем.
Через пользовательские поля
Когда необходимо создать новое поле, которое является результатом вычисления и дать ему уникальное наименование, мы можем добавить "Пользовательское поле" на вкладке "Поля" в конструкторе СКД. В свойствах этого поля мы задаем его "Выражение" (формулу расчета) и "Заголовок" (наименование). Этот способ идеален для создания агрегированных или вычисляемых показателей с собственными, понятными именами.
Через выражения представления
Для полей, которые не являются числовыми и не переносятся в ресурсы, иногда нам нужно изменить не само наименование поля, а его отображение в отчете. Для этого можно использовать выражения представления на вкладке "Поля" в конструкторе СКД. Это позволяет, например, отображать коды справочников не как код, а как полное наименование, без изменения названия самой колонки. Например, вместо Номенклатура.Код мы можем вывести Представление(Номенклатура).
Управление выводом колонок — важная часть создания удобного и не перегруженного отчета. Мы рассмотрим, как можно удалять, скрывать или изменять способ отображения колонок в СКД.
Удаление из выбранных полей
Самый простой и очевидный способ убрать ненужную колонку — это удалить соответствующее поле из списка "Выбранные поля" на вкладке "Настройки" конструктора СКД. Если поле не выбрано для вывода, оно не будет отображаться в отчете.
Использование расширенных настроек отчета
В режиме пользователя, через кнопку "Настройки" (часто расположена на командной панели отчета), мы можем получить доступ к расширенным настройкам. Здесь в разделе "Выбранные поля" или "Порядок" мы можем отключить показ конкретного столбца, сняв с него флажок. Эти изменения можно сохранить как новый вариант отчета для дальнейшего использования.
Перенос числовых полей в ресурсы
Один из ключевых механизмов СКД для работы с числовыми данными. Если числовое поле предназначено для агрегации (сумма, количество, среднее и т.д.) и не должно выводиться как отдельная колонка для каждой строки детализации, его необходимо перенести в "Ресурсы" на соответствующей вкладке конструктора СКД. После этого поле будет агрегироваться согласно выбранным группировкам и выводиться в итоговых строках, а не как повторяющаяся колонка в каждой строке. Это значительно улучшает читаемость отчетов, особенно при наличии группировок.
Например, если у нас есть поле Сумма, и мы хотим видеть ее в итогах по группам, мы переносим Сумма в ресурсы и указываем для неё агрегатную функцию (например, Сумма(Сумма)).
Использование роли "Авто" для полей
Если поле присутствует в списке доступных полей, но не используется в группировках, сортировках или условиях, мы можем установить для него роль "Авто" на вкладке "Поля" конструктора СКД. СКД попытается автоматически определить, нужно ли выводить это поле в отчет. Часто это приводит к тому, что поле, не имеющее явного предназначения, не выводится, что помогает избежать лишних колонок.
Управление через макеты СКД
Для более тонкой настройки вывода колонок, включая условное скрытие или изменение внешнего вида (например, цвета, шрифта), мы можем использовать макеты СКД. В макетах мы можем определить собственные области для вывода полей, игнорируя стандартный вывод СКД или управляя им программно. Этот метод требует глубоких знаний СКД и часто используется для реализации сложных, нестандартных форм отчетов. Мы можем создавать макеты для заголовков, группировок, детализаций и общих итогов, определяя, какие поля и как будут отображаться в каждой области.
Программное управление выбранными полями
В процедуре ПриКомпоновкеРезультата или ОбработкаРасшифровки объекта отчета мы можем программно добавлять или удалять поля из коллекции КомпоновщикНастроек.Настройки.Выбор. Это позволяет динамически управлять составом выводимых колонок в зависимости от различных условий, например, прав пользователя, выбранных параметров или других данных. Этот метод предоставляет максимальную гибкость, но требует навыков программирования.
Рассмотрим пример программного удаления поля из выбранных полей:
// В процедуре ПриКомпоновкеРезультата или аналогичной
Процедура ПриКомпоновкеРезультата(ДокументРезультат, СтандартныеНастройки, ДанныеРасшифровки, Отказ)
// Получаем текущие настройки отчета
НастройкиОтчета = КомпоновщикНастроек.Настройки;
// Ищем и удаляем поле с именем "НенужноеПоле" из списка выбранных полей
Для Каждого ЭлементВыбора Из НастройкиОтчета.Выбор.Элементы Цикл
Если ЭлементВыбора.Вид = Тип("ПолеКомпоновкиДанных") Тогда
Если ЭлементВыбора.Поле.Имя = "НенужноеПоле" Тогда
НастройкиОтчета.Выбор.Элементы.Удалить(ЭлементВыбора);
Прервать; // Выходим после удаления
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Также можно добавить поля
// Если НастройкиОтчета.Выбор.Элементы.Найти("НовоеПоле") = Неопределено Тогда
// НовоеПоле = НастройкиОтчета.Выбор.Элементы.Добавить(Тип("ПолеКомпоновкиДанных"));
// НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("НовоеПоле");
// КонецЕсли;
// Другие программные изменения настроек
// ...
КонецПроцедуры
Этот код демонстрирует, как мы можем итеративно пройти по выбранным полям и удалить то, которое нам больше не нужно. Для автоматизации этих действий можно использовать инструмент для программного управления видимостью и удаления полей в СКД.
Эта ошибка часто возникает, когда отчет открывается не через стандартную форму отчета (например, из списка отчетов), а программно, как часть другого объекта или обработчика. Проблема заключается в том, что в момент вызова метода, который пытается получить доступ к настройкам (например, открытие формы настроек или программное применение), не передается объект, хранящий эти настройки.
Проверка передачи объекта настроек
Убедитесь, что в момент вызова метода, который пытается получить доступ к настройкам (например, ОткрытьНастройки() или аналогичному), в параметрах передается ссылка на объект ОтчетОбъект.КомпоновщикНастроек или его сериализованные настройки. Если отчет вызывается программно, часто необходимо передать компоновщик настроек в качестве параметра, чтобы форма настроек могла с ним корректно работать.
Актуализация настроек после изменения запроса
Если мы программно переопределяем запрос СКД (например, в процедуре ПриКомпоновкеРезультата), очень важно, чтобы после переопределения запроса настройки компоновщика были актуализированы или заново инициализированы, если это требуется. Изменение схемы компоновки данных может привести к тому, что старые настройки станут недействительными, и попытка их использования вызовет ошибку.
Мы должны убедиться, что КомпоновщикНастроек "знает" о новой схеме и готов работать с ней. Часто это достигается вызовом метода Инициализировать() компоновщика.
Корректная работа в процедуре ПриКомпоновкеРезультата
Процедура ПриКомпоновкеРезультата — это ключевое место для программной настройки отчета. В этой процедуре мы работаем с параметрами КомпоновщикМакета и СтандартныеНастройки. Если мы хотим изменить настройки отчета или параметры данных, мы должны обращаться к свойству КомпоновщикНастроек.Настройки. Важно корректно инициализировать компоновщик настроек, особенно если схема компоновки данных была изменена или загружена программно.
Пример корректной инициализации и работы с параметрами в ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, СтандартныеНастройки, ДанныеРасшифровки, Отказ)
// Перед началом работы с настройками, убедимся, что компоновщик инициализирован актуальной схемой.
// Это особенно важно, если СхемаКомпоновкиДанных была изменена программно
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
// Теперь мы можем безопасно получать доступ к КомпоновщикНастроек.Настройки
// и изменять их. Например, установить значение параметра.
ПараметрПериодичность = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра("Периодичность");
Если ПараметрПериодичность <> Неопределено Тогда
ПараметрПериодичность.Значение = "Месяц"; // Пример установки значения параметра
ПараметрПериодичность.Использование = Истина; // Обязательно устанавливаем Использование в Истина
КонецЕсли;
// Если требуется дополнительно изменить состав выбранных полей или группировок
// ...
// КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(...);
// КомпоновщикНастроек.Настройки.Группировки.Элементы.Добавить(...);
КонецПроцедуры
Этот подход гарантирует, что КомпоновщикНастроек всегда будет работать с актуальной схемой и настройками, предотвращая ошибку "Не передан служебный параметр "Настройки отчета"".
Применяя эти подходы, мы сможем эффективно управлять внешним видом и функциональностью отчетов на СКД, делая их максимально удобными и информативными как для разработчиков, так и для конечных пользователей.