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