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

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

В процессе работы с отчетами на базе Системы компоновки данных (СКД), например, в 1С:ERP, часто возникает потребность сделать интерфейс более удобным. Один из самых частых запросов — фильтрация списка договоров в зависимости от уже выбранного контрагента. Давайте разберемся, почему эта задача вызывает трудности и как ее правильно решить.

Анализ проблемы: почему стандартные методы не работают

Когда вы добавляете два отдельных отбора в настройках отчета — Контрагент и Договор — они для СКД являются независимыми параметрами. Механизм отборов в режиме пользователя предназначен для наложения фильтра на результат выполнения запроса (аналог оператора WHERE в языке SQL). Он не влияет на логику выбора данных в полях ввода, которые открываются при нажатии кнопки выбора.

Рассмотрим причины, почему простое добавление полей Договор.Владелец или Договор.Партнер не дает нужного эффекта:

  1. Разделение зон ответственности: Интерфейс выбора (список, который вы видите при клике на договор) формируется на уровне формы и метаданных. СКД на этапе формирования отчета лишь «отсекает» лишнее, но не управляет поведением формы выбора справочника.
  2. Ограничения пользовательского режима: В настройках СКД, доступных в режиме «Предприятие», нет инструментов для настройки Связей параметров выбора. Этот механизм жестко прописан в метаданных конфигурации или в расширениях.
  3. Функциональные опции: В современных типовых решениях (1С:ERP, 1С:Управление торговлей) работа с договорами жестко завязана на функциональные опции, что делает попытки «самостоятельного» связывания данных через точку в отборах неэффективными.

Разбираем способы решения задачи

Если вам критически важно добиться интерактивной фильтрации, рассмотрим, как подойти к этому вопросу профессионально.

Решение через расширение конфигурации

Единственный надежный способ реализовать зависимость одного поля отбора от другого — это использование Расширений конфигурации. Это позволяет сохранить типовую конфигурацию на поддержке, при этом добавив необходимые связи параметров выбора.

Пошаговый алгоритм действий:

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

Этот подход позволяет платформе 1С автоматически управлять списком выбора в поле Договор, отображая только те элементы, которые принадлежат выбранному пользователем контрагенту.

Почему не стоит пытаться решить это «формулами»

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

Итог

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

← На главную