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

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

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

Способ 1. Использование скрытого параметра (наиболее оптимальный)

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

Разберем этот метод по шагам:

  1. Перейдем на закладку Параметры в схеме компоновки данных.
  2. Добавим новый параметр, например, с именем ЭтоОсобенныйВариант. Тип значения установим — Булево.
  3. В колонке Ограничение доступности установим галочку. Это скроет параметр от пользователя в режиме «1С:Предприятие», чтобы он не мог изменить его вручную.
  4. Установим значение по умолчанию — Ложь.
  5. Теперь перейдем на закладку Настройки и выберем тот вариант отчета, для которого нужно изменить логику.
  6. В нижней части окна настроек перейдем на вкладку Параметры. Здесь мы увидим наш параметр ЭтоОсобенныйВариант. Установим для него значение Истина именно в этом варианте.
  7. Теперь в Вычисляемых полях мы можем использовать это условие. Проанализируем пример выражения:

ВЫБОР 
    КОГДА &ЭтоОсобенныйВариант 
        ТОГДА "Специфическое значение" 
    ИНАЧЕ ЗначениеИзЗапроса 
КОНЕЦ

Этот подход хорош тем, что в других вариантах отчета параметр останется равным Ложь, и логика вычислений не нарушится.

Способ 2. Пользовательские поля выражения

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

Рассмотрим, как это сделать:

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

Способ 3. Программная установка параметра в модуле отчета

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

Для этого в модуле отчета используем событие ПриКомпоновкеРезультата. Рассмотрим пример кода:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Получаем текущие настройки отчета
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Проверяем имя текущего варианта (если отчет в составе конфигурации)
    Если ЭтотОбъект.ТекущийВариант = "ВариантДляБухгалтерии" Тогда
        // Находим нужный параметр и устанавливаем значение
        Параметр = Настройки.ПараметрыДанных.Элементы.Найти("ЭтоОсобенныйВариант");
        Если Параметр <> Неопределено Тогда
            Параметр.Значение = Истина;
            Параметр.Использование = Истина;
        КонецЕсли;
    КонецЕсли;
    
    // Загружаем настройки обратно в компоновщик
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    
КонецПроцедуры

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

Способ 4. Условное оформление (визуальная замена)

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

Разберем по шагам:

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

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

Способ 5. Использование разных схем СКД

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

В настройках варианта (в конфигураторе) можно указать конкретную схему, которая будет использоваться. Это позволяет полностью изолировать логику одного варианта от другого. Выясним, почему это полезно: вы избавляетесь от громоздких конструкций ВЫБОР КОГДА... в запросах и вычисляемых полях, делая структуру отчета прозрачной и легкой в поддержке.

Резюме: Для быстрого решения задачи используйте скрытый параметр (Способ 1), а если нужно лишь изменить представление данных в печатной форме — воспользуйтесь условным оформлением (Способ 4). Программные методы (Способ 3) лучше оставить для сложных случаев, когда логика зависит от внешних факторов или прав доступа пользователя.

← На главную