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