Как в отчете СКД скрыть показатели инвалюты при совпадении с регламентированной валютой?

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

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

Способ 1: Реализация логики на уровне запроса

Самый прямой способ — обработать данные еще на этапе получения их из базы данных. Мы можем использовать конструкцию ВЫБОР КОГДА, чтобы обнулить показатель иностранной валюты, если она совпадает с валютой учета. Проанализируем пример реализации в тексте запроса схемы компоновки данных:


ВЫБОР
    КОГДА Взаиморасчеты.Валюта = &РеглВалюта
        ТОГДА 0
    ИНАЧЕ Взаиморасчеты.СуммаВВалюте
КОНЕЦ КАК СуммаИнВалюта

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

Способ 2: Корректная настройка ресурсов для итогов

Одной из ключевых подзадач является вывод общих итогов только по регламентированной валюте. Если просто просуммировать колонку инвалюты, в итог попадут данные по разным валютам (доллары, евро и т.д.), что сделает итоговую сумму бессмысленной. Чтобы в общих итогах данные учитывались только тогда, когда это действительно иностранная валюта, разберем настройку выражения ресурса на вкладке Ресурсы:

Вместо стандартного СУММА(СуммаВВалюте) пропишем более сложную логику:


Сумма(ВЫБОР 
    КОГДА Валюта <> &ПараметрРеглВалюта 
    ТОГДА СуммаВВалюте 
    ИНАЧЕ 0 
КОНЕЦ)

Такой подход гарантирует, что в итогах по группировкам и в «Общем итоге» будут суммироваться только те значения, которые относятся к отличным от регламентированной валютам. Это позволяет избежать «смешивания» разных валют в одной итоговой ячейке.

Способ 3: Визуальное скрытие через условное оформление

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

  1. Перейдем на вкладку Условное оформление.
  2. Добавим новый элемент оформления.
  3. В поле Оформление выберем параметр Текст и оставим его пустым (или укажем пробел). Также можно использовать параметр Формат со значением ЧЗ=0, чтобы скрыть нулевые показатели.
  4. В поле Условие установим: Валюта Равно &ПараметрРеглВалюта.
  5. В поле Оформляемые поля укажем наше поле с иностранной валютой.

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

Способ 4: Вычисляемые поля и функциональные опции

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


// В поле "Выражение" вычисляемого поля
ВЫБОР 
    КОГДА Валюта = МойОбщийМодуль.ПолучитьВалютуРеглУчета() 
    ТОГДА NULL 
    ИНАЧЕ СуммаВВалюте 
КОНЕЦ

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

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

← На главную