При разработке бухгалтерских отчетов на системе компоновки данных (СКД) программисты часто сталкиваются со стандартным поведением платформы: при выводе настроек отчета в шапку (область отборов) счета отображаются только в виде кодов или кратких строковых представлений. Например, пользователь видит текст "Счет В группе из списка 60; 62", что не всегда удобно для конечного потребителя, которому важны полные названия счетов. Разберем подробно несколько способов решения этой задачи — от простых манипуляций в схеме компоновки до продвинутого программного управления процессом вывода.
Это самый быстрый и часто достаточный метод. В СКД для каждого поля набора данных можно определить, как именно оно будет выглядеть для пользователя, не меняя при этом тип самого поля. Рассмотрим этот процесс по шагам.
Счет (или аналогичное поле типа ПланСчетовСсылка).Проанализируем пример выражения:
Код + " — " + Наименование
Важный нюанс: использование выражения представления изменит отображение счета во всем отчете — и в шапке с отборами, и в самих группировках строк. Если ваша задача состоит в том, чтобы счета «красиво» выглядели везде, этот метод идеален. Если же в группировках нужен только код, а в шапке — наименование, стоит рассмотреть другие варианты.
Иногда отбор в отчете реализован не через стандартную панель настроек, а через Параметры. В этом случае мы можем создать вспомогательное вычисляемое поле для формирования текста заголовка. Рассмотрим ситуацию, когда у нас есть параметр СписокСчетов.
ПредставлениеОтбораСчетов.СоединитьСтроки.Пример функции для вычисляемого поля:
СоединитьСтроки(Параметры.СписокСчетов, ", ", "Код + ' ' + Наименование")
Здесь первым аргументом выступает массив или список значений, вторым — разделитель, а третьим — выражение, которое будет применено к каждому элементу списка. Этот метод позволяет получить одну длинную строку со всеми расшифровками названий счетов, которую можно вывести в отдельную область заголовка.
Если нам нужно точечно изменить только вывод в области отборов, сохранив стандартный механизм компоновки, наиболее правильным путем будет использование события ПриКомпоновкеРезультата в модуле объекта отчета. Разберем, как это работает на уровне объектов СКД.
Выясним причину, почему СКД выводит коды: она берет стандартное представление ссылки. Мы можем программно «подменить» это представление для элементов отбора перед тем, как отчет будет выведен на экран. Проанализируем пример кода:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Получаем текущие настройки компоновщика
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Перебираем элементы отбора
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
// Проверяем, что это отбор по нужному нам полю "Счет"
Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных")
И Строка(ЭлементОтбора.ЛевоеЗначение) = "Счет" Тогда
// Если выбрано несколько значений (В списке, В группе из списка)
Если ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СписокЗначений") Тогда
Для Каждого ЭлементСписка Из ЭлементОтбора.ПравоеЗначение Цикл
Если ЗначениеЗаполнено(ЭлементСписка.Значение) Тогда
// Формируем свое представление
СчетСсылка = ЭлементСписка.Значение;
ЭлементСписка.Представление = Строка(СчетСсылка.Код) + " - " + СчетСсылка.Наименование;
КонецЕсли;
КонецЦикла;
// Чтобы СКД использовала наши представления, нужно установить свойство
ЭлементОтбора.ИспользованиеПредставления = РежимИспользованияПредставленияКомпоновкиДанных.Полное;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Далее стандартный вывод с нашими модифицированными настройками
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Важно: этот метод требует отключения стандартной обработки, но он дает полный контроль над тем, что увидит пользователь в шапке отчета.
Еще один профессиональный подход — создание собственного макета для оформления области параметров или отборов. В СКД на закладке Макеты можно добавить Макет области заголовка параметров.
Рассмотрим алгоритм действий:
[ИмяПоля]: [Значение].Значение в свойствах ячейки можно указать формат или связать его с выражением, которое будет обращаться к общему модулю для получения расширенного наименования.Это позволяет полностью кастомизировать визуальную часть отчета, превратив скучный список кодов в читаемую и презентабельную структуру. Если вы используете библиотеку стандартных подсистем (БСП), обратите внимание на процедуру ПриОпределенииНастроек в модуле менеджера отчета. Она позволяет управлять визуализацией фильтров без вмешательства в низкоуровневый код компоновки.
Подведем итог нашему анализу:
СоединитьСтроки в вычисляемых полях.Представления элементов списка в ПриКомпоновкеРезультата.Выбор метода зависит от сложности вашего отчета и требований к производительности. Программные методы (Способ 3) чуть более трудоемки в поддержке, но обеспечивают максимальную точность отображения данных для бизнес-пользователей.