Доброго дня суток.
Расширяю функционал Зки, необходимо получить кадровые данные за период. Раньше в 2.5 можно было варьировать Рс РаботникиОрганизаций сейчас в 3ке пробовал получить через РС КадроваяИсторияСотрудниковИнтервальный, но понял что он для это не предназначен. Почитал форму, все склонны к обращению к программному интерфейсу на базе допусти общего модуля КадровыйУчет. Там есть чудесная функция КадровыеДанныеСотрудников, она возращает много интересной информации. Но за период Месяц я не могу получить Таблицу значений состоящую из кадровых данных на начало периода, все перемещения за месяц и кадровые данные на конец периода.
Может кто сталкивался с данной проблемой или задачей, может еще есть какие процедуры функции, используемые типовыми отчетами.
Расширяю функционал Зки, необходимо получить кадровые данные за период. Раньше в 2.5 можно было варьировать Рс РаботникиОрганизаций сейчас в 3ке пробовал получить через РС КадроваяИсторияСотрудниковИнтервальный, но понял что он для это не предназначен. Почитал форму, все склонны к обращению к программному интерфейсу на базе допусти общего модуля КадровыйУчет. Там есть чудесная функция КадровыеДанныеСотрудников, она возращает много интересной информации. Но за период Месяц я не могу получить Таблицу значений состоящую из кадровых данных на начало периода, все перемещения за месяц и кадровые данные на конец периода.
Может кто сталкивался с данной проблемой или задачей, может еще есть какие процедуры функции, используемые типовыми отчетами.
По теме из базы знаний
- Перенос данных из УПП 1.3 в ЗУП 3.1 или из КА 1.1 в ЗУП 3.1. Переносятся начальные остатки, обороты и справочная информация
- Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
- Пример создания кадрового отчета для ЗУП 3.1
- Отчет "Кадровые изменения" с выводом информации прошлых кадровых событий вне отчетного периода. ЗУП 3.1
- Кадровая история сотрудников для ЗУП на СКД
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Используйте представления.
Пример получения интервальных данных по сотрудникам в обработке по гражданству. Для остальных регистров собственно только названием таблиц отличается и конечным результатом
Для отчетов на СКД принцип сохраняется:
Создаем таблицу отборов (физлиц например) и соединяем с пустой типизированной таблицей "Представления_" + ИмяРегистра.
В модуле отчета добавляем:
В принципе и все.
Пример получения интервальных данных по сотрудникам в обработке по гражданству. Для остальных регистров собственно только названием таблиц отличается и конечным результатом
// название временной таблицы, которая содержит значения измерений и периода,
// для которых надо получить ресурсы
ИмяВременнойТаблицыОтборовФизическихЛиц = "ВТФизическиеЛицаСПериодом";
ТолькоРазрешенные = Истина;
ПоляОтбораПериодическихДанных = Неопределено;
// название временной таблицы, в которую будет помещен результат
ИмяВТСведенияОГражданстве = "ВТСведенияОГражданстве";
// названия полей измерений
ИмяПоляФизическоеЛицо = "ФизическоеЛицо";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// подготавливаем временную таблицу - фильтр
ЗапросФизлица = Новый Запрос;
ЗапросФизлица.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЗапросФизлица.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
ЗапросФизлица.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);
ЗапросФизлица.Текст =
"ВЫБРАТЬ
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
| ФизическиеЛица.Ссылка КАК " + ИмяПоляФизическоеЛицо + ",
| ФизическиеЛица.ИНН,
| ФизическиеЛица.СтраховойНомерПФР
|ПОМЕСТИТЬ " + ИмяВременнойТаблицыОтборовФизическихЛиц + "
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
ЗапросФизлица.Выполнить();
// создаем описание фильтра для отбора нужных значений регистра
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра(
ИмяВременнойТаблицыОтборовФизическихЛиц, "ФизическоеЛицо");
// устанавливаем соответствие между измерениями регистра и полями временной таблицы
ОписаниеФильтра.СоответствиеИзмеренийРегистраИзмерениямФильтра.Вставить("ФизическоеЛицо", ИмяПоляФизическоеЛицо);
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистраПериоды();
ПараметрыПостроения.Отборы = Неопределено;
ЗапросВТИмяРегистраСрез = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
"ГражданствоФизическихЛиц",
ТолькоРазрешенные,
ОписаниеФильтра,
ПараметрыПостроения,
ИмяВТСведенияОГражданстве);
КадровыйУчет.УстановитьПутьКПолюФизическоеЛицо(ЗапросВТИмяРегистраСрез.Текст, "ИзмеренияДаты", ИмяПоляФизическоеЛицо);
ЗапросВТИмяРегистраСрез.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
// запрос подготовлен и его можно выполнить
ЗапросВТИмяРегистраСрез.Выполнить();
// в результатирующей таблице сохраняются все поля из таблицы фильтра + ресурсы
// регистра по указанной комбинации измерений на указанную в таблице данных
Запрос.Текст =
«ВЫБРАТЬ
ВТ.ДатаНачала,
ВТ.ДатаОкончания,
ВТ.ФизическоеЛицо,
ВТ.ИНН,
ВТ.СтраховойНомерПФР,
ВТ.Страна
ИЗ
» + ИмяВТСведенияОГражданстве + « КАК ВТ»;
ПоказатьДля отчетов на СКД принцип сохраняется:
Создаем таблицу отборов (физлиц например) и соединяем с пустой типизированной таблицей "Представления_" + ИмяРегистра.
В модуле отчета добавляем:
Процедура ИнициализироватьОтчет() Экспорт
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект);
КонецПроцедуры
В принципе и все.
(5) Не виноватая я ((
Нафига получает регистратор для независимого регистра - я не знаю. Полгода назад пример работал, на текущем релизе - нет. Может надо сейчас параметры добавить какие.
Другой, работающий код как раз по кадровой истории:
Нафига получает регистратор для независимого регистра - я не знаю. Полгода назад пример работал, на текущем релизе - нет. Может надо сейчас параметры добавить какие.
Другой, работающий код как раз по кадровой истории:
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);
Запрос.Выполнить();
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТТаблицаФильтр", "Сотрудник");
ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);
ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата());
Запрос.МенеджерВременныхТаблиц = ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковПериоды.НачалоПериода КАК Начало,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьДанныеКадровойИстории,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.КонецПериода ЕСТЬ NULL
| ТОГДА &МаксимальнаяДата
| ИНАЧЕ КадроваяИсторияСотрудниковПериоды.КонецПериода
| КОНЕЦ КАК Окончание,
| КадроваяИсторияСотрудниковПериоды.ВидСобытия,
| КадроваяИсторияСотрудниковПериоды.Подразделение,
| КадроваяИсторияСотрудниковПериоды.Организация КАК Филиал,
| КадроваяИсторияСотрудниковПериоды.Должность,
| КадроваяИсторияСотрудниковПериоды.ЭтоГоловнойСотрудник,
| КадроваяИсторияСотрудниковПериоды.ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудниковПериоды.КоличествоСтавок,
| КадроваяИсторияСотрудниковПериоды.ВидДоговора,
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Наименование,
| Сотрудники.ГоловнаяОрганизация КАК Организация,
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ГоловнойСотрудник КАК ГоловнойСотрудник
|ИЗ
| ВТТаблицаФильтр КАК ТаблицаФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ТаблицаФильтр.Сотрудник = Сотрудники.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудниковПериоды КАК КадроваяИсторияСотрудниковПериоды
| ПО (ТаблицаФильтр.Сотрудник = КадроваяИсторияСотрудниковПериоды.Сотрудник)
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Начало";
ОбновленныеСотрудник = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
ПоказатьЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);
Запрос.Выполнить();
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТТаблицаФильтр", "Сотрудник");
ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);
ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата());
Запрос.МенеджерВременныхТаблиц = ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковПериоды.НачалоПериода КАК Начало,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьДанныеКадровойИстории,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.КонецПериода ЕСТЬ NULL
| ТОГДА &МаксимальнаяДата
| ИНАЧЕ КадроваяИсторияСотрудниковПериоды.КонецПериода
| КОНЕЦ КАК Окончание,
| КадроваяИсторияСотрудниковПериоды.ВидСобытия,
| КадроваяИсторияСотрудниковПериоды.Подразделение,
| КадроваяИсторияСотрудниковПериоды.Организация КАК Филиал,
| КадроваяИсторияСотрудниковПериоды.Должность,
| КадроваяИсторияСотрудниковПериоды.ЭтоГоловнойСотрудник,
| КадроваяИсторияСотрудниковПериоды.ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудниковПериоды.КоличествоСтавок,
| КадроваяИсторияСотрудниковПериоды.ВидДоговора,
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Наименование,
| Сотрудники.ГоловнаяОрганизация КАК Организация,
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ГоловнойСотрудник КАК ГоловнойСотрудник
|ИЗ
| ВТТаблицаФильтр КАК ТаблицаФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ТаблицаФильтр.Сотрудник = Сотрудники.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудниковПериоды КАК КадроваяИсторияСотрудниковПериоды
| ПО (ТаблицаФильтр.Сотрудник = КадроваяИсторияСотрудниковПериоды.Сотрудник)
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Начало";
ОбновленныеСотрудник = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
(6)
(6) ТаблицаФильтр -есть программный код для её формирования?
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);
Запрос.Выполнить();
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТТаблицаФильтр", "Сотрудник");
ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);
ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата());
Запрос.МенеджерВременныхТаблиц = ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковПериоды.НачалоПериода КАК Начало,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьДанныеКадровойИстории,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.КонецПериода ЕСТЬ NULL
| ТОГДА &МаксимальнаяДата
| ИНАЧЕ КадроваяИсторияСотрудниковПериоды.КонецПериода
| КОНЕЦ КАК Окончание,
| КадроваяИсторияСотрудниковПериоды.ВидСобытия,
| КадроваяИсторияСотрудниковПериоды.Подразделение,
| КадроваяИсторияСотрудниковПериоды.Организация КАК Филиал,
| КадроваяИсторияСотрудниковПериоды.Должность,
| КадроваяИсторияСотрудниковПериоды.ЭтоГоловнойСотрудник,
| КадроваяИсторияСотрудниковПериоды.ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудниковПериоды.КоличествоСтавок,
| КадроваяИсторияСотрудниковПериоды.ВидДоговора,
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Наименование,
| Сотрудники.ГоловнаяОрганизация КАК Организация,
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ГоловнойСотрудник КАК ГоловнойСотрудник
|ИЗ
| ВТТаблицаФильтр КАК ТаблицаФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ТаблицаФильтр.Сотрудник = Сотрудники.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудниковПериоды КАК КадроваяИсторияСотрудниковПериоды
| ПО (ТаблицаФильтр.Сотрудник = КадроваяИсторияСотрудниковПериоды.Сотрудник)
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Начало";
ОбновленныеСотрудник = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
ПоказатьЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);
Запрос.Выполнить();
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТТаблицаФильтр", "Сотрудник");
ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);
ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата());
Запрос.МенеджерВременныхТаблиц = ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковПериоды.НачалоПериода КАК Начало,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьДанныеКадровойИстории,
| ВЫБОР
| КОГДА КадроваяИсторияСотрудниковПериоды.КонецПериода ЕСТЬ NULL
| ТОГДА &МаксимальнаяДата
| ИНАЧЕ КадроваяИсторияСотрудниковПериоды.КонецПериода
| КОНЕЦ КАК Окончание,
| КадроваяИсторияСотрудниковПериоды.ВидСобытия,
| КадроваяИсторияСотрудниковПериоды.Подразделение,
| КадроваяИсторияСотрудниковПериоды.Организация КАК Филиал,
| КадроваяИсторияСотрудниковПериоды.Должность,
| КадроваяИсторияСотрудниковПериоды.ЭтоГоловнойСотрудник,
| КадроваяИсторияСотрудниковПериоды.ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудниковПериоды.КоличествоСтавок,
| КадроваяИсторияСотрудниковПериоды.ВидДоговора,
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Наименование,
| Сотрудники.ГоловнаяОрганизация КАК Организация,
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ГоловнойСотрудник КАК ГоловнойСотрудник
|ИЗ
| ВТТаблицаФильтр КАК ТаблицаФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ТаблицаФильтр.Сотрудник = Сотрудники.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудниковПериоды КАК КадроваяИсторияСотрудниковПериоды
| ПО (ТаблицаФильтр.Сотрудник = КадроваяИсторияСотрудниковПериоды.Сотрудник)
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Начало";
ОбновленныеСотрудник = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
(6) ТаблицаФильтр -есть программный код для её формирования?
(13) Абсолютно типовой отчет, приложил.
Половина СКД это таблицы представлений.
Приведение к работающему коду происходит через вызов общих процедур перед компоновкой.
Половина СКД это таблицы представлений.
Приведение к работающему коду происходит через вызов общих процедур перед компоновкой.
Прикрепленные файлы:
КадроваяИсторияСотрудников.erf
(15) Этот отчет просто взят из типовой конфигурации,без изменений. На какой версии пробовали? От релиза очень сильно зависит.
А по поводу как работает....
1) Создается шаблон запроса с названием таблицы Представление_<Имя таблицы>
2) Перед компоновкой текст запроса передается в общие процедуры, где по шаблону проиходит замена этих таблиц на программно собранный запрос.
А по поводу как работает....
1) Создается шаблон запроса с названием таблицы Представление_<Имя таблицы>
2) Перед компоновкой текст запроса передается в общие процедуры, где по шаблону проиходит замена этих таблиц на программно собранный запрос.
Если зайти в карточку сотрудника и щелкнуть на гиперссылку "История переводов", то открываются данные о перемещениям сотрудника с указанием подразделения, должности и др, получаются эти данные из формы справочника следующей процедурой:
ФормаИзмененияИсторииРаботы
ФормаИзмененияИсторииРаботы
&НаСервере
Процедура СформироватьКадровуюИсторию()
КадроваяИстория.Очистить();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Измерения = Новый ТаблицаЗначений;
Измерения.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Измерения.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
Измерения.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
СтрокаИзмерения = Измерения.Добавить();
СтрокаИзмерения.Сотрудник = СсылкаНаСотрудника;
СтрокаИзмерения.ДатаОкончания = КонецГода(ТекущаяДатаСеанса());
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"КадроваяИсторияСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"ГрафикРаботыСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КадроваяИсторияСотрудников.Период КАК Период
|ПОМЕСТИТЬ ВТПериоды
|ИЗ
| ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГрафикРаботыСотрудников.Период
|ИЗ
| ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Периоды.Период,
| МАКСИМУМ(ГрафикРаботыСотрудников.Период) КАК ПериодГрафикиРаботы,
| МАКСИМУМ(КадроваяИсторияСотрудников.Период) КАК ПериодКадроваяИстория
|ПОМЕСТИТЬ ВТПериодыИстории
|ИЗ
| ВТПериоды КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО Периоды.Период >= КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО Периоды.Период >= ГрафикРаботыСотрудников.Период
|
|СГРУППИРОВАТЬ ПО
| Периоды.Период
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ПериодыИстории.Период,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Должность КАК Должность,
| КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудников.КоличествоСтавок КАК КоличествоСтавок,
| КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия,
| ГрафикРаботыСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = ГрафикРаботыСотрудников.Период
| ТОГДА ГрафикРаботыСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = КадроваяИсторияСотрудников.Период
| ТОГДА КадроваяИсторияСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторКадроваяИстория
|ПОМЕСТИТЬ ВТИстория
|ИЗ
| ВТПериодыИстории КАК ПериодыИстории
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО ПериодыИстории.ПериодКадроваяИстория = КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО ПериодыИстории.ПериодГрафикиРаботы = ГрафикРаботыСотрудников.Период
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| История.Период КАК Период,
| История.Организация,
| ВЫБОР
| КОГДА История.Организация = ИсторияПредыдущие.Организация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОрганизацияИзменена,
| История.Подразделение,
| ВЫБОР
| КОГДА История.Подразделение = ИсторияПредыдущие.Подразделение
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПодразделениеИзменено,
| История.Должность,
| ВЫБОР
| КОГДА История.Должность = ИсторияПредыдущие.Должность
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьИзменена,
| История.ДолжностьПоШтатномуРасписанию,
| ВЫБОР
| КОГДА История.ДолжностьПоШтатномуРасписанию = ИсторияПредыдущие.ДолжностьПоШтатномуРасписанию
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьПоШтатномуРасписаниюИзменена,
| История.КоличествоСтавок,
| ВЫБОР
| КОГДА История.КоличествоСтавок = ИсторияПредыдущие.КоличествоСтавок
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК КоличествоСтавокИзменено,
| История.ВидСобытия,
| История.ГрафикРаботы,
| ВЫБОР
| КОГДА История.ГрафикРаботы = ИсторияПредыдущие.ГрафикРаботы
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ГрафикРаботыИзменен,
| История.РегистраторГрафикРаботы,
| История.РегистраторКадроваяИстория
|ИЗ
| ВТИстория КАК История
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| История.Период КАК Период,
| МАКСИМУМ(ИсторияПредыдущая.Период) КАК ПериодПредыдущий
| ИЗ
| ВТИстория КАК История
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущая
| ПО История.Период > ИсторияПредыдущая.Период
|
| СГРУППИРОВАТЬ ПО
| История.Период) КАК ПредыдущиеПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущие
| ПО ПредыдущиеПериоды.ПериодПредыдущий = ИсторияПредыдущие.Период
| ПО История.Период = ПредыдущиеПериоды.Период
|
|УПОРЯДОЧИТЬ ПО
| Период";
КадроваяИстория.Загрузить(Запрос.Выполнить().Выгрузить());
Для Каждого СтрокаКадроваяИстория Из КадроваяИстория Цикл
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторКадроваяИстория) Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторКадроваяИстория);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторГрафикРаботы)
И СтрокаКадроваяИстория.РегистраторГрафикРаботы <> СтрокаКадроваяИстория.РегистраторКадроваяИстория Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторГрафикРаботы);
КонецЕсли;
СтрокаКадроваяИстория.КоличествоСтавокПредставление = КадровыйУчетРасширенныйКлиентСервер.ПредставлениеКоличестваСтавок(СтрокаКадроваяИстория.КоличествоСтавок);
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот