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

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

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

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

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

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

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

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

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

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

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

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

4 комментария

  1. Добрый день! Спасибо Вам, но у меня не сработало. Ругается на «Значение не является значением объектного типа (ПолучитьДанные)»

    1. Попробуйте для начала так
      Запрос.МенеджерВременныхТаблиц.Таблицы, чтобы убедиться, что временная таблица точно есть.

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

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