Как реализовать подбор сотрудников в новом документе ЗУП 3.1

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

При разработке собственных документов в конфигурации «1С:Зарплата и управление персоналом 3.1» программисты часто сталкиваются с задачей добавления стандартного механизма подбора сотрудников. Казалось бы, достаточно скопировать кнопку и процедуру из типового документа (например, «Увольнение списком»), но на практике этого оказывается мало: форма подбора открывается, сотрудники выбираются, но в таблицу документа не попадают. Разберем детально, как правильно настроить этот функционал, чтобы данные корректно переносились в вашу табличную часть.

Выясним причину проблемы

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

Шаг 1: Инициация подбора сотрудников

Рассмотрим, как правильно инициировать подбор. В типовых решениях ЗУП 3.1 крайне не рекомендуется открывать форму справочника напрямую. Для этого существуют специализированные общие модули. Посмотрим на пример кода, который обычно размещается в обработчике команды кнопки «Подбор»:


&НаКлиенте
Процедура Подбор(Команда)
    
    ПараметрыПодбора = ПодборСотрудниковКлиент.ПараметрыПодбора(ЭтаФорма);
    ПараметрыПодбора.Организация = Объект.Организация;
    ПараметрыПодбора.ДатаСобытия = Объект.Дата;
    
    // Указываем массив сотрудников, которые уже есть в списке, чтобы не дублировать их
    ПараметрыПодбора.ИсключаемыеСотрудники = ПодборСотрудниковКлиентСервер.МассивСотрудниковИзТаблицы(Объект.Сотрудники);
    
    ПодборСотрудниковКлиент.ОткрытьФормуПодбора(ЭтаФорма, ПараметрыПодбора);
    
КонецПроцедуры

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

Шаг 2: Настройка обработчика выбора

Теперь перейдем к самому главному — получению данных. Чтобы форма документа «услышала» ответ от формы подбора, необходимо убедиться, что у формы документа в свойствах назначен обработчик события ОбработкаВыбора (на вкладке «События»). Рассмотрим подробнее, как должна выглядеть эта процедура:


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

Здесь функция ПодборСотрудниковКлиент.ЭтоРезультатПодбора помогает идентифицировать, что выбор пришел именно из окна подбора, а не из какого-то другого вспомогательного справочника. Выбранное значение обычно представляет собой массив ссылок или структур с данными о сотрудниках.

Шаг 3: Заполнение табличной части на сервере

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


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

Использование метода ПодборСотрудниковСервер.ЗаполнитьСотрудниковПоМассиву значительно упрощает разработку, так как система автоматически создаст новые строки в табличной части Сотрудники и заполнит основные реквизиты. Однако важно, чтобы имена реквизитов в вашей табличной части совпадали с типовыми (например, Сотрудник, ФизическоеЛицо). Если вы назвали колонку иначе, заполнение придется прописывать вручную в цикле Для Каждого.

Дополнительные рекомендации

Разберем еще несколько нюансов, которые сделают работу подбора идеальной:

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

Таким образом, полноценная реализация подбора сотрудников в ЗУП 3.1 требует не просто копирования интерфейсных элементов, а настройки связки между командой вызова, параметрами подбора и событием обработки выбора. Следуя этой структуре, вы сможете внедрить стандартный и удобный механизм работы с персоналом в любой свой документ.

← На главную