Как в отчете СКД вывести полные наименования счетов вместо кодов в области отборов

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

При разработке бухгалтерских отчетов на системе компоновки данных (СКД) программисты часто сталкиваются со стандартным поведением платформы: при выводе настроек отчета в шапку (область отборов) счета отображаются только в виде кодов или кратких строковых представлений. Например, пользователь видит текст "Счет В группе из списка 60; 62", что не всегда удобно для конечного потребителя, которому важны полные названия счетов. Разберем подробно несколько способов решения этой задачи — от простых манипуляций в схеме компоновки до продвинутого программного управления процессом вывода.

Способ 1. Использование свойства «Выражение представления»

Это самый быстрый и часто достаточный метод. В СКД для каждого поля набора данных можно определить, как именно оно будет выглядеть для пользователя, не меняя при этом тип самого поля. Рассмотрим этот процесс по шагам.

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

Проанализируем пример выражения:

Код + " — " + Наименование

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

Способ 2. Использование функции «СоединитьСтроки» в вычисляемых полях

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

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

Пример функции для вычисляемого поля:

СоединитьСтроки(Параметры.СписокСчетов, ", ", "Код + ' ' + Наименование")

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

Способ 3. Программная модификация представления в модуле объекта

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

Выясним причину, почему СКД выводит коды: она берет стандартное представление ссылки. Мы можем программно «подменить» это представление для элементов отбора перед тем, как отчет будет выведен на экран. Проанализируем пример кода:


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

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

Способ 4. Настройка макета оформления для области параметров

Еще один профессиональный подход — создание собственного макета для оформления области параметров или отборов. В СКД на закладке Макеты можно добавить Макет области заголовка параметров.

Рассмотрим алгоритм действий:

  1. Создаем новую область в макете.
  2. В ячейках указываем параметры, например [ИмяПоля]: [Значение].
  3. Для параметра Значение в свойствах ячейки можно указать формат или связать его с выражением, которое будет обращаться к общему модулю для получения расширенного наименования.

Это позволяет полностью кастомизировать визуальную часть отчета, превратив скучный список кодов в читаемую и презентабельную структуру. Если вы используете библиотеку стандартных подсистем (БСП), обратите внимание на процедуру ПриОпределенииНастроек в модуле менеджера отчета. Она позволяет управлять визуализацией фильтров без вмешательства в низкоуровневый код компоновки.

Итоги и рекомендации

Подведем итог нашему анализу:

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

← На главную