При формировании различных рейтинговых списков (например, списков абитуриентов при поступлении в учебные заведения, рейтингов продаж или списков сотрудников на премирование) часто возникает задача визуального разделения строк. Нам необходимо не просто пронумеровать строки, но и провести четкую визуальную границу — так называемую «красную черту» или линию отсечения, которая наглядно покажет, кто из кандидатов укладывается в лимит (например, количество бюджетных мест), а кто остается вне его.
В этой статье мы подробно разберем, как решить эту задачу в системе компоновки данных (СКД) 1С. Мы рассмотрим процесс с самых азов: от анализа структуры отчета и его выгрузки до настройки вычисляемых полей, параметров и условного оформления. Также мы разберем продвинутые приемы, которые позволят сделать отчет динамическим, интерактивным и удобным для конечного пользователя без постоянного вмешательства программиста.
Прежде чем приступать к доработкам, нам необходимо понять, как устроен отчет. Если отчет является типовым и встроен в конфигурацию (как в случае с программой «1С:Колледж» или «1С:Университет»), мы можем изучить его структуру непосредственно в конфигураторе или сохранить его как внешний отчет для безопасного редактирования. Выясним, как это сделать правильно.
Для сохранения отчета как внешнего выполним следующие действия:
.erf.Теперь мы можем открыть этот файл через меню Файл -> Открыть в Конфигураторе и вносить любые изменения в схему компоновки данных (СКД), не опасаясь повредить основную конфигурацию и не снимая ее с поддержки.
Если отчет изначально был добавлен в базу как дополнительный (через механизм дополнительных отчетов и обработок), мы можем выгрузить его прямо в пользовательском режиме. Для этого перейдем в раздел Администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки, найдем нужный элемент в списке и нажмем кнопку Выгрузить в файл.
Главная сложность при создании линии отсечения заключается в том, что нам нужно привязать условие оформления к порядковому номеру строки в конкретной группировке. Стандартное системное поле СКД СистемныеПоля.НомерПоПорядку не всегда подходит, так как оно нумерует абсолютно все строки в результирующем документе сквозным образом, игнорируя группировки и иерархию. Нам же требуется нумерация внутри конкретной группы (например, внутри специальности или учебной группы абитуриентов).
Рассмотрим два способа решения этой задачи: классический (через Конфигуратор) и пользовательский (непосредственно в режиме «1С:Предприятие»).
Этот способ является наиболее надежным и профессиональным, так как логика нумерации закладывается в саму схему компоновки данных.
Разберем по шагам настройку схемы компоновки данных:
НумерацияВГруппе.ВычислитьВыражение("НомерПоПорядкуВГруппировке", , , )
НумерацияВГруппе в список выводимых полей, чтобы оно отображалось в отчете.Использование функции ВычислитьВыражение с параметром "НомерПоПорядкуВГруппировке" гарантирует, что при смене группировок (например, при выводе списка по разным учебным направлениям) нумерация для каждого нового направления будет начинаться заново с единицы.
Что делать, если у нас нет доступа к Конфигуратору или мы не хотим изменять структуру метаданных? Мы можем получить аналогичный результат прямо в пользовательском интерфейсе с помощью механизма пользовательских полей. Проанализируем, как это настроить:
НомерПоПорядкуВГруппировке()
НомерПоПорядкуВГруппировке()
Этот способ очень удобен для аналитиков и продвинутых пользователей, так как позволяет расширять возможности типовых отчетов «на лету» без привлечения программистов.
Теперь, когда у нас есть поле с порядковым номером строки, мы можем настроить правила условного оформления для рисования визуальной границы.
Основная цель — провести горизонтальную красную линию под строкой, номер которой соответствует предельному значению (например, под строкой номер 25, если на специальность выделено 25 мест). Выясним, как сделать это аккуратно, чтобы линия не превратилась в рамку вокруг ячеек и не «уползла» в другие части отчета.
Разберем по шагам процесс добавления элемента условного оформления:
Сплошная (для большей строгости) или Двойная (для акцентирования внимания).2 или 3. Стандартная толщина «1» может сливаться с обычной сеткой таблицы.НумерацияВГруппе или созданное пользовательское поле).Равно.25.Нажмем кнопку ОК и сформируем отчет. Теперь ровно под строкой с номером 25 появится красивая и четкая красная черта.
В реальной жизни количество мест (лимит) редко бывает одинаковым для всех направлений. Например, на одно направление принимают 15 человек, а на другое — 30. Прописывать фиксированное число «25» в условии оформления нецелесообразно, так как при изменении планов набора придется каждый раз перенастраивать отчет. Посмотрим, как сделать положение линии динамическим с помощью параметров СКД.
Разберем, как привязать условие оформления к параметру:
ЛимитПрохода. Установим для него тип данных Число.НумерацияВГруппе.Равно.&ЛимитПрохода.Теперь положение нашей красной черты будет полностью управляемым. Пользователь сможет прямо на форме отчета ввести в поле «Лимит прохода» любое число (например, 15, 20 или 50), и разделительная линия автоматически переместится под соответствующую строку.
Чтобы сделать отчет еще более информативным, мы можем дополнить красную линию цветовой индикацией строк. Реализуем концепцию светофора, разделив список абитуриентов на две явные зоны: проходящие (зеленая зона) и не проходящие (серая или светло-красная зона).
Рассмотрим, какие три правила условного оформления нам нужно настроить в системе компоновки данных:
НумерацияВГруппе меньше или равно параметру &ЛимитПрохода.Цвет фона -> установим мягкий, пастельный зеленый цвет (чтобы текст оставался легко читаемым).НумерацияВГруппе равно параметру &ЛимитПрохода.Граница снизу -> Сплошная, толщина 3, цвет красный.НумерацияВГруппе больше параметра &ЛимитПрохода.Цвет текста -> выберем темно-серый цвет, либо свойство Цвет фона -> очень бледный красный или серый тон. Это позволит визуально «приглушить» строки кандидатов, которые на текущий момент не проходят по конкурсу.В результате совместной работы этих трех правил мы получим профессиональный интерактивный отчет. Пользователю достаточно будет одного взгляда на сформированную таблицу, чтобы мгновенно оценить конкурсную ситуацию и увидеть точную границу прохода.
Представим ситуацию, когда вы потратили время, настроили великолепный отчет с пользовательскими полями, параметрами и условным оформлением в одной базе данных (например, на тестовой копии), и теперь вам нужно перенести эти настройки в рабочую базу или передать коллеге на другой компьютер. Сохранять отчет как внешний файл и обновлять его через Конфигуратор не обязательно. Разберем быстрый способ экспорта настроек через XML-файлы.
Для экспорта настроек выполним следующий алгоритм:
Для импорта настроек в другой базе выполним обратную процедуру:
Таким образом, мы можем мгновенно тиражировать любые сложные варианты оформления отчетов между пользователями, не прибегая к программированию и изменению метаданных конфигурации 1С.