Как исключить контрагентов, помеченных на удаление, из списка выбора в 1С?

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

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

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

Одним из самых эффективных способов является принудительная установка отбора при открытии формы выбора. Для этого нам необходимо вмешаться в процесс открытия формы в модуле формы того документа, где происходит выбор.

Рассмотрим пошагово, как это реализовать. В событии НачалоВыбора поля ввода, где пользователь выбирает контрагента, мы отключаем стандартную обработку и открываем форму с заданными параметрами.

Сначала отключим стандартную обработку в событии НачалоВыбора:


&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ПараметрыФормы = Новый Структура;
    Отбор = Новый Структура(\"ПометкаУдаления\", Ложь);
    ПараметрыФормы.Вставить(\"Отбор\", Отбор);
    ОткрытьФорму(\"Справочник.Контрагенты.ФормаВыбора\", ПараметрыФормы, Элемент);
КонецПроцедуры

Затем, чтобы этот отбор применился к динамическому списку внутри формы выбора, необходимо внести изменения в ПриСозданииНаСервере самой формы выбора:


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

Способ 2: Настройка параметров выбора в свойствах элемента

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

  1. Откройте форму документа в Конфигураторе.
  2. Выберите элемент управления (поле ввода), связанный с контрагентом.
  3. В палитре свойств найдите коллекцию Параметры выбора.
  4. Добавьте новый параметр:
    • Имя: Отбор.ПометкаУдаления
    • Значение: Ложь

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

Способ 3: Использование расширений для типовых конфигураций

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

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

Важные рекомендации:

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

← На главную