Как настроить фильтрацию договоров по статусу в 1С:ERP и добавить новый статус для выбора в документах

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

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

В этой статье мы разберем, где «прячутся» стандартные фильтры ERP, проанализируем риски изменения системных перечислений и рассмотрим правильные способы реализации данной задачи.

Выясним причину: где скрыт отбор по статусу?

Если вы просмотрели процедуру ПриСозданииНаСервере и не нашли там строк кода, устанавливающих отбор, а запрос динамического списка чист, значит, фильтрация настроена на уровне метаданных. В 1С:ERP для этого активно используются свойства реквизитов объектов.

Давайте проанализируем ситуацию по шагам:

  1. Откроем в конфигураторе любой документ, где выбирается договор (например, ЗаказКлиента или ЗаказПоставщика).
  2. Найдем реквизит Договор.
  3. Изучим свойство Параметры выбора (ChoiceParameters).

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

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

Проблема добавления нового статуса в перечисление

Казалось бы, решение простое: добавить новое значение в перечисление СтатусыДоговоровКонтрагентов и изменить настройки реквизитов в документах. Однако это путь, который может привести к серьезным проблемам в будущем. Рассмотрим подробнее, почему так происходит.

Статус Действует — это не просто строчка для фильтра. Он глубоко интегрирован в бизнес-логику ERP:

Рекомендация: Вместо изменения системного перечисления лучше создать дополнительный реквизит (субстатус) или использовать «Дополнительные сведения». Но если бизнес-задача требует именно расширения списка статусов для выбора, давайте разберем, как сделать это максимально безопасно.

Решение 1: Программное изменение отбора через расширение

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

Нам потребуется внести изменения в форму документа, где находится поле выбора договора. Используем обработчик ПриСозданииНаСервере:


&НаСервере
Процедура apt_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Получаем элемент формы, отвечающий за выбор договора
    ЭлементДоговор = ЭтаФорма.Элементы.Договор;
    
    // Создаем массив статусов, которые мы разрешаем выбирать
    МассивСтатусов = Новый Массив;
    МассивСтатусов.Добавить(Перечисления.СтатусыДоговоровКонтрагентов.Действует);
    МассивСтатусов.Добавить(Перечисления.СтатусыДоговоровКонтрагентов.НашНовыйСтатус);
    
    // Формируем новый параметр выбора
    НовыйПараметр = Новый ПараметрВыбора("Отбор.Статус", МассивСтатусов);
    
    // Очищаем старые параметры и устанавливаем свои
    НовыеПараметры = Новый Массив;
    НовыеПараметры.Добавить(НовыйПараметр);
    
    ЭлементДоговор.ПараметрыВыбора = Новый ФиксированныйМассив(НовыеПараметры);
    
КонецПроцедуры

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

Решение 2: Использование общих модулей параметров выбора

В 1С:ERP часто используется централизованный механизм подготовки параметров выбора. Посмотрим на работу общего модуля ДоговорыКонтрагентовКлиентСервер. В нем могут находиться функции, формирующие структуру отборов для динамических списков.

Если вы хотите, чтобы ваш статус учитывался глобально (или в группе документов), проанализируйте вызовы функций типа ПараметрыОтбораДоговоров. Через механизм &Вместо в расширении вы можете модифицировать возвращаемую структуру отбора, добавляя туда свой статус.

Важный нюанс: Обработка получения данных выбора

Помимо самой формы выбора, существует механизм быстрого подбора (ввод по строке). За это отвечает обработчик ОбработкаПолученияДанныхВыбора в менеджере справочника ДоговорыКонтрагентов. Чтобы система предлагала договоры с новым статусом при наборе текста в поле, вам также может потребоваться расширить этот метод.

Рассмотрим пример логики в модуле менеджера:


&Вместо("ОбработкаПолученияДанныхВыбора")
Процедура apt_ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Если в параметрах пришел отбор по статусу "Действует", 
    // мы можем подменить его на массив статусов
    Если Параметры.Свойство("Отбор") И Параметры.Отбор.Свойство("Статус") Тогда
        Если Параметры.Отбор.Статус = Перечисления.СтатусыДоговоровКонтрагентов.Действует Тогда
            
            МассивСтатусов = Новый Массив;
            МассивСтатусов.Добавить(Перечисления.СтатусыДоговоровКонтрагентов.Действует);
            МассивСтатусов.Добавить(Перечисления.СтатусыДоговоровКонтрагентов.НашНовыйСтатус);
            
            Параметры.Отбор.Статус = МассивСтатусов;
            
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Подведем итоги

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

  1. Тщательно взвесить необходимость изменения типового перечисления.
  2. Если изменение неизбежно — использовать программную установку ПараметрыВыбора в формах нужных документов через расширение.
  3. Не забыть про ОбработкаПолученияДанныхВыбора для корректной работы автоподбора.
  4. Обязательно провести глобальный поиск по конфигурации на предмет использования статуса Действует в запросах проведения, чтобы избежать блокировки работы пользователей с новыми типами договоров.

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

← На главную