В процессе работы с отчетами на базе Системы компоновки данных (СКД), например, в 1С:ERP, часто возникает потребность сделать интерфейс более удобным. Один из самых частых запросов — фильтрация списка договоров в зависимости от уже выбранного контрагента. Давайте разберемся, почему эта задача вызывает трудности и как ее правильно решить.
Когда вы добавляете два отдельных отбора в настройках отчета — Контрагент и Договор — они для СКД являются независимыми параметрами. Механизм отборов в режиме пользователя предназначен для наложения фильтра на результат выполнения запроса (аналог оператора WHERE в языке SQL). Он не влияет на логику выбора данных в полях ввода, которые открываются при нажатии кнопки выбора.
Рассмотрим причины, почему простое добавление полей Договор.Владелец или Договор.Партнер не дает нужного эффекта:
СКД на этапе формирования отчета лишь «отсекает» лишнее, но не управляет поведением формы выбора справочника.СКД, доступных в режиме «Предприятие», нет инструментов для настройки Связей параметров выбора. Этот механизм жестко прописан в метаданных конфигурации или в расширениях.1С:ERP, 1С:Управление торговлей) работа с договорами жестко завязана на функциональные опции, что делает попытки «самостоятельного» связывания данных через точку в отборах неэффективными.Если вам критически важно добиться интерактивной фильтрации, рассмотрим, как подойти к этому вопросу профессионально.
Единственный надежный способ реализовать зависимость одного поля отбора от другого — это использование Расширений конфигурации. Это позволяет сохранить типовую конфигурацию на поддержке, при этом добавив необходимые связи параметров выбора.
Пошаговый алгоритм действий:
Расширение конфигурации.ВаловаяПрибыльПредприятия).Схеме компоновки данных данного отчета.Договор.Связи параметров выбора.Отбор.Владелец укажите значение из параметра Контрагент.Этот подход позволяет платформе 1С автоматически управлять списком выбора в поле Договор, отображая только те элементы, которые принадлежат выбранному пользователем контрагенту.
Часто возникает соблазн использовать выражения СКД для ограничения списка. Однако, важно помнить: любая формула в СКД — это выражение для вычисления значения или условия отбора, а не инструкция для изменения свойств элементов управления на форме. Попытка прописать условие типа Договор.Владелец = &Контрагент лишь добавит еще один фильтр к итоговой таблице данных, но не ограничит выбор в «лупе» выбора договора. Вы по-прежнему будете видеть весь справочник Договоры, просто в отчет попадут только записи, соответствующие условию.
Для реализации качественного и удобного пользовательского интерфейса, где выбор договора ограничивается контрагентом, необходимо:
Расширение конфигурации для настройки Связей параметров выбора, что является стандартом разработки в среде 1С:Предприятие 8.3.СКД — это инструмент для обработки данных, а не средство для управления поведением визуальных элементов формы.