Как правильно настроить отбор по виду занятости в справочнике Сотрудники и почему неактивна галочка отбора

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

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

Разберем подробнее причины такого поведения платформы 1С и рассмотрим правильные механизмы управления отборами из вызывающих документов.

Причины неактивности (блокировки) флажка отбора

Выясним, почему при открытии формы галочка установки отбора становится серой и недоступной для снятия пользователем. Это происходит по следующим причинам:

  1. Использование фиксированных настроек: Если отбор задается через свойства элемента формы или программно помещается в область ФиксированныеНастройки.Отбор динамического списка, платформа 1С считает такое условие обязательным. Чтобы пользователь случайно не нарушил логику заполнения документа, возможность отключения такого отбора в интерфейсе блокируется.
  2. Режим отображения элемента: Элементу отбора компоновки данных программно присвоен режим отображения РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный либо у него принудительно отключена доступность.

Почему нельзя жестко прописывать отбор в основной форме справочника

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

Во-первых, изменение основной формы влияет на всю систему: отбор начинает работать даже там, где требуется выбрать внешнего совместителя. Во-вторых, попытка определить, из какого документа открыта форма (через ВладелецФормы), создает жесткую связность кода. При добавлении новых документов вам придется постоянно дорабатывать форму справочника. Правильное правило разработки в 1С гласит: логика отбора должна определяться вызывающей стороной (документом), а не получателем (справочником).

Способ 1. Настройка свойства «Параметры выбора» в форме документа

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

Разберем по шагам:

  1. Откроем форму документа в конфигураторе и выделим поле ввода элемента справочника Сотрудники.
  2. В палитре свойств найдем категорию Параметры выбора (ПараметрыВыбора).
  3. Добавим новый параметр: в качестве реквизита отбора укажем Отбор.ВидЗанятости, а в качестве значения — Перечисление.ВидыЗанятости.ОсновноеМестоРаботы.

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

Способ 2. Программная передача отбора при открытии формы выбора

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

В этом случае сформируем структуру параметров и передадим её в процедуру ОткрытьФорму. Посмотрим на пример кода:


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

Этот метод гарантирует точечное применение условий выбора без изменения общих форм справочника.

Способ 3. Установка отбора по умолчанию с возможностью отключения пользователем

Бывают задачи, когда при открытии формы отбор по основному месту работы должен быть установлен по умолчанию, но у пользователя должна оставаться возможность снять флажок и выбрать совместителя.

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

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

Благодаря добавлению отбора в ПользовательскиеНастройки и указанию режима БыстрыйДоступ, флажок на форме остается активным, и пользователь может легко сбросить условие при необходимости.

← На главную