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

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

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

Способы реализации «пустого» вывода в полях СКД

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

1. Использование Условного оформления

Это наиболее правильный и рекомендуемый метод, так как он не затрагивает саму выборку данных и не мешает расчетам итогов. Разберем по шагам, как это настроить:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. Выберем вкладку Условное оформление.
  3. Добавим новый элемент оформления.
  4. В поле Оформление найдем параметр Текст. Установим галочку и оставим значение пустым (или введем один пробел).
  5. В поле Условие пропишем логику, по которой поле должно «очищаться». Например, Количество Равно 0 или ЭтоГруппа Равно Истина.
  6. В поле Оформляемые поля выберем конкретное поле, которое должно стать пустым.

Этот метод хорош тем, что значение в поле физически остается (его можно использовать в других формулах), но визуально пользователь видит пустоту.

2. Выражение представления в наборе данных

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

3. Обработка значений NULL и пустых ссылок

Иногда «пустота» возникает из-за левых соединений в запросе. Чтобы вместо системного текста <Объект не найден> или простого отсутствия значения вывести что-то свое (или ничего), воспользуемся параметром Текст для значения NULL. Это настраивается на вкладке Наборы данных для конкретного поля или в Условном оформлении. Пропишем там нужный нам текст или оставим поле незаполненным для идеальной чистоты отчета.

4. Прямая подмена в запросе

Как упоминалось в обсуждении на форуме, можно добавить пустую строку прямо в тексте запроса. Разберем пример кода:


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    "" КАК ПустоеПоле
ИЗ
    Справочник.Номенклатура КАК Номенклатура

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

Настройка нумерации только для группировок

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

Метод через настройки выбранных полей группировки

Рассмотрим ситуацию: у нас есть группировка Контрагент и детальные записи. Если мы добавим НомерПоПорядку в общие Выбранные поля отчета, нумерация будет сквозной. Чтобы этого избежать, удалим номер из общих настроек. Затем выберем в дереве настроек конкретную группировку Контрагент и добавим НомерПоПорядку именно в ее Выбранные поля. Теперь номер будет выводиться только в строке группировки, а детальные записи под ней останутся без номера.

Использование вычисляемых полей и функции Уровень()

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


Выбор 
    Когда Уровень() = 1 Тогда НомерПоПорядку() 
    Иначе "" 
Конец

Здесь функция Уровень() определяет вложенность текущей строки. Это позволяет гибко управлять выводом номера на любом уровне иерархии.

Решение проблемы вывода нескольких полей в группировке

Часто программисты сталкиваются с ошибкой при попытке вывести в одну строку группировки несколько полей, например, Наименование и НаименованиеПолное. Проанализируем причину: СКД требует, чтобы в строке группировки выводились либо те поля, по которым идет группировка, либо агрегатные функции (ресурсы). Если вы добавили поле в Выбранные поля, но не добавили его в Поля группировки, система выдаст ошибку.

Как исправить ситуацию:

  1. Добавление в группировку: Если поля однозначно связаны (например, ссылка и её реквизиты), добавьте их все в список Поля группировки. Это не увеличит количество строк, если данные идентичны для каждой записи.
  2. Использование ресурсов: Сделаем поле НаименованиеПолное ресурсом. В поле Выражение на вкладке Ресурсы напишем Максимум(НаименованиеПолное). Теперь это поле можно выводить в любой группировке без ошибок, так как для СКД оно стало агрегированным значением.

Работа с пользовательскими макетами для сложного оформления

Когда стандартных настроек условного оформления недостаточно (например, нужно объединить ячейки или создать сложную «шапку» с нестандартным расположением полей), на помощь приходят Макеты. Рассмотрим алгоритм работы с ними:

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

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

← На главную