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