Действующие начисления сотрудников ЗУП 3.1 через менеджер временных таблиц

Читайте также про способ получение данных из регистров с помощью механизма представлений.

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

Пример такого метода:

ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних()

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

Листинг получения временных таблиц с действующими начислениями

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

Для отладки используйте конструкцию:

Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("Имя_ВременнойТаблицы").ПолучитьДанные().Выгрузить()

Спасибо авторам: Кащеев Игорь и Денис Липатов

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

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

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