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