Как убрать лишнюю запятую в группировках СКД при пустых значениях

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

При разработке отчетов на Системе компоновки данных (СКД) программисты часто сталкиваются с особенностью платформы 1С: когда в одну группировку включено несколько полей, система автоматически объединяет их представления через запятую. Если одно из полей (например, «Контрагент») не заполнено, отчет выводит неэстетичную строку вида , Перемещение №.... Это происходит потому, что СКД зарезервировала место под первое поле, не нашла его и сразу поставила разделитель перед вторым.

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

Причина возникновения лишней запятой

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

Способ 1. Изменение расположения полей группировки

Это самый простой и быстрый метод, который не требует написания кода. Разберем его по шагам:

  1. Откроем схему компоновки данных и перейдем на закладку «Настройки».
  2. Выберем конкретную группировку, в которой наблюдается проблема (например, группировка по «Контрагенту» и «Реализации»).
  3. Перейдем на вкладку «Другие настройки» (внизу справа).
  4. Найдем параметр «Расположение полей группировок».
  5. Изменим значение с «Вместе» на «Отдельно» или «В отдельных колонках».

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

Способ 2. Использование функции СТРОКАСОЕДИНИТЬ (для платформы 8.3.10+)

Если нам принципиально важно сохранить вывод данных в одной ячейке, мы можем воспользоваться мощным инструментом — функцией СТРОКАСОЕДИНИТЬ. Она работает интеллектуально: игнорирует пустые значения и не ставит лишние разделители.

Рассмотрим пример реализации через Вычисляемые поля:

  1. Перейдем на закладку «Вычисляемые поля».
  2. Добавим новое поле, например, ПредставлениеГруппировки.
  3. В колонке «Выражение» пропишем логику соединения:

СоединитьСтроки(Массив(Представление(Контрагент), Представление(Реализация)), ", ", "")

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

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

Если мы хотим решить проблему на уровне метаданных поля, можно настроить Выражение представления непосредственно в наборе данных (закладка «Наборы данных»).

Для поля Контрагент можно указать следующее выражение:


ВЫБОР 
    КОГДА Контрагент ЕСТЬ NULL ИЛИ Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) 
        ТОГДА "" 
    ИНАЧЕ Представление(Контрагент) 
КОНЕЦ

Однако стоит учитывать, что это не всегда убирает запятую, если СКД настроена на автоматическое объединение. Этот метод лучше комбинировать с созданием единого вычисляемого поля, которое объединяет логику обоих реквизитов.

Способ 4. Создание пользовательского макета группировки

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

Разберем по шагам процесс создания макета:

  1. Перейдем на закладку «Макеты».
  2. Нажмем «Добавить макет группировки» и выберем имя нашей группировки.
  3. В появившемся поле укажем область (ячейки), которые будут отвечать за вывод.
  4. В ячейке макета установим параметр (например, ТекстГруппировки).
  5. Для этого параметра пропишем выражение:

Выбор 
    Когда Контрагент = Неопределено Или Контрагент.Наименование Есть Null 
        Тогда Представление(Реализация) 
    Иначе Представление(Контрагент) + ", " + Представление(Реализация) 
Конец

Используя этот метод, мы полностью берем на себя ответственность за формирование строки и гарантируем отсутствие лишних символов.

Способ 5. Хитрость с условным форматированием

Существует еще один способ, позволяющий подменить текст в ячейке через Условное форматирование. Рассмотрим, как это настроить:

  1. В настройках отчета перейдем на закладку «Условное форматирование».
  2. Добавим новое правило. В оформлении выберем свойство «Текст».
  3. В значении текста укажем шаблон, используя только поле [Реализация].
  4. В условии укажем: Контрагент Не заполнен.
  5. В области использования выберем только поле группировки.

Таким образом, когда система встретит пустую ссылку контрагента, она не будет выполнять стандартный вывод «Контрагент, Реализация», а просто подставит текст из поля «Реализация» по вашему шаблону.

Резюме

Мы рассмотрели различные подходы к устранению лишней запятой в СКД. Выбор метода зависит от сложности вашей задачи:

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

← На главную