1С ЗУП 3.1 Получить стажи сотрудника

Чтобы получить стаж сотрудника, создадим таблицу значений с двумя полями Сотрудник и Период. В моем примере всего одна строка.

ТаблицаСотрудников = Новый ТаблицаЗначений;
		ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
		ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
		СтрокаСотрудник = ТаблицаСотрудников.Добавить();
		СтрокаСотрудник.Сотрудник = Сотрудник;
		СтрокаСотрудник.Период = ДатаСведений;

Но можно использовать существующую таблицу значений, скопировав из нее только нужные столбцы, если они там есть, например:

ТаблицаСотрудников = Выборка.Скопировать(,"Сотрудник, Период");

Теперь непосредственно получаем стажи в виде соответсвия:

СтажиСотрудников = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);

Если, нам нужен конкретный сотрудник, то стаж получаем из соответствия:

СтажиСотрудника = СтажиСотрудников.Получить(Сотрудник);

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

Для каждого СтрокаВыборки Из Выборка Цикл 
	
	СтажиСотрудника = СтажиСотрудников.Получить(СтрокаВыборки.Сотрудник);  
	
	СтруктураСтаж = Неопределено;   
	
	Если СтажиСотрудника <> Неопределено Тогда 
		
		СтруктураСтаж = СтажиСотрудника.Получить(Справочники.ВидыСтажа.НайтиПоНаименованию("Выслуга лет"));	
		СтрокаВыборки.Стаж = Строка(СтруктураСтаж.Лет) + "г." + Строка(СтруктураСтаж.Месяцев) + "м.";     
		
	КонецЕсли;
	
	
КонецЦикла;

Так же можно воспользоваться механизмом временных таблиц в 1С:ЗУП 3.1:

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

После можно обойти временную таблицу в запросе:

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *