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

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

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

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

---

Часть 1. Почему добавленные в конфигураторе колонки не появляются в отчете?

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

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

Разберем по шагам, как заставить новые колонки отобразиться:

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

---

Часть 2. Как ограничить расчет ресурса уровнем конкретной группировки?

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

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

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

---

Способ А. Скрытие дублирующихся значений через «Условное оформление»

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

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

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

    Альтернативный вариант условия: если под документом выводится номенклатура, можно задать условие Номенклатура Заполнено. Это будет означать: «если мы находимся в строке, где заполнена номенклатура, применить оформление».

  5. В списке «Оформляемые поля» выберите те самые новые ресурсы, которые не должны отображаться на нижних уровнях.

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

---

Способ Б. Отключение наследования полей в подчиненных группировках

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

Посмотрим на алгоритм настройки:

  1. В окне настроек структуры отчета найдите подчиненную группировку (например, Номенклатура или Детальные записи).
  2. Выделите эту группировку и в правой части окна перейдите на вкладку «Выбранные поля».
  3. Обратите внимание на поле «Авто», которое там присутствует по умолчанию. Снимите с него флажок. Это разорвет связь подчиненной группировки с настройками верхнего уровня отчета.
  4. Теперь вручную перетащите из списка доступных полей только те реквизиты и ресурсы, которые действительно должны отображаться для номенклатуры. Ваши новые два ресурса добавлять в этот список не нужно.

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

---

Способ В. Использование вычисляемого поля на уровне схемы СКД

Это наиболее изящный способ с точки зрения архитектуры метаданных. Мы решим задачу непосредственно на уровне декларативного описания ресурсов схемы без использования условного оформления.

Выполним следующие действия:

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

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

← На главную