Штатный программный функционал работы с сотрудниками организаций в ЗУП 3.1

17.04.25

Разработка - Универсальные функции

Представлен базовой обзор по штатному функционалу работы с сотрудниками организаций в конфигурации ЗУП 3.1.

Предпосылки дальнейшего разбора функционала ЗУП 3.1

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

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

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

В данный момент пришло время вспомнить, как обстоят дела в этой базе со справочником "Сотрудники" организаций. Все примеры и эксперименты делаются на конфигурации 1С:ЗУП 3.1.32.66 и 1С:Платформе 8.3.24.1586.

 

Базовые полезные функции работы с сотрудниками организаций

1.Функция СотрудникиОрганизации(ТолькоРазрешенные, Параметры) Экспорт

 
 Возвращаем таблицу значений соответствия физического лица и сотрудника через фильтр "Параметры"

 

Параметры1 = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
АА = КадровыйУчет.СотрудникиОрганизации(Истина, Параметры1);    // Таблица значений

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

 

Рис.1. Результат выполнения функции сотрудники организации

 

В основе функции ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц() лежит вот такая структура:

 
 Структура параметров сотрудников по списку

 

Функция ПараметрыПолученияСотрудниковОрганизаций()
	
	ПараметрыПолучения = Новый Структура("Организация,Подразделение");
	
	ПараметрыПолучения.Вставить("КадровыеДанные", "");
	ПараметрыПолучения.Вставить("ОтбиратьПоГоловнойОрганизации", Ложь);
	ПараметрыПолучения.Вставить("НачалоПериода", '00010101');
	ПараметрыПолучения.Вставить("ОкончаниеПериода", '00010101');
	ПараметрыПолучения.Вставить("Отборы");
	ПараметрыПолучения.Вставить("ИсключаемыйРегистратор");
	ПараметрыПолучения.Вставить("ВключаяУволенныхНаНачалоПериода", Ложь);
	
	ПараметрыПолучения.Вставить("РаботникиПоТрудовымДоговорам", Истина);
	ПараметрыПолучения.Вставить("ПодработкиРаботниковПоТрудовымДоговорам", Ложь);
	ПараметрыПолучения.Вставить("РаботникиПоДоговорамГПХ", Неопределено);
	
	ПараметрыПолучения.Вставить("ВыбрасыватьИсключениеДоступа", Истина);
	
	ДополнитьСтруктуруПараметровИменамиТаблицСКадровойИсториейСотрудников(ПараметрыПолучения);
	
	Возврат ПараметрыПолучения;
	
КонецФункции

 

2. Функция ОсновныеСотрудникиФизическихЛиц(СписокФизическихЛиц, ТолькоРазрешенные, Организация, Период) Экспорт

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

 
 Список основных сотрудников

 

Функция ОсновныеСотрудникиФизическихЛиц(СписокФизическихЛиц, ТолькоРазрешенные, Организация, Период) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	СоздатьВТОсновныеСотрудникиФизическихЛиц(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокФизическихЛиц, Организация, Период, Период);
	
	Запрос.Текст = 
	"ВЫБРАТЬ ОсновныеСотрудникиФизическихЛиц.* ИЗ ВТОсновныеСотрудникиФизическихЛиц КАК ОсновныеСотрудникиФизическихЛиц";
	
	ОсновныеСотрудникиФизическихЛиц = Запрос.Выполнить().Выгрузить();
	
	Возврат ОсновныеСотрудникиФизическихЛиц;
	
КонецФункции

Результат выполнения - таблица значений ФизическоеЛицо:Сотрудник.

 

3. Функция СреднесписочнаяЧисленностьРаботающих(Организация, НачалоПериода, КонецПериода, ПоГоловнойОрганизации = Ложь, Точность =0) Экспорт

Используя данную функцию вот таким кодом:

АА = КадровыйУчет.СреднесписочнаяЧисленностьРаботающих(Организация,Период.ДатаНачала, Период.ДатаОкончания);

Получаем очередную структуру:

 

Рис.2. Структура среднесписочной численности сотрудников по категориям

 

4. Функция КадровыеДанныеСотрудника(ТолькоРазрешенные, Сотрудник, КадровыеДанные, ДатаПолученияДанных) Экспорт

Использую кадровые данные функции, получаем структуру по выбранным кадровым данным

 
 Функция кадровых данных по сотруднику

 

Функция КадровыеДанныеСотрудника(ТолькоРазрешенные, Сотрудник, КадровыеДанные, ДатаПолученияДанных) Экспорт
	Если Не ЗначениеЗаполнено(Сотрудник) Тогда
		Возврат Неопределено;
	КонецЕсли;
	СписокСотрудников = Новый Массив;
	СписокСотрудников.Добавить(Сотрудник);
	ТаблицаЗначений = КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных);
	Если ТаблицаЗначений.Количество() = 0 Тогда
		Возврат Неопределено;
	КонецЕсли;
	Возврат ТаблицаЗначений[0];
КонецФункции

 

где КадровыеДанные    - "строка" - имена полей перечисленные через запятую, список полей вот такой:

 
 Некоторые поля "кадровых данных" сотрудников к получению через фильтр

 

		Информация о рабочем месте.
		- РабочееМестоПериодРегистрации	- Дата
		- РабочееМестоРегистратор		- ДокументСсылка
		- Организация 					- СправочникСсылка.Организации
		- Подразделение 				- СправочникСсылка.ПодразделенияОрганизаций
		- Должность 					- СправочникСсылка.Должности
		- ВидЗанятости 					- ПеречисленияСсылка.ВидыЗанятости
		- ВидСобытия 					- ПеречисленияСсылка. ВидыКадровыхСобытий
		- КоличествоСтавок				- Число, в этой конфигурации всегда 1.
		- ДолжностьПоШтатномуРасписанию	- СправочникСсылка.ШтатноеРасписание
		- ВидДоговора					- ПеречислениеСсылка.ВидыДоговоровССотрудниками
		- МестоВСтруктуреПредприятия	- СправочникСсылка.СтруктураПредприятия.
		- РайонныйКоэффициент			- Число
		- РайонныйКоэффициентРФ			- Число

		- РазрядКатегорияПериодРегистрации	- Дата
		- РазрядКатегорияРегистратор		- ДокументСсылка

		- ПКУПериодРегистрации			- Дата
		- ПКУ							- СправочникСсылка.РазрядыКатегорииДолжностей.

и др....


в итоге выглядит это вот так (сделал отбор только должности и вида занятости):

КадровыеДанныеПоФильтру = КадровыйУчет.КадровыеДанныеСотрудника(Истина,ЭтаФорма.Сотрудник,"Должность,ВидЗанятости",ТекущаяДата());

 

Рис.3. Отбор кадровых данных сотрудника и сопоставление его с физ.лицом

 

5. Процедура ПроверитьРаботающихСотрудников(СписокСотрудников, ПараметрыПолученияСотрудниковОрганизаций, Отказ, ПараметрыСообщения) Экспорт

Данная процедура - проверка о неработающих сотрудниках по фильтру периоду, где результат выполнения - это сообщение пользователю:

 
 Проверка работающих сотрудников

 

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

 

6. Функция НеоформленныеСотрудникиФизическихЛиц(ФизическиеЛица, Организация, ВключатьВПоискУволенныхСотрудников = Истина) Экспорт

Возвращает соответствие неоформленных сотрудников, код такой:

 
 Неоформленные сотрудники

 

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

 

7. Функция НовыйСотрудникФизическогоЛица(ФизическоеЛицо, Организация) Экспорт

Данная функция создаст нового сотрудника на основе физического лица и организации. Функция выглядит вот так (простая функция, как оказалось, но она есть):

 
 Создание нового сотрудника

 

Функция НовыйСотрудникФизическогоЛица(ФизическоеЛицо, Организация) Экспорт
	
	СотрудникОбъект = Справочники.Сотрудники.СоздатьЭлемент();
	СотрудникОбъект.ФизическоеЛицо = ФизическоеЛицо;
	СотрудникОбъект.ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Организация);
	
	Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда
		ОбновлениеИнформационнойБазы.ЗаписатьДанные(СотрудникОбъект);
	Иначе
		СотрудникОбъект.Записать();
	КонецЕсли;
		
	Возврат СотрудникОбъект.Ссылка;
	
КонецФункции

 

8. Процедура ПоместитьСотрудникаВАрхив(Сотрудник, ПомечатьНаУдаление = Ложь) Экспорт

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

 
 Помещение сотрудника в архив

 

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

 

9. Процедура ИзвлечьСотрудникаИзАрхива(Сотрудник) Экспорт

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

 
 Извлечь сотрудника из архива

 

Процедура ИзвлечьСотрудникаИзАрхива(Сотрудник) Экспорт

	Блокировка = Новый БлокировкаДанных();
	Блокировка.Добавить(Метаданные.Справочники.Сотрудники.ПолноеИмя()).УстановитьЗначение("Ссылка", Сотрудник);
	
	НачатьТранзакцию();
	Попытка
		Блокировка.Заблокировать();
		СотрудникОбъект = Сотрудник.ПолучитьОбъект();
		СотрудникОбъект.ВАрхиве = Ложь;
		СотрудникОбъект.Записать();
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
КонецПроцедуры

 

10. Функция ОсновнойСотрудникФизическогоЛица(ФизическоеЛицо, Организация, Период) Экспорт

Получение основного сотрудника физического лица по фильтру организации и периоду. Можно получить "крайнего" сотрудника:

 
 Получение основного сотрудника по физическому лицу

 

Функция ОсновнойСотрудникФизическогоЛица(ФизическоеЛицо, Организация, Период) Экспорт
	Возврат КадровыйУчетПовтИсп.ОсновнойСотрудникФизическогоЛица(ФизическоеЛицо, Организация, Период);
КонецФункции

Получаем ссылку на сотрудника организации.

Пожалуй, на этом завершим обзор и перейдем к выводам по данному функционалу.

 

Выводы по описанному функционалу

Почти все, что мы хотим придумать и ломаем над этим голову - придумано и задействовано уже до нас, причем достаточно долгое время.

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

Подобные обзоры облегчают вам ваш труд на ниве кодинга 1с и повышают уровень вашего мастерства. Благодарим за интерес к данному материалу.

 

Авторские обзоры и публикации

Ознакомьтесь с публикациями автора - статьи и технические обработки на данном аккаунте. У нас накоплена большая библиотека технических знаний, обзоров и примеров, которая размещается как здесь - на портале, так и в телеграмм канале. Автор является практикующим сертифицированным программистом 1с с опытом работы уже ближе к 20-ти годам, что, как минимум, подтверждается публикациями материалов на данном портале.

 

Примеры работ с торговым оборудованием с применением и без применения БПО:

Тестирование принтера чеков через различные версии БПО

Работа с эмулятором дисплея покупателя через БПО

Работа со встроенным сканером на терминале сбора данных АТОЛ

 

Отчеты и доп.функционал для бухгалтерии:

Доходы и расходы хозрасчетного плана счетов для 1С:БП 3.0 (2025 г.)

Пересборка отчета по ОС - бухгалтерский учет

Суммы НДС в формах списка объектов для Бухгалтерии 3.0

 

Классические примеры и функционал:

Установка своего пароля на отчет, не втягивая в это RLS

Запрет глобального поиска в конфигурации

Классический корректный пример внешней печатной формы с печатью и подписями на БСП 3.1.10

зарплата и кадры работа со справочником сотрудников полезные функции и процедуры

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

27.12.2024    13950    Begemoth80    32    

88

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:ERP Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    8176    Serg2000mr    32    

117

Универсальные функции Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    31313    dimanich70    83    

152

Универсальные функции Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    35405    atdonya    29    

62

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

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

28.12.2023    7813    mrXoxot    11    

113

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    6657    ke.92@mail.ru    17    

66

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

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

08.11.2023    16770    ids79    29    

86